motor-admin 0.1.33 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/motor/load_and_authorize_dynamic_resource.rb +70 -0
  3. data/app/controllers/motor/alerts_controller.rb +12 -6
  4. data/app/controllers/motor/audits_controller.rb +16 -0
  5. data/app/controllers/motor/configs_controller.rb +1 -0
  6. data/app/controllers/motor/dashboards_controller.rb +4 -0
  7. data/app/controllers/motor/data_controller.rb +2 -57
  8. data/app/controllers/motor/forms_controller.rb +4 -0
  9. data/app/controllers/motor/queries_controller.rb +4 -0
  10. data/app/controllers/motor/resources_controller.rb +1 -0
  11. data/app/controllers/motor/ui_controller.rb +4 -0
  12. data/app/models/motor/alert.rb +2 -0
  13. data/app/models/motor/application_record.rb +10 -0
  14. data/app/models/motor/audit.rb +9 -0
  15. data/app/models/motor/config.rb +2 -0
  16. data/app/models/motor/dashboard.rb +2 -0
  17. data/app/models/motor/form.rb +2 -0
  18. data/app/models/motor/query.rb +2 -0
  19. data/app/models/motor/resource.rb +2 -0
  20. data/app/views/motor/ui/show.html.erb +1 -1
  21. data/config/routes.rb +1 -0
  22. data/lib/generators/motor/templates/install.rb +40 -16
  23. data/lib/motor.rb +11 -2
  24. data/lib/motor/admin.rb +8 -0
  25. data/lib/motor/alerts/persistance.rb +4 -1
  26. data/lib/motor/alerts/scheduler.rb +1 -1
  27. data/lib/motor/api_query/sort.rb +1 -1
  28. data/lib/motor/build_schema.rb +3 -3
  29. data/lib/motor/build_schema/load_from_rails.rb +2 -1
  30. data/lib/motor/build_schema/merge_schema_configs.rb +8 -4
  31. data/lib/motor/build_schema/reorder_schema.rb +10 -4
  32. data/lib/motor/configs.rb +16 -0
  33. data/lib/motor/configs/build_configs_hash.rb +83 -0
  34. data/lib/motor/configs/build_ui_app_tag.rb +71 -0
  35. data/lib/motor/configs/load_from_cache.rb +81 -0
  36. data/lib/motor/configs/sync_from_file.rb +34 -0
  37. data/lib/motor/configs/sync_from_hash.rb +124 -0
  38. data/lib/motor/configs/sync_middleware.rb +72 -0
  39. data/lib/motor/configs/sync_with_remote.rb +39 -0
  40. data/lib/motor/configs/write_to_file.rb +36 -0
  41. data/lib/motor/dashboards/persistance.rb +4 -1
  42. data/lib/motor/forms/persistance.rb +4 -1
  43. data/lib/motor/net_http_utils.rb +37 -0
  44. data/lib/motor/queries/persistance.rb +4 -1
  45. data/lib/motor/railtie.rb +11 -0
  46. data/lib/motor/tags.rb +2 -1
  47. data/lib/motor/tasks/motor.rake +29 -0
  48. data/lib/motor/version.rb +1 -1
  49. data/ui/dist/{main-b3096c53c77bd4641e52.css.gz → main-e443f49b386b119ff25a.css.gz} +0 -0
  50. data/ui/dist/main-e443f49b386b119ff25a.js.gz +0 -0
  51. data/ui/dist/manifest.json +5 -5
  52. metadata +33 -5
  53. data/lib/motor/ui_configs.rb +0 -82
  54. data/ui/dist/main-b3096c53c77bd4641e52.js.gz +0 -0
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :motor do
4
+ desc 'Update configs/motor.yml file'
5
+
6
+ task dump: :environment do
7
+ Motor::Configs::WriteToFile.write_with_lock
8
+
9
+ puts '✅ configs/motor.yml has been updated'
10
+ end
11
+
12
+ desc 'Synchronize configs with remote application'
13
+
14
+ task sync: :environment do
15
+ remote_url = ENV['MOTOR_SYNC_REMOTE_URL']
16
+ api_key = ENV['MOTOR_SYNC_API_KEY']
17
+
18
+ raise 'Specify target app url using `MOTOR_SYNC_REMOTE_URL` env variable' if remote_url.blank?
19
+ raise 'Specify sync api key using `MOTOR_SYNC_API_KEY` env variable' if api_key.blank?
20
+
21
+ Motor::Configs::SyncWithRemote.call(remote_url, api_key)
22
+ Motor::Configs::WriteToFile.write_with_lock
23
+
24
+ puts "✅ Motor Admin configurations have been synced with #{remote_url}"
25
+ rescue Motor::Configs::SyncWithRemote::ApiNotFound
26
+ puts '⚠️ Synchronization failed: you need to specify `MOTOR_SYNC_API_KEY` ' \
27
+ 'env variable in your remote app in order to enable this feature'
28
+ end
29
+ end
data/lib/motor/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Motor
4
- VERSION = '0.1.33'
4
+ VERSION = '0.1.39'
5
5
  end
