cm-admin 1.5.9 → 1.5.10

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: 94f9ea02b086e8af0391fd20f7022e27ac569120264a1c3a35933df453ee1116
4
- data.tar.gz: eecd4a2bfdbfd0c5a8638749fdcb6b3fdd196fed10469703caead69daee4febd
3
+ metadata.gz: 13710f4822ce508ecf0fa69b136368cfc21c2d381414fa002e7e26217ccafc03
4
+ data.tar.gz: 658aec550f94375067dac5e27c4805eb9d9fcae7b201c90e55bd04ee35818c07
5
5
  SHA512:
6
- metadata.gz: c624e3c088c6bf3d19e10a45708a376baffb539911f8a0a7f984f2fae763f3e4a746e9d2a7f70f68944d24423d6969a7c50f08d3300fc45ac3c520608f403542
7
- data.tar.gz: 953765a6b3bf55d8b8dbd85a105469007f107238773562543f8ffc7c97104a6b6529dcbb4580addda3c997ce2036d056887ba72ec103f24a95d0cfb7061a86fa
6
+ metadata.gz: 653d760b396e835a65129ecd591664cc01ae343921aa36a831f0150503530b803deb5305c85b204fc5634b3d449815c55362b2d3bf281bcf03594db500dd5dd1
7
+ data.tar.gz: bb5a3a55e20b0a020039bac2e45498f225224ac5ee249a9646fd9da1b1e00aeb322d3716a16414f19049a06d6423baffa22a6fc48b2c80a238b5c23e062eb8a1
@@ -19,10 +19,6 @@ jobs:
19
19
  rubocop_extensions: rubocop-rails:2.14.2
20
20
  github_token: ${{ secrets.GITHUB_TOKEN }}
21
21
  reporter: github-pr-check # Possible values are github-pr-check, github-pr-review
22
- - name: reek
23
- uses: reviewdog/action-reek@v1
24
- with:
25
- reek_version: 6.1.1
26
22
  - uses: actions/checkout@v3
27
23
  - name: stylelint
28
24
  uses: reviewdog/action-stylelint@v1
@@ -0,0 +1,92 @@
1
+ name: Bump Gem
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ bump_type:
7
+ type: choice
8
+ description: "Bump Type ( Choosing None will bump build number and keep the same version )"
9
+ default: "patch"
10
+ options:
11
+ - patch
12
+ - minor
13
+ - major
14
+
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ build:
21
+ name: Build gem
22
+ runs-on: ubuntu-latest
23
+
24
+ permissions:
25
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
26
+ contents: write # IMPORTANT: this permission is required for `rake release` to push the release tag
27
+
28
+ steps:
29
+ # Set up
30
+ - uses: actions/checkout@v4
31
+
32
+ - name: set git config
33
+ env:
34
+ GH_TOKEN: ${{ github.token }}
35
+ run: |
36
+ git config --global user.email "${GITHUB_ACTOR_ID}+${GITHUB_ACTOR}@users.noreply.github.com"
37
+ git config --global user.name "$(gh api /users/${GITHUB_ACTOR} | jq .name -r)"
38
+ git config -l
39
+ - name: Set up Ruby
40
+ uses: ruby/setup-ruby@v1
41
+ with:
42
+ bundler-cache: true
43
+ ruby-version: ruby
44
+
45
+ - name: Install the gem-release
46
+ run: gem install gem-release
47
+
48
+ - name: Bump the gem
49
+ run: gem bump ${{ github.events.inputs.bump_type }}
50
+
51
+ - name: Remove lock on bundle
52
+ run: bundle config set frozen false
53
+
54
+ - name: Bundle Install
55
+ run: bundle install
56
+
57
+ - name: Git Add files
58
+ run: git add Gemfile.lock
59
+
60
+ - name: Git Commit
61
+ run: git commit -m "Add bundle files"
62
+
63
+ - name: Push the new version
64
+ run: git push origin ${{ github.ref_name }}
65
+
66
+ release:
67
+
68
+ name: Release gem
69
+ runs-on: ubuntu-latest
70
+ needs: build
71
+ permissions:
72
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
73
+ contents: write # IMPORTANT: this permission is required for `rake release` to push the release tag
74
+
75
+ steps:
76
+ - uses: actions/checkout@v4
77
+
78
+ - name: Git Pull
79
+ run: git pull
80
+
81
+ - name: Set up Ruby
82
+ uses: ruby/setup-ruby@v1
83
+ with:
84
+ ruby-version: ruby
85
+ bundler-cache: true
86
+
87
+ - name: Remove lock on bundle
88
+ run: bundle config set frozen false
89
+
90
+ - uses: rubygems/release-gem@v1
91
+ with:
92
+ await-release: false
data/Gemfile CHANGED
@@ -8,9 +8,9 @@ gem 'rspec', '~> 3.0'
8
8
  gem 'slim'
