cm-admin 1.5.5 → 1.5.6

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: 7eb26a8e9dc03031afddca0a48d9bfae0ba1f11c9d66d3ae953b2e9c68966543
4
- data.tar.gz: 11390399cda0596195e40de917976cf6eeffdd3eb8999304dc05dae075f5aeac
3
+ metadata.gz: c08303685e692e436d87fbb2a8166cd4438d9c100c52762790de4b002d23eb5d
4
+ data.tar.gz: 3cf14b3c00d5ba8328657d9356269dd8548a62029625baf6798f4901b527caa7
5
5
  SHA512:
6
- metadata.gz: f4f2a66dfb37c444d453a874c08537d2d769860212017cf8a10d31f807aca181c7e0dea526b6f1612cab436b112a14d15143c7e94701271e7705af4a963138e6
7
- data.tar.gz: 64b05e829b61af5089d8bd1e0b182361204f1e891d209e13c47a3c1a21ba43f686be27360ed58d8177b7654ee0912acc204b9e623cbde1097497b3bcecf6c604
6
+ metadata.gz: a5e94ecac2756e8d09fc884ba66f1cb86c6347d0311755ec133ace630a9a3a4744a968322ce364e403c0c63995f1284cb901ea2476ee6a1d36fdf2c42b4949c7
7
+ data.tar.gz: 94ff7a82c100ae96b006db7e3372bd63f803c9ab3cd61877606df7971f5f47d0d6b779fd66099d3e81fc11349ae1f0d53d2a10fc3bb334d272cb1d7e3726ceb7
@@ -233,8 +233,10 @@ module CmAdmin
233
233
  else
234
234
  CmAdmin::Model.find_by(name: @reflection.klass.name)
235
235
  end
236
+
236
237
  @associated_ar_object = if child_records.is_a? ActiveRecord::Relation
237
- filter_by(params, child_records, @associated_model.filter_params(params))
238
+
239
+ filter_by(params, child_records, @ar_object, @associated_model.filter_params(params))
238
240
  else
239
241
  child_records
240
242
  end
@@ -248,7 +250,7 @@ module CmAdmin
248
250
  records
249
251
  end
250
252
 
251
- def filter_by(params, records, filter_params={}, sort_params={})
253
+ def filter_by(params, records, parent_record = nil, filter_params={}, sort_params={})
252
254
  filtered_result = OpenStruct.new
253
255
  cm_model = @associated_model || @model
254
256
  db_columns = cm_model.ar_model&.columns&.map{|x| x.name.to_sym}
@@ -263,6 +265,9 @@ module CmAdmin
263
265
  pagy, records = pagy(final_data)
264
266
  filtered_result.data = records
265
267
  filtered_result.pagy = pagy
268
+ filtered_result.parent_record = parent_record
269
+ filtered_result.associated_model = @associated_model.name if @associated_model
270
+ # filtered_result.ar_model =
266
271
  # filtered_result.facets = paginate(page, raw_data.size)
267
272
  # filtered_result.sort = sort_params
268
273
  # filtered_result.facets.sort = sort_params
@@ -354,7 +359,7 @@ module CmAdmin
354
359
  end
355
360
 
356
361
  private
357
-
362
+
358
363
  def attachment_fields(model_object)
359
364
  model_object.reflect_on_all_associations.map {|reflection|
360
365
  next if reflection.options[:polymorphic]
@@ -7,10 +7,22 @@ module CmAdmin
7
7
 
8
8
  # Allow if policy is not defined.
9
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}?")
10
+ if ar_object.instance_of?(OpenStruct) && ar_object&.parent_record.present? && ar_object&.associated_model.present?
11
+ policy_object = ar_object.parent_record
12
+ associated_model = ar_object.associated_model
13
+
14
+ policy_instance = "CmAdmin::#{associated_model}Policy".constantize.new(:cm_admin, policy_object)
15
+
16
+ return true unless policy_instance.methods.include?(:"#{action_name}?")
17
+
18
+ policy_instance.send(:"#{action_name}?")
19
+ else
20
+ policy_object = ar_object.instance_of?(OpenStruct) ? @model.name.classify.constantize : ar_object
21
+
22
+ return true unless policy([:cm_admin, policy_object]).methods.include?(:"#{action_name}?")
23
+
24
+ policy([:cm_admin, policy_object]).send(:"#{action_name}?")
25
+ end
14
26
  end
15
27
 
16
28
  def action(action_name)
@@ -66,6 +78,7 @@ module CmAdmin
66
78
  end
67
79
 
68
80
  def is_show_action_available(model, ar_object)
81
+
69
82
  model &&
70
83
  model.available_actions.map(&:name).include?('show') &&
71
84
  has_valid_policy(ar_object, 'show')
