motor-admin 0.2.51 → 0.2.56

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f96f929aa91537536fb2bf7600c5910fa8c573a8bc39d735a4a1987ed04a8b6
4
- data.tar.gz: 2ca104e7ea56a378edcd24f56d4d36e98dbd34df54f12df2d26eec1bdee31b91
3
+ metadata.gz: e91be0ae4e5eafb52785d52874bd07bdd8596d81c62004298cde44849c706354
4
+ data.tar.gz: 57ae4b6763ee7b110ec13fc64375322535c0e0bb97d0a8cb5d92977891cc76b0
5
5
  SHA512:
6
- metadata.gz: 7ded34bfb1ead6be8fbbfdce823cbc5d015bc54c5665b300c5e168ac93bb48e125589a6b5da4d2df6c65c3efb7a6581fa37e7263645e4cac306ffb6657c8dd96
7
- data.tar.gz: 494738f22d78e71d28d90753ff1e7a72a9dc7e9362e7aa1d037f076506cbe2316e1fc597778a4070059e232a4d9d8b796070318abe9796998a3031711d2cff52
6
+ metadata.gz: a16cceb565a38abf5a16a8d12092e919170af044fda5204e9038dcac1f88df01c15052bbaa3f7b1db4e1b7b312e156338efd520e28ad789d2d0e1ed8af99eda4
7
+ data.tar.gz: cd6a58743490b4e26f75d60597cabc694fddf89bebbbf597453c35dcbfa8caa3d38a5c0e67bcac038c9728248967b7606d4fbf3432439782a0f3ccb54c1d2945
@@ -301,3 +301,4 @@ en:
301
301
  add_api: Add API
302
302
  on_collection: On collection
303
303
  association: Association
304
+ action_has_been_removed: This action has been removed
@@ -301,6 +301,7 @@ es:
301
301
  add_api: De API
302
302
  on_collection: En la colección
303
303
  association: Asociación
304
+ action_has_been_removed: Esta acción ha sido eliminada
304
305
  i:
305
306
  locale: es
306
307
  select:
@@ -297,6 +297,7 @@ pt:
297
297
  add_api: De API
298
298
  on_collection: Na coleção
299
299
  association: Associação
300
+ action_has_been_removed: Esta ação foi removida
300
301
  i:
301
302
  locale: pt
302
303
  select:
@@ -0,0 +1,71 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
+ class MotorApiConfig < ActiveRecord::Base
3
+ self.table_name = 'motor_api_configs'
4
+
5
+ encrypts :credentials if defined?(::Motor::EncryptedConfig)
6
+
7
+ serialize :credentials, Motor::HashSerializer
8
+ serialize :preferences, Motor::HashSerializer
9
+
10
+ attribute :preferences, default: -> { HashWithIndifferentAccess.new }
11
+ attribute :credentials, default: -> { HashWithIndifferentAccess.new }
12
+ end
13
+
14
+ class MotorForm < ActiveRecord::Base
15
+ self.table_name = 'motor_forms'
16
+
17
+ serialize :preferences, Motor::HashSerializer
18
+ end
19
+
20
+ class MotorResource < ActiveRecord::Base
21
+ self.table_name = 'motor_resources'
22
+
23
+ serialize :preferences, Motor::HashSerializer
24
+ end
25
+
26
+ def up
27
+ MotorResource.all.each do |resource|
28
+ resource.preferences.fetch(:actions, []).each do |action|
29
+ next unless action[:action_type] == 'api'
30
+
31
+ api_path = action[:preferences][:api_path]
32
+ api_url = api_path[%r{\Ahttps?://[^/]+}]
33
+ api_path = api_path.delete_prefix(api_url).sub(/\A\/?/, '/') if api_url
34
+
35
+ api_config =
36
+ if api_url
37
+ MotorApiConfig.create_with(url: api_url).find_or_create_by!(name: api_url.sub(%r{\Ahttps?://}))
38
+ else
39
+ MotorApiConfig.create_with(url: '/').find_or_create_by!(name: 'origin')
40
+ end
41
+
42
+ resource_display_name = (resource[:preferences][:display_name] || resource.name).titleize.singularize
43
+
44
+ form = MotorForm.create_with(
45
+ api_config_name: api_config.name,
46
+ api_path: api_path.sub(/\{{1,2}\w+\}{1,2}/, '{{id}}'),
47
+ http_method: 'POST',
48
+ preferences: {
49
+ fields: [{
50
+ name: 'id',
51
+ display_name: resource_display_name,
52
+ default_value: '',
53
+ field_type: 'reference',
54
+ reference: { model_name: resource.name },
55
+ validators: [{ required: true }]
56
+ }]
57
+ }
58
+ ).find_or_create_by!(
59
+ name: "#{action[:display_name]} #{resource_display_name}"
60
+ )
61
+
62
+ action[:action_type] = 'form'
63
+ action[:preferences] = { form_id: form.id }
64
+ end
65
+
66
+ resource.save!
67
+ end
68
+ end
69
+
70
+ def down; end
71
+ end
@@ -15,11 +15,19 @@ module Motor
15
15
  source_root File.expand_path('templates', __dir__)
16
16
 
17
17
  def copy_migration
18
- if Motor::ApiConfig.table_exists?
19
- puts 'The latest Motor Admin features are already configured'
20
- else
18
+ has_api_actions = Motor::Resource.all.any? do |resource|
19
+ resource.preferences[:actions]&.any? { |action| action[:action_type] == 'api' }
20
+ end
21
+
22
+ unless Motor::ApiConfig.table_exists?
21
23
  migration_template 'install_api_configs.rb', 'db/migrate/install_motor_api_configs.rb'
24
+ end
25
+
26
+ migration_template 'upgrade_motor_api_actions.rb', 'db/migrate/upgrade_motor_api_actions.rb' if has_api_actions
22
27
 
28
+ if Motor::ApiConfig.table_exists? && !has_api_actions
29
+ puts 'The latest Motor Admin features are already configured'
30
+ else
23
31
  puts 'Run `rake db:migrate` to update DB schema'
24
32
  end
25
33
  end
data/lib/motor/admin.rb CHANGED
@@ -97,10 +97,14 @@ module Motor
97
97
 
98
98
  initializer 'motor.upgrade' do
99
99
  config.after_initialize do
100
+ next unless Motor.server?
101
+
100
102
  unless Motor::Query.table_exists?
101
103
  puts
102
104
  puts ' => Run `rails g motor:install && rake db:migrate` in order to create Motor Admin configuration tables'
103
105
  puts
106
+
107
+ raise
104
108
  end
105
109
 
106
110
  unless Motor::ApiConfig.table_exists?
@@ -108,9 +112,9 @@ module Motor
108
112
  puts ' => Run `rails g motor:upgrade && rake db:migrate`' \
109
113
  ' to perform data migration and enable the latest features'
110
114
  puts
115
+
116
+ raise
111
117
  end
112
- rescue ActiveRecord::NoDatabaseError
113
- nil
114
118
  end
115
119
  end
116
120
  end
@@ -21,7 +21,9 @@ module Motor
21
21
 
22
22
  def filter_associations(associations, ability)
23
23
  associations.select do |assoc|
24
- ability.can?(:read, assoc[:model_name].classify.constantize)
24
+ model_class = assoc[:model_name].classify.safe_constantize
25
+
26
+ model_class && ability.can?(:read, model_class)
25
27
  end
26
28
  end
27
29
 
@@ -29,8 +31,11 @@ module Motor
29
31
  columns.map do |column|
30
32
  next unless ability.can?(:read, model, column[:name])
31
33
 
32
- next if column.dig(:reference, :model_name).present? &&
33
- !ability.can?(:read, column[:reference][:model_name].classify.constantize)
34
+ reference_model_name = column.dig(:reference, :model_name)
35
+ model_class = reference_model_name&.classify&.safe_constantize
36
+
37
+ next if reference_model_name &&
38
+ (model_class.nil? || !ability.can?(:read, model_class))
34
39
 
35
40
  unless ability.can?(:update, model, column[:name])
36
41
  column = column.merge(access_type: BuildSchema::ColumnAccessTypes::READ_ONLY)
@@ -154,7 +154,8 @@ module Motor
154
154
 
155
155
  return {} if column.name == 'year'
156
156
 
157
- return { number_format: true } if !column.name.match?(/_(?:id|year)\z/) &&
157
+ return { number_format: true } if !column.name == 'id' &&
158
+ !column.name.match?(/_(?:id|year)\z/) &&
158
159
  %i[integer float].include?(column.type)
159
160
 
160
161
  {}
@@ -13,7 +13,7 @@ module Motor
13
13
  module_function
14
14
 
15
15
  def call(current_user = nil, current_ability = nil, cache_keys: LoadFromCache.load_cache_keys)
16
- CACHE_STORE.fetch("#{I18n.locale}#{cache_keys.hash}#{current_user&.id}#{current_ability&.rules_hash}") do
16
+ CACHE_STORE.fetch(app_tag_cache_key(cache_keys, current_user, current_ability)) do
17
17
  CACHE_STORE.clear
18
18
 
19
19
  data = build_data(cache_keys, current_user, current_ability)
@@ -21,6 +21,14 @@ module Motor
21
21
  end
22
22
  end
23
23
 
24
+ def app_tag_cache_key(cache_keys, current_user, current_ability)
25
+ key = "#{I18n.locale}#{cache_keys.hash}#{current_user&.id}#{current_ability&.rules_hash}"
26
+
27
+ key += Motor::DefineArModels.defined_models_schema_md5.to_s if defined?(Motor::DefineArModels)
28
+
29
+ key
30
+ end
31
+
24
32
  # rubocop:disable Metrics/AbcSize
25
33
  # @return [Hash]
26
34
  def build_data(cache_keys = {}, current_user = nil, current_ability = nil)
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.2.51'
4
+ VERSION = '0.2.56'
5
5
  end
@@ -2601,9 +2601,9 @@
2601
2601
  "icons/zoom-out.svg.gz": "icons/zoom-out.svg.gz",
2602
2602
  "icons/zoom-question.svg": "icons/zoom-question.svg",
2603
2603
  "icons/zoom-question.svg.gz": "icons/zoom-question.svg.gz",
2604
- "main-2f07e682c44815a0eb71.css.gz": "main-2f07e682c44815a0eb71.css.gz",
2605
- "main-2f07e682c44815a0eb71.js.LICENSE.txt": "main-2f07e682c44815a0eb71.js.LICENSE.txt",
2606
- "main-2f07e682c44815a0eb71.js.gz": "main-2f07e682c44815a0eb71.js.gz",
2607
- "main.css": "main-2f07e682c44815a0eb71.css",
2608
- "main.js": "main-2f07e682c44815a0eb71.js"
2604
+ "main-2d5ae868ed1fe51a0981.css.gz": "main-2d5ae868ed1fe51a0981.css.gz",
2605
+ "main-2d5ae868ed1fe51a0981.js.LICENSE.txt": "main-2d5ae868ed1fe51a0981.js.LICENSE.txt",
2606
+ "main-2d5ae868ed1fe51a0981.js.gz": "main-2d5ae868ed1fe51a0981.js.gz",
2607
+ "main.css": "main-2d5ae868ed1fe51a0981.css",
2608
+ "main.js": "main-2d5ae868ed1fe51a0981.js"
2609
2609
  }
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.2.51
4
+ version: 0.2.56
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Matsyburka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-06 00:00:00.000000000 Z
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-filter
@@ -162,6 +162,7 @@ files:
162
162
  - lib/generators/motor/migration.rb
163
163
  - lib/generators/motor/templates/install.rb
164
164
  - lib/generators/motor/templates/install_api_configs.rb
165
+ - lib/generators/motor/templates/upgrade_motor_api_actions.rb
165
166
  - lib/generators/motor/upgrade_generator.rb
166
167
  - lib/motor-admin.rb
167
168
  - lib/motor.rb
@@ -1532,14 +1533,16 @@ files:
1532
1533
  - ui/dist/icons/zoom-money.svg.gz
1533
1534
  - ui/dist/icons/zoom-out.svg.gz
1534
1535
  - ui/dist/icons/zoom-question.svg.gz
1535
- - ui/dist/main-2f07e682c44815a0eb71.css.gz
1536
- - ui/dist/main-2f07e682c44815a0eb71.js.gz
1536
+ - ui/dist/main-2d5ae868ed1fe51a0981.css.gz
1537
+ - ui/dist/main-2d5ae868ed1fe51a0981.js.gz
1537
1538
  - ui/dist/manifest.json
1538
1539
  homepage:
1539
1540
  licenses:
1540
1541
  - MIT
1541
1542
  metadata: {}
1542
- post_install_message:
1543
+ post_install_message: "\n ==================\n Run `rails g motor:upgrade &&
1544
+ rake db:migrate`\n to perform data migration and enable the latest features'\n
1545
+ \ ==================\n "
1543
1546
  rdoc_options: []
1544
1547
  require_paths:
1545
1548
  - lib