9
9
 
10
10
  group :development do
11
- gem 'rubocop', '~> 1.35.1', require: false
12
- gem 'rubocop-rails', '~> 2.15.2', require: false
13
- gem 'rubocop-performance', '~> 1.14.3', require: false
11
+ gem 'rubocop', require: false
12
+ gem 'rubocop-performance', require: false
13
+ gem 'rubocop-rails', require: false
14
14
  end
15
15
  # Specify your gem's dependencies in cm_admin.gemspec
16
16
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (1.5.9)
4
+ cm-admin (1.5.10)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
@@ -98,7 +98,7 @@ GEM
98
98
  cocoon (1.2.15)
99
99
  coercible (1.0.0)
100
100
  descendants_tracker (~> 0.0.1)
101
- concurrent-ruby (1.2.2)
101
+ concurrent-ruby (1.3.3)
102
102
  crass (1.0.6)
103
103
  csv-importer (0.8.2)
104
104
  virtus
@@ -110,14 +110,15 @@ GEM
110
110
  globalid (1.2.1)
111
111
  activesupport (>= 6.1)
112
112
  htmlentities (4.3.4)
113
- i18n (1.14.1)
113
+ i18n (1.14.5)
114
114
  concurrent-ruby (~> 1.0)
115
115
  ice_nine (0.11.2)
116
116
  importmap-rails (2.0.1)
117
117
  actionpack (>= 6.0.0)
118
118
  activesupport (>= 6.0.0)
119
119
  railties (>= 6.0.0)
120
- json (2.6.2)
120
+ json (2.7.2)
121
+ language_server-protocol (3.17.0.3)
121
122
  local_time (2.1.0)
122
123
  loofah (2.22.0)
123
124
  crass (~> 1.0.2)
@@ -130,7 +131,8 @@ GEM
130
131
  marcel (1.0.4)
131
132
  method_source (1.1.0)
132
133
  mini_mime (1.1.5)
133
- minitest (5.18.1)
134
+ mini_portile2 (2.8.7)
135
+ minitest (5.24.0)
134
136
  net-imap (0.4.11)
135
137
  date
136
138
  net-protocol
@@ -141,16 +143,22 @@ GEM
141
143
  net-smtp (0.5.0)
142
144
  net-protocol
143
145
  nio4r (2.7.3)
146
+ nokogiri (1.16.5)
147
+ mini_portile2 (~> 2.8.2)
148
+ racc (~> 1.4)
144
149
  nokogiri (1.16.5-arm64-darwin)
145
150
  racc (~> 1.4)
151
+ nokogiri (1.16.5-x86_64-linux)
152
+ racc (~> 1.4)
146
153
  pagy (4.11.0)
147
- parallel (1.22.1)
148
- parser (3.1.2.1)
154
+ parallel (1.25.1)
155
+ parser (3.3.3.0)
149
156
  ast (~> 2.4.1)
157
+ racc
150
158
  pundit (2.2.0)
151
159
  activesupport (>= 3.0.0)
152
160
  racc (1.8.0)
153
- rack (2.2.7)
161
+ rack (2.2.9)
154
162
  rack-proxy (0.7.7)
155
163
  rack
156
164
  rack-test (2.1.0)
@@ -185,8 +193,9 @@ GEM
185
193
  zeitwerk (~> 2.5)
186
194
  rainbow (3.1.1)
187
195
  rake (12.3.3)
188
- regexp_parser (2.6.1)
189
- rexml (3.2.5)
196
+ regexp_parser (2.9.2)
197
+ rexml (3.3.0)
198
+ strscan
190
199
  rspec (3.10.0)
191
200
  rspec-core (~> 3.10.0)
