neeto-commons-backend 1.0.89
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.eslintignore +14 -0
- data/.eslintrc.js +87 -0
- data/.husky/helpers/verify_neeto_audit.sh +18 -0
- data/.husky/pre-push +5 -0
- data/.neetoci/neetoci.yml +26 -0
- data/.prettierrc.js +15 -0
- data/.rubocop.yml +626 -0
- data/.ruby-version +1 -0
- data/.semaphore/semaphore.yml +32 -0
- data/.semaphore/staging-deploy.yml +23 -0
- data/Gemfile +92 -0
- data/Gemfile.lock +461 -0
- data/README.md +286 -0
- data/Rakefile +18 -0
- data/app/controllers/api/base_controller.rb +6 -0
- data/app/controllers/neeto_commons_backend/api/base_controller.rb +9 -0
- data/app/controllers/neeto_commons_backend/api/direct_uploads_controller.rb +57 -0
- data/app/controllers/neeto_commons_backend/app_versions_controller.rb +20 -0
- data/app/controllers/neeto_commons_backend/failures_controller.rb +29 -0
- data/app/controllers/neeto_commons_backend/health_check_controller.rb +9 -0
- data/app/controllers/neeto_commons_backend/well_knowns_controller.rb +13 -0
- data/app/mailers/neeto_commons_backend/application_mailer.rb +22 -0
- data/app/models/concerns/neeto_commons_backend/sluggable.rb +27 -0
- data/app/models/concerns/neeto_commons_backend/soft_deletable.rb +20 -0
- data/app/services/neeto_commons_backend/sample_data/common/admin_service.rb +26 -0
- data/app/services/neeto_commons_backend/sample_data/common/app_organization_service.rb +11 -0
- data/app/services/neeto_commons_backend/sample_data/common/base.rb +49 -0
- data/app/services/neeto_commons_backend/sample_data/common/database_cleanup_service.rb +13 -0
- data/app/services/neeto_commons_backend/sample_data/common/loader_service.rb +30 -0
- data/app/services/neeto_commons_backend/sample_data/common/neeto_team_members_service.rb +16 -0
- data/app/services/neeto_commons_backend/sample_data/common/organization_base.rb +36 -0
- data/app/services/neeto_commons_backend/sample_data/common/organization_service.rb +11 -0
- data/app/services/neeto_commons_backend/source_map_publish_service.rb +47 -0
- data/app/views/neeto_commons_backend/failures/show.html.erb +1 -0
- data/app/views/shared/_common.html.erb +8 -0
- data/app/views/shared/_neeto_engineering_replay_widget.html.erb +31 -0
- data/app/views/shared/_neeto_widget.html.erb +30 -0
- data/app/workers/neeto_commons_backend/base_workers/auth.rb +9 -0
- data/app/workers/neeto_commons_backend/base_workers/base.rb +52 -0
- data/app/workers/neeto_commons_backend/base_workers/default.rb +8 -0
- data/app/workers/neeto_commons_backend/base_workers/low.rb +9 -0
- data/app/workers/neeto_commons_backend/base_workers/urgent.rb +9 -0
- data/app/workers/neeto_commons_backend/purge_unattached_files_worker.rb +11 -0
- data/babel.config.js +47 -0
- data/bin/console +15 -0
- data/bin/rails +16 -0
- data/bin/setup +8 -0
- data/config/brakeman.ignore +52 -0
- data/config/locales/en.yml +5 -0
- data/docs/carriers/README.md +5 -0
- data/docs/controller_concerns/README.md +34 -0
- data/docs/controllers/README.md +27 -0
- data/docs/gemfiles/README.md +5 -0
- data/docs/helpers/README.md +21 -0
- data/docs/mailers/README.md +5 -0
- data/docs/model_concerns/README.md +39 -0
- data/docs/routes/README.md +44 -0
- data/docs/scripts/README.md +5 -0
- data/docs/semaphore/README.md +5 -0
- data/docs/services/README.md +23 -0
- data/docs/workers/README.md +32 -0
- data/docs/workflows/README.md +9 -0
- data/lib/Rakefile +4 -0
- data/lib/neeto-commons-backend.rb +62 -0
- data/lib/neeto_commons_backend/.circleci/config.yml +84 -0
- data/lib/neeto_commons_backend/.slugignore +17 -0
- data/lib/neeto_commons_backend/carriers/app_url_carrier.rb +71 -0
- data/lib/neeto_commons_backend/common_files/.bundler-version +1 -0
- data/lib/neeto_commons_backend/common_files/.editorconfig +10 -0
- data/lib/neeto_commons_backend/common_files/.erb-lint.yml +20 -0
- data/lib/neeto_commons_backend/common_files/.eslintignore +14 -0
- data/lib/neeto_commons_backend/common_files/.eslintrc.js +2 -0
- data/lib/neeto_commons_backend/common_files/.gitignore +132 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/lint_staged.sh +5 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/prevent_conflict_markers.sh +35 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/prevent_pushing_to_main.sh +24 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/verify_neeto_audit.sh +17 -0
- data/lib/neeto_commons_backend/common_files/.husky/pre-commit +9 -0
- data/lib/neeto_commons_backend/common_files/.husky/pre-push +7 -0
- data/lib/neeto_commons_backend/common_files/.node-version +1 -0
- data/lib/neeto_commons_backend/common_files/.nvmrc +1 -0
- data/lib/neeto_commons_backend/common_files/.postcssrc.yml +6 -0
- data/lib/neeto_commons_backend/common_files/.prettierrc.js +1 -0
- data/lib/neeto_commons_backend/common_files/.rubocop.yml +625 -0
- data/lib/neeto_commons_backend/common_files/.ruby-version +1 -0
- data/lib/neeto_commons_backend/common_files/.semaphore/commands/run_eslint_on_modified_files.sh +5 -0
- data/lib/neeto_commons_backend/common_files/.vscode/extensions.json +10 -0
- data/lib/neeto_commons_backend/common_files/.vscode/settings.json +21 -0
- data/lib/neeto_commons_backend/common_files/Dockerfile.dev +50 -0
- data/lib/neeto_commons_backend/common_files/app/javascript/jsconfig.json +62 -0
- data/lib/neeto_commons_backend/common_files/app/javascript/src/types.d.ts +36 -0
- data/lib/neeto_commons_backend/common_files/babel.config.js +1 -0
- data/lib/neeto_commons_backend/common_files/bin/bundle +5 -0
- data/lib/neeto_commons_backend/common_files/bin/rails +6 -0
- data/lib/neeto_commons_backend/common_files/bin/rake +6 -0
- data/lib/neeto_commons_backend/common_files/bin/setup +40 -0
- data/lib/neeto_commons_backend/common_files/bin/update +33 -0
- data/lib/neeto_commons_backend/common_files/bin/webpacker +17 -0
- data/lib/neeto_commons_backend/common_files/bin/webpacker-dev-server +17 -0
- data/lib/neeto_commons_backend/common_files/bin/yarn +19 -0
- data/lib/neeto_commons_backend/common_files/cypress-tests/.eslintrc.js +57 -0
- data/lib/neeto_commons_backend/common_files/cypress-tests/cypress/plugins/index.js +63 -0
- data/lib/neeto_commons_backend/common_files/github/workflows/auto_update_prs_with_latest_master.yml +21 -0
- data/lib/neeto_commons_backend/common_files/neeto_gems/github/workflows/bump_version.yml +51 -0
- data/lib/neeto_commons_backend/common_files/newrelic.yml +31 -0
- data/lib/neeto_commons_backend/common_files/package-common.json +119 -0
- data/lib/neeto_commons_backend/common_files/roles.yml +34 -0
- data/lib/neeto_commons_backend/common_files/semaphore/semaphore.yml +58 -0
- data/lib/neeto_commons_backend/common_files/sitemap.xml +15 -0
- data/lib/neeto_commons_backend/common_files/test/support/assertion_support.rb +9 -0
- data/lib/neeto_commons_backend/common_files/webpacker.yml +90 -0
- data/lib/neeto_commons_backend/config/secrets.yml +169 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_exceptions.rb +83 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_helpers.rb +9 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_responders.rb +33 -0
- data/lib/neeto_commons_backend/controllers/concerns/authenticatable.rb +51 -0
- data/lib/neeto_commons_backend/controllers/concerns/honeybadger_context.rb +17 -0
- data/lib/neeto_commons_backend/controllers/concerns/store_user_location.rb +23 -0
- data/lib/neeto_commons_backend/cypress/cypress.review.json +13 -0
- data/lib/neeto_commons_backend/cypress/jsconfig.json +17 -0
- data/lib/neeto_commons_backend/cypress/package.json +51 -0
- data/lib/neeto_commons_backend/cypress/resolve.js +16 -0
- data/lib/neeto_commons_backend/cypress/webpack.config.js +21 -0
- data/lib/neeto_commons_backend/engine.rb +6 -0
- data/lib/neeto_commons_backend/environments/application.rb +33 -0
- data/lib/neeto_commons_backend/environments/development.rb +46 -0
- data/lib/neeto_commons_backend/environments/heroku.rb +35 -0
- data/lib/neeto_commons_backend/environments/production.rb +45 -0
- data/lib/neeto_commons_backend/environments/staging.rb +43 -0
- data/lib/neeto_commons_backend/environments/test.rb +29 -0
- data/lib/neeto_commons_backend/gemfiles/Gemfile.common.rb +240 -0
- data/lib/neeto_commons_backend/helpers/auth_server_api.rb +92 -0
- data/lib/neeto_commons_backend/helpers/favicon.rb +18 -0
- data/lib/neeto_commons_backend/helpers/global_props.rb +76 -0
- data/lib/neeto_commons_backend/helpers/neeto_widget_helper.rb +19 -0
- data/lib/neeto_commons_backend/helpers/test_helper.rb +90 -0
- data/lib/neeto_commons_backend/initializers/_enable_extension_hack.rb +32 -0
- data/lib/neeto_commons_backend/initializers/assets.rb +11 -0
- data/lib/neeto_commons_backend/initializers/bullet.rb +26 -0
- data/lib/neeto_commons_backend/initializers/cache_store.rb +27 -0
- data/lib/neeto_commons_backend/initializers/common.rb +33 -0
- data/lib/neeto_commons_backend/initializers/cookies_serializer.rb +11 -0
- data/lib/neeto_commons_backend/initializers/cors.rb +16 -0
- data/lib/neeto_commons_backend/initializers/database_cleaner.rb +11 -0
- data/lib/neeto_commons_backend/initializers/datetime.rb +14 -0
- data/lib/neeto_commons_backend/initializers/email_setup.rb +25 -0
- data/lib/neeto_commons_backend/initializers/filter_parameter_logging.rb +11 -0
- data/lib/neeto_commons_backend/initializers/honeybadger.rb +23 -0
- data/lib/neeto_commons_backend/initializers/kaminari_config.rb +13 -0
- data/lib/neeto_commons_backend/initializers/mime_types.rb +12 -0
- data/lib/neeto_commons_backend/initializers/mini_profiler.rb +14 -0
- data/lib/neeto_commons_backend/initializers/neeto_email_prefixer.rb +40 -0
- data/lib/neeto_commons_backend/initializers/neeto_mail_interceptor.rb +35 -0
- data/lib/neeto_commons_backend/initializers/post_compilation.rb +17 -0
- data/lib/neeto_commons_backend/initializers/rack_attack.rb +38 -0
- data/lib/neeto_commons_backend/initializers/rack_deflater.rb +11 -0
- data/lib/neeto_commons_backend/initializers/rack_timeout.rb +15 -0
- data/lib/neeto_commons_backend/initializers/rails_email_preview.rb +21 -0
- data/lib/neeto_commons_backend/initializers/redis_client_patch.rb +18 -0
- data/lib/neeto_commons_backend/initializers/remove_backtrace_silencers.rb +11 -0
- data/lib/neeto_commons_backend/initializers/session_store.rb +21 -0
- data/lib/neeto_commons_backend/initializers/shared_redis.rb +13 -0
- data/lib/neeto_commons_backend/initializers/sidekiq.rb +46 -0
- data/lib/neeto_commons_backend/initializers/strong_migrations.rb +13 -0
- data/lib/neeto_commons_backend/initializers/wrap_parameters.rb +13 -0
- data/lib/neeto_commons_backend/models/concerns/devise_validator.rb +19 -0
- data/lib/neeto_commons_backend/railtie.rb +20 -0
- data/lib/neeto_commons_backend/routes/catch_all.rb +9 -0
- data/lib/neeto_commons_backend/routes/devise.rb +16 -0
- data/lib/neeto_commons_backend/routes/direct_uploads.rb +9 -0
- data/lib/neeto_commons_backend/routes/draw.rb +29 -0
- data/lib/neeto_commons_backend/routes/email_previews.rb +5 -0
- data/lib/neeto_commons_backend/routes/errors.rb +7 -0
- data/lib/neeto_commons_backend/routes/health.rb +8 -0
- data/lib/neeto_commons_backend/routes/letter_opener.rb +5 -0
- data/lib/neeto_commons_backend/routes/sidekiq.rb +22 -0
- data/lib/neeto_commons_backend/routes/well_knowns.rb +10 -0
- data/lib/neeto_commons_backend/scripts/sync_with_wheel.sh +54 -0
- data/lib/neeto_commons_backend/secrets_management.rb +41 -0
- data/lib/neeto_commons_backend/services/custom_domain_service.rb +40 -0
- data/lib/neeto_commons_backend/tasks/assets.rake +27 -0
- data/lib/neeto_commons_backend/tasks/before_assets_precompile.rake +13 -0
- data/lib/neeto_commons_backend/tasks/simplecov_coverage.rake +25 -0
- data/lib/neeto_commons_backend/version.rb +5 -0
- data/neeto-commons-backend.gemspec +52 -0
- data/package.json +31 -0
- data/yarn.lock +2530 -0
- metadata +497 -0
data/README.md
ADDED
@@ -0,0 +1,286 @@
|
|
1
|
+
# NeetoCommonsBackend
|
2
|
+
|
3
|
+
NeetoCommonsBackend gem is responsible for handling common business logic that are used across the neeto applications and also store the common files like that are widely used in all neeto applications. NeetoCommonsBackend, together with [neetoCompliance](https://github.com/bigbinary/neeto-compliance) gem handles the standardisation of configuration stucture and code standard.
|
4
|
+
|
5
|
+
|
6
|
+
All the controllers, concerns, services, helpers, views defined in neeto-commons-backend gem are as follows:
|
7
|
+
|
8
|
+
<table>
|
9
|
+
<thead>
|
10
|
+
<tr>
|
11
|
+
<th>
|
12
|
+
|
13
|
+
File name
|
14
|
+
|
15
|
+
</th>
|
16
|
+
<th>
|
17
|
+
|
18
|
+
Category
|
19
|
+
|
20
|
+
</th>
|
21
|
+
|
22
|
+
</tr>
|
23
|
+
</thead>
|
24
|
+
<tbody>
|
25
|
+
<tr>
|
26
|
+
<td>
|
27
|
+
|
28
|
+
- [NeetoCommonsBackend::Api::BaseController](./docs/controllers/README.md#neetocommonsbackendapibasecontroller)
|
29
|
+
- [NeetoCommonsBackend::Api::DirectUploadsController](./docs/controllers/README.md#neetocommonsbackendapidirectuploadscontroller)
|
30
|
+
- [NeetoCommonsBackend::AppVersionsController](./docs/controllers/README.md#neetocommonsbackendappversionscontroller)
|
31
|
+
- [NeetoCommonsBackend::FailuresController](./docs/controllers/README.md#neetocommonsbackendfailurescontroller)
|
32
|
+
- [NeetoCommonsBackend::HealthCheckController](./docs/controllers/README.md#neetocommonsbackendhealthcheckcontroller)
|
33
|
+
- [NeetoCommonsBackend::WellKnownsController](./docs/controllers/README.md#neetocommonsbackendwellknownscontroller)
|
34
|
+
|
35
|
+
</td>
|
36
|
+
<td>
|
37
|
+
|
38
|
+
[Controllers](./docs/controllers/README.md)
|
39
|
+
|
40
|
+
</td>
|
41
|
+
</tr>
|
42
|
+
<tr>
|
43
|
+
<td>
|
44
|
+
|
45
|
+
- [NeetoCommonsBackend::ApplicationMailer](./docs/mailers/README.md#neetocommonsbackendapplicationmailer)
|
46
|
+
|
47
|
+
</td>
|
48
|
+
<td>
|
49
|
+
|
50
|
+
[Mailers](./docs/mailers/README.md)
|
51
|
+
|
52
|
+
</td>
|
53
|
+
</tr>
|
54
|
+
<tr>
|
55
|
+
<td>
|
56
|
+
|
57
|
+
- [NeetoCommonsBackend::Sluggable](./docs/model_concerns/README.md#neetocommonsbackendsluggable)
|
58
|
+
- [NeetoCommonsBackend::SoftDeletable](./docs/model_concerns/README.md#neetocommonsbackendsoftdeletable)
|
59
|
+
- [NeetoCommonsBackend::DeviseValidator](./docs/model_concerns/README.md#neetocommonsbackenddevisevalidator)
|
60
|
+
|
61
|
+
</td>
|
62
|
+
<td>
|
63
|
+
|
64
|
+
[Model Concerns](./docs/model_concerns/README.md)
|
65
|
+
|
66
|
+
</td>
|
67
|
+
</tr>
|
68
|
+
<tr>
|
69
|
+
<td>
|
70
|
+
|
71
|
+
- [NeetoCommonsBackend::ApiHelpers](./docs/controller_concerns/README.md#neetocommonsbackendapihelpers)
|
72
|
+
- [NeetoCommonsBackend::ApiExceptions](./docs/controller_concerns/README.md#neetocommonsbackendapiexceptions)
|
73
|
+
- [NeetoCommonsBackend::ApiResponders](./docs/controller_concerns/README.md#neetocommonsbackendapiresponders)
|
74
|
+
- [NeetoCommonsBackend::HoneybadgerContext](./docs/controller_concerns/README.md#neetocommonsbackendhoneybadgercontext)
|
75
|
+
- [NeetoCommonsBackend::Authenticatable](./docs/controller_concerns/README.md#neetocommonsbackendauthenticatable)
|
76
|
+
- [NeetoCommonsBackend::StoreUserLocation](./docs/controller_concerns/README.md#neetocommonsbackendstoreuserlocation)
|
77
|
+
|
78
|
+
</td>
|
79
|
+
<td>
|
80
|
+
|
81
|
+
[Controller Concerns](./docs/controller_concerns/README.md)
|
82
|
+
|
83
|
+
</td>
|
84
|
+
</tr>
|
85
|
+
<tr>
|
86
|
+
<td>
|
87
|
+
|
88
|
+
- [NeetoCommonsBackend::BaseWorkers::Base](./docs/workers/README.md#neetocommonsbackendbaseworkersbase)
|
89
|
+
- [NeetoCommonsBackend::BaseWorkers::Auth](./docs/workers/README.md#neetocommonsbackendbaseworkersauth)
|
90
|
+
- [NeetoCommonsBackend::BaseWorkers::Default](./docs/workers/README.md#neetocommonsbackendbaseworkersdefault)
|
91
|
+
- [NeetoCommonsBackend::BaseWorkers::Low](./docs/workers/README.md#neetocommonsbackendbaseworkerslow)
|
92
|
+
- [NeetoCommonsBackend::BaseWorkers::Urgent](./docs/workers/README.md#neetocommonsbackendbaseworkersurgent)
|
93
|
+
|
94
|
+
</td>
|
95
|
+
<td>
|
96
|
+
|
97
|
+
[Workers](./docs/workers/README.md)
|
98
|
+
|
99
|
+
</td>
|
100
|
+
</tr>
|
101
|
+
|
102
|
+
<tr>
|
103
|
+
<td>
|
104
|
+
|
105
|
+
- [NeetoCommonsBackend::AppUrlCarrier](./docs/carriers/README.md#neetocommonsbackendappurlcarrier)
|
106
|
+
|
107
|
+
</td>
|
108
|
+
<td>
|
109
|
+
|
110
|
+
[Carriers](./docs/carriers/README.md)
|
111
|
+
|
112
|
+
</td>
|
113
|
+
</tr>
|
114
|
+
|
115
|
+
<tr>
|
116
|
+
<td>
|
117
|
+
|
118
|
+
- [auto_update_prs_with_latest_master](./docs/workflows/README.md#auto_update_prs_with_latest_master)
|
119
|
+
- [bump_version](./docs/workflows/README.md#bump_version)
|
120
|
+
|
121
|
+
</td>
|
122
|
+
<td>
|
123
|
+
|
124
|
+
[Workflows](./docs/workflows/README.md)
|
125
|
+
|
126
|
+
</td>
|
127
|
+
</tr>
|
128
|
+
|
129
|
+
<tr>
|
130
|
+
<td>
|
131
|
+
|
132
|
+
- [semaphore.yml](./docs/semaphore/README.md#semaphoreyml)
|
133
|
+
|
134
|
+
</td>
|
135
|
+
<td>
|
136
|
+
|
137
|
+
[Semaphore config](./docs/semaphore/README.md)
|
138
|
+
|
139
|
+
</td>
|
140
|
+
</tr>
|
141
|
+
<tr>
|
142
|
+
<td>
|
143
|
+
|
144
|
+
- [Gemfile.common.rb](./docs/gemfiles/README.md#gemfilecommonrb)
|
145
|
+
|
146
|
+
</td>
|
147
|
+
<td>
|
148
|
+
|
149
|
+
[gemfiles](./docs/gemfiles/README.md)
|
150
|
+
|
151
|
+
</td>
|
152
|
+
</tr>
|
153
|
+
<tr>
|
154
|
+
<td>
|
155
|
+
|
156
|
+
- [NeetoCommonsBackend::Helpers::AuthServerApi](./docs/helpers/README.md#neetocommonsbackendhelpersauthserverapi)
|
157
|
+
- [NeetoCommonsBackend::Helpers.favicon](./docs/helpers/README.md#neetocommonsbackendhelpersfavicon)
|
158
|
+
- [NeetoCommonsBackend::Helpers.common_client_props](./docs/helpers/README.md#neetocommonsbackendhelperscommon_client_props)
|
159
|
+
- [NeetoCommonsBackend::Helpers.build_neeto_widget_script_url](./docs/helpers/README.md#neetocommonsbackendhelpersbuild_neeto_widget_script_url)
|
160
|
+
- [NeetoCommonsBackend::TestHelper.setup](./docs/helpers/README.md#neetocommonsbackendtesthelpersetup)
|
161
|
+
|
162
|
+
</td>
|
163
|
+
<td>
|
164
|
+
|
165
|
+
[Helpers](./docs/helpers/README.md)
|
166
|
+
|
167
|
+
</td>
|
168
|
+
</tr>
|
169
|
+
<tr>
|
170
|
+
<td>
|
171
|
+
|
172
|
+
- [NeetoCommonsBackend::Initializers::EnableExtensionHerokuMonkeypatch](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/_enable_extension_hack.rb)
|
173
|
+
- [NeetoCommonsBackend::Initializers.cache_store](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/cache_store.rb)
|
174
|
+
- [NeetoCommonsBackend::Initializers.session_store](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/session_store.rb)
|
175
|
+
- [NeetoCommonsBackend::Initializers.assets](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/assets.rb)
|
176
|
+
- [NeetoCommonsBackend::Initializers.remove_backtrace_silencers](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/remove_backtrace_silencers.rb)
|
177
|
+
- [NeetoCommonsBackend::Initializers.bullet](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/bullet.rb)
|
178
|
+
- [NeetoCommonsBackend::Initializers.cookies_serializer](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/cookies_serializer.rb)
|
179
|
+
- [NeetoCommonsBackend::Initializers.cors](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/cors.rb)
|
180
|
+
- [NeetoCommonsBackend::Initializers.database_cleaner](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/database_cleaner.rb)
|
181
|
+
- [NeetoCommonsBackend::Initializers.datetime](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/datetime.rb)
|
182
|
+
- [NeetoCommonsBackend::Initializers.email_setup](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/email_setup.rb)
|
183
|
+
- [NeetoCommonsBackend::Initializers.neeto_email_prefixer](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/neeto_email_prefixer.rb)
|
184
|
+
- [NeetoCommonsBackend::Initializers.filter_parameter_logging](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/filter_parameter_logging.rb)
|
185
|
+
- [NeetoCommonsBackend::Initializers.honeybadger](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/honeybadger.rb)
|
186
|
+
- [NeetoCommonsBackend::Initializers.kaminari_config](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/kaminari_config.rb)
|
187
|
+
- [NeetoCommonsBackend::Initializers.neeto_mail_interceptor](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/neeto_mail_interceptor.rb)
|
188
|
+
- [NeetoCommonsBackend::Initializers.mime_types](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/mime_types.rb)
|
189
|
+
- [NeetoCommonsBackend::Initializers.mini_profiler](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/mini_profiler.rb)
|
190
|
+
- [NeetoCommonsBackend::Initializers.rack_attack](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/rack_attack.rb)
|
191
|
+
- [NeetoCommonsBackend::Initializers.rack_deflater](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/rack_deflater.rb)
|
192
|
+
- [NeetoCommonsBackend::Initializers.rack_timeout](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/rack_timeout.rb)
|
193
|
+
- [NeetoCommonsBackend::Initializers.rails_email_preview](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/rails_email_preview.rb)
|
194
|
+
- [NeetoCommonsBackend::Initializers.sidekiq](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/sidekiq.rb)
|
195
|
+
- [NeetoCommonsBackend::Initializers.wrap_parameters](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/wrap_parameters.rb)
|
196
|
+
- [NeetoCommonsBackend::Initializers.strong_migrations](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/strong_migrations.rb)
|
197
|
+
- [NeetoCommonsBackend::Initializers::PostCompilation](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/post_compilation.rb)
|
198
|
+
- [NeetoCommonsBackend::SharedRedis](https://github.com/bigbinary/neeto-commons-backend/blob/main/lib/neeto_commons_backend/initializers/shared_redis.rb)
|
199
|
+
|
200
|
+
</td>
|
201
|
+
<td>
|
202
|
+
|
203
|
+
[Initializers](https://github.com/bigbinary/neeto-commons-backend/tree/main/lib/neeto_commons_backend/initializers)
|
204
|
+
|
205
|
+
</td>
|
206
|
+
</tr>
|
207
|
+
<tr>
|
208
|
+
<td>
|
209
|
+
|
210
|
+
- [catch_all.rb](./docs/routes/README.md#catch_allrb)
|
211
|
+
- [devise.rb](./docs/routes/README.md#deviserb)
|
212
|
+
- [direct_uploads.rb](./docs/routes/README.md#direct_uploadsrb)
|
213
|
+
- [draw.rb](./docs/routes/README.md#drawrb)
|
214
|
+
- [email_previews.rb](./docs/routes/README.md#email_previewsrb)
|
215
|
+
- [errors.rb](./docs/routes/README.md#errorsrb)
|
216
|
+
- [health.rb](./docs/routes/README.md#healthrb)
|
217
|
+
- [letter_opener.rb](./docs/routes/README.md#letter_openerrb)
|
218
|
+
- [sidekiq.rb](./docs/routes/README.md#sidekiqrb)
|
219
|
+
- [well_knowns.rb](./docs/routes/README.md#well_knownsrb)
|
220
|
+
|
221
|
+
</td>
|
222
|
+
<td>
|
223
|
+
|
224
|
+
[Routes](./docs/routes/README.md)
|
225
|
+
|
226
|
+
</td>
|
227
|
+
</tr>
|
228
|
+
<tr>
|
229
|
+
<td>
|
230
|
+
|
231
|
+
- [sync_with_wheel.sh](./docs/scripts/README.md#sync_with_wheelsh)
|
232
|
+
|
233
|
+
</td>
|
234
|
+
<td>
|
235
|
+
|
236
|
+
[Scripts](./docs/scripts/README.md)
|
237
|
+
|
238
|
+
</td>
|
239
|
+
</tr>
|
240
|
+
<tr>
|
241
|
+
<td>
|
242
|
+
|
243
|
+
- [sample_data](./docs/services/README.md#sample_data)
|
244
|
+
- [NeetoCommonsBackend::SourceMapPublishService](./docs/services/README.md#neetocommonsbackendsourcemappublishservice)
|
245
|
+
- [NeetoCommonsBackend::Services::CustomDomain](./docs/services/README.md#neetocommonsbackendservicescustomdomain)
|
246
|
+
|
247
|
+
</td>
|
248
|
+
<td>
|
249
|
+
|
250
|
+
[Services](./docs/services/README.md)
|
251
|
+
|
252
|
+
</td>
|
253
|
+
</tr>
|
254
|
+
|
255
|
+
</tbody>
|
256
|
+
|
257
|
+
</table>
|
258
|
+
|
259
|
+
## Installation
|
260
|
+
|
261
|
+
1. Add this line to your application's Gemfile:
|
262
|
+
|
263
|
+
```ruby
|
264
|
+
gem "neeto-commons-backend", git: "https://github.com/bigbinary/neeto-commons-backend"
|
265
|
+
```
|
266
|
+
|
267
|
+
2. And then execute:
|
268
|
+
|
269
|
+
```shell
|
270
|
+
$ bundle install
|
271
|
+
```
|
272
|
+
|
273
|
+
## Development
|
274
|
+
|
275
|
+
1. Add this line to your application's Gemfile (replace the path to the local copy of neetoCommonsBackend gem):
|
276
|
+
|
277
|
+
```ruby
|
278
|
+
gem 'neeto-commons-backend', path: '../neeto-commons-backend'
|
279
|
+
```
|
280
|
+
|
281
|
+
2. And then execute:
|
282
|
+
|
283
|
+
```shell
|
284
|
+
$ bundle install
|
285
|
+
```
|
286
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
require "bundler/setup"
|
6
|
+
|
7
|
+
APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
|
8
|
+
load "rails/tasks/engine.rake"
|
9
|
+
|
10
|
+
load "rails/tasks/statistics.rake"
|
11
|
+
|
12
|
+
Rake::TestTask.new(:test) do |t|
|
13
|
+
t.libs << "test"
|
14
|
+
t.libs << "lib"
|
15
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
16
|
+
end
|
17
|
+
|
18
|
+
task default: :test
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
class Api::DirectUploadsController < ActiveStorage::DirectUploadsController
|
5
|
+
protect_from_forgery with: :null_session
|
6
|
+
|
7
|
+
before_action :load_blob!, only: %i[update destroy]
|
8
|
+
|
9
|
+
def create
|
10
|
+
blob = ActiveStorage::Blob.create_before_direct_upload!(**blob_args)
|
11
|
+
blob_url = url_for(blob)
|
12
|
+
render json: direct_upload_json(blob).merge(blob_url:)
|
13
|
+
end
|
14
|
+
|
15
|
+
def update
|
16
|
+
@blob.update! blob_params
|
17
|
+
render status: :ok, json: { notice: "Attachment has been successfully updated.", blob: @blob }
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
@blob.attachments.each do |attachment|
|
22
|
+
attachment.record&.touch
|
23
|
+
attachment.purge
|
24
|
+
end
|
25
|
+
@blob&.purge
|
26
|
+
render status: :ok, json: { notice: "Attachment has been successfully deleted." }
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def load_blob!
|
32
|
+
blob_id = ActiveStorage.verifier.verify(params[:id], purpose: :blob_id)
|
33
|
+
@blob = ActiveStorage::Blob.find(blob_id)
|
34
|
+
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
35
|
+
render status: :unprocessable_entity, json: { error: "Attachment signature is not valid." }
|
36
|
+
end
|
37
|
+
|
38
|
+
def blob_params
|
39
|
+
options = params.require(:blob).permit(:filename)
|
40
|
+
if options[:filename].present?
|
41
|
+
options.merge!(filename: filename_with_extension(options[:filename]))
|
42
|
+
end
|
43
|
+
options
|
44
|
+
end
|
45
|
+
|
46
|
+
def filename_with_extension(filename)
|
47
|
+
file_extension = @blob.filename.extension_with_delimiter
|
48
|
+
updated_extension = File.extname(filename)
|
49
|
+
|
50
|
+
if updated_extension == file_extension
|
51
|
+
File.basename(filename, ".*") + file_extension
|
52
|
+
else
|
53
|
+
filename + file_extension
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
class AppVersionsController < ApplicationController
|
5
|
+
def index
|
6
|
+
render json: {
|
7
|
+
"androidMinimumSupportedVersion": app_versions[:android_minimum_supported_version],
|
8
|
+
"androidCurrentVersion": app_versions[:android_current_version],
|
9
|
+
"iOSMinimumSupportedVersion": app_versions[:ios_minimum_supported_version],
|
10
|
+
"iOSCurrentVersion": app_versions[:ios_current_version]
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def app_versions
|
17
|
+
@_app_versions ||= (Rails.application.secrets.app_versions || {})
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
class FailuresController < ApplicationController
|
5
|
+
before_action :set_default_format
|
6
|
+
|
7
|
+
def show
|
8
|
+
@status_code = params[:status_code] || "404"
|
9
|
+
error = @status_code == "404" ?
|
10
|
+
t("neeto_commons_backend.error.not_found") :
|
11
|
+
t("neeto_commons_backend.error.generic_error")
|
12
|
+
|
13
|
+
if params[:url]
|
14
|
+
Rails.logger.warn "ActionController::RoutingError (No route matches [#{request.method}] /#{params[:url]})"
|
15
|
+
end
|
16
|
+
|
17
|
+
respond_to do |format|
|
18
|
+
format.json { render json: { error: }, status: @status_code }
|
19
|
+
format.any { render status: @status_code }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def set_default_format
|
26
|
+
request.format = :html unless request.format == :json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
class ApplicationMailer < ActionMailer::Base
|
5
|
+
layout "layouts/common"
|
6
|
+
|
7
|
+
default from: -> { get_from_email(Rails.application.secrets.mailer[:default_from_email]) },
|
8
|
+
bcc: Rails.application.secrets.mailer[:default_bcc_email],
|
9
|
+
reply_to: Rails.application.secrets.mailer[:default_from_email]
|
10
|
+
|
11
|
+
default_url_options[:host] = Rails.application.secrets.host
|
12
|
+
|
13
|
+
default template_path: -> { "mailers/#{self.class.name.underscore}" }
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def get_from_email(from_email)
|
18
|
+
name = Rails.application.secrets.mailer[:default_from_name]
|
19
|
+
"#{name} <#{from_email}>"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module Sluggable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
def generate_slug(value_field, slug_field, relation = nil, only_content_is_present = false)
|
9
|
+
value_slug = only_content_is_present ? "untitled" : self.send(value_field)&.parameterize
|
10
|
+
return if value_slug.nil?
|
11
|
+
|
12
|
+
query = relation || self.class
|
13
|
+
latest_slug = query
|
14
|
+
.where("#{slug_field} ~ ?", "^#{value_slug}$|^#{value_slug}-[0-9]+$")
|
15
|
+
.unscope(:order).order("LENGTH(#{slug_field}) DESC", "#{slug_field}" => :desc)
|
16
|
+
.first&.send(slug_field)
|
17
|
+
|
18
|
+
slug_count = 0
|
19
|
+
if latest_slug.present?
|
20
|
+
slug_count = latest_slug.split("-").last.to_i
|
21
|
+
slug_count = 1 if slug_count == 0
|
22
|
+
end
|
23
|
+
slug = slug_count.positive? ? "#{value_slug}-#{slug_count + 1}" : value_slug
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module SoftDeletable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
default_scope { where(deleted_at: nil) }
|
9
|
+
scope :deleted, -> { unscope(where: :deleted_at).where.not(deleted_at: nil) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def destroy
|
13
|
+
update_columns(deleted_at: DateTime.now, deleted_by: User.current)
|
14
|
+
end
|
15
|
+
|
16
|
+
def really_destroy
|
17
|
+
update_columns(deleted_at: DateTime.now, deleted_by: User.current)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module SampleData
|
5
|
+
module Common
|
6
|
+
class AdminService < Common::Base
|
7
|
+
def process!
|
8
|
+
create_admin!
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def create_admin!
|
14
|
+
User.create! \
|
15
|
+
organization:,
|
16
|
+
email: "oliver@example.com",
|
17
|
+
first_name: "Oliver",
|
18
|
+
last_name: "Smith",
|
19
|
+
active: true,
|
20
|
+
password: app_secrets.default_password,
|
21
|
+
organization_role: organization.roles.find_by(name: "Admin")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "faker"
|
4
|
+
|
5
|
+
module NeetoCommonsBackend
|
6
|
+
module SampleData
|
7
|
+
module Common
|
8
|
+
class Base
|
9
|
+
def organization
|
10
|
+
@_organization ||= Organization.find_by(subdomain: "spinkart")
|
11
|
+
end
|
12
|
+
|
13
|
+
def admin
|
14
|
+
organization.users.find_by(email: "oliver@example.com")
|
15
|
+
end
|
16
|
+
|
17
|
+
def skip?
|
18
|
+
!heroku_or_development_env?
|
19
|
+
end
|
20
|
+
|
21
|
+
def print_description
|
22
|
+
Rails.logger.debug format("%-80s", description)
|
23
|
+
end
|
24
|
+
|
25
|
+
def print_success
|
26
|
+
Rails.logger.debug "[DONE]\n"
|
27
|
+
end
|
28
|
+
|
29
|
+
def description
|
30
|
+
self.class.name
|
31
|
+
end
|
32
|
+
|
33
|
+
def heroku_or_development_env?
|
34
|
+
Rails.env.heroku? || Rails.env.development?
|
35
|
+
end
|
36
|
+
|
37
|
+
def app_secrets
|
38
|
+
@_app_secrets ||= Rails.application.secrets
|
39
|
+
end
|
40
|
+
|
41
|
+
def load!
|
42
|
+
print_description
|
43
|
+
process!
|
44
|
+
print_success
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module SampleData
|
5
|
+
module Common
|
6
|
+
class LoaderService < Common::Base
|
7
|
+
def process!
|
8
|
+
return if skip?
|
9
|
+
|
10
|
+
ActiveRecord::Base.descendants.map(&:reset_column_information)
|
11
|
+
Rails.logger.debug { "\n#{'-' * 80}" }
|
12
|
+
Rails.logger.debug "Loading sample data..."
|
13
|
+
ActiveRecord::Base.logger.level = Logger::INFO
|
14
|
+
|
15
|
+
load_sample_data!
|
16
|
+
Rails.logger.debug { "#{'-' * 80}\n" }
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def load_sample_data!
|
23
|
+
::SampleData::LoadersList.get.each do |loader_service|
|
24
|
+
loader_service.new.load!
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module SampleData
|
5
|
+
module Common
|
6
|
+
class NeetoTeamMembersService < Common::Base
|
7
|
+
def process!
|
8
|
+
NeetoTeamMembersEngine::PermissionSeederService.new.process
|
9
|
+
Organization.find_each do |organization|
|
10
|
+
NeetoTeamMembersEngine::OrganizationRoleSeederService.new(organization).process
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|