cm-admin 1.3.1 → 1.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e81bb0ae8315860549d0c446bd231a8a4d03f7ec71d43e0bc3dae928d24a052
4
- data.tar.gz: 879a1484880f42892d1dd7dc1cab06aa3c54d69f908f9b9ca88c87fb2dddef5e
3
+ metadata.gz: 1f06e165a6b468dde8b09746a40a195df154f4639626a12b4c2f856d4184abdf
4
+ data.tar.gz: 41e071501c0d1aed8bf7f1bd2ac301cc41bb6e06502abde2c39f5d3fd21e6dd5
5
5
  SHA512:
6
- metadata.gz: 41529999b8a9d3d59cd3f9832f5dbc5e9a7c53229b20307610251a3e3a8f1b4b187fd3fdd961c772bda56e499f4684a71be0c2456d4babb9fb14caaff723beb6
7
- data.tar.gz: e2412a8f6502af1d1adc2b7b122c49da5518f6dfedd3a54b580efed363cb2392568d695d13653c9235644cdb7d75a0dc75edf3f43513510cf85ae35cb2f52a04
6
+ metadata.gz: fe73add42f92fc5f392cb17d16c37f5a9b6185d439ded6a51ffaff0ee5409d80074d2e5c76e0fbfdf9479a088fcfb9999079573e9ca8ff1c2a57d1216d0c5d38
7
+ data.tar.gz: a321b63a0f573d01f203045b6f89f1fc45407722c919cc164f4646ff284fdd33a3dcfc0b2e3f27c8cb00cb1e81e62c6cdfc1dfb61563e4db2234ca4632a22efe
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (1.3.1)
4
+ cm-admin (1.3.3)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
@@ -172,7 +172,7 @@ module CmAdmin
172
172
 
173
173
  def resource_identifier
174
174
  @ar_object, @associated_model, @associated_ar_object = custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
175
- authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
175
+ authorize @ar_object, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
176
176
  aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
177
177
  @associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
178
178
  nested_fields = get_nested_table_fields(@model.available_fields[:new])
@@ -6,9 +6,11 @@ module CmAdmin
6
6
  end
7
7
 
8
8
  # Allow if policy is not defined.
9
- def has_valid_policy(model_name, action_name)
10
- return true unless policy([:cm_admin, model_name.classify.constantize]).methods.include?(:"#{action_name}?")
11
- policy([:cm_admin, model_name.classify.constantize]).send(:"#{action_name}?")
9
+ def has_valid_policy(ar_object, action_name)
10
+ policy_object = ar_object.instance_of?(OpenStruct) ? @model.name.classify.constantize : ar_object
11
+ return true unless policy([:cm_admin, policy_object]).methods.include?(:"#{action_name}?")
12
+
13
+ policy([:cm_admin, policy_object]).send(:"#{action_name}?")
12
14
  end
13
15
 
14
16
  def action(action_name)
@@ -63,14 +65,14 @@ module CmAdmin
63
65
  end
64
66
  end
65
67
 
66
- def is_show_action_available(model)
68
+ def is_show_action_available(model, ar_object)
67
69
  model &&
68
70
  model.available_actions.map(&:name).include?('show') &&
69
- has_valid_policy(model.name, 'show')
71
+ has_valid_policy(ar_object, 'show')
70
72
  end
71
73
 
72
- def actions_filter(model, action_type)
73
- model.available_actions.select { |action| action.action_type == action_type && has_valid_policy(model.name, action.name) }
74
+ def actions_filter(model, ar_object, action_type)
75
+ model.available_actions.select { |action| action.action_type == action_type && has_valid_policy(ar_object, action.name) }
74
76
  end
75
77
  end
76
78
  end
@@ -1,6 +1,6 @@
1
- - edit_action = available_actions(cm_model, 'edit')
2
- - destroy_action = available_actions(cm_model, 'destroy')
3
- - custom_actions = available_actions(cm_model, 'custom_actions')
1
+ - edit_action = available_actions(cm_model, ar_object, 'edit')
2
+ - destroy_action = available_actions(cm_model, ar_object, 'destroy')
3
+ - custom_actions = available_actions(cm_model, ar_object, 'custom_actions')
4
4
  - current_model = @associated_model || @model
5
5
  - if custom_actions.any? || edit_action.present? || destroy_action.present?
6
6
  td.row-action-cell
@@ -4,7 +4,7 @@
4
4
  == render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
5
5
  p.table-top__total-count = "#{humanized_ar_collection_count(@associated_ar_object.pagy.count, @action.child_records.to_s)}"
6
6
  .table-top__column-action