192
201
  rspec-expectations (~> 3.10.0)
@@ -200,31 +209,34 @@ GEM
200
209
  diff-lcs (>= 1.2.0, < 2.0)
201
210
  rspec-support (~> 3.10.0)
202
211
  rspec-support (3.10.2)
203
- rubocop (1.35.1)
212
+ rubocop (1.64.1)
204
213
  json (~> 2.3)
214
+ language_server-protocol (>= 3.17.0)
205
215
  parallel (~> 1.10)
206
- parser (>= 3.1.2.1)
216
+ parser (>= 3.3.0.2)
207
217
  rainbow (>= 2.2.2, < 4.0)
208
218
  regexp_parser (>= 1.8, < 3.0)
209
219
  rexml (>= 3.2.5, < 4.0)
210
- rubocop-ast (>= 1.20.1, < 2.0)
220
+ rubocop-ast (>= 1.31.1, < 2.0)
211
221
  ruby-progressbar (~> 1.7)
212
- unicode-display_width (>= 1.4.0, < 3.0)
213
- rubocop-ast (1.23.0)
214
- parser (>= 3.1.1.0)
215
- rubocop-performance (1.14.3)
216
- rubocop (>= 1.7.0, < 2.0)
217
- rubocop-ast (>= 0.4.0)
218
- rubocop-rails (2.15.2)
222
+ unicode-display_width (>= 2.4.0, < 3.0)
223
+ rubocop-ast (1.31.3)
224
+ parser (>= 3.3.1.0)
225
+ rubocop-performance (1.21.1)
226
+ rubocop (>= 1.48.1, < 2.0)
227
+ rubocop-ast (>= 1.31.1, < 2.0)
228
+ rubocop-rails (2.25.0)
219
229
  activesupport (>= 4.2.0)
220
230
  rack (>= 1.1)
221
- rubocop (>= 1.7.0, < 2.0)
222
- ruby-progressbar (1.11.0)
231
+ rubocop (>= 1.33.0, < 2.0)
232
+ rubocop-ast (>= 1.31.1, < 2.0)
233
+ ruby-progressbar (1.13.0)
223
234
  rubyzip (2.3.2)
224
235
  semantic_range (3.0.0)
225
236
  slim (4.1.0)
226
237
  temple (>= 0.7.6, < 0.9)
227
238
  tilt (>= 2.0.6, < 2.1)
239
+ strscan (3.1.0)
228
240
  temple (0.8.2)
229
241
  thor (1.3.1)
230
242
  thread_safe (0.3.6)
@@ -232,7 +244,7 @@ GEM
232
244
  timeout (0.4.1)
233
245
  tzinfo (2.0.6)
234
246
  concurrent-ruby (~> 1.0)
235
- unicode-display_width (2.3.0)
247
+ unicode-display_width (2.5.0)
236
248
  virtus (2.0.0)
237
249
  axiom-types (~> 0.1)
238
250
  coercible (~> 1.0)
@@ -250,6 +262,8 @@ GEM
250
262
  PLATFORMS
251
263
  arm64-darwin-20
252
264
  arm64-darwin-22
265
+ arm64-darwin-23
266
+ ruby
253
267
  x86_64-linux
254
268
 
255
269
  DEPENDENCIES
@@ -259,10 +273,10 @@ DEPENDENCIES
259
273
  pundit
260
274
  rake (~> 12.0)
261
275
  rspec (~> 3.0)
262
- rubocop (~> 1.35.1)
263
- rubocop-performance (~> 1.14.3)
264
- rubocop-rails (~> 2.15.2)
276
+ rubocop
277
+ rubocop-performance
278
+ rubocop-rails
265
279
  slim
266
280
 
267
281
  BUNDLED WITH
268
- 2.2.33
282
+ 2.5.13
@@ -16,8 +16,8 @@
16
16
  border-radius: $radius-4;
17
17
  z-index: 1;