@@ -5,9 +5,9 @@
5
5
  "fonts/ionicons.ttf?v=3.0.0-alpha.3": "fonts/ionicons.ttf",
6
6
  "fonts/ionicons.woff2?v=3.0.0-alpha.3": "fonts/ionicons.woff2",
7
7
  "fonts/ionicons.woff?v=3.0.0-alpha.3": "fonts/ionicons.woff",
8
- "main-b3096c53c77bd4641e52.css.gz": "main-b3096c53c77bd4641e52.css.gz",
9
- "main-b3096c53c77bd4641e52.js.LICENSE.txt": "main-b3096c53c77bd4641e52.js.LICENSE.txt",
10
- "main-b3096c53c77bd4641e52.js.gz": "main-b3096c53c77bd4641e52.js.gz",
11
- "main.css": "main-b3096c53c77bd4641e52.css",
12
- "main.js": "main-b3096c53c77bd4641e52.js"
8
+ "main-e443f49b386b119ff25a.css.gz": "main-e443f49b386b119ff25a.css.gz",
9
+ "main-e443f49b386b119ff25a.js.LICENSE.txt": "main-e443f49b386b119ff25a.js.LICENSE.txt",
10
+ "main-e443f49b386b119ff25a.js.gz": "main-e443f49b386b119ff25a.js.gz",
11
+ "main.css": "main-e443f49b386b119ff25a.css",
12
+ "main.js": "main-e443f49b386b119ff25a.js"
13
13
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motor-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.33
4
+ version: 0.1.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Matsyburka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-11 00:00:00.000000000 Z
11
+ date: 2021-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-filter
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: audited
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.9'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.9'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: cancancan
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -132,12 +146,14 @@ files:
132
146
  - LICENSE
133
147
  - README.md
134
148
  - Rakefile
149
+ - app/controllers/concerns/motor/load_and_authorize_dynamic_resource.rb
135
150
  - app/controllers/concerns/motor/wrap_io_params.rb
136
151
  - app/controllers/motor/active_storage_attachments_controller.rb
137
152
  - app/controllers/motor/alerts_controller.rb
138
153
  - app/controllers/motor/api_base_controller.rb
139
154
  - app/controllers/motor/application_controller.rb
140
155
  - app/controllers/motor/assets_controller.rb
156
+ - app/controllers/motor/audits_controller.rb
141
157
  - app/controllers/motor/configs_controller.rb
142
158
  - app/controllers/motor/dashboards_controller.rb
143
159
  - app/controllers/motor/data_controller.rb
@@ -157,6 +173,7 @@ files:
157
173
  - app/models/motor/alert.rb
158
174
  - app/models/motor/alert_lock.rb
159
175
  - app/models/motor/application_record.rb
176
+ - app/models/motor/audit.rb
160
177
  - app/models/motor/config.rb
161
178
  - app/models/motor/dashboard.rb
162
179
  - app/models/motor/form.rb
@@ -200,22 +217,33 @@ files:
200
217
  - lib/motor/build_schema/persist_resource_configs.rb
201
218
  - lib/motor/build_schema/reorder_schema.rb
202
219
  - lib/motor/build_schema/utils.rb
220
+ - lib/motor/configs.rb
221
+ - lib/motor/configs/build_configs_hash.rb
222
+ - lib/motor/configs/build_ui_app_tag.rb
223
+ - lib/motor/configs/load_from_cache.rb
224
+ - lib/motor/configs/sync_from_file.rb
225
+ - lib/motor/configs/sync_from_hash.rb
226
+ - lib/motor/configs/sync_middleware.rb
227
+ - lib/motor/configs/sync_with_remote.rb
228
+ - lib/motor/configs/write_to_file.rb
203
229
  - lib/motor/dashboards.rb
204
230
  - lib/motor/dashboards/persistance.rb
205
231
  - lib/motor/forms.rb
206
232
  - lib/motor/forms/persistance.rb
207
233
  - lib/motor/hash_serializer.rb
234
+ - lib/motor/net_http_utils.rb
208
235
  - lib/motor/queries.rb
209
236
  - lib/motor/queries/persistance.rb
210
237
  - lib/motor/queries/postgresql_exec_query.rb
211
238
  - lib/motor/queries/render_sql_template.rb
212
239
  - lib/motor/queries/run_query.rb
240
+ - lib/motor/railtie.rb
213
241
  - lib/motor/tags.rb
214
- - lib/motor/ui_configs.rb
242
+ - lib/motor/tasks/motor.rake
215
243
  - lib/motor/version.rb
216
244
  - ui/dist/fonts/ionicons.woff2
217
- - ui/dist/main-b3096c53c77bd4641e52.css.gz
218
- - ui/dist/main-b3096c53c77bd4641e52.js.gz
245
+ - ui/dist/main-e443f49b386b119ff25a.css.gz
246
+ - ui/dist/main-e443f49b386b119ff25a.js.gz
219
247
  - ui/dist/manifest.json
220
248
  homepage:
221
249
  licenses:
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Motor
4
- module UiConfigs
5
- CACHE_STORE =
6
- if Motor.development?
7
- ActiveSupport::Cache::NullStore.new
8
- else
9
- ActiveSupport::Cache::MemoryStore.new(size: 5.megabytes)
10
- end
11
-
12
- module_function
13
-
14
- # @return [String]
15
- def app_tag
16
- CACHE_STORE.fetch(cache_key) do
17
- CACHE_STORE.clear
18
-
19
- Motor::ApplicationController.helpers.content_tag(
20
- :div, '', id: 'app', data: ui_data
21
- )
22
- end
23
- end
24
-
25
- # @return [Hash]
26
- def ui_data
27
- {
28
- base_path: Motor::Admin.routes.url_helpers.motor_path,
29
- schema: Motor::BuildSchema.call,
30
- header_links: header_links_data_hash,
31
- queries: queries_data_hash,
32
- dashboards: dashboards_data_hash,
33
- alerts: alerts_data_hash,
34
- forms: forms_data_hash
35
- }
36
- end
37
-
38
- def header_links_data_hash
39
- Motor::Config.find_by(key: 'header.links')&.value || []
40
- end
41
-
42
- def queries_data_hash
43
- Motor::Query.all.active.preload(:tags)
44
- .as_json(only: %i[id name updated_at],
45
- include: { tags: { only: %i[id name] } })
46
- end
47
-
48
- def dashboards_data_hash
49
- Motor::Dashboard.all.active.preload(:tags)
50
- .as_json(only: %i[id title updated_at],
51
- include: { tags: { only: %i[id name] } })
52
- end
53
-
54
- def alerts_data_hash
55
- Motor::Alert.all.active.preload(:tags)
56
- .as_json(only: %i[id name is_enabled updated_at],
57
- include: { tags: { only: %i[id name] } })
58
- end
59
-
60
- def forms_data_hash
61
- Motor::Form.all.active.preload(:tags)
62
- .as_json(only: %i[id name updated_at],
63
- include: { tags: { only: %i[id name] } })
64
- end
65
-
66
- # @return [String]
67
- def cache_key
68
- ActiveRecord::Base.connection.execute(
69
- "(#{
70
- [
71
- Motor::Config.select('MAX(updated_at)').to_sql,
72
- Motor::Resource.select('MAX(updated_at)').to_sql,
73
- Motor::Dashboard.select('MAX(updated_at)').to_sql,
74
- Motor::Alert.select('MAX(updated_at)').to_sql,
75
- Motor::Query.select('MAX(updated_at)').to_sql,
76
- Motor::Form.select('MAX(updated_at)').to_sql
77
- ].join(') UNION (')
78
- })"
79
- ).to_a.hash.to_s
80
- end
81
- end
82
- end