7
- - if @associated_model && @associated_model.available_actions.map(&:name).include?('new') && has_valid_policy(@associated_model.name, 'new')
7
+ - if @associated_model && @associated_model.available_actions.map(&:name).include?('new') && has_valid_policy(@associated_ar_object, 'new')
8
8
  - association = @ar_object.class.reflect_on_all_associations.select{|x| x.name == @associated_model.name.tableize.to_sym }.first
9
9
  - polymorphic_name = (association && association.inverse_of && association.inverse_of.options[:polymorphic]) ? association.inverse_of.name : ''
10
10
  a href="#{CmAdmin::Engine.mount_path}/#{@associated_model.name.tableize}/new?associated_id=#{@ar_object.id}&associated_class=#{@ar_object.class.name.underscore}&polymorphic_name=#{polymorphic_name}&referrer=#{request.path}"
@@ -20,7 +20,7 @@
20
20
  - elsif flash[:notice].present?
21
21
  .alert.alert-success
22
22
  = flash[:notice].html_safe
23
- - bulk_actions = actions_filter(@associated_model, :bulk_action)
23
+ - bulk_actions = actions_filter(@associated_model, @associated_ar_object, :bulk_action)
24
24
  - if bulk_actions.present?
25
25
  .table-top.hidden data-section="bulk-action"
26
26
  - bulk_actions.each do |action|
@@ -47,7 +47,7 @@
47
47
  - if column.display_if.call(Current.user) && column.viewable
48
48
  td class="text-ellipsis"
49
49
  span class="#{column.field_type.to_s} #{column.cm_css_class} "
50
- - if index == 0 && is_show_action_available(@associated_model)
50
+ - if index == 0 && is_show_action_available(@associated_model, ar_object)
51
51
  a href="#{CmAdmin::Engine.mount_path}/#{@associated_model.name.tableize}/#{ar_object.id}" = show_field_value(ar_object, column)
52
52
  - else
53
53
  = show_field_value(ar_object, column)
@@ -60,4 +60,4 @@
60
60
  .pagination-bar
61
61
  p.count-text.m-0 Showing #{@associated_ar_object.pagy.from} to #{@associated_ar_object.pagy.to} out of #{@associated_ar_object.pagy.count}
62
62
  == render partial: 'cm_admin/main/cm_pagy_nav', locals: { pagy: @associated_ar_object.pagy }
63
- = render partial: 'cm_admin/main/member_custom_action_modal', locals: { cm_model: @associated_model, ar_collection: @associated_ar_object }
63
+ / = render partial: 'cm_admin/main/member_custom_action_modal', locals: { cm_model: @associated_model, ar_collection: @associated_ar_object }
@@ -20,7 +20,7 @@
20
20
  .alert.alert-success
21
21
  = flash[:notice].html_safe
22
22
 
23
- - bulk_actions = actions_filter(@model, :bulk_action)
23
+ - bulk_actions = actions_filter(@model, @ar_object, :bulk_action)
24
24
  - if bulk_actions.present?
25
25
  .table-top.hidden data-section="bulk-action"
26
26
  - bulk_actions.each do |action|
@@ -38,7 +38,7 @@
38
38
  .card-body
39
39
  - @model.available_fields[:index].each_with_index do |column, index|
40
40
  - if column.display_if.call(Current.user) && column.viewable
41
- - if index == 0 && is_show_action_available(@model) && !([:link, :custom, :attachment, :drawer, :image].include?(column.field_type))
41
+ - if index == 0 && is_show_action_available(@model, ar_object) && !([:link, :custom, :attachment, :drawer, :image].include?(column.field_type))
42
42
  h6.card-title
43
43
  | Coffee table
44
44
  .card-subtitle
@@ -1,4 +1,4 @@
1
- - custom_actions = available_actions(cm_model, 'custom_actions')
1
+ - custom_actions = available_actions(cm_model, ar_object, 'custom_actions')
2
2
  - custom_actions_modals = custom_actions.select{ |act| act if act.display_type.eql?(:modal) }
3
3
  - ar_collection.data.each do |ar_object|
4
4
  - if custom_actions_modals.any?
@@ -19,7 +19,7 @@
19
19
  .alert.alert-success
20
20
  = flash[:notice].html_safe
21
21
 
22
- - bulk_actions = actions_filter(@model, :bulk_action)
22
+ - bulk_actions = actions_filter(@model, @ar_object, :bulk_action)
23
23
  - if bulk_actions.present?
24
24
  .table-top.hidden data-section="bulk-action"
25
25
  - bulk_actions.each do |action|
@@ -44,7 +44,7 @@
44
44
  - @model.available_fields[:index].each_with_index do |column, index|
45
45
  - if column.display_if.call(Current.user) && column.viewable
