administrate 0.19.0 → 0.20.0

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: a94bb51af4fa730f84d042f402122cc3073894e67494309dab4621b5f39b36fa
4
- data.tar.gz: 57e7d78f316c635be65735e5c4220bd4e8d777c29c1d92741ab2520998080cde
3
+ metadata.gz: eebcadb06ece9944279b1119e950922a388078a5c9ab5b95d6d8863c1e03994d
4
+ data.tar.gz: 96a697e2e10228a5f2772b1602985107f7ed428ca63d77c7d6e964a614659b9d
5
5
  SHA512:
6
- metadata.gz: 4d7b0a4b21404d16b48a5545e57202b73b3d782e23a5b26b5ed9e52ab3a66069717e23b1e099727eba9ff99315ba757d8ad0b739895a56775fbb5f3f8279df29
7
- data.tar.gz: 07cc800c0c7cca79231ac047d10120ef63ec1c7d95aa5dccac9c7b1b5a99cafaccc2c31165c7350920721e622063190b0f804fb05d1e436c518511639802d4bd
6
+ metadata.gz: da130cb7cdcfd15321a653a59cfb499411f85324c19216097a6f4a76407268cc6691647e2ccdf86c367bd6c2e1491342324de89e22c9152eddbea8e6ba32b819
7
+ data.tar.gz: 8813f237457fa4e37abf8d5c350e4fb4f8f536583a6919764bc5c2abb0bc3b3fc436431b41e731722045179c45dcfef0d4c45d8c5534e7d26ee52d151252665f
@@ -2,6 +2,7 @@
2
2
  @include administrate-clearfix;
3
3
  align-items: center;
4
4
  display: flex;
5
+ flex-wrap: wrap;
5
6
  margin-bottom: $base-spacing;
6
7
  position: relative;
7
8
  width: 100%;
@@ -25,6 +26,12 @@
25
26
  }
26
27
  }
27
28
 
29
+ .field-unit__hint {
30
+ font-size: 90%;
31
+ margin-left: calc(15% + 2rem);
32
+ width: 100%;
33
+ }
34
+
28
35
  .field-unit--nested {
29
36
  border: $base-border;
30
37
  margin-left: 7.5%;
@@ -44,6 +44,7 @@ module Administrate
44
44
  authorize_resource(resource)
45
45
 
46
46
  if resource.save
47
+ yield(resource) if block_given?
47
48
  redirect_to(
48
49
  after_resource_created_path(resource),
49
50
  notice: translate_with_resource("create.success"),
@@ -9,31 +9,27 @@ module Administrate
9
9
  include Pundit
10
10
  end
11
11
 
12
- included do
13
- private
14
-
15
- def policy_namespace
16
- []
17
- end
12
+ private
18
13
 
19
- def scoped_resource
20
- namespaced_scope = policy_namespace + [super]
21
- policy_scope!(pundit_user, namespaced_scope)
22
- end
14
+ def policy_namespace
15
+ []
16
+ end
23
17
 
24
- def authorize_resource(resource)
25
- namespaced_resource = policy_namespace + [resource]
26
- authorize namespaced_resource
27
- end
18
+ def scoped_resource
19
+ namespaced_scope = policy_namespace + [super]
20
+ policy_scope!(pundit_user, namespaced_scope)
21
+ end
28
22
 
29
- def authorized_action?(resource, action)
30
- namespaced_resource = policy_namespace + [resource]
31
- policy = Pundit.policy!(pundit_user, namespaced_resource)
32
- policy.send("#{action}?".to_sym)
33
- end
23
+ def authorize_resource(resource)
24
+ namespaced_resource = policy_namespace + [resource]
25
+ authorize namespaced_resource
34
26
  end
35
27
 
36
- private
28
+ def authorized_action?(resource, action)
29
+ namespaced_resource = policy_namespace + [resource]
30
+ policy = Pundit.policy!(pundit_user, namespaced_resource)
31
+ policy.send("#{action}?".to_sym)
32
+ end
37
33
 
38
34
  def policy_scope!(user, scope)
39
35
  policy_scope_class = Pundit::PolicyFinder.new(scope).scope!
@@ -46,7 +42,7 @@ module Administrate
46
42
  end
47
43
 
48
44
  if policy_scope.respond_to? :resolve_admin
49
- ActiveSupport::Deprecation.warn(
45
+ Administrate.deprecator.warn(
50
46
  "Pundit policy scope `resolve_admin` method is deprecated. " +
51
47
  "Please use a namespaced pundit policy instead.",
52
48
  )
@@ -33,10 +33,25 @@ and renders all form fields for a resource's editable attributes.
33
33
  </div>
34
34
  <% end %>
35
35
 
36
- <% page.attributes(controller.action_name).each do |attribute| -%>
37
- <div class="field-unit field-unit--<%= attribute.html_class %> field-unit--<%= requireness(attribute) %>">
38
- <%= render_field attribute, f: f %>
39
- </div>
36
+ <% page.attributes(controller.action_name).each do |title, attributes| -%>
37
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
38
+ <% if title.present? %>
39
+ <legend><%= t "helpers.label.#{f.object_name}.#{title}", default: title %></legend>
40
+ <% end %>
41
+
42
+ <% attributes.each do |attribute| %>
43
+ <div class="field-unit field-unit--<%= attribute.html_class %> field-unit--<%= requireness(attribute) %>">
44
+ <%= render_field attribute, f: f %>
45
+
46
+ <% hint_key = "administrate.field_hints.#{page.resource_name}.#{attribute.name}" %>
47
+ <% if I18n.exists?(hint_key) -%>
48
+ <div class="field-unit__hint">
49
+ <%= I18n.t(hint_key) %>
50
+ </div>
51
+ <% end -%>
52
+ </div>
53
+ <% end %>
54
+ </fieldset>
40
55
  <% end -%>
41
56
 
42
57
  <div class="form-actions">
@@ -42,16 +42,24 @@ as well as a link to its edit page.
42
42
 
43
43
  <section class="main-content__body">
44
44
  <dl>
45
- <% page.attributes.each do |attribute| %>
46
- <dt class="attribute-label" id="<%= attribute.name %>">
47
- <%= t(
48
- "helpers.label.#{resource_name}.#{attribute.name}",
49
- default: page.resource.class.human_attribute_name(attribute.name),
50
- ) %>
51
- </dt>
52
-
53
- <dd class="attribute-data attribute-data--<%=attribute.html_class%>"
54
- ><%= render_field attribute, page: page %></dd>
45
+ <% page.attributes.each do |title, attributes| %>
46
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
47
+ <% if title.present? %>
48
+ <legend><%= t "helpers.label.#{page.resource_name}.#{title}", default: title %></legend>
49
+ <% end %>
50
+
51
+ <% attributes.each do |attribute| %>
52
+ <dt class="attribute-label" id="<%= attribute.name %>">
53
+ <%= t(
54
+ "helpers.label.#{resource_name}.#{attribute.name}",
55
+ default: page.resource.class.human_attribute_name(attribute.name),
56
+ ) %>
57
+ </dt>
58
+
59
+ <dd class="attribute-data attribute-data--<%=attribute.html_class%>"
60
+ ><%= render_field attribute, page: page %></dd>
61
+ <% end %>
62
+ </fieldset>
55
63
  <% end %>
56
64
  </dl>
57
65
  </section>
@@ -19,10 +19,20 @@ The form will be rendered as nested_from to parent relationship.
19
19
  <%= f.fields_for field.attribute, field.data || field.nested_form.resource.class.new do |has_one_f| %>
20
20
  <fieldset class="field-unit--nested">
21
21
  <legend><%= t "helpers.label.#{f.object_name}.#{field.name}", default: field.name.titleize %></legend>
22
- <% field.nested_form.attributes.each do |attribute| -%>
23
- <div class="field-unit field-unit--<%= attribute.html_class %>">
24
- <%= render_field attribute, f: has_one_f %>
25
- </div>
22
+ <% field.nested_form.attributes.each do |title, attributes| -%>
23
+
24
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
25
+ <% if title.present? %>
26
+ <legend><%= t "helpers.label.#{f.object_name}.#{title}", default: title %></legend>
27
+ <% end %>
28
+
29
+ <% attributes.each do |attribute| %>
30
+ <div class="field-unit field-unit--<%= attribute.html_class %>">
31
+ <%= render_field attribute, f: has_one_f %>
32
+ </div>
33
+ <% end %>
34
+ </fieldset>
35
+
26
36
  <% end -%>
27
37
  </fieldset>
28
38
  <% end %>
@@ -24,18 +24,24 @@ All show page attributes of has_one relationship would be rendered
24
24
  [namespace, field.data],
25
25
  ) %>
26
26
  </legend>
27
- <% field.nested_show.attributes.each do |attribute| -%>
28
- <div>
29
- <dt class="attribute-label">
30
- <%= t(
31
- "helpers.label.#{field.associated_class_name.underscore}.#{attribute.name}",
32
- default: attribute.name.titleize,
33
- ) %>
34
- </dt>
35
- <dd class="attribute-data attribute-data--<%= attribute.html_class %>">
36
- <%= render_field attribute, { page: page } %>
37
- </dd>
38
- </div>
27
+ <% field.nested_show.attributes.each do |title, attributes| -%>
28
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
29
+ <% if title.present? %>
30
+ <legend><%= t "helpers.label.#{namespace}.#{title}", default: title %></legend>
31
+ <% end %>
32
+
33
+ <% attributes.each do |attribute| %>
34
+ <dt class="attribute-label">
35
+ <%= t(
36
+ "helpers.label.#{field.associated_class_name.underscore}.#{attribute.name}",
37
+ default: attribute.name.titleize,
38
+ ) %>
39
+ </dt>
40
+ <dd class="attribute-data attribute-data--<%= attribute.html_class %>">
41
+ <%= render_field attribute, { page: page } %>
42
+ </dd>
43
+ <% end %>
44
+ </fieldset>
39
45
  <% end -%>
40
46
  </fieldset>
41
47
  <% end %>
@@ -93,3 +93,17 @@ To set custom redirects after the actions `create`, `update` and `destroy` you c
93
93
  [namespace, requested_resource.some_other_resource]
94
94
  end
95
95
  ```
96
+
97
+ ## Creating Records
98
+
99
+ You can perform actions after creation by passing a `block` to `super` in the
100
+ `create` method. The block will only be called if the resource is successfully
101
+ created.
102
+
103
+ ```ruby
104
+ def create
105
+ super do |resource|
106
+ # do something with the newly created resource
107
+ end
108
+ end
109
+ ```
@@ -113,6 +113,9 @@ association `belongs_to :country`, from your model.
113
113
 
114
114
  **Field::HasMany**
115
115
 
116
+ `:collection_attributes` - Set the columns to display in the show view.
117
+ Default is COLLECTION_ATTRIBUTES in dashboard.
118
+
116
119
  `:limit` - The number of resources (paginated) to display in the show view. To disable pagination,
117
120
  set this to `0` or `false`. Default is `5`.
118
121
 
@@ -168,8 +171,7 @@ more results than expected. Default is `false`.
168
171
  and works by by passing a hash that includes the formatter (`formatter`) and
169
172
  the options for the formatter (`formatter_options`). Defaults to the locale's
170
173
  delimiter when `formatter_options` does not include a `delimiter`. See the
171
- example below. Note that currently only
172
- `ActiveSupport::NumberHelper.number_to_delimited` is supported.
174
+ example below. All helpers from `ActiveSupport::NumberHelper` are supported.
173
175
 
174
176
  For example, you might use the following to display U.S. currency:
175
177
 
@@ -383,3 +385,54 @@ FORM_ATTRIBUTES_EDIT = [
383
385
  ```
384
386
 
385
387
  Or for custom action with constant name `"FORM_ATTRIBUTES_#{action.upcase}"`
388
+
389
+ ### Form Fields' Hints
390
+
391
+ You can show a brief text element below an input field by setting the
392
+ corresponding translation key using the path:
393
+
394
+ `administrate.field_hints.#{model_name}.#{field_name}`
395
+
396
+ For example, with a Customer dashboard with an email field you can add a
397
+ string value that will be used as text hint:
398
+
399
+ ```yml
400
+ en:
401
+ administrate:
402
+ field_hints:
403
+ customer:
404
+ email: field_hint
405
+ ```
406
+
407
+ ## Grouped Attributes
408
+
409
+ You may have models with a large number of fields and therefore you might want to group them in a meaningul way:
410
+
411
+ ```ruby
412
+ class UserDashboard < Administrate::BaseDashboard
413
+ SHOW_PAGE_ATTRIBUTES = {
414
+ "" => [:username],
415
+ "Personal Information" => [:first_name, :last_name, :email],
416
+ "Address" => [:address_line_one, :address_line_two, :address_city, :address_state, :address_country]
417
+ }
418
+
419
+ FORM_ATTRIBUTES = {
420
+ "" => [:username, :password, :password_confirmation],
421
+ "personal_information" => [:first_name, :last_name, :email],
422
+ "address" => [:address_line_one, :address_line_two, :address_city, :address_state, :address_country]
423
+ }
424
+ end
425
+ ```
426
+
427
+ You can optionally translate your group labels:
428
+
429
+ ```yaml
430
+ en:
431
+ helpers:
432
+ label:
433
+ user:
434
+ address: Address
435
+ personal_information: Personal Information
436
+ ```
437
+
438
+ If not defined (see `SHOW_PAGE_ATTRIBUTES` above), Administrate will default to the given strings.
@@ -3,7 +3,7 @@ title: Getting Started
3
3
  ---
4
4
 
5
5
  Administrate is released as a Ruby gem, and can be installed on Rails
6
- applications version 6.0 or greater. We support Ruby 2.7 and up.
6
+ applications version 6.0 or greater. We support Ruby 3.0 and up.
7
7
 
8
8
  First, add the following to your Gemfile:
9
9
 
@@ -69,7 +69,13 @@ module Administrate
69
69
  end
70
70
 
71
71
  def permitted_attributes(action = nil)
72
- form_attributes(action).map do |attr|
72
+ attributes = form_attributes action
73
+
74
+ if attributes.is_a? Hash
75
+ attributes = attributes.values.flatten
76
+ end
77
+
78
+ attributes.map do |attr|
73
79
  attribute_types[attr].permitted_attribute(
74
80
  attr,
75
81
  resource_class: self.class.model,
@@ -83,7 +89,11 @@ module Administrate
83
89
  end
84
90
 
85
91
  def collection_attributes
86
- self.class::COLLECTION_ATTRIBUTES
92
+ if self.class::COLLECTION_ATTRIBUTES.is_a?(Hash)
93
+ self.class::COLLECTION_ATTRIBUTES.values.flatten
94
+ else
95
+ self.class::COLLECTION_ATTRIBUTES
96
+ end
87
97
  end
88
98
 
89
99
  def search_attributes
@@ -107,7 +117,12 @@ module Administrate
107
117
  end
108
118
 
109
119
  def item_associations
110
- attribute_associated(show_page_attributes)
120
+ attributes = if show_page_attributes.is_a?(Hash)
121
+ show_page_attributes.values.flatten
122
+ else
123
+ show_page_attributes
124
+ end
125
+ attribute_associated attributes
111
126
  end
112
127
 
113
128
  private
@@ -34,7 +34,7 @@ module Administrate
34
34
  end
35
35
 
36
36
  def searchable_field
37
- ActiveSupport::Deprecation.warn(
37
+ Administrate.deprecator.warn(
38
38
  "searchable_field is deprecated, use searchable_fields instead",
39
39
  )
40
40
  options.fetch(:searchable_field)
@@ -22,7 +22,11 @@ module Administrate
22
22
  end
23
23
 
24
24
  def associated_collection(order = self.order)
25
- Administrate::Page::Collection.new(associated_dashboard, order: order)
25
+ Administrate::Page::Collection.new(
26
+ associated_dashboard,
27
+ order: order,
28
+ collection_attributes: options[:collection_attributes],
29
+ )
26
30
  end
27
31
 
28
32
  def attribute_key
@@ -38,14 +38,8 @@ module Administrate
38
38
  formatter = options[:format][:formatter]
39
39
  formatter_options = options[:format][:formatter_options].to_h
40
40
 
41
- case formatter
42
- when :number_to_delimited
43
- ActiveSupport::NumberHelper.number_to_delimited(
44
- result, **formatter_options
45
- )
46
- else
47
- result
48
- end
41
+ ActiveSupport::NumberHelper.
42
+ try(formatter, result, **formatter_options) || result
49
43
  end
50
44
  end
51
45
  end
@@ -10,9 +10,9 @@ module Administrate
10
10
  return order_by_association(relation) unless
11
11
  reflect_association(relation).nil?
12
12
 
13
- order = "#{relation.table_name}.#{attribute} #{direction}"
13
+ order = relation.arel_table[attribute].public_send(direction)
14
14
 
15
- return relation.reorder(Arel.sql(order)) if
15
+ return relation.reorder(order) if
16
16
  column_exist?(relation, attribute)
17
17
 
18
18
  relation
@@ -66,11 +66,11 @@ module Administrate
66
66
 
67
67
  def order_by_count(relation)
68
68
  klass = reflect_association(relation).klass
69
- query = "COUNT(#{klass.table_name}.#{klass.primary_key}) #{direction}"
69
+ query = klass.arel_table[klass.primary_key].count.public_send(direction)
70
70
  relation.
71
71
  left_joins(attribute.to_sym).
72
72
  group(:id).
73
- reorder(Arel.sql(query))
73
+ reorder(query)
74
74
  end
75
75
 
76
76
  def order_by_belongs_to(relation)
@@ -92,15 +92,15 @@ module Administrate
92
92
  def order_by_attribute(relation)
93
93
  relation.joins(
94
94
  attribute.to_sym,
95
- ).reorder(Arel.sql(order_by_attribute_query))
95
+ ).reorder(order_by_attribute_query)
96
96
  end
97
97
 
98
98
  def order_by_id(relation)
99
- relation.reorder(Arel.sql(order_by_id_query(relation)))
99
+ relation.reorder(order_by_id_query(relation))
100
100
  end
101
101
 
102
102
  def order_by_association_id(relation)
103
- relation.reorder(Arel.sql(order_by_association_id_query))
103
+ relation.reorder(order_by_association_id_query)
104
104
  end
105
105
 
106
106
  def ordering_by_association_column?(relation)
@@ -115,15 +115,16 @@ module Administrate
115
115
  end
116
116
 
117
117
  def order_by_id_query(relation)
118
- "#{relation.table_name}.#{foreign_key(relation)} #{direction}"
118
+ relation.arel_table[foreign_key(relation)].public_send(direction)
119
119
  end
120
120
 
121
121
  def order_by_association_id_query
122
- "#{association_table_name}.id #{direction}"
122
+ Arel::Table.new(association_table_name)[:id].public_send(direction)
123
123
  end
124
124
 
125
125
  def order_by_attribute_query
126
- "#{association_table_name}.#{association_attribute} #{direction}"
126
+ table = Arel::Table.new(association_table_name)
127
+ table[association_attribute].public_send(direction)
127
128
  end
128
129
 
129
130
  def relation_type(relation)
@@ -4,6 +4,7 @@ module Administrate
4
4
  module Page
5
5
  class Collection < Page::Base
6
6
  def attribute_names
7
+ options.fetch(:collection_attributes, nil) ||
7
8
  dashboard.collection_attributes
8
9
  end
9
10
 
@@ -11,8 +11,16 @@ module Administrate
11
11
  attr_reader :resource
12
12
 
13
13
  def attributes(action = nil)
14
- dashboard.form_attributes(action).map do |attribute|
15
- attribute_field(dashboard, resource, attribute, :form)
14
+ attributes = dashboard.form_attributes(action)
15
+
16
+ if attributes.is_a? Array
17
+ attributes = { "" => attributes }
18
+ end
19
+
20
+ attributes.transform_values do |attrs|
21
+ attrs.map do |attribute|
22
+ attribute_field(dashboard, resource, attribute, :form)
23
+ end
16
24
  end
17
25
  end
18
26
 
@@ -15,8 +15,16 @@ module Administrate
15
15
  end
16
16
 
17
17
  def attributes
18
- dashboard.show_page_attributes.map do |attr_name|
19
- attribute_field(dashboard, resource, attr_name, :show)
18
+ attributes = dashboard.show_page_attributes
19
+
20
+ if attributes.is_a? Array
21
+ attributes = { "" => attributes }
22
+ end
23
+
24
+ attributes.transform_values do |attrs|
25
+ attrs.map do |attr_name|
26
+ attribute_field(dashboard, resource, attr_name, :show)
27
+ end
20
28
  end
21
29
  end
22
30
  end
@@ -1,3 +1,3 @@
1
1
  module Administrate
2
- VERSION = "0.19.0".freeze
2
+ VERSION = "0.20.0".freeze
3
3
  end
data/lib/administrate.rb CHANGED
@@ -2,7 +2,7 @@ require "administrate/engine"
2
2
 
3
3
  module Administrate
4
4
  def self.warn_of_missing_resource_class
5
- ActiveSupport::Deprecation.warn(
5
+ deprecator.warn(
6
6
  "Calling Field::Base.permitted_attribute without the option " +
7
7
  ":resource_class is deprecated. If you are seeing this " +
8
8
  "message, you are probably using a custom field type that" +
@@ -12,7 +12,7 @@ module Administrate
12
12
  end
13
13
 
14
14
  def self.warn_of_deprecated_option(name)
15
- ActiveSupport::Deprecation.warn(
15
+ deprecator.warn(
16
16
  "The option :#{name} is deprecated. " +
17
17
  "Administrate should detect it automatically. " +
18
18
  "Please file an issue at " +
@@ -22,7 +22,7 @@ module Administrate
22
22
  end
23
23
 
24
24
  def self.warn_of_deprecated_method(klass, method)
25
- ActiveSupport::Deprecation.warn(
25
+ deprecator.warn(
26
26
  "The method #{klass}##{method} is deprecated. " +
27
27
  "If you are seeing this message you are probably " +
28
28
  "using a dashboard that depends explicitly on it. " +
@@ -32,10 +32,14 @@ module Administrate
32
32
  end
33
33
 
34
34
  def self.warn_of_deprecated_authorization_method(method)
35
- ActiveSupport::Deprecation.warn(
35
+ deprecator.warn(
36
36
  "The method `#{method}` is deprecated. " +
37
37
  "Please use `accessible_action?` instead, " +
38
38
  "or see the documentation for other options.",
39
39
  )
40
40
  end
41
+
42
+ def self.deprecator
43
+ @deprecator ||= ActiveSupport::Deprecation.new(VERSION, "Administrate")
44
+ end
41
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: administrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Charlton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-07-18 00:00:00.000000000 Z
12
+ date: 2024-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -17,70 +17,88 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '5.0'
20
+ version: '6.0'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '8.0'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
28
  - - ">="
26
29
  - !ruby/object:Gem::Version
27
- version: '5.0'
30
+ version: '6.0'
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '8.0'
28
34
  - !ruby/object:Gem::Dependency
29
35
  name: actionview
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
32
38
  - - ">="
33
39
  - !ruby/object:Gem::Version
34
- version: '5.0'
40
+ version: '6.0'
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '8.0'
35
44
  type: :runtime
36
45
  prerelease: false
37
46
  version_requirements: !ruby/object:Gem::Requirement
38
47
  requirements:
39
48
  - - ">="
40
49
  - !ruby/object:Gem::Version
41
- version: '5.0'
50
+ version: '6.0'
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '8.0'
42
54
  - !ruby/object:Gem::Dependency
43
55
  name: activerecord
44
56
  requirement: !ruby/object:Gem::Requirement
45
57
  requirements:
46
58
  - - ">="
47
59
  - !ruby/object:Gem::Version
48
- version: '5.0'
60
+ version: '6.0'
61
+ - - "<"
62
+ - !ruby/object:Gem::Version
63
+ version: '8.0'
49
64
  type: :runtime
50
65
  prerelease: false
51
66
  version_requirements: !ruby/object:Gem::Requirement
52
67
  requirements:
53
68
  - - ">="
54
69
  - !ruby/object:Gem::Version
55
- version: '5.0'
70
+ version: '6.0'
71
+ - - "<"
72
+ - !ruby/object:Gem::Version
73
+ version: '8.0'
56
74
  - !ruby/object:Gem::Dependency
57
75
  name: jquery-rails
58
76
  requirement: !ruby/object:Gem::Requirement
59
77
  requirements:
60
- - - ">="
78
+ - - "~>"
61
79
  - !ruby/object:Gem::Version
62
- version: '4.0'
80
+ version: 4.6.0
63
81
  type: :runtime
64
82
  prerelease: false
65
83
  version_requirements: !ruby/object:Gem::Requirement
66
84
  requirements:
67
- - - ">="
85
+ - - "~>"
68
86
  - !ruby/object:Gem::Version
69
- version: '4.0'
87
+ version: 4.6.0
70
88
  - !ruby/object:Gem::Dependency
71
89
  name: kaminari
72
90
  requirement: !ruby/object:Gem::Requirement
73
91
  requirements:
74
- - - ">="
92
+ - - "~>"
75
93
  - !ruby/object:Gem::Version
76
- version: '1.0'
94
+ version: 1.2.2
77
95
  type: :runtime
78
96
  prerelease: false
79
97
  version_requirements: !ruby/object:Gem::Requirement
80
98
  requirements:
81
- - - ">="
99
+ - - "~>"
82
100
  - !ruby/object:Gem::Version
83
- version: '1.0'
101
+ version: 1.2.2
84
102
  - !ruby/object:Gem::Dependency
85
103
  name: sassc-rails
86
104
  requirement: !ruby/object:Gem::Requirement
@@ -345,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
363
  - !ruby/object:Gem::Version
346
364
  version: '0'
347
365
  requirements: []
348
- rubygems_version: 3.4.14
366
+ rubygems_version: 3.4.20
349
367
  signing_key:
350
368
  specification_version: 4
351
369
  summary: A Rails engine for creating super-flexible admin dashboards