@@ -4,6 +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
+ -
7
8
  - if @associated_model && @associated_model.available_actions.map(&:name).include?('new') && has_valid_policy(@associated_ar_object, 'new')
8
9
  - association = @ar_object.class.reflect_on_all_associations.select{|x| x.name == @associated_model.name.tableize.to_sym }.first
9
10
  - polymorphic_name = (association && association.inverse_of && association.inverse_of.options[:polymorphic]) ? association.inverse_of.name : ''
@@ -53,11 +54,11 @@
53
54
  = show_field_value(ar_object, column)
54
55
  - if column.field_type == :drawer
55
56
  = render partial: column.drawer_partial, locals: { ar_object: ar_object }
56
-
57
+
57
58
  - if @associated_model
58
59
  == render partial: 'cm_admin/main/actions_dropdown', locals: { cm_model: @associated_model, ar_object: ar_object }
59
60
 
60
61
  .pagination-bar
61
62
  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
63
  == 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 }
64
+ / = render partial: 'cm_admin/main/member_custom_action_modal', locals: { cm_model: @associated_model, ar_collection: @associated_ar_object }
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.5.5'
2
+ VERSION = '1.5.6'
3
3
  end
@@ -1,4 +1,7 @@
1
1
  require_relative 'form_field_helper'
2
+ require 'cgi'
3
+ require 'uri'
4
+
2
5
  module CmAdmin
3
6
  module ViewHelpers
4
7
  module FormHelper
@@ -123,21 +126,38 @@ module CmAdmin
123
126
  end
124
127
 
125
128
  def set_form_with_sections(resource, entities, url, method)
129
+ polymorphic_name, associated_id, associated_class = extract_referrer_query_params
126
130
  form_for(resource, url: url, method: method, html: { class: "cm_#{resource.class.name.downcase}_form" } ) do |form_obj|
127
131
  if params[:referrer]
128
132
  concat form_obj.text_field "referrer", class: "normal-input", hidden: true, value: params[:referrer], name: 'referrer'
129
133
  end
130
- if params[:polymorphic_name].present?
131
- concat form_obj.text_field params[:polymorphic_name] + '_type', class: "normal-input", hidden: true, value: params[:associated_class].classify
132
- concat form_obj.text_field params[:polymorphic_name] + '_id', class: "normal-input", hidden: true, value: params[:associated_id]
133
- elsif params[:associated_class] && params[:associated_id]
134
- concat form_obj.text_field params[:associated_class] + '_id', class: "normal-input", hidden: true, value: params[:associated_id]
134
+ if params[:polymorphic_name].present? || polymorphic_name.present?
135
+ concat form_obj.text_field ( params[:polymorphic_name] || polymorphic_name ) + '_type', class: "normal-input", hidden: true, value: ( params[:associated_class] || associated_class ).classify
136
+ concat form_obj.text_field ( params[:polymorphic_name] || polymorphic_name ) + '_id', class: "normal-input", hidden: true, value: ( params[:associated_id] || associated_id )
137
+ elsif (params[:associated_class] && params[:associated_id] || associated_id.present? && associated_class.present? )
138
+ concat form_obj.text_field ( params[:associated_class] || associated_class ) + '_id', class: "normal-input", hidden: true, value: ( params[:associated_id] || associated_id )
135
139
  end
140
+
136
141
  concat split_form_into_section(resource, form_obj, entities)
137
142
  concat tag.br
138
143
  concat form_obj.submit 'Save', class: 'btn-cta', data: {behaviour: 'form_submit', form_class: "cm_#{form_obj.object.class.name.downcase}_form"}
139
144
  end
140
145
  end
146
+
147
+
148
+ def extract_referrer_query_params
149
+ uri = URI.parse(request.referrer)
150
+
151
+ return unless uri.query.present?
152
+
153
+ query_params = CGI.parse(uri.query)
154
+
155
+ polymorphic_name = query_params['polymorphic_name'].first
156
+ associated_id = query_params['associated_id'].first
157
+ associated_class = query_params['associated_class'].first
158
+
159
+ return polymorphic_name, associated_id, associated_class
160
+ end
141
161
  end
142
162
  end
143
163
  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.5.5
4
+ version: 1.5.6
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: 2024-05-28 00:00:00.000000000 Z
13
+ date: 2024-05-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: caxlsx_rails
@@ -498,7 +498,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
498
498
  - !ruby/object:Gem::Version
499
499
  version: '0'
500
500
  requirements: []
501
- rubygems_version: 3.2.3
501
+ rubygems_version: 3.1.2
502
502
  signing_key:
503
503
  specification_version: 4
504
504
  summary: CmAdmin is a robust gem designed to assist in creating admin panels for Rails