46
46
  td.text-ellipsis data-field-type="#{column.field_type || 'string'}"
47
- - if index == 0 && is_show_action_available(@model) && !([:link, :custom, :attachment, :drawer, :image].include?(column.field_type))
47
+ - if index == 0 && is_show_action_available(@model, ar_object) && !([:link, :custom, :attachment, :drawer, :image].include?(column.field_type))
48
48
  = link_to ar_object.send(column.field_name), cm_admin.send("#{ar_object.model_name.singular}_show_path", ar_object.id)
49
49
  - else
50
50
  = show_field_value(ar_object, column)
@@ -8,7 +8,7 @@
8
8
  p.mb-0.text-body-secondary = @model.current_action.page_description
9
9
  .entity-header__actions
10
10
  - if @model.current_action.name == 'index'
11
- - if has_valid_policy(@model.name, :exportable)
11
+ - if has_valid_policy(@ar_object, :exportable)
12
12
  .export-container
13
13
  .dropdown
14
14
  button.btn-secondary.dropdown-toggle data-bs-toggle='dropdown'
@@ -18,10 +18,10 @@
18
18
  li
19
19
  .popup-option.pointer data-bs-toggle='modal' data-bs-target='#exportmodal'
20
20
  span Export
21
- - if @model.importer && has_valid_policy(@model.name, :importable)
21
+ - if @model.importer && has_valid_policy(@ar_object, :importable)
22
22
  = link_to 'Import', cm_admin.send(:"#{@model.name.underscore}_import_path"), class: 'btn-primary ms-2'
23
23
  - new_action = @model.available_actions.select{|act| act if act.action_type.eql?(:default) && act.name.eql?('new')}
24
- - if new_action.any? && policy([:cm_admin, @model.name.classify.constantize]).new?
24
+ - if new_action.any? && has_valid_policy(@ar_object, 'new')
25
25
  = link_to 'Add', cm_admin.send(:"#{@model.name.underscore}_new_path"), class: 'btn-primary ms-2'
26
26
  - @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
27
27
  = custom_action_items(custom_action, 'index')
@@ -30,8 +30,8 @@
30
30
  = custom_action_items(custom_action, 'show')
31
31
 
32
32
  - edit_action = @model.available_actions.select{|act| act if act.action_type.eql?(:default) && act.name.eql?('edit')}
33
- - destroy_action = available_actions(@model, 'destroy')
34
- - if edit_action.any? && policy([:cm_admin, @model.name.classify.constantize]).edit?
33
+ - destroy_action = available_actions(@model, @ar_object, 'destroy')
34
+ - if edit_action.any? && has_valid_policy(@ar_object, 'edit')
35
35
  = link_to cm_admin.send(:"#{@model.name.underscore}_edit_path", @ar_object), class: 'btn-primary ms-2' do
36
36
  span
37
37
  i.fa.fa-edit
@@ -1,6 +1,6 @@
1
1
  - custom_action_with_modals = @model.available_actions.select{ |act| act if act.display_type == :modal && act.action_type == :custom }
2
2
  - bulk_action_with_modals = @model.available_actions.select{ |act| act if act.display_type == :modal && act.action_type == :bulk_action }
3
- - destroy_action = available_actions(@model, 'destroy')
3
+ - destroy_action = available_actions(@model, @ar_object, 'destroy')
4
4
  - if @associated_model
5
5
  - custom_action_with_modals += @associated_model.available_actions.select{ |act| act if act.display_type == :modal }
6
6
  - if @current_action&.name == 'index'
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.3.1'
2
+ VERSION = '1.3.3'
3
3
  end
@@ -1,19 +1,19 @@
1
1
  module CmAdmin
2
2
  module ViewHelpers
3
3
  module ActionDropdownHelper
4
- def available_actions(cm_model, action_type)
4
+ def available_actions(cm_model, ar_object, action_type)
5
5
  if action_type.eql?('custom_actions')
6
6
  cm_model.available_actions.select {
7
7
  |act| act if act.route_type.eql?('member') &&
8
8
  [:button, :modal].include?(act.display_type) &&
9
9
  act.name.present? &&
10
- has_valid_policy(cm_model.name, act.name)
10
+ has_valid_policy(ar_object, act.name)
11
11
  }
12
12
  else
13
13
  cm_model.available_actions.select {
14
14
  |act| act if act.action_type.eql?(:default) &&
15
15
  act.name.eql?(action_type)
16
- } if has_valid_policy(cm_model.name, action_type)
16
+ } if has_valid_policy(ar_object, action_type)
17
17
  end
18
18
  end
19
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - sajinmp
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-11-01 00:00:00.000000000 Z
13
+ date: 2023-11-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails