cm-admin 0.7.2 → 0.7.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: 72119a5aae30fb36067825d4ed89fc085907b1a31a7b79e18dd30690b8379991
4
- data.tar.gz: 917b3dc2d4d59d4099c77e169694579f1d82c5dc53664025fb98edbd9ccc3ff3
3
+ metadata.gz: 38f55f5eb7db0ce9a1ef95f111085f1aa36132e6f729fc18e9d81f09a3896b68
4
+ data.tar.gz: 569e799bacc88c9bd811fbd55e0c8ee313c0af32874aa63a64786f4dd477923d
5
5
  SHA512:
6
- metadata.gz: 42bbbf83a0d81aa5d193cb23a3469ed3392f13fe573605a55886611805c2e388e3a3664c2be6202eea743f13658cd6faf7870a2ba786339620d87484b823ccab
7
- data.tar.gz: e6474599f0f7de99642a056713baf93f9f7dcb6352d2385fc080059d310fa22b4b7199c28dff7b9a36be9d025aacf0fa395206e225e4ec26843befa2a640a3d3
6
+ metadata.gz: 4802b0d59a4d4eed99d9ced6d3cbefb96af6cb4c610e2542e5fe5ca9035bcb432935cb7f4db61f0775d978fd0b83c8ed21de6f939c071498f26b888d25fe2fe5
7
+ data.tar.gz: bdcf0cda0c49c059ed6fc87abc960c04e59b611d079b5ce3a9aaccbebaa0feaba711ecd18546eec9a466129c39537056a28cbc98b4712ff4d5ba2bd45e0fd150
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (0.5.7)
4
+ cm-admin (0.7.3)
5
5
  axlsx_rails (~> 0.6.1)
6
6
  cocoon (~> 1.2.15)
7
7
  pagy (~> 4.11.0)
@@ -47,15 +47,13 @@ GEM
47
47
  htmlentities (4.3.4)
48
48
  i18n (1.10.0)
49
49
  concurrent-ruby (~> 1.0)
50
- loofah (2.15.0)
50
+ loofah (2.17.0)
51
51
  crass (~> 1.0.2)
52
52
  nokogiri (>= 1.5.9)
53
53
  marcel (1.0.2)
54
54
  method_source (1.0.0)
55
- mini_portile2 (2.8.0)
56
55
  minitest (5.15.0)
57
- nokogiri (1.13.4)
58
- mini_portile2 (~> 2.8.0)
56
+ nokogiri (1.13.5-arm64-darwin)
59
57
  racc (~> 1.4)
60
58
  pagy (4.11.0)
61
59
  pundit (2.2.0)
@@ -13,5 +13,16 @@ module CmAdmin
13
13
  return true unless policy([:cm_admin, model_name.classify.constantize]).methods.include?(:"#{action_name}?")
14
14
  policy([:cm_admin, model_name.classify.constantize]).send(:"#{action_name}?")
15
15
  end
16
+
17
+ def action(action_name)
18
+ case action_name.to_sym
19
+ when :update
20
+ return :edit
21
+ when :create
22
+ return :new
23
+ else
24
+ return action_name.to_sym
25
+ end
26
+ end
16
27
  end
17
28
  end
@@ -2,6 +2,11 @@
2
2
  .table-top
3
3
  p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@action.child_records.to_s.gsub('_', ' ')} found"
4
4
  .table-top__column-action
5
+ - if @associated_model && @associated_model.available_actions.map(&:name).include?('new')
6
+ - association = @ar_object.class.reflect_on_all_associations.select{|x| x.name == @associated_model.name.tableize.to_sym }.first
7
+ - polymorphic_name = (association && association.inverse_of && association.inverse_of.options[:polymorphic]) ? association.inverse_of.name : ''
8
+ 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}"
9
+ button.secondary-btn.column-btn Add
5
10
  / button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal" type="button"
6
11
  / span
7
12
  / i.fa.fa-columns.bolder
@@ -17,7 +22,7 @@
17
22
  / span
18
23
  / input.cm-checkbox type="checkbox"
19
24
  - @model.available_fields[@action.name.to_sym].each do |column|
20
- th = column.header
25
+ th = column.header
21
26
  tbody.cm-table__body
22
27
  - @associated_ar_object.data.each do |ar_object|
23
28
  tr.body-row
@@ -25,9 +30,12 @@
25
30
  / td.check-box-space
26
31
  / span
27
32
  / input.cm-checkbox type="checkbox"
28
- - @model.available_fields[@action.name.to_sym].each do |column|
33
+ - @model.available_fields[@action.name.to_sym].each_with_index do |column, index|
29
34
  td class="text-ellipsis"
30
- span class="#{column.cm_css_class}" = show_field_value(ar_object, column)
35
+ - if index == 0 && @associated_model && @associated_model.available_actions.map(&:name).include?('show')
36
+ a href="#{CmAdmin::Engine.mount_path}/#{@associated_model.name.tableize}/#{ar_object.id}" = show_field_value(ar_object, column)
37
+ - else
38
+ span class="#{column.cm_css_class}" = show_field_value(ar_object, column)
31
39
  - associated_model_actions = @associated_model && @associated_model.available_actions.select{|act| act if act.route_type == 'member'}
32
40
  - if associated_model_actions.present?
33
41
  td.row-action-cell
@@ -1,5 +1,5 @@
1
1
  .nested-fields
2
- - @model.available_fields[action_name.to_sym][assoc_name].each do |field|
2
+ - @model.available_fields[ action(action_name) ][assoc_name].each do |field|
3
3
  .row
4
4
  .col-sm-10
5
5
  = input_field_for_column(f, field)
@@ -1,6 +1,7 @@
1
1
  ul.nav.nav-pills
2
2
  - @model.available_tabs.each do |nav_item|
3
- - if nav_item.custom_action.empty? || (nav_item.custom_action.present? && policy([:cm_admin, @model.name.classify.constantize]).send(:"#{nav_item.custom_action}?"))
4
- li.nav-item
5
- - nav_item_action_name = nav_item.custom_action.present? ? nav_item.custom_action : 'show'
6
- = link_to nav_item.nav_item_name.to_s.titleize, "/cm_admin/#{@model.name.underscore.pluralize}/#{@ar_object.id}/#{nav_item.custom_action}", class: "nav-link #{ nav_item_action_name == action_name ? 'active' : ''}"
3
+ - if nav_item.display_if.call(@ar_object)
4
+ - if nav_item.custom_action.empty? || (nav_item.custom_action.present? && policy([:cm_admin, @model.name.classify.constantize]).send(:"#{nav_item.custom_action}?"))
5
+ li.nav-item
6
+ - nav_item_action_name = nav_item.custom_action.present? ? nav_item.custom_action : 'show'
7
+ = link_to nav_item.nav_item_name.to_s.titleize, "/cm_admin/#{@model.name.underscore.pluralize}/#{@ar_object.id}/#{nav_item.custom_action}", class: "nav-link #{ nav_item_action_name == action_name ? 'active' : ''}"
@@ -140,7 +140,9 @@ module CmAdmin
140
140
  format.html { render '/cm_admin/main/'+action_name }
141
141
  end
142
142
  elsif %w(create update destroy).include?(action_name)
143
- if %w(create update).include?(action_name)
143
+ if params["referrer"]
144
+ redirect_url = params["referrer"]
145
+ elsif %w(create update).include?(action_name)
144
146
  redirect_url = CmAdmin::Engine.mount_path + "/#{@model.name.underscore.pluralize}/#{@ar_object.id}"
145
147
  else
146
148
  redirect_url = CmAdmin::Engine.mount_path + "/#{@model.name.underscore.pluralize}"
@@ -58,7 +58,15 @@ module CmAdmin
58
58
  def resource_params(params)
59
59
  permittable_fields = @permitted_fields || @ar_model.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym)
60
60
  permittable_fields += @ar_model.name.constantize.reflect_on_all_associations.map {|x|
61
- if x.klass.name == "ActiveStorage::Attachment"
61
+ next if x.options[:polymorphic]
62
+ # The first if statement is added for compatibilty with cm-page-builder.
63
+ # One of the associated models of cm-page-builder was throwing error.
64
+ # The associated model is CmPageBuilder::Rails::PageComponent.
65
+ # When using reflection, the value of klass of the above association is uninitialized.
66
+ # As a result, it was throwing error in the 2nd elsif statement.
67
+ if x.name == :page_components
68
+ x.name
69
+ elsif x.klass.name == "ActiveStorage::Attachment"
62
70
  if x.class.name.include?('HasOne')
63
71
  x.name
64
72
  elsif x.class.name.include?('HasMany')
@@ -39,17 +39,17 @@ module CmAdmin
39
39
  end
40
40
  end
41
41
 
42
- def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil, &block)
42
+ def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil, display_if: nil, &block)
43
43
  if custom_action.to_s == ''
44
44
  @current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
