├── .browserslistrc
├── .circleci
└── config.yml
├── .gitignore
├── .rspec
├── .ruby-version
├── CODE_OF_CONDUCT.md
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── Procfile.dev
├── README.md
├── Rakefile
├── app
├── assets
│ ├── builds
│ │ └── .keep
│ ├── config
│ │ └── manifest.js
│ ├── images
│ │ └── logo.png
│ └── stylesheets
│ │ └── application.sass.scss
├── channels
│ └── application_cable
│ │ ├── channel.rb
│ │ └── connection.rb
├── controllers
│ ├── application_controller.rb
│ ├── concerns
│ │ └── .keep
│ └── locations_controller.rb
├── helpers
│ ├── application_helper.rb
│ ├── locations_helper.rb
│ └── organizations_helper.rb
├── javascript
│ ├── application.js
│ └── map.js
├── jobs
│ └── application_job.rb
├── mailers
│ └── application_mailer.rb
├── models
│ ├── application_record.rb
│ ├── concerns
│ │ └── .keep
│ ├── location.rb
│ ├── organization.rb
│ └── seeds
│ │ └── organization.rb
└── views
│ ├── layouts
│ ├── application.html.erb
│ ├── mailer.html.erb
│ └── mailer.text.erb
│ └── locations
│ ├── _description.html.erb
│ ├── _location.json.jbuilder
│ ├── index.html.erb
│ └── index.json.jbuilder
├── babel.config.js
├── bin
├── bundle
├── dev
├── importmap
├── rails
├── rake
├── render-build.sh
├── setup
├── sort-orgs
├── update
└── yarn
├── config.ru
├── config
├── application.rb
├── boot.rb
├── cable.yml
├── credentials.yml.enc
├── database.yml
├── environment.rb
├── environments
│ ├── development.rb
│ ├── production.rb
│ └── test.rb
├── importmap.rb
├── initializers
│ ├── application_controller_renderer.rb
│ ├── assets.rb
│ ├── backtrace_silencers.rb
│ ├── content_security_policy.rb
│ ├── cookies_serializer.rb
│ ├── filter_parameter_logging.rb
│ ├── geocoder.rb
│ ├── inflections.rb
│ ├── mime_types.rb
│ ├── new_framework_defaults_6_1.rb
│ ├── new_framework_defaults_7_0.rb
│ ├── permissions_policy.rb
│ └── wrap_parameters.rb
├── locales
│ └── en.yml
├── puma.rb
├── routes.rb
├── spring.rb
└── storage.yml
├── data
└── seeds
│ └── organizations.yml
├── db
├── migrate
│ ├── 20190324164417_create_organizations.rb
│ ├── 20190324164516_enable_postgis.rb
│ ├── 20190324164517_create_locations.rb
│ ├── 20190420081021_add_org_type_and_url_to_organization.rb
│ └── 20190502144412_add_twitter_handle_to_organizations.rb
├── schema.rb
└── seeds.rb
├── lib
├── assets
│ └── .keep
└── tasks
│ ├── .keep
│ ├── release.rake
│ └── yamllint.rake
├── log
└── .keep
├── package.json
├── postcss.config.js
├── public
├── 404.html
├── 422.html
├── 500.html
├── apple-touch-icon-precomposed.png
├── apple-touch-icon.png
├── favicon.ico
└── robots.txt
├── render.yaml
├── spec
├── controllers
│ └── locations_controller_spec.rb
├── factories
│ ├── location_factory.rb
│ └── organization_factory.rb
├── models
│ ├── location_spec.rb
│ └── seeds
│ │ └── organization_spec.rb
├── rails_helper.rb
├── requests
│ └── locations_spec.rb
├── spec_helper.rb
└── support
│ ├── factory_bot.rb
│ └── utensils.rb
├── storage
└── .keep
├── test
├── application_system_test_case.rb
├── controllers
│ └── .keep
├── fixtures
│ ├── .keep
│ └── files
│ │ └── .keep
├── helpers
│ └── .keep
├── integration
│ └── .keep
├── mailers
│ └── .keep
├── models
│ └── .keep
├── system
│ └── .keep
└── test_helper.rb
├── tmp
└── .keep
├── vendor
├── .keep
└── javascript
│ └── .keep
└── yarn.lock
/.browserslistrc:
--------------------------------------------------------------------------------
1 | defaults
2 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # Ruby CircleCI 2.0 configuration file
2 | #
3 | # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4 | #
5 | version: 2
6 | jobs:
7 | build:
8 | docker:
9 | # specify the version you desire here
10 | - image: cimg/ruby:3.0.4
11 | environment:
12 | PGHOST: 127.0.0.1
13 | PGUSER: postgres
14 | RAILS_ENV: test
15 | GOOGLE_MAPS_API_KEY: XXXXXXXXXXXXX
16 | - image: mdillon/postgis:9.5
17 | env:
18 | - POSTGRES_USER=postgres
19 | - POSTGRES_DB=rubymap_test
20 | - POSTGRES_PASSWORD=
21 |
22 | working_directory: ~/repo
23 |
24 | steps:
25 | - checkout
26 |
27 | # Download and cache dependencies
28 | - restore_cache:
29 | keys:
30 | - v1-dependencies-{{ checksum "Gemfile.lock" }}
31 | # fallback to using the latest cache if no exact match is found
32 | - v1-dependencies-
33 | - run:
34 | name: Configure Bundler
35 | command: |
36 | echo 'export BUNDLER_VERSION=$(cat Gemfile.lock | tail -1 | tr -d " ")' >> $BASH_ENV
37 | source $BASH_ENV
38 | gem install bundler
39 |
40 | - run:
41 | name: install dependencies
42 | command: |
43 | bundle install --jobs=4 --retry=3 --path vendor/bundle
44 |
45 | - save_cache:
46 | paths:
47 | - ./vendor/bundle
48 | key: v1-dependencies-{{ checksum "Gemfile.lock" }}
49 |
50 | # Database setup
51 | - run: bundle exec rails db:create
52 | - run: bundle exec rails db:schema:load
53 |
54 | - run:
55 | name: run yaml lint
56 | command: bundle exec rake yamllint
57 |
58 | # run tests!
59 | - run:
60 | name: run tests
61 | command: |
62 | mkdir /tmp/test-results
63 | TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
64 |
65 | bundle exec rspec --format progress \
66 | --format RspecJunitFormatter \
67 | --out /tmp/test-results/rspec.xml \
68 | --format progress \
69 | $TEST_FILES
70 |
71 | # collect reports
72 | - store_test_results:
73 | path: /tmp/test-results
74 | - store_artifacts:
75 | path: /tmp/test-results
76 | destination: test-results
77 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2 | #
3 | # If you find yourself ignoring temporary files generated by your text editor
4 | # or operating system, you probably want to add a global ignore instead:
5 | # git config --global core.excludesfile '~/.gitignore_global'
6 |
7 | # Ignore bundler config.
8 | /.bundle
9 |
10 | # Ignore the default SQLite database.
11 | /db/*.sqlite3
12 | /db/*.sqlite3-journal
13 |
14 | # Ignore all logfiles and tempfiles.
15 | /log/*
16 | /tmp/*
17 | !/log/.keep
18 | !/tmp/.keep
19 |
20 | # Ignore uploaded files in development
21 | /storage/*
22 | !/storage/.keep
23 |
24 | /node_modules
25 | /yarn-error.log
26 |
27 | /public/assets
28 | .byebug_history
29 |
30 | # Ignore master key for decrypting credentials and more.
31 | /config/master.key
32 |
33 | /public/packs
34 | /public/packs-test
35 | /node_modules
36 | /yarn-error.log
37 | yarn-debug.log*
38 | .yarn-integrity
39 |
40 | .env*
41 |
42 | /app/assets/builds/*
43 | !/app/assets/builds/.keep
44 |
--------------------------------------------------------------------------------
/.rspec:
--------------------------------------------------------------------------------
1 | --require spec_helper
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 3.1.3
2 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies within all project spaces, and it also applies when
49 | an individual is representing the project or its community in public spaces.
50 | Examples of representing a project or community include using an official
51 | project e-mail address, posting via an official social media account, or acting
52 | as an appointed representative at an online or offline event. Representation of
53 | a project may be further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at lewis@lewisbuckley.co.uk. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
78 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3 |
4 | ruby "3.1.3"
5 |
6 | gem "rails", "~> 7"
7 |
8 | gem "active_hash"
9 | gem "activerecord-postgis-adapter"
10 | gem "geocoder"
11 | gem "jbuilder"
12 | gem "pg"
13 | gem "puma"
14 | gem "redis"
15 | gem "sentry-raven"
16 | gem "turbolinks", "~> 5"
17 | gem "yamllint"
18 |
19 | gem "importmap-rails"
20 | gem "cssbundling-rails"
21 | gem "sprockets-rails"
22 |
23 | group :development, :test do
24 | gem "byebug", platforms: [:mri, :mingw, :x64_mingw]
25 | gem "dotenv-rails"
26 | gem "factory_bot_rails"
27 | gem "rspec-rails"
28 | gem "standard"
29 | gem "listen"
30 | end
31 |
32 | group :development do
33 | gem "web-console", ">= 3.3.0"
34 | end
35 |
36 | group :test do
37 | gem "capybara", ">= 2.15"
38 | gem "launchy"
39 | gem "rails-controller-testing"
40 | gem "rspec_junit_formatter"
41 | gem "utensils", github: "balvig/utensils"
42 | end
43 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GIT
2 | remote: https://github.com/balvig/utensils.git
3 | revision: e56ba6ca0170f7ee29e84673ae40d2ea696ecbb7
4 | specs:
5 | utensils (5.0.0)
6 | launchy
7 | multi_json
8 |
9 | GEM
10 | remote: https://rubygems.org/
11 | specs:
12 | actioncable (7.1.3)
13 | actionpack (= 7.1.3)
14 | activesupport (= 7.1.3)
15 | nio4r (~> 2.0)
16 | websocket-driver (>= 0.6.1)
17 | zeitwerk (~> 2.6)
18 | actionmailbox (7.1.3)
19 | actionpack (= 7.1.3)
20 | activejob (= 7.1.3)
21 | activerecord (= 7.1.3)
22 | activestorage (= 7.1.3)
23 | activesupport (= 7.1.3)
24 | mail (>= 2.7.1)
25 | net-imap
26 | net-pop
27 | net-smtp
28 | actionmailer (7.1.3)
29 | actionpack (= 7.1.3)
30 | actionview (= 7.1.3)
31 | activejob (= 7.1.3)
32 | activesupport (= 7.1.3)
33 | mail (~> 2.5, >= 2.5.4)
34 | net-imap
35 | net-pop
36 | net-smtp
37 | rails-dom-testing (~> 2.2)
38 | actionpack (7.1.3)
39 | actionview (= 7.1.3)
40 | activesupport (= 7.1.3)
41 | nokogiri (>= 1.8.5)
42 | racc
43 | rack (>= 2.2.4)
44 | rack-session (>= 1.0.1)
45 | rack-test (>= 0.6.3)
46 | rails-dom-testing (~> 2.2)
47 | rails-html-sanitizer (~> 1.6)
48 | actiontext (7.1.3)
49 | actionpack (= 7.1.3)
50 | activerecord (= 7.1.3)
51 | activestorage (= 7.1.3)
52 | activesupport (= 7.1.3)
53 | globalid (>= 0.6.0)
54 | nokogiri (>= 1.8.5)
55 | actionview (7.1.3)
56 | activesupport (= 7.1.3)
57 | builder (~> 3.1)
58 | erubi (~> 1.11)
59 | rails-dom-testing (~> 2.2)
60 | rails-html-sanitizer (~> 1.6)
61 | active_hash (3.2.1)
62 | activesupport (>= 5.0.0)
63 | activejob (7.1.3)
64 | activesupport (= 7.1.3)
65 | globalid (>= 0.3.6)
66 | activemodel (7.1.3)
67 | activesupport (= 7.1.3)
68 | activerecord (7.1.3)
69 | activemodel (= 7.1.3)
70 | activesupport (= 7.1.3)
71 | timeout (>= 0.4.0)
72 | activerecord-postgis-adapter (9.0.1)
73 | activerecord (~> 7.1.0)
74 | rgeo-activerecord (~> 7.0.0)
75 | activestorage (7.1.3)
76 | actionpack (= 7.1.3)
77 | activejob (= 7.1.3)
78 | activerecord (= 7.1.3)
79 | activesupport (= 7.1.3)
80 | marcel (~> 1.0)
81 | activesupport (7.1.3)
82 | base64
83 | bigdecimal
84 | concurrent-ruby (~> 1.0, >= 1.0.2)
85 | connection_pool (>= 2.2.5)
86 | drb
87 | i18n (>= 1.6, < 2)
88 | minitest (>= 5.1)
89 | mutex_m
90 | tzinfo (~> 2.0)
91 | addressable (2.8.6)
92 | public_suffix (>= 2.0.2, < 6.0)
93 | ast (2.4.2)
94 | base64 (0.2.0)
95 | bigdecimal (3.1.6)
96 | bindex (0.8.1)
97 | builder (3.2.4)
98 | byebug (11.1.3)
99 | capybara (3.40.0)
100 | addressable
101 | matrix
102 | mini_mime (>= 0.1.3)
103 | nokogiri (~> 1.11)
104 | rack (>= 1.6.0)
105 | rack-test (>= 0.6.3)
106 | regexp_parser (>= 1.5, < 3.0)
107 | xpath (~> 3.2)
108 | concurrent-ruby (1.2.3)
109 | connection_pool (2.4.1)
110 | crass (1.0.6)
111 | cssbundling-rails (1.4.0)
112 | railties (>= 6.0.0)
113 | date (3.3.4)
114 | diff-lcs (1.5.1)
115 | dotenv (2.8.1)
116 | dotenv-rails (2.8.1)
117 | dotenv (= 2.8.1)
118 | railties (>= 3.2)
119 | drb (2.2.0)
120 | ruby2_keywords
121 | erubi (1.12.0)
122 | factory_bot (6.4.6)
123 | activesupport (>= 5.0.0)
124 | factory_bot_rails (6.4.3)
125 | factory_bot (~> 6.4)
126 | railties (>= 5.0.0)
127 | faraday (2.9.0)
128 | faraday-net_http (>= 2.0, < 3.2)
129 | faraday-net_http (3.1.0)
130 | net-http
131 | ffi (1.16.3)
132 | geocoder (1.8.2)
133 | globalid (1.2.1)
134 | activesupport (>= 6.1)
135 | i18n (1.14.1)
136 | concurrent-ruby (~> 1.0)
137 | importmap-rails (2.0.1)
138 | actionpack (>= 6.0.0)
139 | activesupport (>= 6.0.0)
140 | railties (>= 6.0.0)
141 | io-console (0.7.2)
142 | irb (1.11.1)
143 | rdoc
144 | reline (>= 0.4.2)
145 | jbuilder (2.11.5)
146 | actionview (>= 5.0.0)
147 | activesupport (>= 5.0.0)
148 | json (2.7.1)
149 | language_server-protocol (3.17.0.3)
150 | launchy (2.5.2)
151 | addressable (~> 2.8)
152 | lint_roller (1.1.0)
153 | listen (3.8.0)
154 | rb-fsevent (~> 0.10, >= 0.10.3)
155 | rb-inotify (~> 0.9, >= 0.9.10)
156 | loofah (2.22.0)
157 | crass (~> 1.0.2)
158 | nokogiri (>= 1.12.0)
159 | mail (2.8.1)
160 | mini_mime (>= 0.1.1)
161 | net-imap
162 | net-pop
163 | net-smtp
164 | marcel (1.0.2)
165 | matrix (0.4.2)
166 | mini_mime (1.1.5)
167 | mini_portile2 (2.8.5)
168 | minitest (5.21.2)
169 | multi_json (1.15.0)
170 | mutex_m (0.2.0)
171 | net-http (0.4.1)
172 | uri
173 | net-imap (0.4.9.1)
174 | date
175 | net-protocol
176 | net-pop (0.1.2)
177 | net-protocol
178 | net-protocol (0.2.2)
179 | timeout
180 | net-smtp (0.4.0.1)
181 | net-protocol
182 | nio4r (2.7.0)
183 | nokogiri (1.16.1)
184 | mini_portile2 (~> 2.8.2)
185 | racc (~> 1.4)
186 | parallel (1.24.0)
187 | parser (3.3.0.5)
188 | ast (~> 2.4.1)
189 | racc
190 | pg (1.5.4)
191 | psych (5.1.2)
192 | stringio
193 | public_suffix (5.0.4)
194 | puma (6.4.2)
195 | nio4r (~> 2.0)
196 | racc (1.7.3)
197 | rack (3.0.9)
198 | rack-session (2.0.0)
199 | rack (>= 3.0.0)
200 | rack-test (2.1.0)
201 | rack (>= 1.3)
202 | rackup (2.1.0)
203 | rack (>= 3)
204 | webrick (~> 1.8)
205 | rails (7.1.3)
206 | actioncable (= 7.1.3)
207 | actionmailbox (= 7.1.3)
208 | actionmailer (= 7.1.3)
209 | actionpack (= 7.1.3)
210 | actiontext (= 7.1.3)
211 | actionview (= 7.1.3)
212 | activejob (= 7.1.3)
213 | activemodel (= 7.1.3)
214 | activerecord (= 7.1.3)
215 | activestorage (= 7.1.3)
216 | activesupport (= 7.1.3)
217 | bundler (>= 1.15.0)
218 | railties (= 7.1.3)
219 | rails-controller-testing (1.0.5)
220 | actionpack (>= 5.0.1.rc1)
221 | actionview (>= 5.0.1.rc1)
222 | activesupport (>= 5.0.1.rc1)
223 | rails-dom-testing (2.2.0)
224 | activesupport (>= 5.0.0)
225 | minitest
226 | nokogiri (>= 1.6)
227 | rails-html-sanitizer (1.6.0)
228 | loofah (~> 2.21)
229 | nokogiri (~> 1.14)
230 | railties (7.1.3)
231 | actionpack (= 7.1.3)
232 | activesupport (= 7.1.3)
233 | irb
234 | rackup (>= 1.0.0)
235 | rake (>= 12.2)
236 | thor (~> 1.0, >= 1.2.2)
237 | zeitwerk (~> 2.6)
238 | rainbow (3.1.1)
239 | rake (13.1.0)
240 | rb-fsevent (0.11.2)
241 | rb-inotify (0.10.1)
242 | ffi (~> 1.0)
243 | rdoc (6.6.2)
244 | psych (>= 4.0.0)
245 | redis (5.0.8)
246 | redis-client (>= 0.17.0)
247 | redis-client (0.19.1)
248 | connection_pool
249 | regexp_parser (2.9.0)
250 | reline (0.4.2)
251 | io-console (~> 0.5)
252 | rexml (3.2.6)
253 | rgeo (3.0.1)
254 | rgeo-activerecord (7.0.1)
255 | activerecord (>= 5.0)
256 | rgeo (>= 1.0.0)
257 | rspec-core (3.12.2)
258 | rspec-support (~> 3.12.0)
259 | rspec-expectations (3.12.3)
260 | diff-lcs (>= 1.2.0, < 2.0)
261 | rspec-support (~> 3.12.0)
262 | rspec-mocks (3.12.6)
263 | diff-lcs (>= 1.2.0, < 2.0)
264 | rspec-support (~> 3.12.0)
265 | rspec-rails (6.1.1)
266 | actionpack (>= 6.1)
267 | activesupport (>= 6.1)
268 | railties (>= 6.1)
269 | rspec-core (~> 3.12)
270 | rspec-expectations (~> 3.12)
271 | rspec-mocks (~> 3.12)
272 | rspec-support (~> 3.12)
273 | rspec-support (3.12.1)
274 | rspec_junit_formatter (0.6.0)
275 | rspec-core (>= 2, < 4, != 2.12.0)
276 | rubocop (1.59.0)
277 | json (~> 2.3)
278 | language_server-protocol (>= 3.17.0)
279 | parallel (~> 1.10)
280 | parser (>= 3.2.2.4)
281 | rainbow (>= 2.2.2, < 4.0)
282 | regexp_parser (>= 1.8, < 3.0)
283 | rexml (>= 3.2.5, < 4.0)
284 | rubocop-ast (>= 1.30.0, < 2.0)
285 | ruby-progressbar (~> 1.7)
286 | unicode-display_width (>= 2.4.0, < 3.0)
287 | rubocop-ast (1.30.0)
288 | parser (>= 3.2.1.0)
289 | rubocop-performance (1.20.2)
290 | rubocop (>= 1.48.1, < 2.0)
291 | rubocop-ast (>= 1.30.0, < 2.0)
292 | ruby-progressbar (1.13.0)
293 | ruby2_keywords (0.0.5)
294 | sentry-raven (3.1.2)
295 | faraday (>= 1.0)
296 | sprockets (4.2.1)
297 | concurrent-ruby (~> 1.0)
298 | rack (>= 2.2.4, < 4)
299 | sprockets-rails (3.4.2)
300 | actionpack (>= 5.2)
301 | activesupport (>= 5.2)
302 | sprockets (>= 3.0.0)
303 | standard (1.33.0)
304 | language_server-protocol (~> 3.17.0.2)
305 | lint_roller (~> 1.0)
306 | rubocop (~> 1.59.0)
307 | standard-custom (~> 1.0.0)
308 | standard-performance (~> 1.3)
309 | standard-custom (1.0.2)
310 | lint_roller (~> 1.0)
311 | rubocop (~> 1.50)
312 | standard-performance (1.3.1)
313 | lint_roller (~> 1.1)
314 | rubocop-performance (~> 1.20.2)
315 | stringio (3.1.0)
316 | thor (1.3.0)
317 | timeout (0.4.1)
318 | trollop (2.9.10)
319 | turbolinks (5.2.1)
320 | turbolinks-source (~> 5.2)
321 | turbolinks-source (5.2.0)
322 | tzinfo (2.0.6)
323 | concurrent-ruby (~> 1.0)
324 | unicode-display_width (2.5.0)
325 | uri (0.13.0)
326 | web-console (4.2.1)
327 | actionview (>= 6.0.0)
328 | activemodel (>= 6.0.0)
329 | bindex (>= 0.4.0)
330 | railties (>= 6.0.0)
331 | webrick (1.8.1)
332 | websocket-driver (0.7.6)
333 | websocket-extensions (>= 0.1.0)
334 | websocket-extensions (0.1.5)
335 | xpath (3.2.0)
336 | nokogiri (~> 1.8)
337 | yamllint (0.0.9)
338 | trollop (~> 2)
339 | zeitwerk (2.6.12)
340 |
341 | PLATFORMS
342 | ruby
343 |
344 | DEPENDENCIES
345 | active_hash
346 | activerecord-postgis-adapter
347 | byebug
348 | capybara (>= 2.15)
349 | cssbundling-rails
350 | dotenv-rails
351 | factory_bot_rails
352 | geocoder
353 | importmap-rails
354 | jbuilder
355 | launchy
356 | listen
357 | pg
358 | puma
359 | rails (~> 7)
360 | rails-controller-testing
361 | redis
362 | rspec-rails
363 | rspec_junit_formatter
364 | sentry-raven
365 | sprockets-rails
366 | standard
367 | turbolinks (~> 5)
368 | utensils!
369 | web-console (>= 3.3.0)
370 | yamllint
371 |
372 | RUBY VERSION
373 | ruby 3.1.3p185
374 |
375 | BUNDLED WITH
376 | 2.3.26
377 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Lewis Buckley
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Procfile.dev:
--------------------------------------------------------------------------------
1 | web: bin/rails server -p 3001
2 | css: yarn build:css --watch
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ruby Map
2 |
3 | [](CODE_OF_CONDUCT.md)
4 |
5 | Whilst travelling to other cities I've often wondered: "What's going on in the local Ruby community?"
6 | To answer this question, hopefully fellow Rubyists will share their organization / meetup / events and anyone interested will be able to discover the Ruby world around them!
7 | Sometimes folks are interested in finding a new gig, in a new location. Ruby Map might be useful for that too, if companies share if they are hiring.
8 |
9 | ## Your company / meetup / event is missing?
10 |
11 | What if your company / meetup / event is missing on the map? No problem, just send us a PR and it will get added asap.
12 | An example PR can be found [here](https://github.com/lewispb/rubymap/pull/1).
13 |
14 | Please try to maintain the order-by-name of the yaml file, to prevent merge conflicts.
15 |
16 | ## Prerequisites
17 |
18 | ```bash
19 | brew install redis
20 | brew install postgres
21 | brew install postgis
22 | brew install geos
23 | ```
24 |
25 | Add PostGIS to postgres
26 |
27 | ```
28 | rake db:gis:setup
29 | ```
30 |
31 | ### Development server
32 |
33 | ```
34 | bin/dev
35 | ```
36 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | # Add your own tasks in files placed in lib/tasks ending in .rake,
2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3 |
4 | require_relative "config/application"
5 |
6 | Rails.application.load_tasks
7 |
--------------------------------------------------------------------------------
/app/assets/builds/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/app/assets/builds/.keep
--------------------------------------------------------------------------------
/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
1 | //= link_tree ../images
2 | //= link_tree ../builds
3 | //= link_tree ../../javascript .js
4 | //= link_tree ../../../vendor/javascript .js
5 |
--------------------------------------------------------------------------------
/app/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/app/assets/images/logo.png
--------------------------------------------------------------------------------
/app/assets/stylesheets/application.sass.scss:
--------------------------------------------------------------------------------
1 | $dark-red: #7a3130;
2 |
3 | html, body {
4 | height: 100%;
5 | margin: 0;
6 | padding: 0;
7 | }
8 |
9 | a {
10 | color: $dark-red;
11 | &:hover {
12 | text-decoration-style: dashed;
13 | }
14 | }
15 |
16 | .navigation {
17 | height: 50px;
18 | width: 100%;
19 | display: block;
20 | background: $dark-red;
21 | img {
22 | max-height: 50px;
23 | padding: 0 10px;
24 | }
25 | #about {
26 | float: right;
27 | color: #fff;
28 | padding: 1rem;
29 | font-family: sans-serif;
30 | }
31 | }
32 |
33 | .map-container {
34 | position: absolute;
35 | top: 50px;
36 | bottom: 0;
37 | width: 100%;
38 | .map {
39 | height: 100%;
40 |
41 | .location-description {
42 | min-height: 100px;
43 | h1 {
44 | line-height: 1.3rem;
45 | }
46 | a {
47 | font-weight: normal;
48 | font-size: 1rem;
49 | word-break: break-all;
50 | }
51 | }
52 | }
53 | }
54 |
55 | // Modal
56 |
57 | .modal {
58 | font-family: -apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;
59 | }
60 |
61 | .modal__overlay {
62 | position: fixed;
63 | top: 0;
64 | left: 0;
65 | right: 0;
66 | bottom: 0;
67 | background: rgba(0,0,0,0.6);
68 | display: flex;
69 | justify-content: center;
70 | align-items: center;
71 | }
72 |
73 | .modal__container {
74 | background-color: #fff;
75 | padding: 30px;
76 | max-width: 500px;
77 | max-height: 100vh;
78 | border-radius: 4px;
79 | overflow-y: auto;
80 | box-sizing: border-box;
81 | }
82 |
83 | .modal__header {
84 | display: flex;
85 | justify-content: space-between;
86 | align-items: center;
87 | }
88 |
89 | .modal__title {
90 | margin-top: 0;
91 | margin-bottom: 0;
92 | font-weight: 600;
93 | font-size: 1.25rem;
94 | line-height: 1.25;
95 | color: $dark-red;
96 | box-sizing: border-box;
97 | }
98 |
99 | .modal__close {
100 | background: transparent;
101 | border: 0;
102 | }
103 |
104 | .modal__header .modal__close:before { content: "\2715"; }
105 |
106 | .modal__content {
107 | margin-top: 2rem;
108 | margin-bottom: 2rem;
109 | line-height: 1.5;
110 | color: rgba(0,0,0,.8);
111 | }
112 |
113 | .modal__btn {
114 | font-size: .875rem;
115 | padding-left: 1rem;
116 | padding-right: 1rem;
117 | padding-top: .5rem;
118 | padding-bottom: .5rem;
119 | background-color: #e6e6e6;
120 | color: rgba(0,0,0,.8);
121 | border-radius: .25rem;
122 | border-style: none;
123 | border-width: 0;
124 | cursor: pointer;
125 | -webkit-appearance: button;
126 | text-transform: none;
127 | overflow: visible;
128 | line-height: 1.15;
129 | margin: 0;
130 | will-change: transform;
131 | -moz-osx-font-smoothing: grayscale;
132 | -webkit-backface-visibility: hidden;
133 | backface-visibility: hidden;
134 | -webkit-transform: translateZ(0);
135 | transform: translateZ(0);
136 | transition: -webkit-transform .25s ease-out;
137 | transition: transform .25s ease-out;
138 | transition: transform .25s ease-out,-webkit-transform .25s ease-out;
139 | }
140 |
141 | .modal__btn:focus, .modal__btn:hover {
142 | -webkit-transform: scale(1.05);
143 | transform: scale(1.05);
144 | }
145 |
146 | .modal__btn-primary {
147 | background-color: #00449e;
148 | color: #fff;
149 | }
150 |
151 |
152 |
153 | /**************************\
154 | Demo Animation Style
155 | \**************************/
156 | @keyframes mmfadeIn {
157 | from { opacity: 0; }
158 | to { opacity: 1; }
159 | }
160 |
161 | @keyframes mmfadeOut {
162 | from { opacity: 1; }
163 | to { opacity: 0; }
164 | }
165 |
166 | @keyframes mmslideIn {
167 | from { transform: translateY(15%); }
168 | to { transform: translateY(0); }
169 | }
170 |
171 | @keyframes mmslideOut {
172 | from { transform: translateY(0); }
173 | to { transform: translateY(-10%); }
174 | }
175 |
176 | .micromodal-slide {
177 | display: none;
178 | }
179 |
180 | .micromodal-slide.is-open {
181 | display: block;
182 | }
183 |
184 | .micromodal-slide[aria-hidden="false"] .modal__overlay {
185 | animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
186 | }
187 |
188 | .micromodal-slide[aria-hidden="false"] .modal__container {
189 | animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
190 | }
191 |
192 | .micromodal-slide[aria-hidden="true"] .modal__overlay {
193 | animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
194 | }
195 |
196 | .micromodal-slide[aria-hidden="true"] .modal__container {
197 | animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
198 | }
199 |
200 | .micromodal-slide .modal__container,
201 | .micromodal-slide .modal__overlay {
202 | will-change: transform;
203 | }
204 |
--------------------------------------------------------------------------------
/app/channels/application_cable/channel.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Channel < ActionCable::Channel::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/channels/application_cable/connection.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Connection < ActionCable::Connection::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/app/controllers/concerns/.keep
--------------------------------------------------------------------------------
/app/controllers/locations_controller.rb:
--------------------------------------------------------------------------------
1 | class LocationsController < ApplicationController
2 | def index
3 | @locations = Location.includes(:organization).all
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/locations_helper.rb:
--------------------------------------------------------------------------------
1 | module LocationsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/organizations_helper.rb:
--------------------------------------------------------------------------------
1 | module OrganizationsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/javascript/application.js:
--------------------------------------------------------------------------------
1 | import MicroModal from "micromodal"
2 |
3 | MicroModal.init();
4 |
--------------------------------------------------------------------------------
/app/javascript/map.js:
--------------------------------------------------------------------------------
1 | function initMap() {
2 | map = new google.maps.Map(document.querySelector('.map'), {
3 | center: {
4 | lat: 51.454514,
5 | lng: -2.587910
6 | },
7 | zoom: 6
8 | })
9 |
10 | var infowindow = new google.maps.InfoWindow();
11 |
12 | // Try HTML5 geolocation.
13 | if (navigator.geolocation) {
14 | navigator.geolocation.getCurrentPosition(function(position) {
15 | var pos = {
16 | lat: position.coords.latitude,
17 | lng: position.coords.longitude
18 | };
19 | map.setCenter(pos);
20 | }, function(e) {
21 | console.log(e);
22 | });
23 | } else {
24 | // Browser doesn't support Geolocation
25 | }
26 |
27 | map.data.loadGeoJson("locations.json");
28 | map.data.addListener("click", function(event) {
29 | var descriptionHtml = event.feature.getProperty("description");
30 | infowindow.setContent(descriptionHtml);
31 | infowindow.setPosition(event.feature.getGeometry().get());
32 | infowindow.setOptions({pixelOffset: new google.maps.Size(0,-30)});
33 | infowindow.open(map);
34 | });
35 | }
36 |
--------------------------------------------------------------------------------
/app/jobs/application_job.rb:
--------------------------------------------------------------------------------
1 | class ApplicationJob < ActiveJob::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/mailers/application_mailer.rb:
--------------------------------------------------------------------------------
1 | class ApplicationMailer < ActionMailer::Base
2 | default from: "from@example.com"
3 | layout "mailer"
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/application_record.rb:
--------------------------------------------------------------------------------
1 | class ApplicationRecord < ActiveRecord::Base
2 | self.abstract_class = true
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/app/models/concerns/.keep
--------------------------------------------------------------------------------
/app/models/location.rb:
--------------------------------------------------------------------------------
1 | class Location < ApplicationRecord
2 | belongs_to :organization
3 | validates :coords, presence: true
4 |
5 | before_validation :geocode_address
6 |
7 | def self.import(organization:, address:)
8 | new(organization: organization, address: address).save!
9 | end
10 |
11 | private
12 |
13 | def geocode_address
14 | return if geocoded_coords.blank?
15 |
16 | self.coords = "SRID=4326;POINT(#{geocoded_coords_with_entropy.join(" ")})"
17 | end
18 |
19 | def geocoded_coords_with_entropy
20 | [geocoded_coords[0].round(5) + rand(0.0001..0.0009), geocoded_coords[1]]
21 | end
22 |
23 | def geocoded_coords
24 | @_geocoded_coords ||= Geocoder.search(address).first&.coordinates&.reverse
25 | end
26 | end
27 |
--------------------------------------------------------------------------------
/app/models/organization.rb:
--------------------------------------------------------------------------------
1 | class Organization < ApplicationRecord
2 | validates :name, presence: true
3 | enum org_type: { business: :business, meetup: :meetup, event: :event }
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/seeds/organization.rb:
--------------------------------------------------------------------------------
1 | module Seeds
2 | class Organization < ActiveYaml::Base
3 | set_root_path "data"
4 |
5 | def self.import
6 | all.each(&:import)
7 | end
8 |
9 | def import
10 | locations.each do |location|
11 | Location.import(organization: organization, address: location["address"])
12 | end
13 | end
14 |
15 | private
16 |
17 | def organization
18 | @_organization ||= ::Organization.create!(name: name) do |organization|
19 | organization.org_type = type
20 | organization.url = url
21 | organization.twitter_handle = twitter_handle
22 | end
23 | end
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Ruby Map
5 | <%= csrf_meta_tags %>
6 | <%= csp_meta_tag %>
7 |
8 | <%= stylesheet_link_tag "application" %>
9 | <%= javascript_include_tag "map" %>
10 |
11 |
12 | <%= javascript_importmap_tags %>
13 |
14 |
15 |
16 |
17 |
18 | <%= image_tag "logo.png" %>
19 | <%= link_to "What's this all about?", "#about", id: "about", data: { micromodal_trigger: "modal-1" } %>
20 |
21 |
22 |
23 | <%= yield %>
24 |
25 |
26 |
27 |
28 |
34 |
35 | Whilst travelling to other cities I've often wondered: "What's going on in the local Ruby community?"
36 | To answer this question, hopefully fellow Rubyists will share their organization / meetup / events and anyone interested will be able to discover the Ruby world around them!
37 | Sometimes folks are interesting in finding a new gig, in a new location. Ruby Map might be useful for that too, if companies share if they are hiring.
38 | Any questions? Contact me, Lewis .
39 |
40 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 | <%= yield %>
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.text.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
2 |
--------------------------------------------------------------------------------
/app/views/locations/_description.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= link_to location.organization.name, location.organization.url %>
3 |
<%= location.address %>
4 |
--------------------------------------------------------------------------------
/app/views/locations/_location.json.jbuilder:
--------------------------------------------------------------------------------
1 | json.type "Feature"
2 | json.geometry do
3 | json.type "Point"
4 | json.coordinates location.coords.coordinates
5 | end
6 | json.properties do
7 | json.description render partial: 'description', formats: [:html], locals: { location: location }
8 | end
9 |
--------------------------------------------------------------------------------
/app/views/locations/index.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/locations/index.json.jbuilder:
--------------------------------------------------------------------------------
1 | json.type -"FeatureCollection"
2 | json.features @locations do |location|
3 | json.cache! location do
4 | json.partial! "location", location: location
5 | end
6 | end
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | var validEnv = ['development', 'test', 'production']
3 | var currentEnv = api.env()
4 | var isDevelopmentEnv = api.env('development')
5 | var isProductionEnv = api.env('production')
6 | var isTestEnv = api.env('test')
7 |
8 | if (!validEnv.includes(currentEnv)) {
9 | throw new Error(
10 | 'Please specify a valid `NODE_ENV` or ' +
11 | '`BABEL_ENV` environment variables. Valid values are "development", ' +
12 | '"test", and "production". Instead, received: ' +
13 | JSON.stringify(currentEnv) +
14 | '.'
15 | )
16 | }
17 |
18 | return {
19 | presets: [
20 | isTestEnv && [
21 | '@babel/preset-env',
22 | {
23 | targets: {
24 | node: 'current'
25 | }
26 | }
27 | ],
28 | (isProductionEnv || isDevelopmentEnv) && [
29 | '@babel/preset-env',
30 | {
31 | forceAllTransforms: true,
32 | useBuiltIns: 'entry',
33 | corejs: 3,
34 | modules: false,
35 | exclude: ['transform-typeof-symbol']
36 | }
37 | ]
38 | ].filter(Boolean),
39 | plugins: [
40 | 'babel-plugin-macros',
41 | '@babel/plugin-syntax-dynamic-import',
42 | isTestEnv && 'babel-plugin-dynamic-import-node',
43 | '@babel/plugin-transform-destructuring',
44 | [
45 | '@babel/plugin-proposal-class-properties',
46 | {
47 | loose: true
48 | }
49 | ],
50 | [
51 | '@babel/plugin-proposal-object-rest-spread',
52 | {
53 | useBuiltIns: true
54 | }
55 | ],
56 | [
57 | '@babel/plugin-transform-runtime',
58 | {
59 | helpers: false,
60 | regenerator: true,
61 | corejs: false
62 | }
63 | ],
64 | [
65 | '@babel/plugin-transform-regenerator',
66 | {
67 | async: false
68 | }
69 | ]
70 | ].filter(Boolean)
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/bin/dev:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | if ! foreman version &> /dev/null
4 | then
5 | echo "Installing foreman..."
6 | gem install foreman
7 | fi
8 |
9 | foreman start -f Procfile.dev "$@"
10 |
--------------------------------------------------------------------------------
/bin/importmap:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | require_relative "../config/application"
4 | require "importmap/commands"
5 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_PATH = File.expand_path("../config/application", __dir__)
3 | require_relative "../config/boot"
4 | require "rails/commands"
5 |
--------------------------------------------------------------------------------
/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require_relative "../config/boot"
3 | require "rake"
4 | Rake.application.run
5 |
--------------------------------------------------------------------------------
/bin/render-build.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # exit on error
3 | set -o errexit
4 |
5 | bundle install
6 | bundle exec rake assets:precompile
7 | bundle exec rake assets:clean
8 | bundle exec rake db:migrate
9 | bundle exec rake db:seed
10 |
--------------------------------------------------------------------------------
/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require "fileutils"
3 |
4 | # path to your application root.
5 | APP_ROOT = File.expand_path("..", __dir__)
6 |
7 | def system!(*args)
8 | system(*args) || abort("\n== Command #{args} failed ==")
9 | end
10 |
11 | FileUtils.chdir APP_ROOT do
12 | # This script is a way to set up or update your development environment automatically.
13 | # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14 | # Add necessary setup steps to this file.
15 |
16 | puts "== Installing dependencies =="
17 | system! "gem install bundler --conservative"
18 | system("bundle check") || system!("bundle install")
19 |
20 | # puts "\n== Copying sample files =="
21 | # unless File.exist?("config/database.yml")
22 | # FileUtils.cp "config/database.yml.sample", "config/database.yml"
23 | # end
24 |
25 | puts "\n== Preparing database =="
26 | system! "bin/rails db:prepare"
27 |
28 | puts "\n== Removing old logs and tempfiles =="
29 | system! "bin/rails log:clear tmp:clear"
30 |
31 | puts "\n== Restarting application server =="
32 | system! "bin/rails restart"
33 | end
34 |
--------------------------------------------------------------------------------
/bin/sort-orgs:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | # Replaces the organizations.yml file with its data sorted by name, case insensitively.
4 | # Before overwriting the file, tests that the unsorted and sorted data,
5 | # converted to sets, are equal.
6 |
7 | require 'set'
8 | require 'yaml'
9 |
10 | def orgs_filespec
11 | @orgs_filespec ||= begin
12 | project_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
13 | File.join(project_root, 'data', 'seeds', 'organizations.yml')
14 | end
15 | end
16 |
17 |
18 | def test(unsorted, sorted)
19 | if Set.new(unsorted) != Set.new(sorted)
20 | raise "Sort corrupted the data."
21 | end
22 | end
23 |
24 |
25 | def sort_orgs_case_insensitively(orgs)
26 | orgs.sort { |org1, org2| org1['name'].casecmp(org2['name']) }
27 | end
28 |
29 |
30 | def main
31 | orgs = YAML.load_file(orgs_filespec)
32 | sorted_orgs = sort_orgs_case_insensitively(orgs)
33 |
34 | if orgs == sorted_orgs
35 | puts "File was already sorted. No need to overwrite."
36 | exit(0)
37 | else
38 |
39 | # Enable this line to verify that the test that tests for data corruption works:
40 | # sorted_orgs.pop
41 |
42 | test(orgs, sorted_orgs)
43 | File.write(orgs_filespec, sorted_orgs.to_yaml)
44 | puts "Organizations file sort successful."
45 | end
46 | end
47 |
48 |
49 | main
50 |
--------------------------------------------------------------------------------
/bin/update:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'fileutils'
3 | include FileUtils
4 |
5 | # path to your application root.
6 | APP_ROOT = File.expand_path('..', __dir__)
7 |
8 | def system!(*args)
9 | system(*args) || abort("\n== Command #{args} failed ==")
10 | end
11 |
12 | chdir APP_ROOT do
13 | # This script is a way to update your development environment automatically.
14 | # Add necessary update steps to this file.
15 |
16 | puts '== Installing dependencies =='
17 | system! 'gem install bundler --conservative'
18 | system('bundle check') || system!('bundle install')
19 |
20 | # Install JavaScript dependencies if using Yarn
21 | # system('bin/yarn')
22 |
23 | puts "\n== Updating database =="
24 | system! 'bin/rails db:migrate'
25 |
26 | puts "\n== Removing old logs and tempfiles =="
27 | system! 'bin/rails log:clear tmp:clear'
28 |
29 | puts "\n== Restarting application server =="
30 | system! 'bin/rails restart'
31 | end
32 |
--------------------------------------------------------------------------------
/bin/yarn:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_ROOT = File.expand_path('..', __dir__)
3 | Dir.chdir(APP_ROOT) do
4 | yarn = ENV["PATH"].split(File::PATH_SEPARATOR).
5 | select { |dir| File.expand_path(dir) != __dir__ }.
6 | product(["yarn", "yarn.cmd", "yarn.ps1"]).
7 | map { |dir, file| File.expand_path(file, dir) }.
8 | find { |file| File.executable?(file) }
9 |
10 | if yarn
11 | exec yarn, *ARGV
12 | else
13 | $stderr.puts "Yarn executable was not detected in the system."
14 | $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
15 | exit 1
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require_relative "config/environment"
4 |
5 | run Rails.application
6 | Rails.application.load_server
7 |
--------------------------------------------------------------------------------
/config/application.rb:
--------------------------------------------------------------------------------
1 | require_relative "boot"
2 |
3 | require "rails/all"
4 |
5 | # Require the gems listed in Gemfile, including any gems
6 | # you've limited to :test, :development, or :production.
7 | Bundler.require(*Rails.groups)
8 |
9 | module Rubymap
10 | class Application < Rails::Application
11 | # Initialize configuration defaults for originally generated Rails version.
12 | config.load_defaults 7.0
13 |
14 | config.legacy_connection_handling = false
15 | # Configuration for the application, engines, and railties goes here.
16 | #
17 | # These settings can be overridden in specific environments using the files
18 | # in config/environments, which are processed later.
19 | #
20 | # config.time_zone = "Central Time (US & Canada)"
21 | # config.eager_load_paths << Rails.root.join("extras")
22 | end
23 | end
24 |
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
2 |
3 | require "bundler/setup" # Set up gems listed in the Gemfile.
4 |
--------------------------------------------------------------------------------
/config/cable.yml:
--------------------------------------------------------------------------------
1 | development:
2 | adapter: async
3 |
4 | test:
5 | adapter: test
6 |
7 | production:
8 | adapter: redis
9 | url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
10 | channel_prefix: rubymap_production
11 |
--------------------------------------------------------------------------------
/config/credentials.yml.enc:
--------------------------------------------------------------------------------
1 | UbnbIH9HvtzZNyL1i5rEnUhqlv3S1yXQCxa41C2lXYR2DCaFBIe11t+LR243E8e1+9GhO3M0GHholBfaopqd2RbPEf+UIz6hrDk7sUK/S4Upow2zYZv4qHCgyvNVV1K0EK2j93ZKQohM8s8OKYDT2litA7yU3Y0gK4+NX/+sb5kj2+fAHM7y3wrJCHu/e/l0k7qiKmxh2u7bAL+uf6vNCB2sDbwUy8Nv5bqXgJY12RERVKQyrOVg37t0zlJZRh9sT8OfoVYAK7eHSeC61NOqek3Opy41b5/XD6smAGcT8RNzs13ombQmEU6VoYgsc1p/Ax8mtxwSeSaiaASMEdFcDAv5askd3wbgrsFPLoe8J+XmzSewblAmiuMxML1bzHNuLnwJs+EEN2a4+pKqVw4+ZlCfwNTfg7eCGXDm--+t6XL7ZuuqOH3IMP--APwtaEl6CaTf9tA+GSENkw==
--------------------------------------------------------------------------------
/config/database.yml:
--------------------------------------------------------------------------------
1 | # SQLite version 3.x
2 | # gem install sqlite3
3 | #
4 | # Ensure the SQLite 3 gem is defined in your Gemfile
5 | # gem 'sqlite3'
6 | #
7 | default: &default
8 | adapter: postgis
9 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
10 | timeout: 5000
11 |
12 | development:
13 | <<: *default
14 | database: rubymap_development
15 |
16 | test:
17 | <<: *default
18 | database: rubymap_test
19 | user: <%= ENV.fetch("PGUSER") { "" } %>
20 |
21 | production:
22 | url: <%= ENV['DATABASE_URL']&.sub(/^postgres/, "postgis") %>
23 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require_relative "application"
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # In the development environment your application's code is reloaded on
5 | # every request. This slows down response time but is perfect for development
6 | # since you don't have to restart the web server when you make code changes.
7 | config.cache_classes = false
8 |
9 | # Do not eager load code on boot.
10 | config.eager_load = false
11 |
12 | # Show full error reports.
13 | config.consider_all_requests_local = true
14 |
15 | # Enable/disable caching. By default caching is disabled.
16 | # Run rails dev:cache to toggle caching.
17 | if Rails.root.join("tmp", "caching-dev.txt").exist?
18 | config.action_controller.perform_caching = true
19 |
20 | config.cache_store = :redis_cache_store
21 | config.public_file_server.headers = {
22 | "Cache-Control" => "public, max-age=#{2.days.to_i}",
23 | }
24 | else
25 | config.action_controller.perform_caching = false
26 |
27 | config.cache_store = :null_store
28 | end
29 |
30 | # Store uploaded files on the local file system (see config/storage.yml for options)
31 | config.active_storage.service = :local
32 |
33 | # Don't care if the mailer can't send.
34 | config.action_mailer.raise_delivery_errors = false
35 |
36 | config.action_mailer.perform_caching = false
37 |
38 | # Print deprecation notices to the Rails logger.
39 | config.active_support.deprecation = :log
40 |
41 | # Raise an error on page load if there are pending migrations.
42 | config.active_record.migration_error = :page_load
43 |
44 | # Highlight code that triggered database queries in logs.
45 | config.active_record.verbose_query_logs = true
46 |
47 | # Debug mode disables concatenation and preprocessing of assets.
48 | # This option may cause significant delays in view rendering with a large
49 | # number of complex assets.
50 | config.assets.debug = true
51 |
52 | # Suppress logger output for asset requests.
53 | config.assets.quiet = true
54 |
55 | # Raises error for missing translations
56 | # config.action_view.raise_on_missing_translations = true
57 |
58 | # Use an evented file watcher to asynchronously detect changes in source code,
59 | # routes, locales, etc. This feature depends on the listen gem.
60 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker
61 | end
62 |
--------------------------------------------------------------------------------
/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # Code is not reloaded between requests.
5 | config.cache_classes = true
6 |
7 | # Eager load code on boot. This eager loads most of Rails and
8 | # your application in memory, allowing both threaded web servers
9 | # and those relying on copy on write to perform better.
10 | # Rake tasks automatically ignore this option for performance.
11 | config.eager_load = true
12 |
13 | # Full error reports are disabled and caching is turned on.
14 | config.consider_all_requests_local = false
15 | config.action_controller.perform_caching = true
16 |
17 | # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
18 | # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
19 | # config.require_master_key = true
20 |
21 | # Disable serving static files from the `/public` folder by default since
22 | # Apache or NGINX already handles this.
23 | config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
24 |
25 | # Compress JavaScripts and CSS.
26 | # config.assets.js_compressor = :uglifier
27 | # config.assets.css_compressor = :sass
28 |
29 | # Do not fallback to assets pipeline if a precompiled asset is missed.
30 | config.assets.compile = false
31 |
32 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
33 |
34 | # Enable serving of images, stylesheets, and JavaScripts from an asset server.
35 | # config.action_controller.asset_host = 'http://assets.example.com'
36 |
37 | # Specifies the header that your server uses for sending files.
38 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
39 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
40 |
41 | # Store uploaded files on the local file system (see config/storage.yml for options)
42 | config.active_storage.service = :local
43 |
44 | # Mount Action Cable outside main process or domain
45 | # config.action_cable.mount_path = nil
46 | # config.action_cable.url = 'wss://example.com/cable'
47 | # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
48 |
49 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
50 | # config.force_ssl = true
51 |
52 | config.cache_store = :redis_cache_store
53 |
54 | # Use a real queuing backend for Active Job (and separate queues per environment)
55 | # config.active_job.queue_adapter = :resque
56 | # config.active_job.queue_name_prefix = "rubymap_#{Rails.env}"
57 |
58 | config.action_mailer.perform_caching = false
59 |
60 | # Ignore bad email addresses and do not raise email delivery errors.
61 | # Set this to true and configure the email server for immediate delivery to raise delivery errors.
62 | # config.action_mailer.raise_delivery_errors = false
63 |
64 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
65 | # the I18n.default_locale when a translation cannot be found).
66 | config.i18n.fallbacks = true
67 |
68 | # Send deprecation notices to registered listeners.
69 | config.active_support.deprecation = :notify
70 |
71 |
72 | # Use a different logger for distributed setups.
73 | # require 'syslog/logger'
74 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
75 |
76 | $stdout.sync = true
77 | # Use default logging formatter so that PID and timestamp are not suppressed.
78 | config.log_formatter = ::Logger::Formatter.new
79 | config.log_level = :debug
80 | config.logger = ActiveSupport::TaggedLogging.new(Logger.new($stdout))
81 |
82 | # Do not dump schema after migrations.
83 | config.active_record.dump_schema_after_migration = false
84 | end
85 |
--------------------------------------------------------------------------------
/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = true
9 |
10 | # Do not eager load code on boot. This avoids loading your whole application
11 | # just for the purpose of running a single test. If you are using a tool that
12 | # preloads Rails for running tests, you may have to set it to true.
13 | config.eager_load = false
14 |
15 | # Configure public file server for tests with Cache-Control for performance.
16 | config.public_file_server.enabled = true
17 | config.public_file_server.headers = {
18 | "Cache-Control" => "public, max-age=#{1.hour.to_i}",
19 | }
20 |
21 | # Show full error reports and disable caching.
22 | config.consider_all_requests_local = true
23 | config.action_controller.perform_caching = false
24 |
25 | # Raise exceptions instead of rendering exception templates.
26 | config.action_dispatch.show_exceptions = false
27 |
28 | # Disable request forgery protection in test environment.
29 | config.action_controller.allow_forgery_protection = false
30 |
31 | # Store uploaded files on the local file system in a temporary directory
32 | config.active_storage.service = :test
33 |
34 | config.action_mailer.perform_caching = false
35 |
36 | # Tell Action Mailer not to deliver emails to the real world.
37 | # The :test delivery method accumulates sent emails in the
38 | # ActionMailer::Base.deliveries array.
39 | config.action_mailer.delivery_method = :test
40 |
41 | # Print deprecation notices to the stderr.
42 | config.active_support.deprecation = :stderr
43 |
44 | # Raises error for missing translations
45 | # config.action_view.raise_on_missing_translations = true
46 | end
47 |
--------------------------------------------------------------------------------
/config/importmap.rb:
--------------------------------------------------------------------------------
1 | # Pin npm packages by running ./bin/importmap
2 |
3 | pin "application", preload: true
4 | pin "micromodal", to: "https://cdn.jsdelivr.net/gh/ghosh/Micromodal/lib/src/index.js"
5 |
--------------------------------------------------------------------------------
/config/initializers/application_controller_renderer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # ActiveSupport::Reloader.to_prepare do
4 | # ApplicationController.renderer.defaults.merge!(
5 | # http_host: 'example.org',
6 | # https: false
7 | # )
8 | # end
9 |
--------------------------------------------------------------------------------
/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | module Rubymap
2 | Application.configure do
3 | #config.assets.version = "1"
4 | #
5 | #config.assets.excluded_paths << Rails.root.join("app/assets/stylesheets")
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| /my_noisy_library/.match?(line) }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
7 | # by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
8 | Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
9 |
--------------------------------------------------------------------------------
/config/initializers/content_security_policy.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Define an application-wide content security policy.
4 | # See the Securing Rails Applications Guide for more information:
5 | # https://guides.rubyonrails.org/security.html#content-security-policy-header
6 |
7 | # Rails.application.configure do
8 | # config.content_security_policy do |policy|
9 | # policy.default_src :self, :https
10 | # policy.font_src :self, :https, :data
11 | # policy.img_src :self, :https, :data
12 | # policy.object_src :none
13 | # policy.script_src :self, :https
14 | # policy.style_src :self, :https
15 | # # Specify URI for violation reports
16 | # # policy.report_uri "/csp-violation-report-endpoint"
17 | # end
18 | #
19 | # # Generate session nonces for permitted importmap and inline scripts
20 | # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
21 | # config.content_security_policy_nonce_directives = %w(script-src)
22 | #
23 | # # Report violations without enforcing the policy.
24 | # # config.content_security_policy_report_only = true
25 | # end
26 |
--------------------------------------------------------------------------------
/config/initializers/cookies_serializer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Specify a serializer for the signed and encrypted cookie jars.
4 | # Valid options are :json, :marshal, and :hybrid.
5 | Rails.application.config.action_dispatch.cookies_serializer = :json
6 |
--------------------------------------------------------------------------------
/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure parameters to be filtered from the log file. Use this to limit dissemination of
4 | # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
5 | # notations and behaviors.
6 | Rails.application.config.filter_parameters += [
7 | :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
8 | ]
9 |
--------------------------------------------------------------------------------
/config/initializers/geocoder.rb:
--------------------------------------------------------------------------------
1 | Geocoder.configure(
2 | # Geocoding options
3 | # timeout: 3, # geocoding service timeout (secs)
4 | lookup: :google, # name of geocoding service (symbol)
5 | # ip_lookup: :ipinfo_io, # name of IP address geocoding service (symbol)
6 | # language: :en, # ISO-639 language code
7 | # use_https: false, # use HTTPS for lookup requests? (if supported)
8 | # http_proxy: nil, # HTTP proxy server (user:pass@host:port)
9 | # https_proxy: nil, # HTTPS proxy server (user:pass@host:port)
10 | api_key: ENV.fetch("GOOGLE_MAPS_API_KEY"), # API key for geocoding service
11 | cache: Rails.cache, # cache object (must respond to #[], #[]=, and #del)
12 | cache_prefix: 'geocoder:', # prefix (string) to use for all cache keys
13 |
14 | # Exceptions that should not be rescued by default
15 | # (if you want to implement custom error handling);
16 | # supports SocketError and Timeout::Error
17 | # always_raise: [],
18 |
19 | # Calculation options
20 | # units: :mi, # :km for kilometers or :mi for miles
21 | # distances: :linear # :spherical or :linear
22 | )
--------------------------------------------------------------------------------
/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, "\\1en"
8 | # inflect.singular /^(ox)en/i, "\\1"
9 | # inflect.irregular "person", "people"
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym "RESTful"
16 | # end
17 |
--------------------------------------------------------------------------------
/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
--------------------------------------------------------------------------------
/config/initializers/new_framework_defaults_6_1.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 | #
3 | # This file contains migration options to ease your Rails 6.1 upgrade.
4 | #
5 | # Once upgraded flip defaults one by one to migrate to the new default.
6 | #
7 | # Read the Guide for Upgrading Ruby on Rails for more info on each option.
8 |
9 | # Support for inversing belongs_to -> has_many Active Record associations.
10 | # Rails.application.config.active_record.has_many_inversing = true
11 |
12 | # Track Active Storage variants in the database.
13 | # Rails.application.config.active_storage.track_variants = true
14 |
15 | # Apply random variation to the delay when retrying failed jobs.
16 | # Rails.application.config.active_job.retry_jitter = 0.15
17 |
18 | # Stop executing `after_enqueue`/`after_perform` callbacks if
19 | # `before_enqueue`/`before_perform` respectively halts with `throw :abort`.
20 | # Rails.application.config.active_job.skip_after_callbacks_if_terminated = true
21 |
22 | # Specify cookies SameSite protection level: either :none, :lax, or :strict.
23 | #
24 | # This change is not backwards compatible with earlier Rails versions.
25 | # It's best enabled when your entire app is migrated and stable on 6.1.
26 | # Rails.application.config.action_dispatch.cookies_same_site_protection = :lax
27 |
28 | # Generate CSRF tokens that are encoded in URL-safe Base64.
29 | #
30 | # This change is not backwards compatible with earlier Rails versions.
31 | # It's best enabled when your entire app is migrated and stable on 6.1.
32 | # Rails.application.config.action_controller.urlsafe_csrf_tokens = true
33 |
34 | # Specify whether `ActiveSupport::TimeZone.utc_to_local` returns a time with an
35 | # UTC offset or a UTC time.
36 | # ActiveSupport.utc_to_local_returns_utc_offset_times = true
37 |
38 | # Change the default HTTP status code to `308` when redirecting non-GET/HEAD
39 | # requests to HTTPS in `ActionDispatch::SSL` middleware.
40 | # Rails.application.config.action_dispatch.ssl_default_redirect_status = 308
41 |
42 | # Use new connection handling API. For most applications this won't have any
43 | # effect. For applications using multiple databases, this new API provides
44 | # support for granular connection swapping.
45 | # Rails.application.config.active_record.legacy_connection_handling = false
46 |
47 | # Make `form_with` generate non-remote forms by default.
48 | # Rails.application.config.action_view.form_with_generates_remote_forms = false
49 |
50 | # Set the default queue name for the analysis job to the queue adapter default.
51 | # Rails.application.config.active_storage.queues.analysis = nil
52 |
53 | # Set the default queue name for the purge job to the queue adapter default.
54 | # Rails.application.config.active_storage.queues.purge = nil
55 |
56 | # Set the default queue name for the incineration job to the queue adapter default.
57 | # Rails.application.config.action_mailbox.queues.incineration = nil
58 |
59 | # Set the default queue name for the routing job to the queue adapter default.
60 | # Rails.application.config.action_mailbox.queues.routing = nil
61 |
62 | # Set the default queue name for the mail deliver job to the queue adapter default.
63 | # Rails.application.config.action_mailer.deliver_later_queue_name = nil
64 |
65 | # Generate a `Link` header that gives a hint to modern browsers about
66 | # preloading assets when using `javascript_include_tag` and `stylesheet_link_tag`.
67 | # Rails.application.config.action_view.preload_links_header = true
68 |
--------------------------------------------------------------------------------
/config/initializers/new_framework_defaults_7_0.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 | #
3 | # This file eases your Rails 7.0 framework defaults upgrade.
4 | #
5 | # Uncomment each configuration one by one to switch to the new default.
6 | # Once your application is ready to run with all new defaults, you can remove
7 | # this file and set the `config.load_defaults` to `7.0`.
8 | #
9 | # Read the Guide for Upgrading Ruby on Rails for more info on each option.
10 | # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
11 |
12 | # `button_to` view helper will render `` element, regardless of whether
13 | # or not the content is passed as the first argument or as a block.
14 | # Rails.application.config.action_view.button_to_generates_button_tag = true
15 |
16 | # `stylesheet_link_tag` view helper will not render the media attribute by default.
17 | # Rails.application.config.action_view.apply_stylesheet_media_default = false
18 |
19 | # Change the digest class for the key generators to `OpenSSL::Digest::SHA256`.
20 | # Changing this default means invalidate all encrypted messages generated by
21 | # your application and, all the encrypted cookies. Only change this after you
22 | # rotated all the messages using the key rotator.
23 | #
24 | # See upgrading guide for more information on how to build a rotator.
25 | # https://guides.rubyonrails.org/v7.0/upgrading_ruby_on_rails.html
26 | # Rails.application.config.active_support.key_generator_hash_digest_class = OpenSSL::Digest::SHA256
27 |
28 | # Change the digest class for ActiveSupport::Digest.
29 | # Changing this default means that for example Etags change and
30 | # various cache keys leading to cache invalidation.
31 | # Rails.application.config.active_support.hash_digest_class = OpenSSL::Digest::SHA256
32 |
33 | # Don't override ActiveSupport::TimeWithZone.name and use the default Ruby
34 | # implementation.
35 | # Rails.application.config.active_support.remove_deprecated_time_with_zone_name = true
36 |
37 | # Change the format of the cache entry.
38 | # Changing this default means that all new cache entries added to the cache
39 | # will have a different format that is not supported by Rails 6.1 applications.
40 | # Only change this value after your application is fully deployed to Rails 7.0
41 | # and you have no plans to rollback.
42 | # Rails.application.config.active_support.cache_format_version = 7.0
43 |
44 | # Calls `Rails.application.executor.wrap` around test cases.
45 | # This makes test cases behave closer to an actual request or job.
46 | # Several features that are normally disabled in test, such as Active Record query cache
47 | # and asynchronous queries will then be enabled.
48 | # Rails.application.config.active_support.executor_around_test_case = true
49 |
50 | # Define the isolation level of most of Rails internal state.
51 | # If you use a fiber based server or job processor, you should set it to `:fiber`.
52 | # Otherwise the default of `:thread` if preferable.
53 | # Rails.application.config.active_support.isolation_level = :thread
54 |
55 | # Set both the `:open_timeout` and `:read_timeout` values for `:smtp` delivery method.
56 | # Rails.application.config.action_mailer.smtp_timeout = 5
57 |
58 | # The ActiveStorage video previewer will now use scene change detection to generate
59 | # better preview images (rather than the previous default of using the first frame
60 | # of the video).
61 | # Rails.application.config.active_storage.video_preview_arguments =
62 | # "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
63 |
64 | # Automatically infer `inverse_of` for associations with a scope.
65 | # Rails.application.config.active_record.automatic_scope_inversing = true
66 |
67 | # Raise when running tests if fixtures contained foreign key violations
68 | # Rails.application.config.active_record.verify_foreign_keys_for_fixtures = true
69 |
70 | # Disable partial inserts.
71 | # This default means that all columns will be referenced in INSERT queries
72 | # regardless of whether they have a default or not.
73 | # Rails.application.config.active_record.partial_inserts = false
74 | #
75 | # Protect from open redirect attacks in `redirect_back_or_to` and `redirect_to`.
76 | # Rails.application.config.action_controller.raise_on_open_redirects = true
77 |
78 | # Change the variant processor for Active Storage.
79 | # Changing this default means updating all places in your code that
80 | # generate variants to use image processing macros and ruby-vips
81 | # operations. See the upgrading guide for detail on the changes required.
82 | # The `:mini_magick` option is not deprecated; it's fine to keep using it.
83 | # Rails.application.config.active_storage.variant_processor = :vips
84 |
85 | # If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
86 | # was `:marshal`. Convert all cookies to JSON, using the `:hybrid` formatter.
87 | #
88 | # If you're confident all your cookies are JSON formatted, you can switch to the `:json` formatter.
89 | #
90 | # Continue to use `:marshal` for backward-compatibility with old cookies.
91 | #
92 | # If you have configured the serializer elsewhere, you can remove this.
93 | #
94 | # See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
95 | # Rails.application.config.action_dispatch.cookies_serializer = :hybrid
96 |
97 | # Enable parameter wrapping for JSON.
98 | # Previously this was set in an initializer. It's fine to keep using that initializer if you've customized it.
99 | # To disable parameter wrapping entirely, set this config to `false`.
100 | # Rails.application.config.action_controller.wrap_parameters_by_default = true
101 |
102 | # Specifies whether generated namespaced UUIDs follow the RFC 4122 standard for namespace IDs provided as a
103 | # `String` to `Digest::UUID.uuid_v3` or `Digest::UUID.uuid_v5` method calls.
104 | #
105 | # See https://guides.rubyonrails.org/configuring.html#config-active-support-use-rfc4122-namespaced-uuids for
106 | # more information.
107 | # Rails.application.config.active_support.use_rfc4122_namespaced_uuids = true
108 |
109 | # Change the default headers to disable browsers' flawed legacy XSS protection.
110 | # Rails.application.config.action_dispatch.default_headers = {
111 | # "X-Frame-Options" => "SAMEORIGIN",
112 | # "X-XSS-Protection" => "0",
113 | # "X-Content-Type-Options" => "nosniff",
114 | # "X-Download-Options" => "noopen",
115 | # "X-Permitted-Cross-Domain-Policies" => "none",
116 | # "Referrer-Policy" => "strict-origin-when-cross-origin"
117 | # }
118 |
--------------------------------------------------------------------------------
/config/initializers/permissions_policy.rb:
--------------------------------------------------------------------------------
1 | # Define an application-wide HTTP permissions policy. For further
2 | # information see https://developers.google.com/web/updates/2018/06/feature-policy
3 | #
4 | # Rails.application.config.permissions_policy do |f|
5 | # f.camera :none
6 | # f.gyroscope :none
7 | # f.microphone :none
8 | # f.usb :none
9 | # f.fullscreen :self
10 | # f.payment :self, "https://secure.example.com"
11 | # end
12 |
--------------------------------------------------------------------------------
/config/initializers/wrap_parameters.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # This file contains settings for ActionController::ParamsWrapper which
4 | # is enabled by default.
5 |
6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7 | ActiveSupport.on_load(:action_controller) do
8 | wrap_parameters format: [:json]
9 | end
10 |
11 | # To enable root element in JSON for ActiveRecord objects.
12 | # ActiveSupport.on_load(:active_record) do
13 | # self.include_root_in_json = true
14 | # end
15 |
--------------------------------------------------------------------------------
/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t 'hello'
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t('hello') %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # The following keys must be escaped otherwise they will not be retrieved by
20 | # the default I18n backend:
21 | #
22 | # true, false, on, off, yes, no
23 | #
24 | # Instead, surround them with single quotes.
25 | #
26 | # en:
27 | # 'true': 'foo'
28 | #
29 | # To learn more, please read the Rails Internationalization guide
30 | # available at http://guides.rubyonrails.org/i18n.html.
31 |
32 | en:
33 | hello: "Hello world"
34 |
--------------------------------------------------------------------------------
/config/puma.rb:
--------------------------------------------------------------------------------
1 | # Puma can serve each request in a thread from an internal thread pool.
2 | # The `threads` method setting takes two numbers: a minimum and maximum.
3 | # Any libraries that use thread pools should be configured to match
4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum
5 | # and maximum; this matches the default thread size of Active Record.
6 | #
7 | max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8 | min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
9 | threads min_threads_count, max_threads_count
10 |
11 | # Specifies the `worker_timeout` threshold that Puma will use to wait before
12 | # terminating a worker in development environments.
13 | #
14 | worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
15 |
16 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
17 | #
18 | port ENV.fetch("PORT") { 3000 }
19 |
20 | # Specifies the `environment` that Puma will run in.
21 | #
22 | environment ENV.fetch("RAILS_ENV") { "development" }
23 |
24 | # Specifies the `pidfile` that Puma will use.
25 | pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
26 |
27 | # Specifies the number of `workers` to boot in clustered mode.
28 | # Workers are forked web server processes. If using threads and workers together
29 | # the concurrency of the application would be max `threads` * `workers`.
30 | # Workers do not work on JRuby or Windows (both of which do not support
31 | # processes).
32 | #
33 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
34 |
35 | # Use the `preload_app!` method when specifying a `workers` number.
36 | # This directive tells Puma to first boot the application and load code
37 | # before forking the application. This takes advantage of Copy On Write
38 | # process behavior so workers use less memory.
39 | #
40 | # preload_app!
41 |
42 | # Allow puma to be restarted by `rails restart` command.
43 | plugin :tmp_restart
44 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 | root "locations#index"
3 | resources :locations, only: :index
4 | end
--------------------------------------------------------------------------------
/config/spring.rb:
--------------------------------------------------------------------------------
1 | %w[
2 | .ruby-version
3 | .rbenv-vars
4 | tmp/restart.txt
5 | tmp/caching-dev.txt
6 | ].each { |path| Spring.watch(path) }
7 |
--------------------------------------------------------------------------------
/config/storage.yml:
--------------------------------------------------------------------------------
1 | test:
2 | service: Disk
3 | root: <%= Rails.root.join("tmp/storage") %>
4 |
5 | local:
6 | service: Disk
7 | root: <%= Rails.root.join("storage") %>
8 |
9 | # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10 | # amazon:
11 | # service: S3
12 | # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13 | # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14 | # region: us-east-1
15 | # bucket: your_own_bucket
16 |
17 | # Remember not to checkin your GCS keyfile to a repository
18 | # google:
19 | # service: GCS
20 | # project: your_project
21 | # credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
22 | # bucket: your_own_bucket
23 |
24 | # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25 | # microsoft:
26 | # service: AzureStorage
27 | # storage_account_name: your_account_name
28 | # storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
29 | # container: your_container_name
30 |
31 | # mirror:
32 | # service: Mirror
33 | # primary: local
34 | # mirrors: [ amazon, google, microsoft ]
35 |
--------------------------------------------------------------------------------
/data/seeds/organizations.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: "#pivorak"
3 | type: meetup
4 | url: https://pivorak.com
5 | locations:
6 | - address: Lviv, Ukraine
7 | - name: 2N IT sp. z o.o.
8 | type: business
9 | url: https://www.2n.pl
10 | locations:
11 | - address: ul. Szmaragdowa 4, 15-157 Białystok, Poland
12 | - name: 3Play Media
13 | type: business
14 | url: https://www.3playmedia.com/
15 | locations:
16 | - address: 34 Farnsworth St, Boston, MA 02210, United States
17 | - name: Adelaide.rb
18 | type: meetup
19 | url: https://www.meetup.com/adelaiderb/
20 | twitter_handle: adelaiderb
21 | locations:
22 | - address: Adelaide, South Australia, Australia
23 | - name: Alembic
24 | type: business
25 | url: https://alembic.com.au/
26 | twitter_handle: teamalembic
27 | locations:
28 | - address: Level 6, 241 Commonwealth St, Surry Hills, New South Wales, Australia
29 | - name: ApplyBoard
30 | type: business
31 | url: https://www.applyboard.com/
32 | locations:
33 | - address: 101 Frederick St,Kitchener, Ontario, Canada
34 | - name: Asakusa.rb
35 | type: meetup
36 | url: http://asakusa.rubyist.net/
37 | locations:
38 | - address: Asakusa, Tokyo, Japan
39 | - name: Assembly Four
40 | type: business
41 | url: https://assemblyfour.com/
42 | twitter_handle: AssemblyFour
43 | locations:
44 | - address: Spencer St, Melbourne, Victoria, Australia
45 | - name: B'more (Baltimore) on Rails
46 | type: meetup
47 | url: https://www.meetup.com/bmore-on-rails/
48 | locations:
49 | - address: Baltimore, MD, USA
50 | - name: Bangkok.rb
51 | type: meetup
52 | url: https://www.meetup.com/bangkok-rb/
53 | locations:
54 | - address: 399 Interchange Tower 21 Sukhumvit Rd, Khlong Toei Nuea, Watthana, Bangkok
55 | 10110, Thailand
56 | - name: Basecamp
57 | type: business
58 | url: https://basecamp.com/about/office
59 | locations:
60 | - address: Chicago
61 | - name: Bath Ruby
62 | type: meetup
63 | url: https://bathruby.uk
64 | locations:
65 | - address: Bath, UK
66 | - name: Białystok Ruby Users Group
67 | type: meetup
68 | url: https://www.facebook.com/groups/BRUGroup/
69 | locations:
70 | - address: ul. Sienkiewicza 110, Białystok, Poland
71 | - name: Bold Penguin
72 | type: business
73 | url: https://www.boldpenguin.com/
74 | locations:
75 | - address: 100 E Broad St, 15th Floor, Columbus, OH, 43215, US
76 | - name: BrisRuby
77 | type: meetup
78 | url: https://www.meetup.com/BrisRuby
79 | twitter_handle: brisruby
80 | locations:
81 | - address: Brisbane, Queensland, Australia
82 | - name: Buildkite
83 | type: business
84 | url: https://buildkite.com/
85 | twitter_handle: buildkite
86 | locations:
87 | - address: 149A Brunswick St, Fitzroy, Victoria, Australia
88 | - name: Cadena
89 | type: business
90 | url: https://cadena.com.br
91 | locations:
92 | - address: Rua Operario Osvaldo dos Santos, 58 Americana, SP, Brazil
93 | - name: Cahootify
94 | type: business
95 | url: https://cahootify.com
96 | locations:
97 | - address: The Guild, High Street, Bath, UK
98 | - name: Calibre
99 | type: business
100 | url: https://calibreapp.com/
101 | twitter_handle: calibreapp
102 | locations:
103 | - address: 149A Brunswick Street, Melbourne, Victoria, Australia
104 | - name: cardiffrb
105 | type: meetup
106 | url: https://www.cardiffrb.com
107 | locations:
108 | - address: Cardiff, UK
109 | - name: carwow
110 | type: business
111 | url: https://www.carwow.co.uk
112 | locations:
113 | - address: 10 Bressenden Place, Westminster, London SW1E 5DH
114 | - name: Catawiki
115 | type: business
116 | url: https://catawiki.com
117 | locations:
118 | - address: Trompenburgstraat 2, 1079 TX Amsterdam, The Netherlands
119 | - address: Overcingellaan 5, 9401 LA Assen, The Netherlands
120 | - name: Charanga
121 | type: business
122 | url: https://charanga.com
123 | locations:
124 | - address: 5th floor, Olivier House, 18 Marine Parade, Brighton, BN2 1TL, UK
125 | - name: Chargefox
126 | type: business
127 | url: https://www.chargefox.com
128 | twitter_handle: Chargefox
129 | locations:
130 | - address: Level 1, 673 Bourke Street, Melbourne, Victoria, Australia
131 | - name: Charlotte Ruby
132 | type: meetup
133 | url: http://charlotteruby.org
134 | locations:
135 | - address: Charlotte, NC
136 | - name: Cincinnati Ruby Brigade
137 | type: meetup
138 | url: http://cincyrb.com/
139 | locations:
140 | - address: 708 Walnut Street, Cincinnati, OH, 45202, US
141 | - name: Cleveland Ruby Brigade
142 | type: meetup
143 | url: https://www.meetup.com/ClevelandRuby/
144 | locations:
145 | - address: 22901 Millcreek Blvd, Highland Hills, OH, US
146 | - name: Cloud Five
147 | type: business
148 | url: https://www.cloudfive.app
149 | locations:
150 | - address: 4513 Vernon Blvd, Madison, WI 53715, USA
151 | - name: Columbus Ruby Brigade
152 | type: meetup
153 | url: http://www.columbusrb.com/
154 | locations:
155 | - address: 2 Miranova Pl, Columbus, OH, 43215, US
156 | - name: Cookpad
157 | type: business
158 | url: https://www.cookpadteam.com
159 | twitter_handle: cookpad_dev
160 | locations:
161 | - address: Broad Plain, Bristol
162 | - address: Ebisu Garden Place Tower, 12/F, 4-20-3 Ebisu, Tokyo, 150-6012, Japan
163 | - address: Jl. Pramuka Sari II No.24, RT.5/RW.6, Kenari, Senen, Kota Jakarta Pusat,
164 | Daerah Khusus Ibukota Jakarta 10430
165 | - name: CreditDigital
166 | type: business
167 | url: https://creditdigital.co.uk
168 | locations:
169 | - address: 40 Islington High St, The Angel, London N1 8EQ
170 | - name: Culture Amp
171 | type: business
172 | url: https://www.cultureamp.com/
173 | twitter_handle: CultureAmp
174 | locations:
175 | - address: Level 2, 29 Stewart St, Richmond, Victoria, Australia
176 | - name: DCRUG (Washington DC Ruby User Group)
177 | type: meetup
178 | url: https://www.meetup.com/dcruby/
179 | locations:
180 | - address: Washington, DC, USA
181 | - name: Department for Environment Food & Rural Affairs
182 | type: business
183 | url: https://www.gov.uk/government/organisations/department-for-environment-food-rural-affairs
184 | locations:
185 | - address: Horizon House, Deanery Rd, Bristol BS1 5TL
186 | - name: Dexem
187 | type: business
188 | url: https://www.dexem.com/en/
189 | locations:
190 | - address: 4 Avenue des Peupliers, Cesson-Sévigné, France
191 | - name: Envato
192 | type: business
193 | url: https://www.envato.com/
194 | twitter_handle: envato
195 | locations:
196 | - address: Level 3, 551 Swanston Street, Carlton, Victoria, Australia
197 | - name: epiGenesys
198 | type: business
199 | url: https://www.epigenesys.org.uk/
200 | twitter_handle: epigenesys
201 | locations:
202 | - address: Floor C, Cathedral Court, 1 Vicar Lane, Sheffield, S1 2LT
203 | - name: Evil Martians
204 | type: business
205 | url: https://evilmartians.com
206 | twitter_handle: evilmartians
207 | locations:
208 | - address: 195 Montague St, Brooklyn, NY, 11201, US
209 | - address: 156 2nd St, San Francisco, CA, 94105, US
210 | - address: Novoslobodskaya St, 16, Moscow, 127055, Russia
211 | - name: Faveod
212 | type: business
213 | url: https://faveod.com/
214 | locations:
215 | - address: 3 avenue Victor Hugo, 75116 Paris XVIe, France
216 | - name: Fera.ai
217 | type: business
218 | url: https://www.fera.ai/
219 | locations:
220 | - address: 151 Charles St West, Kitchener, Ontario, Canada
221 | - name: Finalsite
222 | type: business
223 | url: https://finalsite.dev/jobs
224 | locations:
225 | - address: Glastonbury, Connecticut
226 | - name: Flipp
227 | type: business
228 | url: https://www.flipp.com/
229 | locations:
230 | - address: 3250 Bloor St W \#12, Etobicoke, ON, Canada M8X 2X9
231 | - name: Flood
232 | type: business
233 | url: https://www.flood.io/
234 | twitter_handle: flood_io
235 | locations:
236 | - address: Level 3, Suite 4, 2-12 Foveaux St, Surry Hills, New South Wales, Australia
237 | - name: FreeAgent
238 | type: business
239 | url: https://www.freeagent.com
240 | locations:
241 | - address: 133 Fountainbridge, Edinburgh, Scotland, UK
242 | - name: General Products Ltd – Consonance
243 | type: business
244 | url: https://www.consonance.app
245 | locations:
246 | - address: 55 High St, Thame, OX9 3BH, UK
247 | - name: Ginza.rb
248 | type: meetup
249 | url: https://ginzarb.github.io/
250 | twitter_handle: ginzarb2
251 | locations:
252 | - address: Ginza, Tokyo, Japan
253 | - name: Government Digital Service
254 | type: business
255 | url: https://www.gov.uk/government/organisations/government-digital-service
256 | twitter_handle: GDSTeam
257 | locations:
258 | - address: The White Chapel Building, 10 Whitechapel High Street, London, E1 8QS, UK
259 | - name: GitHub
260 | type: business
261 | url: https://github.com/about
262 | locations:
263 | - address: San Francisco
264 | - name: Great Lakes Bioenergy Research Center
265 | type: business
266 | url: https://www.glbrc.org
267 | locations:
268 | - address: 1552 University Ave, Madison, WI 53726, USA
269 | - address: 1129 Farm Ln, East Lansing, MI 48824, USA
270 | - name: GreenSync
271 | type: business
272 | url: https://greensync.com/
273 | twitter_handle: greensync
274 | locations:
275 | - address: Suite 3515, Level 35, 477 Collins St, Melbourne, Victoria, Australia
276 | - name: Helsinki Ruby Brigade
277 | type: meetup
278 | url: https://www.meetup.com/rubybrigade
279 | locations:
280 | - address: Helsinki
281 | - name: Hiroshima.rb
282 | type: meetup
283 | url: https://hiroshimarb.connpass.com/
284 | locations:
285 | - address: Hiroshima
286 | - name: HotDoc
287 | type: business
288 | url: https://www.hotdoc.com.au/
289 | twitter_handle: HotDocOnline
290 | locations:
291 | - address: Level 7, 276 Flinders St, Melbourne, Victoria, Australia
292 | - name: indy.rb - Indianapolis Ruby Brigade
293 | type: meetup
294 | url: http://www.indyrb.org
295 | locations:
296 | - address: Indianapolis, IN, US
297 | - name: KL Ruby Brigade
298 | type: meetup
299 | url: https://www.meetup.com/ruby-malaysia/
300 | locations:
301 | - address: Kuala Lumpur, Malaysia
302 | - name: Krakow Ruby Users Group
303 | type: meetup
304 | url: https://krug.org.pl
305 | locations:
306 | - address: ul. Ślusarska 9, Kraków, Poland
307 | - name: KWRuby
308 | type: meetup
309 | url: http://kwruby.ca/
310 | locations:
311 | - address: Kitchener, Ontario, Canada
312 | - name: LocalMotion, Boise Ruby User Group
313 | type: meetup
314 | url: https://www.meetup.com/LocalMotion/
315 | locations:
316 | - address: 2404 Bank Dr, Boise, ID 83705
317 | - name: Lookahead Search
318 | type: business
319 | url: https://lookahead.com.au/
320 | twitter_handle: LookaheadSearch
321 | locations:
322 | - address: Level 5, 63 York Street, Sydney, New South Wales, Australia
323 | - name: Luca Labs
324 | type: business
325 | url: www.lucalabs.com
326 | locations:
327 | - address: Tordenskiolds gate 3, 0160 Oslo, Norway
328 | - name: Mad-Railers
329 | type: meetup
330 | url: https://www.meetup.com/Mad-Railers/
331 | locations:
332 | - address: Madison, WI
333 | - name: Melbourne Ruby
334 | type: meetup
335 | url: https://www.meetup.com/en-AU/ruby-on-rails-oceania-melbourne/
336 | twitter_handle: roromelb
337 | locations:
338 | - address: Melbourne, Victoria, Australia
339 | - name: minsk.rb
340 | type: meetup
341 | url: https://www.facebook.com/minskruby/
342 | locations:
343 | - address: Minsk, Belarus
344 | - name: Mobile Doorman
345 | type: business
346 | url: https://www.mobiledoorman.com
347 | locations:
348 | - address: 4513 Vernon Blvd, Madison, WI 53715, USA
349 | - address: 4224 N Desplaines St, Suite 400, Chicago, IL 60661, USA
350 | - name: Monde
351 | type: business
352 | url: https://vagas.monde.com.br
353 | locations:
354 | - address: Rua Pernambuco, 1466 Americana, SP, Brazil
355 | - name: Mystery Applicant
356 | type: business
357 | url: https://www.mysteryapplicant.com/
358 | locations:
359 | - address: 35 Gay Street, Bath, BA1 2NT, United Kingdom
360 | - name: North West Ruby User Group
361 | type: meetup
362 | url: https://nwrug.org/
363 | locations:
364 | - address: Manchester, UK
365 | - name: NYC.rb
366 | type: meetup
367 | url: https://www.meetup.com/NYC-rb/
368 | locations:
369 | - address: New York, NY, USA
370 | - name: Paris.rb
371 | type: meetup
372 | url: https://rubyparis.org/
373 | locations:
374 | - address: Paris
375 | - name: PatientsLikeMe
376 | type: business
377 | url: https://www.patientslikeme.com/
378 | locations:
379 | - address: 160 Second St, Cambridge, MA 02142, United States
380 | - name: Perth Ruby
381 | type: meetup
382 | url: https://www.meetup.com/ruby-on-rails-oceania-perth/
383 | locations:
384 | - address: Perth, Australia
385 | - name: Philly RB
386 | url: https://www.meetup.com/Phillyrb/
387 | locations:
388 | - address: Philadelphia, PA, USA
389 | - name: Pin Payments
390 | type: business
391 | url: https://pinpayments.com
392 | twitter_handle: PinPayments
393 | locations:
394 | - address: Level 4, 356 Collins St, Melbourne, Victoria, Australia
395 | - name: Polydice
396 | type: business
397 | url: https://polydice.github.io
398 | locations:
399 | - address: No. 9, Section 2, Roosevelt Road, Taipei, Taiwan
400 | - name: Rails Camp AU
401 | type: event
402 | url: https://railscamp.com.au/
403 | twitter_handle: railscamp_au
404 | locations:
405 | - address: Australia
406 | - name: Rails Girls AU
407 | type: event
408 | url: https://ruby.org.au/rails-girls
409 | twitter_handle: RailsGirls_AU
410 | locations:
411 | - address: Melbourne, Victoria, Australia
412 | - address: Sydney, New South Wales, Australia
413 | - name: Redbubble
414 | type: business
415 | url: https://www.redbubble.com/
416 | twitter_handle: redbubble
417 | locations:
418 | - address: Level 12, 697 Collins Street, Docklands, Victoria, Australia
419 | - name: Renuo
420 | type: business
421 | url: https://www.renuo.ch/
422 | locations:
423 | - address: Industriestrasse 44, Wallisellen, Switzerland
424 | - name: RORO Sydney
425 | type: meetup
426 | url: https://www.meetup.com/en-AU/ruby-on-rails-oceania-sydney/
427 | twitter_handle: rorosyd
428 | locations:
429 | - address: Sydney, New South Wales, Australia
430 | - name: Ruby Belgium
431 | type: meetup
432 | url: https://rubybelgium.be
433 | locations:
434 | - address: Brussels, Belgium
435 | - name: RubyConf AU
436 | type: event
437 | url: https://www.rubyconf.org.au
438 | twitter_handle: rubyconf_au
439 | locations:
440 | - address: Australia
441 | - name: Ruby Meetup Oslo
442 | type: meetup
443 | url: https://www.meetup.com/Ruby-Meetup-Oslo/
444 | locations:
445 | - address: Oslo, Norway
446 | - name: Ruby Monstas Zurich
447 | type: meetup
448 | url: https://rubymonstas.ch/
449 | locations:
450 | - address: Zurich, Switzerland
451 | - name: Ruby Taiwan
452 | type: meetup
453 | url: https://ruby.tw
454 | locations:
455 | - address: Taipei, Taiwan
456 | - name: Ruby Underground Israel
457 | type: meetup
458 | url: https://www.meetup.com/IsraelRubyUnderground/
459 | locations:
460 | - address: Tel Aviv, Israel
461 | - name: RubyJax
462 | type: meetup
463 | url: https://www.meetup.com/RubyJax/
464 | locations:
465 | - address: Jacksonville, FL
466 | - name: RubyMN
467 | type: meetup
468 | url: http://meetu.ps/c/2CVY4/tfF9t/a
469 | locations:
470 | - address: Minneapolis, MN
471 | - name: Rubyside
472 | type: meetup
473 | url: https://www.meetup.com/Rubyside-Meetup/
474 | locations:
475 | - address: Yozu, Cunard Two Suite, The Cotton Exchange, Bixteth Street, Liverpool,
476 | L3 9LQ
477 | - name: Saigon.rb
478 | type: meetup
479 | url: https://www.meetup.com/saigon-rb/
480 | locations:
481 | - address: WeWork Lim Tower 3, 29A Nguyen Dinh Chieu, Da Kao Ward, District 1, Ho Chi Minh City, Viet Nam
482 | - name: Salt Lake City Ruby Brigade (SLC.rb)
483 | type: meetup
484 | url: https://urug.org/#slc.rb
485 | locations:
486 | - address: SLCC Miller Corporate Partnership Center, 9690 South 300 West, 3rd flr
487 | Room 333, Sandy, UT, US
488 | - name: Seocho.rb
489 | type: meetup
490 | url: https://www.facebook.com/groups/324999601468189/
491 | locations:
492 | - address: 14, Teheran-ro 4-gil, Gangnam-gu, Seoul, Republic of Korea
493 | - name: Sheffield Ruby User Group (ShRUG)
494 | type: meetup
495 | url: https://shrug.org/
496 | twitter_handle: sheffieldruby
497 | locations:
498 | - address: Union St, 18-20 Union Street, Sheffield, S1 2JP
499 | - name: Shopify
500 | type: business
501 | url: https://www.shopify.com/careers/locations
502 | locations:
503 | - address: Toronto
504 | - address: Montreal
505 | - address: Ottawa
506 | - address: Waterloo, Ontario, Canada
507 | - name: SiGHT ViSiT
508 | type: business
509 | url: https://sight-visit.com/
510 | twitter_handle: shikaku_square
511 | locations:
512 | - address: 〒101-0054 東京都千代田区神田錦町3-1 オームビル2階
513 | - name: Simply Business
514 | type: business
515 | url: https://www.simplybusiness.co.uk/
516 | locations:
517 | - address: 99 Gresham St, London EC2V 7NG
518 | - address: 1 Beacon St 14th floor, Boston, MA 02108, USA
519 | - name: SLC Down Ruby Users Group (DRUG)
520 | type: meetup
521 | url: https://urug.org/#drug
522 | locations:
523 | - address: Church & State, 370 S 300 E, Salt Lake City, UT 84111, US
524 | - name: sonnen GmbH
525 | type: business
526 | url: https://sonnengroup.com/
527 | locations:
528 | - address: Am Riedbach 1, 87499 Wildpoldsried, Germany
529 | - name: Smile.io
530 | type: business
531 | url: https://smile.io/
532 | locations:
533 | - address: 305 King St W, Kitchener, Ontario, Canada
534 | - name: South West Ruby Meetup
535 | type: meetup
536 | url: https://www.meetup.com/south-west-ruby/
537 | twitter_handle: southwestruby
538 | locations:
539 | - address: Broad Plain, Bristol
540 | - name: Square
541 | type: business
542 | url: https://squareup.com/au/en
543 | twitter_handle: SquareAU
544 | locations:
545 | - address: Level 2, 246 Bourke St, Melbourne, Victoria, Australia
546 | - name: Storm Consultancy
547 | type: business
548 | url: https://stormconsultancy.co.uk/
549 | locations:
550 | - address: 14 New Bond St, Bath, BA1 1BE, United Kingdom
551 | - name: Stripe
552 | type: business
553 | url: https://stripe.com
554 | twitter_handle: StripeAustralia
555 | locations:
556 | - address: Level 7, 222 Exhibition Street, Melbourne, Victoria, Australia
557 | - name: SUSE Linux GmbH
558 | type: business
559 | url: https://www.suse.com/
560 | locations:
561 | - address: Maxfeldstrasse 5, Nuremberg
562 | - name: Ten Forward Consulting
563 | type: business
564 | url: https://www.tenforward.consulting
565 | locations:
566 | - address: 4513 Vernon Blvd, Madison, WI 53715, USA
567 | - name: The Conversation
568 | type: business
569 | url: https://theconversation.com
570 | twitter_handle: ConversationEDU
571 | locations:
572 | - address: Level 5, 700 Swanston St, Carlton, Victoria, Australia
573 | - name: thoughtbot
574 | type: business
575 | url: https://thoughtbot.com
576 | locations:
577 | - address: 42 Winter St, 7th Floor, Boston, MA, 02108, US
578 | - address: 2nd Floor, Griffin Court, 15 Long Lane, London, EC1A 9PN, UK
579 | - address: 1601 W 6th St, Austin, TX, 78703, US
580 | - address: 1384 Broadway, 20th Floor, New York, NY, 10018, US
581 | - address: 213 Fayetteville St, Raleigh, NC, 27601, US
582 | - address: 85 2nd St, Suite 700, San Francisco, CA, 94105, US
583 | - name: TOKYO Rails Meetup
584 | type: meetup
585 | url: http://www.tokyorails.org/
586 | twitter_handle: tokyorails
587 | locations:
588 | - address: Ebisu Garden Place Tower, 12/F, 4-20-3 Ebisu, Tokyo, 150-6012, Japan
589 | - name: Twilio
590 | type: business
591 | url: https://www.twilio.com/
592 | twitter_handle: twilio
593 | locations:
594 | - address: Melbourne, Victoria, Australia
595 | - name: Up
596 | type: business
597 | url: https://up.com.au/
598 | twitter_handle:
599 | locations:
600 | - address: 232-234 Dorcas St, South Melbourne, Victoria, Australia
601 | - name: Vanruby
602 | type: meetup
603 | url: http://vanruby.org
604 | locations:
605 | - address: Vancouver, BC, Canada
606 | - name: Vidyard
607 | type: business
608 | url: https://www.vidyard.com/
609 | locations:
610 | - address: 8 Queen St N, Kitchener, Ontario, Canada
611 | - name: Wealthsimple
612 | type: business
613 | url: https://www.wealthsimple.com/about/work-with-us
614 | locations:
615 | - address: Toronto, Ontario, Canada
616 | - name: Youse
617 | type: business
618 | url: https://www.youse.com.br
619 | locations:
620 | - address: SHN, Quadra 01, Conjunto A, Bloco E, CEP 70701 050 – Brasília DF
621 | - address: Cl 93 19-55, Bogotá
622 | - name: Zendesk
623 | type: business
624 | url: https://www.zendesk.com
625 | twitter_handle: Zendesk
626 | locations:
627 | - address: 395 Collins St, Melbourne, Victoria, Australia
628 | - name: Zepto
629 | type: business
630 | url: https://www.zepto.com.au
631 | locations:
632 | - address: 2/66 Centennial Cct, Byron Bay, New South Wales, Australia
633 | - name: Bookwhen
634 | type: business
635 | url: https://bookwhen.com
636 | locations:
637 | - address: Belsyre Court, 57 Woodstock Road, Oxford, OX2 6HJ
638 | - name: OxRUG
639 | type: meetup
640 | url: https://www.meetup.com/Oxford-Ruby-Users-Group-OxRUG
641 | locations:
642 | - address: 40 Holywell St, Oxford, OX1 3SP
643 | - name: Arlington Ruby
644 | type: meetup
645 | url: https://www.meetup.com/Arlington-Ruby/
646 | locations:
647 | - address: 2300 Wilson Blvd, Arlington, VA, USA
648 | - name: Ruby for Good
649 | type: event
650 | url: https://rubyforgood.org
651 | locations:
652 | - address: 4400 University Drive, Fairfax, VA, 22030, USA
653 | - name: Radius Networks
654 | type: business
655 | url: https://www.radiusnetworks.com
656 | locations:
657 | - address: 3255 Grace St NW, Washington, DC, 20007, USA
658 | - name: sum.cumo GmbH
659 | type: business
660 | url: https://www.sumcumo.com
661 | locations:
662 | - address: Schäferkampsallee 16, 20357 Hamburg, Germany
663 | - address: Speditionstraße 1, 40221 Düsseldorf, Germany
664 | - name: Ruby Usergroup Hamburg
665 | type: meetup
666 | url: https://hamburg.onruby.de/
667 | locations:
668 | - address: Hamburg, Germany
669 | - name: Ideamotive - Ruby on Rails development
670 | type: business
671 | url: https://ideamotive.co
672 | locations:
673 | - address: ul. Bohomolca 15, 01-613 Warsaw
674 | - name: Rzeszów Ruby User Group
675 | type: meetup
676 | url: http://rrug.pl/
677 | locations:
678 | - address: Rzeszów, Poland
679 | - name: Guava
680 | type: business
681 | url: https://guava.software
682 | locations:
683 | - address: R. Alfredo Coutinho, 74 - Poço da Panela, Recife, Pernambuco, Brasil
684 | - name: RUG::B - Berlin Ruby User Group
685 | type: meetup
686 | url: https://www.rug-b.de/
687 | locations:
688 | - address: Berlin, Germany
689 | - name: cologne.rb - Cologne Ruby User Group
690 | type: meetup
691 | url: https://cologne.onruby.de/
692 | locations:
693 | - address: Cologne, Germany
694 | - name: RubyZG
695 | type: meetup
696 | url: https://www.meetup.com/rubyzg/
697 | locations:
698 | - address: Zagreb, Croatia
699 | - name: Ruby Meetup Frankfurt
700 | type: meetup
701 | url: https://www.ruby-frankfurt.de
702 | locations:
703 | - address: Frankfurt, Germany
704 | - name: makandra GmbH
705 | type: business
706 | url: https://makandra.com
707 | locations:
708 | - address: Werner-von-Siemens-Str. 6, 86159 Augsburg, Germany
709 | - name: Ruby a la Cluj
710 | type: meetup
711 | url: https://www.meetup.com/en/Ruby-a-la-Cluj/
712 | locations:
713 | - address: Cluj-Napoca, Romania
714 | - name: Codest
715 | type: business
716 | url: https://codesthq.com
717 | twitter_handle: Codesthq
718 | locations:
719 | - address: ul. Fabryczna 20A, 31-553 Kraków, Poland
720 | - name: Stitch Fix
721 | type: business
722 | url: https://www.stitchfix.com
723 | twitter_handle: stitchfix
724 | locations:
725 | - address: 1 Montgomery Tower, San Francisco, CA 94104, USA
726 | - name: Bigger Pockets
727 | type: business
728 | url: https://www.biggerpockets.com
729 | twitter_handle: biggerpockets
730 | locations:
731 | - address: 3344 Walnut St, Denver, CO 80205, USA
732 | - name: Rapid River Software
733 | type: business
734 | url: https://www.rrsoft.co
735 | twitter_handle: rapidriversw
736 | locations:
737 | - address: 25-02 Tower A, Vertical Business Suites, Avenue 3 Bangsar South City, 59200 Kuala Lumpur, Malaysia
738 | - name: WeCode
739 | type: business
740 | url: https://wecode.io/en
741 | twitter_handle: wecodeio
742 | locations:
743 | - address: Bme. Mitre 87, Ramos Mejía, Buenos Aires, Argentina
744 | - name: Hamada.rb
745 | type: meetup
746 | url: https://hamada-rb.github.io/hamadarb/
747 | locations:
748 | - address: Hamada, Shimane, Japan
749 | - name: SwitchDreams
750 | type: business
751 | url: https://www.switchdreams.com.br/
752 | locations:
753 | - address: SHCGN 502 Bloco B - Asa Norte, Brasília - DF, 70720-502
754 | - name: adigi GmbH
755 | type: business
756 | url: https://www.adigi.ai/
757 | twitter_handle: adigi_ai
758 | locations:
759 | - address: Schulstraße 5, 92711 Parkstein, Germany
760 |
--------------------------------------------------------------------------------
/db/migrate/20190324164417_create_organizations.rb:
--------------------------------------------------------------------------------
1 | class CreateOrganizations < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :organizations do |t|
4 | t.string :name
5 |
6 | t.timestamps
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20190324164516_enable_postgis.rb:
--------------------------------------------------------------------------------
1 | class EnablePostgis < ActiveRecord::Migration[7.0]
2 | def change
3 | enable_extension "postgis"
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190324164517_create_locations.rb:
--------------------------------------------------------------------------------
1 | class CreateLocations < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :locations do |t|
4 | t.string :address
5 | t.references :organization, foreign_key: true
6 | t.st_point :coords, geographic: true
7 |
8 | t.timestamps
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/migrate/20190420081021_add_org_type_and_url_to_organization.rb:
--------------------------------------------------------------------------------
1 | class AddOrgTypeAndUrlToOrganization < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :organizations, :org_type, :string
4 | add_column :organizations, :url, :string
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20190502144412_add_twitter_handle_to_organizations.rb:
--------------------------------------------------------------------------------
1 | class AddTwitterHandleToOrganizations < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :organizations, :twitter_handle, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is auto-generated from the current state of the database. Instead
2 | # of editing this file, please use the migrations feature of Active Record to
3 | # incrementally modify your database, and then regenerate this schema definition.
4 | #
5 | # This file is the source Rails uses to define your schema when running `bin/rails
6 | # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7 | # be faster and is potentially less error prone than running all of your
8 | # migrations from scratch. Old migrations may fail to apply correctly if those
9 | # migrations use external dependencies or application code.
10 | #
11 | # It's strongly recommended that you check this file into your version control system.
12 |
13 | ActiveRecord::Schema[7.0].define(version: 2022_08_26_075536) do
14 | # These are extensions that must be enabled in order to support this database
15 | enable_extension "plpgsql"
16 | enable_extension "postgis"
17 |
18 | create_table "locations", force: :cascade do |t|
19 | t.string "address"
20 | t.bigint "organization_id"
21 | t.geography "coords", limit: {:srid=>4326, :type=>"st_point", :geographic=>true}
22 | t.datetime "created_at", precision: nil, null: false
23 | t.datetime "updated_at", precision: nil, null: false
24 | t.index ["organization_id"], name: "index_locations_on_organization_id"
25 | end
26 |
27 | create_table "organizations", force: :cascade do |t|
28 | t.string "name"
29 | t.datetime "created_at", precision: nil, null: false
30 | t.datetime "updated_at", precision: nil, null: false
31 | t.string "org_type"
32 | t.string "url"
33 | t.string "twitter_handle"
34 | end
35 |
36 | add_foreign_key "locations", "organizations"
37 | end
38 |
--------------------------------------------------------------------------------
/db/seeds.rb:
--------------------------------------------------------------------------------
1 | Location.destroy_all
2 | Organization.destroy_all
3 |
4 | Seeds::Organization.import
5 |
--------------------------------------------------------------------------------
/lib/assets/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/lib/assets/.keep
--------------------------------------------------------------------------------
/lib/tasks/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/lib/tasks/.keep
--------------------------------------------------------------------------------
/lib/tasks/release.rake:
--------------------------------------------------------------------------------
1 | task release: :environment do
2 | Rake::Task['db:migrate'].invoke
3 | Rake::Task['db:seed'].invoke
4 | end
--------------------------------------------------------------------------------
/lib/tasks/yamllint.rake:
--------------------------------------------------------------------------------
1 | require "yamllint/rake_task"
2 |
3 | YamlLint::RakeTask.new do |t|
4 | t.paths = %w(
5 | data/**/*.yml
6 | )
7 | end
8 |
--------------------------------------------------------------------------------
/log/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/log/.keep
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "rubymap",
3 | "private": true,
4 | "dependencies": {
5 | "sass": "^1.70.0"
6 | },
7 | "devDependencies": {},
8 | "scripts": {
9 | "build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [
3 | require('postcss-import'),
4 | require('postcss-flexbugs-fixes'),
5 | require('postcss-preset-env')({
6 | autoprefixer: {
7 | flexbox: 'no-2009'
8 | },
9 | stage: 3
10 | })
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The page you were looking for doesn't exist (404)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The page you were looking for doesn't exist.
62 |
You may have mistyped the address or the page may have moved.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/422.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The change you wanted was rejected (422)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The change you wanted was rejected.
62 |
Maybe you tried to change something you didn't have access to.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | We're sorry, but something went wrong (500)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
We're sorry, but something went wrong.
62 |
63 |
If you are the application owner check the logs for more information.
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/render.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | - type: web
3 | name: rubymap-web
4 | env: ruby
5 | region: frankfurt
6 | plan: starter
7 | numInstances: 1
8 | buildCommand: ./bin/render-build.sh
9 | startCommand: bundle exec puma -C config/puma.rb
10 | domains:
11 | - www.rubymap.com
12 | envVars:
13 | - key: DATABASE_URL
14 | fromDatabase:
15 | name: rubymap-db
16 | property: connectionString
17 | - key: GOOGLE_MAPS_API_KEY
18 | sync: false
19 | - key: RAILS_MASTER_KEY
20 | sync: false
21 |
22 | - type: redis
23 | plan: free
24 | name: rubymap-redis
25 | ipAllowList: [] # only allow internal connections
26 |
27 | databases:
28 | - name: rubymap-db
29 | plan: free
30 | region: frankfurt
31 |
--------------------------------------------------------------------------------
/spec/controllers/locations_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | RSpec.describe LocationsController do
4 | describe "GET #index" do
5 | it "renders the index template" do
6 | get :index
7 | expect(response).to render_template("index")
8 | end
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/spec/factories/location_factory.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :location do
3 | association :organization
4 | address { "Bristol, UK" }
5 | end
6 | end
--------------------------------------------------------------------------------
/spec/factories/organization_factory.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :organization do
3 | name { "My Org" }
4 | org_type { :meetup }
5 | url { "https://www.example.com" }
6 | twitter_handle { "example" }
7 | end
8 | end
--------------------------------------------------------------------------------
/spec/models/location_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | RSpec.describe Location, type: :model do
4 | let(:location) { create(:location) }
5 |
6 | describe "callbacks" do
7 | it "adds entropy to coordinates to prevent collisions" do
8 | allow(Geocoder).to receive(:search).and_return([double(coordinates: [1.123456, 2.123456])])
9 |
10 | expect(location.coords.coordinates).to include(a_value_within(0.001).of(2.123456), 1.123456)
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/spec/models/seeds/organization_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | RSpec.describe Seeds::Organization do
4 | before do
5 | allow(Geocoder).to receive(:search).and_return([double(coordinates: [0, 0])])
6 | end
7 |
8 | describe '.import' do
9 | it "imports organizations" do
10 | Seeds::Organization.import
11 | expect(Organization.all).to include an_object_having_attributes(name: "Cookpad", twitter_handle: "cookpad_dev")
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/spec/rails_helper.rb:
--------------------------------------------------------------------------------
1 | # This file is copied to spec/ when you run 'rails generate rspec:install'
2 | require 'spec_helper'
3 | ENV['RAILS_ENV'] ||= 'test'
4 | require File.expand_path('../../config/environment', __FILE__)
5 | # Prevent database truncation if the environment is production
6 | abort("The Rails environment is running in production mode!") if Rails.env.production?
7 | require 'rspec/rails'
8 | # Add additional requires below this line. Rails is not loaded until this point!
9 |
10 | Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
11 |
12 | # Checks for pending migrations and applies them before tests are run.
13 | # If you are not using ActiveRecord, you can remove these lines.
14 | begin
15 | ActiveRecord::Migration.maintain_test_schema!
16 | rescue ActiveRecord::PendingMigrationError => e
17 | puts e.to_s.strip
18 | exit 1
19 | end
20 | RSpec.configure do |config|
21 | # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
22 | config.fixture_path = "#{::Rails.root}/spec/fixtures"
23 |
24 | # If you're not using ActiveRecord, or you'd prefer not to run each of your
25 | # examples within a transaction, remove the following line or assign false
26 | # instead of true.
27 | config.use_transactional_fixtures = true
28 |
29 | # RSpec Rails can automatically mix in different behaviours to your tests
30 | # based on their file location, for example enabling you to call `get` and
31 | # `post` in specs under `spec/controllers`.
32 | #
33 | # You can disable this behaviour by removing the line below, and instead
34 | # explicitly tag your specs with their type, e.g.:
35 | #
36 | # RSpec.describe UsersController, :type => :controller do
37 | # # ...
38 | # end
39 | #
40 | # The different available types are documented in the features, such as in
41 | # https://relishapp.com/rspec/rspec-rails/docs
42 | config.infer_spec_type_from_file_location!
43 |
44 | # Filter lines from Rails gems in backtraces.
45 | config.filter_rails_from_backtrace!
46 | # arbitrary gems may also be filtered via:
47 | # config.filter_gems_from_backtrace("gem name")
48 | end
49 |
--------------------------------------------------------------------------------
/spec/requests/locations_spec.rb:
--------------------------------------------------------------------------------
1 | require "rails_helper"
2 |
3 | RSpec.describe "Location" do
4 | it "returns json" do
5 | get "/locations.json"
6 | expect_json_response("type").to eq("FeatureCollection")
7 | end
8 | end
--------------------------------------------------------------------------------
/spec/spec_helper.rb:
--------------------------------------------------------------------------------
1 | # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3 | # The generated `.rspec` file contains `--require spec_helper` which will cause
4 | # this file to always be loaded, without a need to explicitly require it in any
5 | # files.
6 | #
7 | # Given that it is always loaded, you are encouraged to keep this file as
8 | # light-weight as possible. Requiring heavyweight dependencies from this file
9 | # will add to the boot time of your test suite on EVERY test run, even for an
10 | # individual file that may not need all of that loaded. Instead, consider making
11 | # a separate helper file that requires the additional dependencies and performs
12 | # the additional setup, and require it from the spec files that actually need
13 | # it.
14 | #
15 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16 | RSpec.configure do |config|
17 | # rspec-expectations config goes here. You can use an alternate
18 | # assertion/expectation library such as wrong or the stdlib/minitest
19 | # assertions if you prefer.
20 | config.expect_with :rspec do |expectations|
21 | # This option will default to `true` in RSpec 4. It makes the `description`
22 | # and `failure_message` of custom matchers include text for helper methods
23 | # defined using `chain`, e.g.:
24 | # be_bigger_than(2).and_smaller_than(4).description
25 | # # => "be bigger than 2 and smaller than 4"
26 | # ...rather than:
27 | # # => "be bigger than 2"
28 | expectations.include_chain_clauses_in_custom_matcher_descriptions = true
29 | end
30 |
31 | # rspec-mocks config goes here. You can use an alternate test double
32 | # library (such as bogus or mocha) by changing the `mock_with` option here.
33 | config.mock_with :rspec do |mocks|
34 | # Prevents you from mocking or stubbing a method that does not exist on
35 | # a real object. This is generally recommended, and will default to
36 | # `true` in RSpec 4.
37 | mocks.verify_partial_doubles = true
38 | end
39 |
40 | # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
41 | # have no way to turn it off -- the option exists only for backwards
42 | # compatibility in RSpec 3). It causes shared context metadata to be
43 | # inherited by the metadata hash of host groups and examples, rather than
44 | # triggering implicit auto-inclusion in groups with matching metadata.
45 | config.shared_context_metadata_behavior = :apply_to_host_groups
46 |
47 | # The settings below are suggested to provide a good initial experience
48 | # with RSpec, but feel free to customize to your heart's content.
49 | =begin
50 | # This allows you to limit a spec run to individual examples or groups
51 | # you care about by tagging them with `:focus` metadata. When nothing
52 | # is tagged with `:focus`, all examples get run. RSpec also provides
53 | # aliases for `it`, `describe`, and `context` that include `:focus`
54 | # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
55 | config.filter_run_when_matching :focus
56 |
57 | # Allows RSpec to persist some state between runs in order to support
58 | # the `--only-failures` and `--next-failure` CLI options. We recommend
59 | # you configure your source control system to ignore this file.
60 | config.example_status_persistence_file_path = "spec/examples.txt"
61 |
62 | # Limits the available syntax to the non-monkey patched syntax that is
63 | # recommended. For more details, see:
64 | # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
65 | # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
66 | # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
67 | config.disable_monkey_patching!
68 |
69 | # Many RSpec users commonly either run the entire suite or an individual
70 | # file, and it's useful to allow more verbose output when running an
71 | # individual spec file.
72 | if config.files_to_run.one?
73 | # Use the documentation formatter for detailed output,
74 | # unless a formatter has already been configured
75 | # (e.g. via a command-line flag).
76 | config.default_formatter = "doc"
77 | end
78 |
79 | # Print the 10 slowest examples and example groups at the
80 | # end of the spec run, to help surface which specs are running
81 | # particularly slow.
82 | config.profile_examples = 10
83 |
84 | # Run specs in random order to surface order dependencies. If you find an
85 | # order dependency and want to debug it, you can fix the order by providing
86 | # the seed, which is printed after each run.
87 | # --seed 1234
88 | config.order = :random
89 |
90 | # Seed global randomization in this process using the `--seed` CLI option.
91 | # Setting this allows you to use `--seed` to deterministically reproduce
92 | # test failures related to randomization by passing the same `--seed` value
93 | # as the one that triggered the failure.
94 | Kernel.srand config.seed
95 | =end
96 | end
97 |
--------------------------------------------------------------------------------
/spec/support/factory_bot.rb:
--------------------------------------------------------------------------------
1 | RSpec.configure do |config|
2 | config.include FactoryBot::Syntax::Methods
3 | end
--------------------------------------------------------------------------------
/spec/support/utensils.rb:
--------------------------------------------------------------------------------
1 | # require 'utensils/capybara_extensions'
2 | # require 'utensils/capybara_javascript'
3 | # require 'utensils/capybara_screenshot'
4 | require 'utensils/json'
5 | # require 'utensils/database_cleaner'
6 | # require 'utensils/email'
7 | # require 'utensils/factory_bot'
8 | # require 'utensils/omniauth'
9 | # require 'utensils/timecop'
10 | # require 'utensils/upload_macros'
11 | # require 'utensils/vcr'
12 |
--------------------------------------------------------------------------------
/storage/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/storage/.keep
--------------------------------------------------------------------------------
/test/application_system_test_case.rb:
--------------------------------------------------------------------------------
1 | require "test_helper"
2 |
3 | class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4 | driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5 | end
6 |
--------------------------------------------------------------------------------
/test/controllers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/controllers/.keep
--------------------------------------------------------------------------------
/test/fixtures/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/fixtures/.keep
--------------------------------------------------------------------------------
/test/fixtures/files/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/fixtures/files/.keep
--------------------------------------------------------------------------------
/test/helpers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/helpers/.keep
--------------------------------------------------------------------------------
/test/integration/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/integration/.keep
--------------------------------------------------------------------------------
/test/mailers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/mailers/.keep
--------------------------------------------------------------------------------
/test/models/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/models/.keep
--------------------------------------------------------------------------------
/test/system/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/test/system/.keep
--------------------------------------------------------------------------------
/test/test_helper.rb:
--------------------------------------------------------------------------------
1 | ENV["RAILS_ENV"] ||= "test"
2 | require_relative "../config/environment"
3 | require "rails/test_help"
4 |
5 | class ActiveSupport::TestCase
6 | # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
7 | fixtures :all
8 |
9 | # Add more helper methods to be used by all tests here...
10 | end
11 |
--------------------------------------------------------------------------------
/tmp/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/tmp/.keep
--------------------------------------------------------------------------------
/vendor/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/vendor/.keep
--------------------------------------------------------------------------------
/vendor/javascript/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lewispb/rubymap/80eec6e630542abe8b951041ee285cc8044d6296/vendor/javascript/.keep
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | anymatch@~3.1.2:
6 | version "3.1.2"
7 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
8 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
9 | dependencies:
10 | normalize-path "^3.0.0"
11 | picomatch "^2.0.4"
12 |
13 | binary-extensions@^2.0.0:
14 | version "2.1.0"
15 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
16 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
17 |
18 | braces@~3.0.2:
19 | version "3.0.2"
20 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
21 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
22 | dependencies:
23 | fill-range "^7.0.1"
24 |
25 | "chokidar@>=3.0.0 <4.0.0":
26 | version "3.5.3"
27 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
28 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
29 | dependencies:
30 | anymatch "~3.1.2"
31 | braces "~3.0.2"
32 | glob-parent "~5.1.2"
33 | is-binary-path "~2.1.0"
34 | is-glob "~4.0.1"
35 | normalize-path "~3.0.0"
36 | readdirp "~3.6.0"
37 | optionalDependencies:
38 | fsevents "~2.3.2"
39 |
40 | fill-range@^7.0.1:
41 | version "7.0.1"
42 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
43 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
44 | dependencies:
45 | to-regex-range "^5.0.1"
46 |
47 | fsevents@~2.3.2:
48 | version "2.3.2"
49 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
50 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
51 |
52 | glob-parent@~5.1.2:
53 | version "5.1.2"
54 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
55 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
56 | dependencies:
57 | is-glob "^4.0.1"
58 |
59 | immutable@^4.0.0:
60 | version "4.1.0"
61 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
62 | integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
63 |
64 | is-binary-path@~2.1.0:
65 | version "2.1.0"
66 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
67 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
68 | dependencies:
69 | binary-extensions "^2.0.0"
70 |
71 | is-extglob@^2.1.1:
72 | version "2.1.1"
73 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
74 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
75 |
76 | is-glob@^4.0.1, is-glob@~4.0.1:
77 | version "4.0.1"
78 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
79 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
80 | dependencies:
81 | is-extglob "^2.1.1"
82 |
83 | is-number@^7.0.0:
84 | version "7.0.0"
85 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
86 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
87 |
88 | normalize-path@^3.0.0, normalize-path@~3.0.0:
89 | version "3.0.0"
90 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
91 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
92 |
93 | picomatch@^2.0.4, picomatch@^2.2.1:
94 | version "2.2.2"
95 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
96 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
97 |
98 | readdirp@~3.6.0:
99 | version "3.6.0"
100 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
101 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
102 | dependencies:
103 | picomatch "^2.2.1"
104 |
105 | sass@^1.70.0:
106 | version "1.70.0"
107 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.70.0.tgz#761197419d97b5358cb25f9dd38c176a8a270a75"
108 | integrity sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==
109 | dependencies:
110 | chokidar ">=3.0.0 <4.0.0"
111 | immutable "^4.0.0"
112 | source-map-js ">=0.6.2 <2.0.0"
113 |
114 | "source-map-js@>=0.6.2 <2.0.0":
115 | version "1.0.2"
116 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
117 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
118 |
119 | to-regex-range@^5.0.1:
120 | version "5.0.1"
121 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
122 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
123 | dependencies:
124 | is-number "^7.0.0"
125 |
--------------------------------------------------------------------------------