18
18
  &.table-export-popup {
19
- top: 36px;
20
- right: 40px;
19
+ top: -5px;
20
+ right: 50px;
21
21
  width: 156px;
22
22
  padding: 8px 0;
23
23
  .popup-option {
@@ -29,7 +29,7 @@
29
29
  margin-left: 32px;
30
30
  cursor: pointer;
31
31
  &::before {
32
- content: '';
32
+ content: "";
33
33
  position: absolute;
34
34
  top: -5px;
35
35
  left: -16px;
@@ -78,7 +78,9 @@
78
78
  &:focus {
79
79
  border-color: $brand-color !important;
80
80
  outline: 0 !important;
81
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6) !important;
81
+ box-shadow:
82
+ inset 0 1px 1px rgba(0, 0, 0, 0.075),
83
+ 0 0 8px rgba(102, 175, 233, 0.6) !important;
82
84
  }
83
85
  }
84
86
 
@@ -95,7 +97,9 @@
95
97
  &:focus {
96
98
  border-color: $brand-color;
97
99
  outline: 0;
98
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
100
+ box-shadow:
101
+ inset 0 1px 1px rgba(0, 0, 0, 0.075),
102
+ 0 0 8px rgba(102, 175, 233, 0.6);
99
103
  }
100
104
  .select2-selection__rendered {
101
105
  color: #555555;
@@ -192,3 +196,10 @@
192
196
  }
193
197
  }
194
198
  }
199
+
200
+ //TODO: Fixing the filter search height by overriding. But this needs to be fixed on auth. The auth .form-control class styles causing this issue
201
+ .filter-search {
202
+ input {
203
+ height: 31px;
204
+ }
205
+ }
@@ -77,7 +77,7 @@
77
77
  border-bottom: 1px solid var(--bs-border-color);
78
78
  &:hover {
79
79
  .row-action-tool {
80
- visibility: visible;
80
+ display: inline;
81
81
  }
82
82
  }
83
83
  }
@@ -110,7 +110,7 @@
110
110
  z-index: 3 !important;
111
111
  background: transparent;
112
112
  .row-action-tool {
113
- visibility: hidden;
113
+ display: none;
114
114
  position: relative;
115
115
  .popup-card {
116
116
  .popup-option {
@@ -4,7 +4,10 @@
4
4
  p.section-heading = section.section_name
5
5
  .card
6
6
  .card-body
7
- - section.section_fields.each do |field|
8
- = show_field(@ar_object, field)
7
+ - if !section.section_fields.empty?
8
+ - section.section_fields.each do |field|
9
+ = show_field(@ar_object, field)
10
+ - if section.rows.present?
11
+ = show_rows(@ar_object, section.rows)
9
12
  - section.nested_table_fields.each do |nested_field|
10
- = render partial: 'cm_admin/main/nested_table_section', locals: { nested_field: nested_field, ar_object: @ar_object }
13
+ = render partial: 'cm_admin/main/nested_table_section', locals: { nested_field: nested_field, ar_object: @ar_object }
@@ -6,7 +6,7 @@ module CmAdmin
6
6
  include Utils::Helpers
7
7
 
8
8
  attr_accessor :field_name, :label, :header, :input_type, :collection, :disabled, :helper_method,
9
- :placeholder, :display_if, :html_attr, :target, :col_size, :ajax_url
9
+ :placeholder, :display_if, :html_attrs, :target, :col_size, :ajax_url
10
10
 
11
11
  VALID_INPUT_TYPES = %i[
12
12
  integer decimal string single_select multi_select date date_time text
@@ -28,7 +28,7 @@ module CmAdmin
28
28
  self.disabled = lambda { |arg| return false } if display_if.nil?
29
29
  self.label = self.field_name.to_s.titleize
30
30
  self.input_type = :string
31
- self.html_attr = {}
31
+ self.html_attrs = {}
32
32
  self.target = {}
33
33
  self.col_size = nil
34
34
  end
@@ -27,6 +27,14 @@ module CmAdmin
27
27
  end
28
28
  end
29
29
 
30
+ def field(field_name, options={})
31
+ if @current_nested_field
32
+ @current_nested_field.fields << CmAdmin::Models::Field.new(field_name, options)
33
+ else
34
+ @row_fields << CmAdmin::Models::Field.new(field_name, options)
35
+ end
36
+ end
37
+
30
38
  def cm_section(section_name, col_size: nil, display_if: nil, &block)
31
39
  @sections << CmAdmin::Models::Section.new(section_name, @current_action, @model, display_if, col_size, &block)
32
40
  end
@@ -37,4 +45,4 @@ module CmAdmin
37
45
  end
38
46
  end
39
47
  end
40
- end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.5.9'
2
+ VERSION = '1.5.10'
3
3
  end
@@ -9,6 +9,23 @@ module CmAdmin
9
9
  end
10
10
  end
11
11
 
12
+ def show_rows(ar_object, rows, col_size: 3)
13
+ rows.map do |row|
14
+ content_tag(:div, class: 'row') do
15
+ row.row_fields.map do |field|
16
+ next unless field.display_if.call(ar_object)
17
+
18
+ content_tag(:div, class: "col-#{col_size}") do
19
+ content_tag(:div, class: "card-info") do
20
+ concat show_field_label(ar_object, field)
21
+ concat value_with_prefix_and_suffix(ar_object, field)
22
+ end
23
+ end
24
+ end.compact.join.html_safe
25
+ end
26
+ end.join.html_safe
27
+ end
28
+
12
29
  def show_field_label(ar_object, field)
13
30
  content_tag(:div, class: "card-info__label") do
14
31
  field_label = if field.label.present?
@@ -71,7 +88,7 @@ module CmAdmin
71
88
  when :tag
72
89
  tag_class = field.tag_class.dig("#{ar_object.send(field.field_name.to_s)}".to_sym).to_s
73
90
  content_tag :span, class: "status-tag #{tag_class}" do
74
- ar_object.send(field.field_name).to_s.upcase
91
+ ar_object.send(field.field_name).to_s.titleize.upcase
75
92
  end
76
93
  when :attachment
77
94
  show_attachment_value(ar_object, field)
@@ -19,57 +19,73 @@ module CmAdmin
19
19
 
20
20
  def cm_integer_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
21
21
  form_obj.text_field cm_field.field_name,
22
- class: "field-control #{required_class}",
23
- disabled: cm_field.disabled.call(form_obj.object),
24
- value: value,
25
- placeholder: cm_field.placeholder,
26
- data: { behaviour: 'integer-only' }
22
+ merge_wrapper_options(
23
+ {
24
+ class: "field-control #{required_class}",
25
+ disabled: cm_field.disabled.call(form_obj.object),
26
+ value: value,
27
+ placeholder: cm_field.placeholder,
28
+ data: { behaviour: 'integer-only' }
29
+ }, cm_field.html_attrs )
27
30
  end
28
31
 
29
32
  def cm_decimal_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
30
33
  form_obj.text_field cm_field.field_name,
34
+ merge_wrapper_options({
31
35
  class: "field-control #{required_class}",
32
36
  disabled: cm_field.disabled.call(form_obj.object),
33
37
  value: value,
34
38
  placeholder: cm_field.placeholder,
35
39
  data: { behaviour: 'decimal-only' }
40
+ }, cm_field.html_attrs )
36
41
  end
37
42
 
38
43
  def cm_string_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
39
44
  form_obj.text_field cm_field.field_name,
40
- class: "field-control #{required_class}",
41
- disabled: cm_field.disabled.call(form_obj.object),
42
- value: value,
43
- placeholder: cm_field.placeholder
45
+ merge_wrapper_options(
46
+ {
47
+ class: "field-control #{required_class}",
48
+ disabled: cm_field.disabled.call(form_obj.object),
49
+ value: value,
50
+ placeholder: cm_field.placeholder
51
+ }, cm_field.html_attrs )
44
52
  end
45
53
 
46
54
  def cm_custom_string_field(form_obj, cm_field, value, required_class, _target_action)
47
- text_field_tag cm_field.html_attr[:name] || cm_field.field_name,
48
- value, class: "field-control #{required_class}",
49
- disabled: cm_field.disabled.call(form_obj.object),
50
- placeholder: cm_field.placeholder
55
+ text_field_tag cm_field.html_attrs[:name] || cm_field.field_name,
56
+ merge_wrapper_options(
57
+ {
58
+ value: value,
59
+ class: "field-control #{required_class}",
60
+ disabled: cm_field.disabled.call(form_obj.object),
61
+ placeholder: cm_field.placeholder
62
+ }, cm_field.html_attrs )
51
63
  end
52
64
 
53
65
  def cm_single_select_field(form_obj, cm_field, value, required_class, target_action, ajax_url)
54
66
  class_name = ajax_url.present? ? 'select-2-ajax' : 'select-2'
55
67
  form_obj.select cm_field.field_name, options_for_select(select_collection_value(form_obj.object, cm_field), form_obj.object.send(cm_field.field_name)),
56
- { include_blank: cm_field.placeholder },
57
- class: "field-control #{required_class} #{class_name}",
58
- disabled: cm_field.disabled.call(form_obj.object),
59
- data: {
60
- field_name: cm_field.field_name,
61
- field_type: 'linked-field',
62
- target_action: target_action&.name,
63
- target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : '',
64
- ajax_url: ajax_url
65
- }
68
+ {include_blank: cm_field.placeholder},
69
+ merge_wrapper_options(
70
+ {
71
+ class: "field-control #{required_class} #{class_name}",
72
+ disabled: cm_field.disabled.call(form_obj.object),
73
+ data: {
74
+ field_name: cm_field.field_name,
75
+ field_type: 'linked-field',
76
+ target_action: target_action&.name,
77
+ target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : '',
78
+ ajax_url: ajax_url
79
+ }
80
+ }, cm_field.html_attrs )
66
81
  end
67
82
 
68
83
  def cm_custom_single_select_field(form_obj, cm_field, value, required_class, target_action, _ajax_url)
69
- select_tag cm_field.html_attr[:name] || cm_field.field_name,
84
+ select_tag cm_field.html_attrs[:name] || cm_field.field_name,
70
85
  options_for_select(select_collection_value(form_obj.object, cm_field)),
86
+ {include_blank: cm_field.placeholder}
87
+ merge_wrapper_options(
71
88
  {
72
- include_blank: cm_field.placeholder,
73
89
  class: "field-control #{required_class} select-2",
74
90
  disabled: cm_field.disabled.call(form_obj.object),
75
91
  data: {
@@ -78,66 +94,94 @@ module CmAdmin
78
94
  target_action: target_action&.name,
79
95
  target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : ''
80
96
  }
81
- }
97
+ }, cm_field.html_attrs )
82
98
  end
83
99
 
84
100
  def cm_multi_select_field(form_obj, cm_field, value, required_class, target_action, _ajax_url)
85
101
  form_obj.select cm_field.field_name,
86
102
  options_for_select(select_collection_value(form_obj.object, cm_field), form_obj.object.send(cm_field.field_name)),
87
- { include_blank: cm_field.placeholder },
88
- class: "field-control #{required_class} select-2",
89
- disabled: cm_field.disabled.call(form_obj.object), multiple: true
103
+ {include_blank: cm_field.placeholder}
104
+ merge_wrapper_options(
105
+ {
106
+ class: "field-control #{required_class} select-2",
107
+ disabled: cm_field.disabled.call(form_obj.object), multiple: true
108
+ }, cm_field.html_attrs )
90
109
  end
91
110
 
92
111
  def cm_date_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
93
112
  form_obj.text_field cm_field.field_name,
113
+ merge_wrapper_options(
114
+ {
94
115
  class: "field-control #{required_class}",
95
116
  disabled: cm_field.disabled.call(form_obj.object),
96
117
  value: value&.strftime('%d-%m-%Y'),
97
118
  placeholder: cm_field.placeholder,
98
119
  data: { behaviour: 'date-only' }
120
+ }, cm_field.html_attrs )
99
121
  end
100
122
 
101
123
  def cm_custom_date_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
102
- text_field_tag cm_field.html_attr[:name] || cm_field.field_name, value&.strftime('%d-%m-%Y'),
124
+ text_field_tag cm_field.html_attrs[:name] || cm_field.field_name, value&.strftime('%d-%m-%Y'),
125
+ merge_wrapper_options(
126
+ {
103
127
  class: "field-control #{required_class}",
104
128
  disabled: cm_field.disabled.call(form_obj.object),
105
129
  value: value&.strftime('%d-%m-%Y'),
106
130
  placeholder: cm_field.placeholder,
107
131
  data: { behaviour: 'date-only' }
132
+ }, cm_field.html_attrs )
108
133
  end
109
134
 
110
135
  def cm_date_time_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
111
136
  form_obj.text_field cm_field.field_name,
137
+ merge_wrapper_options(
138
+ {
112
139
  class: "field-control #{required_class}",
113
140
  disabled: cm_field.disabled.call(form_obj.object),
114
141
  value: value,
115
142
  placeholder: cm_field.placeholder,
116
143
  data: { behaviour: 'date-time' }
144
+ }, cm_field.html_attrs )
117
145
  end
118
146
 
119
147
  def cm_text_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
120
148
  form_obj.text_area cm_field.field_name,
121
- class: "field-control #{required_class}",
122
- placeholder: cm_field.placeholder
149
+ merge_wrapper_options(
150
+ {
151
+ class: "field-control #{required_class}",
152
+ placeholder: cm_field.placeholder
153
+ }, cm_field.html_attrs)
123
154
  end
124
155
 
125
156
  def cm_rich_text_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
126
157
  form_obj.rich_text_area cm_field.field_name,
127
- class: "field-control #{required_class}",
128
- placeholder: cm_field.placeholder
158
+ merge_wrapper_options(
159
+ {
160
+ class: "field-control #{required_class}",
161
+ placeholder: cm_field.placeholder
162
+ }, cm_field.html_attrs)
129
163
  end
130
164
 
131
165
  def cm_single_file_upload_field(form_obj, cm_field, _value, required_class, _target_action, _ajax_url)
132
166
  content_tag(:div) do
133
- concat form_obj.file_field cm_field.field_name, class: "field-control #{required_class}", disabled: cm_field.disabled.call(form_obj.object)
167
+ concat form_obj.file_field cm_field.field_name,
168
+ merge_wrapper_options(
169
+ {
170
+ class: "field-control #{required_class}",
171
+ disabled: cm_field.disabled.call(form_obj.object)
172
+ }, cm_field.html_attrs )
134
173
  concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
135
174
  end
136
175
  end
137
176
 
138
177
  def cm_multi_file_upload_field(form_obj, cm_field, _value, required_class, _target_action, _ajax_url)
139
178
  content_tag(:div) do
140
- concat form_obj.file_field cm_field.field_name, multiple: true, class: "field-control #{required_class}", disabled: cm_field.disabled.call(form_obj.object)
179
+ concat form_obj.file_field cm_field.field_name,
180
+ merge_wrapper_options(
181
+ {
182
+ multiple: true, class: "field-control #{required_class}",
183
+ disabled: cm_field.disabled.call(form_obj.object)
184
+ }, cm_field.html_attrs )
141
185
  concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
142
186
  end
143
187
  end
@@ -145,7 +189,7 @@ module CmAdmin
145
189
  def attachment_list(form_obj, cm_field, _value, required_class, _target_action)
146
190
  attached = form_obj.object.send(cm_field.field_name)
147
191
  return if defined?(::Paperclip) && attached.instance_of?(::Paperclip::Attachment)
148
-
192
+
149
193
  content_tag(:div) do
150
194
  if attached.class == ActiveStorage::Attached::Many
151
195
  attached.each do |attachment|
@@ -176,8 +220,11 @@ module CmAdmin
176
220
 
177
221
  def cm_hidden_field(form_obj, cm_field, value, required_class, _target_action, _ajax_url)
178
222
  form_obj.hidden_field cm_field.field_name,
179
- value: value,
180
- name: cm_field.html_attr[:name] || "#{form_obj.object_name}[#{cm_field.field_name}]"
223
+ merge_wrapper_options(
224
+ {
225
+ value: value,
226
+ name: cm_field.html_attrs[:name] || "#{form_obj.object_name}[#{cm_field.field_name}]"
227
+ }, cm_field.html_attrs )
181
228
  end
182
229
 
183
230
  # Refactor: Collection argument can be removed.
@@ -197,15 +244,16 @@ module CmAdmin
197
244
  format_check_box_array(value, form_obj, cm_field, required_class, target_action)
198
245
  else
199
246
  form_obj.check_box cm_field.field_name,
200
- {
201
- class: "cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
202
- disabled: cm_field.disabled.call(form_obj.object),
203
- data: {
204
- field_name: cm_field.field_name,
205
- target_action: target_action&.name,
206
- target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : ''
207
- }
208
- }
247
+ merge_wrapper_options(
248
+ {
249
+ class: "cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
250
+ disabled: cm_field.disabled.call(form_obj.object),
251
+ data: {
252
+ field_name: cm_field.field_name,
253
+ target_action: target_action&.name,
254
+ target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : ''
255
+ }
256
+ }, cm_field.html_attrs )
209
257
  end
210
258
  end
211
259
 
@@ -227,6 +275,7 @@ module CmAdmin
227
275
  def format_check_box_tag(val, form_obj, cm_field, required_class, target_action)
228
276
  content_tag :div, class: 'cm-radio-tag' do
229
277
  concat form_obj.check_box cm_field.field_name,
278
+ merge_wrapper_options(
230
279
  {
231
280
  class: "cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
232
281
  disabled: cm_field.disabled.call(form_obj.object),
@@ -235,7 +284,8 @@ module CmAdmin
235
284
  target_action: target_action&.name,
236
285
  target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path", ':param_1') : ''
237
286
  }
238
- }, val
287
+ }, cm_field.html_attrs ),
288
+ val
239
289
  end
240
290
  end
241
291
 
@@ -259,6 +309,24 @@ module CmAdmin
259
309
  concat form_obj.radio_button :level, val, class: 'field-control cm-radio'
260
310
  end
261
311
  end
312
+
313
+ def merge_wrapper_options(options, html_attrs)
314
+ if html_attrs
315
+ options.merge(html_attrs) do |key, oldval, newval|
316
+ case key.to_s
317
+ when "class"
318
+ oldval + " " + newval
319
+ when "data", "aria"
320
+ oldval.merge(newval)
321
+ else
322
+ newval
323
+ end
324
+ end
325
+ else
326
+ options
327
+ end
328
+ end
329
+
262
330
  end
263
331
  end
264
332
  end
data/package-lock.json CHANGED
@@ -13650,9 +13650,9 @@
13650
13650
  }
13651
13651
  },
13652
13652
  "node_modules/ws": {
13653
- "version": "8.13.0",
13654
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
13655
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
13653
+ "version": "8.17.1",
13654
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
13655
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
13656
13656
  "dev": true,
13657
13657
  "engines": {
13658
13658
  "node": ">=10.0.0"
data/yarn.lock CHANGED
@@ -7717,9 +7717,9 @@ write-file-atomic@^4.0.2:
7717
7717
  signal-exit "^3.0.7"
7718
7718
 
7719
7719
  ws@^8.4.2:
7720
- version "8.8.0"
7721
- resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz"
7722
- integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==
7720
+ version "8.17.1"
7721
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
7722
+ integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
7723
7723
 
7724
7724
  xtend@^4.0.0, xtend@~4.0.1:
7725
7725
  version "4.0.2"
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - sajinmp
8
8
  - anbublacky
9
9
  - AdityaTiwari2102
10
- autorequire:
10
+ autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2024-06-10 00:00:00.000000000 Z
13
+ date: 2024-06-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: caxlsx_rails
@@ -168,8 +168,8 @@ files:
168
168
  - ".github/ISSUE_TEMPLATE/config.yml"
169
169
  - ".github/ISSUE_TEMPLATE/feature_request.md"
170
170
  - ".github/workflows/linters.yml"
171
+ - ".github/workflows/release-gem.yml"
171
172
  - ".gitignore"
172
- - ".reek.yml"
173
173
  - ".rspec"
174
174
  - ".rubocop-https---raw-githubusercontent-com-commutatus-cm-linters-main-rubocop-yml"
175
175
  - ".rubocop.yml"
@@ -483,7 +483,7 @@ licenses:
483
483
  metadata:
484
484
  homepage_uri: https://github.com/commutatus/cm-admin
485
485
  source_code_uri: https://github.com/commutatus/cm-admin
486
- post_install_message:
486
+ post_install_message:
487
487
  rdoc_options: []
488
488
  require_paths:
489
489
  - lib
@@ -498,8 +498,8 @@ 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
502
- signing_key:
501
+ rubygems_version: 3.5.11
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
505
505
  applications
data/.reek.yml DELETED
@@ -1,9 +0,0 @@
1
- detectors:
2
- IrresponsibleModule:
3
- enabled: false
4
- UncommunicativeVariableName:
5
- enabled: true
6
- accept:
7
- - e
8
- TooManyStatements:
9
- enabled: false