45
- @available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
45
+ @available_tabs << CmAdmin::Models::Tab.new(tab_name, '', display_if, &block)
46
46
  else
47
47
  action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
48
48
  layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
49
49
  action_type: :custom, display_type: :page)
50
50
  @available_actions << action
51
51
  @current_action = action
52
- @available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
52
+ @available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, display_if, &block)
53
53
  end
54
54
  yield if block
55
55
  end
@@ -1,7 +1,7 @@
1
1
  module CmAdmin
2
2
  module Models
3
3
  class FormField
4
- attr_accessor :field_name, :label, :header, :input_type, :collection, :custom_value, :disabled
4
+ attr_accessor :field_name, :label, :header, :input_type, :collection, :custom_value, :disabled, :collection_method
5
5
  VALID_INPUT_TYPES = [:integer, :decimal, :string, :single_select, :multi_select, :date, :date_time, :text, :single_file_upload, :multi_file_upload, :hidden, :rich_text].freeze
6
6
 
7
7
  def initialize(field_name, input_type, attributes = {})
@@ -2,11 +2,12 @@ module CmAdmin
2
2
  module Models
3
3
  class Tab
4
4
 
5
- attr_accessor :nav_item_name, :custom_action
5
+ attr_accessor :nav_item_name, :custom_action, :display_if
6
6
 
7
- def initialize(nav_item_name, custom_action)
7
+ def initialize(nav_item_name, custom_action, display_if)
8
8
  @nav_item_name = nav_item_name
9
9
  @custom_action = custom_action
10
+ @display_if = display_if || lambda { |arg| return true }
10
11
  end
11
12
  end
12
13
  end
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = "0.7.2"
2
+ VERSION = "0.7.3"
3
3
  end
@@ -13,9 +13,9 @@ module CmAdmin
13
13
  when :string
14
14
  return f.text_field field.field_name, class: "normal-input #{required_class}", disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}"
15
15
  when :single_select
16
- return f.select field.field_name, options_for_select((field.collection || []), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: "normal-input #{required_class} select-2", disabled: field.disabled
16
+ return f.select field.field_name, options_for_select(select_collection_value(field), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: "normal-input #{required_class} select-2", disabled: field.disabled
17
17
  when :multi_select
18
- return f.select field.field_name, options_for_select((field.collection || []), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: "normal-input #{required_class} select-2", disabled: field.disabled, multiple: true
18
+ return f.select field.field_name, options_for_select(select_collection_value(field), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: "normal-input #{required_class} select-2", disabled: field.disabled, multiple: true
19
19
  when :date
20
20
  return f.text_field field.field_name, class: "normal-input #{required_class}", disabled: field.disabled, value: value&.strftime('%d-%m-%Y'), placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}", data: { behaviour: 'date-only' }
21
21
  when :date_time
@@ -32,6 +32,16 @@ module CmAdmin
32
32
  return f.hidden_field field.field_name, value: field.custom_value
33
33
  end
34
34
  end
35
+
36
+ def select_collection_value(field)
37
+ if field.collection_method
38
+ collection = send(field.collection_method)
39
+ elsif field.collection
40
+ collection = field.collection
41
+ else
42
+ collection = []
43
+ end
44
+ end
35
45
  end
36
46
  end
37
47
  end
@@ -38,6 +38,15 @@ module CmAdmin
38
38
 
39
39
  def set_form_for_fields(resource, available_fields_hash, url, method)
40
40
  form_for(resource, url: url, method: method, html: { class: "cm_#{resource.class.name.downcase}_form" } ) do |f|
41
+ if params[:referrer]
42
+ concat f.text_field "referrer", class: "normal-input", hidden: true, value: params[:referrer], name: 'referrer'
43
+ end
44
+ if params[:polymorphic_name].present?
45
+ concat f.text_field params[:polymorphic_name] + '_type', class: "normal-input", hidden: true, value: params[:associated_class].classify
46
+ concat f.text_field params[:polymorphic_name] + '_id', class: "normal-input", hidden: true, value: params[:associated_id]
47
+ elsif params[:associated_class] && params[:associated_id]
48
+ concat f.text_field params[:associated_class] + '_id', class: "normal-input", hidden: true, value: params[:associated_id]
49
+ end
41
50
  available_fields_hash.each do |key, fields_array|
42
51
  if key == :fields
43
52
  fields_array.each do |field|
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: 0.7.2
4
+ version: 0.7.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: 2022-06-08 00:00:00.000000000 Z
13
+ date: 2022-06-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pagy