activeadmin 2.4.0 → 2.9.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.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +192 -30
  3. data/CONTRIBUTING.md +42 -62
  4. data/README.md +4 -4
  5. data/app/assets/javascripts/active_admin/base.js +517 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  7. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  8. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  9. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  10. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  11. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  12. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
  13. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  14. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  15. data/app/javascript/active_admin/base.js +28 -0
  16. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
  17. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  18. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  19. data/app/javascript/active_admin/initializers/filters.js +10 -0
  20. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  21. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  22. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  23. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  24. data/app/javascript/active_admin/lib/filters.js +39 -0
  25. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  26. data/app/javascript/active_admin/lib/per-page.js +38 -0
  27. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  28. data/app/javascript/active_admin/lib/utils.js +40 -0
  29. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  30. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  31. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  32. data/config/locales/ar.yml +6 -6
  33. data/config/locales/az.yml +138 -0
  34. data/config/locales/en-CA.yml +3 -3
  35. data/config/locales/en-GB.yml +3 -3
  36. data/config/locales/en.yml +3 -3
  37. data/config/locales/es-MX.yml +2 -1
  38. data/config/locales/es.yml +5 -5
  39. data/config/locales/fr.yml +4 -4
  40. data/config/locales/it.yml +18 -0
  41. data/config/locales/ja.yml +3 -3
  42. data/config/locales/lv.yml +2 -2
  43. data/config/locales/vi.yml +6 -5
  44. data/docs/0-installation.md +26 -2
  45. data/docs/1-general-configuration.md +20 -0
  46. data/docs/11-decorators.md +16 -5
  47. data/docs/2-resource-customization.md +10 -1
  48. data/docs/3-index-pages.md +1 -1
  49. data/docs/5-forms.md +6 -1
  50. data/docs/6-show-pages.md +12 -0
  51. data/docs/9-batch-actions.md +2 -2
  52. data/docs/Gemfile +2 -2
  53. data/docs/Gemfile.lock +124 -113
  54. data/docs/_includes/top-menu.html +1 -1
  55. data/docs/documentation.md +1 -1
  56. data/docs/index.html +6 -6
  57. data/lib/active_admin/application.rb +14 -14
  58. data/lib/active_admin/application_settings.rb +3 -3
  59. data/lib/active_admin/authorization_adapter.rb +3 -3
  60. data/lib/active_admin/base_controller/authorization.rb +13 -12
  61. data/lib/active_admin/base_controller.rb +4 -4
  62. data/lib/active_admin/batch_actions/controller.rb +3 -3
  63. data/lib/active_admin/batch_actions/resource_extension.rb +9 -8
  64. data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
  65. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
  66. data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
  67. data/lib/active_admin/cancan_adapter.rb +1 -1
  68. data/lib/active_admin/collection_decorator.rb +31 -0
  69. data/lib/active_admin/csv_builder.rb +11 -7
  70. data/lib/active_admin/dependency.rb +11 -11
  71. data/lib/active_admin/devise.rb +5 -5
  72. data/lib/active_admin/dsl.rb +1 -1
  73. data/lib/active_admin/dynamic_settings_node.rb +2 -2
  74. data/lib/active_admin/engine.rb +10 -8
  75. data/lib/active_admin/error.rb +0 -2
  76. data/lib/active_admin/filters/active.rb +1 -1
  77. data/lib/active_admin/filters/active_filter.rb +6 -7
  78. data/lib/active_admin/filters/active_sidebar.rb +5 -5
  79. data/lib/active_admin/filters/forms.rb +6 -6
  80. data/lib/active_admin/filters/formtastic_addons.rb +1 -6
  81. data/lib/active_admin/filters/resource_extension.rb +1 -1
  82. data/lib/active_admin/filters.rb +7 -7
  83. data/lib/active_admin/form_builder.rb +24 -20
  84. data/lib/active_admin/generators/boilerplate.rb +1 -1
  85. data/lib/active_admin/helpers/optional_display.rb +2 -2
  86. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  87. data/lib/active_admin/inputs/filters/base/search_method_select.rb +4 -4
  88. data/lib/active_admin/inputs/filters/base.rb +1 -1
  89. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  90. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  91. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  92. data/lib/active_admin/inputs/filters/select_input.rb +2 -2
  93. data/lib/active_admin/localizers/resource_localizer.rb +3 -3
  94. data/lib/active_admin/localizers.rb +1 -1
  95. data/lib/active_admin/menu.rb +6 -3
  96. data/lib/active_admin/menu_item.rb +7 -7
  97. data/lib/active_admin/namespace.rb +12 -12
  98. data/lib/active_admin/namespace_settings.rb +8 -5
  99. data/lib/active_admin/order_clause.rb +1 -1
  100. data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
  101. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -19
  102. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  103. data/lib/active_admin/orm/active_record/comments.rb +19 -19
  104. data/lib/active_admin/orm/active_record.rb +1 -1
  105. data/lib/active_admin/page.rb +1 -1
  106. data/lib/active_admin/pundit_adapter.rb +5 -5
  107. data/lib/active_admin/resource/action_items.rb +5 -5
  108. data/lib/active_admin/resource/attributes.rb +1 -1
  109. data/lib/active_admin/resource/belongs_to.rb +2 -2
  110. data/lib/active_admin/resource/controllers.rb +1 -1
  111. data/lib/active_admin/resource/menu.rb +4 -4
  112. data/lib/active_admin/resource/naming.rb +5 -5
  113. data/lib/active_admin/resource/routes.rb +5 -7
  114. data/lib/active_admin/resource/scope_to.rb +7 -7
  115. data/lib/active_admin/resource/sidebars.rb +1 -1
  116. data/lib/active_admin/resource.rb +18 -18
  117. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  118. data/lib/active_admin/resource_controller/decorators.rb +6 -28
  119. data/lib/active_admin/resource_controller/polymorphic_routes.rb +3 -2
  120. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  121. data/lib/active_admin/resource_controller.rb +12 -11
  122. data/lib/active_admin/resource_dsl.rb +5 -5
  123. data/lib/active_admin/scope.rb +6 -6
  124. data/lib/active_admin/version.rb +1 -1
  125. data/lib/active_admin/view_factory.rb +17 -17
  126. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +3 -3
  127. data/lib/active_admin/view_helpers/display_helper.rb +5 -5
  128. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -1
  129. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  130. data/lib/active_admin/view_helpers.rb +1 -1
  131. data/lib/active_admin/views/components/active_admin_form.rb +5 -5
  132. data/lib/active_admin/views/components/attributes_table.rb +5 -5
  133. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  134. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  135. data/lib/active_admin/views/components/index_list.rb +3 -3
  136. data/lib/active_admin/views/components/menu.rb +1 -1
  137. data/lib/active_admin/views/components/menu_item.rb +4 -4
  138. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  139. data/lib/active_admin/views/components/panel.rb +1 -1
  140. data/lib/active_admin/views/components/scopes.rb +7 -5
  141. data/lib/active_admin/views/components/site_title.rb +1 -1
  142. data/lib/active_admin/views/components/status_tag.rb +11 -11
  143. data/lib/active_admin/views/components/table_for.rb +18 -17
  144. data/lib/active_admin/views/components/tabs.rb +3 -3
  145. data/lib/active_admin/views/footer.rb +2 -1
  146. data/lib/active_admin/views/header.rb +2 -2
  147. data/lib/active_admin/views/index_as_blog.rb +1 -1
  148. data/lib/active_admin/views/index_as_grid.rb +1 -1
  149. data/lib/active_admin/views/index_as_table.rb +16 -16
  150. data/lib/active_admin/views/pages/base.rb +15 -11
  151. data/lib/active_admin/views/pages/index.rb +15 -13
  152. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  153. data/lib/active_admin/views/title_bar.rb +1 -1
  154. data/lib/active_admin/views.rb +1 -1
  155. data/lib/active_admin.rb +61 -63
  156. data/lib/activeadmin.rb +1 -1
  157. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  158. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  159. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  160. data/lib/generators/active_admin/install/install_generator.rb +14 -8
  161. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  162. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  163. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  164. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  165. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  166. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  167. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  168. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  169. data/lib/ransack_ext.rb +8 -8
  170. metadata +46 -84
  171. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  172. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  173. data/app/assets/images/active_admin/orderable.png +0 -0
  174. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  175. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  176. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  177. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
  178. /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  179. /data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  180. /data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  181. /data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  182. /data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
  183. /data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
@@ -7,12 +7,12 @@ module ActiveAdmin
7
7
  # To disable this menu item, call `menu(false)` from the DSL
8
8
  def menu_item_options=(options)
9
9
  if options == false
10
- @include_in_menu = false
10
+ @include_in_menu = false
11
11
  @menu_item_options = {}
12
12
  else
13
13
  @include_in_menu = true
14
14
  @navigation_menu_name = options[:menu_name]
15
- @menu_item_options = default_menu_options.merge options
15
+ @menu_item_options = default_menu_options.merge options
16
16
  end
17
17
  end
18
18
 
@@ -27,8 +27,8 @@ module ActiveAdmin
27
27
  {
28
28
  id: resource_name.plural,
29
29
  label: proc { resource.plural_resource_label },
30
- url: proc { resource.route_collection_path(params, url_options) },
31
- if: proc { authorized?(Auth::READ, menu_resource_class) }
30
+ url: proc { resource.route_collection_path(params, url_options) },
31
+ if: proc { authorized?(Auth::READ, menu_resource_class) }
32
32
  }
33
33
  end
34
34
 
@@ -4,7 +4,7 @@ module ActiveAdmin
4
4
  module Naming
5
5
  def resource_name
6
6
  @resource_name ||= begin
7
- as = @options[:as].gsub /\s/, '' if @options[:as]
7
+ as = @options[:as].gsub /\s/, "" if @options[:as]
8
8
 
9
9
  if as || !resource_class.respond_to?(:model_name)
10
10
  Name.new resource_class, as
@@ -17,13 +17,13 @@ module ActiveAdmin
17
17
  # Returns the name to call this resource such as "Bank Account"
18
18
  def resource_label
19
19
  resource_name.translate count: 1,
20
- default: resource_name.to_s.gsub('::', ' ').titleize
20
+ default: resource_name.to_s.gsub("::", " ").titleize
21
21
  end
22
22
 
23
23
  # Returns the plural version of this resource such as "Bank Accounts"
24
24
  def plural_resource_label(options = {})
25
- defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
- default: resource_label.pluralize.titleize }
25
+ defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
+ default: resource_label.pluralize.titleize }
27
27
  resource_name.translate defaults.merge options
28
28
  end
29
29
 
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
  end
47
47
 
48
48
  def translate(options = {})
49
- I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
49
+ I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
50
50
  end
51
51
 
52
52
  def route_key
@@ -42,8 +42,6 @@ module ActiveAdmin
42
42
  config[:route_collection_name] == config[:route_instance_name]
43
43
  end
44
44
 
45
- private
46
-
47
45
  class RouteBuilder
48
46
  def initialize(resource)
49
47
  @resource = resource
@@ -98,13 +96,13 @@ module ActiveAdmin
98
96
  suffix = options[:suffix] || "path"
99
97
  route = []
100
98
 
101
- route << options[:action] # "batch_action", "edit" or "new"
102
- route << resource.route_prefix # "admin"
99
+ route << options[:action] # "batch_action", "edit" or "new"
100
+ route << resource.route_prefix # "admin"
103
101
  route << belongs_to_name if nested? # "category"
104
- route << resource_path_name # "posts" or "post"
105
- route << suffix # "path" or "index path"
102
+ route << resource_path_name # "posts" or "post"
103
+ route << suffix # "path" or "index path"
106
104
 
107
- route.compact.join('_').to_sym # :admin_category_posts_path
105
+ route.compact.join("_").to_sym # :admin_category_posts_path
108
106
  end
109
107
 
110
108
  # @return params to pass to instance path
@@ -38,10 +38,10 @@ module ActiveAdmin
38
38
  options = args.extract_options!
39
39
  method = args.first
40
40
 
41
- scope_to_config[:method] = block || method
42
- scope_to_config[:association_method] = options[:association_method]
43
- scope_to_config[:if] = options[:if]
44
- scope_to_config[:unless] = options[:unless]
41
+ scope_to_config[:method] = block || method
42
+ scope_to_config[:association_method] = options[:association_method]
43
+ scope_to_config[:if] = options[:if]
44
+ scope_to_config[:unless] = options[:unless]
45
45
 
46
46
  end
47
47
 
@@ -55,10 +55,10 @@ module ActiveAdmin
55
55
 
56
56
  def scope_to_config
57
57
  @scope_to_config ||= {
58
- method: nil,
58
+ method: nil,
59
59
  association_method: nil,
60
- if: nil,
61
- unless: nil
60
+ if: nil,
61
+ unless: nil
62
62
  }
63
63
  end
64
64
 
@@ -1,4 +1,4 @@
1
- require 'active_admin/helpers/optional_display'
1
+ require "active_admin/helpers/optional_display"
2
2
 
3
3
  module ActiveAdmin
4
4
 
@@ -1,18 +1,18 @@
1
- require 'active_admin/resource/action_items'
2
- require 'active_admin/resource/attributes'
3
- require 'active_admin/resource/controllers'
4
- require 'active_admin/resource/menu'
5
- require 'active_admin/resource/page_presenters'
6
- require 'active_admin/resource/pagination'
7
- require 'active_admin/resource/routes'
8
- require 'active_admin/resource/naming'
9
- require 'active_admin/resource/scopes'
10
- require 'active_admin/resource/includes'
11
- require 'active_admin/resource/scope_to'
12
- require 'active_admin/resource/sidebars'
13
- require 'active_admin/resource/belongs_to'
14
- require 'active_admin/resource/ordering'
15
- require 'active_admin/resource/model'
1
+ require "active_admin/resource/action_items"
2
+ require "active_admin/resource/attributes"
3
+ require "active_admin/resource/controllers"
4
+ require "active_admin/resource/menu"
5
+ require "active_admin/resource/page_presenters"
6
+ require "active_admin/resource/pagination"
7
+ require "active_admin/resource/routes"
8
+ require "active_admin/resource/naming"
9
+ require "active_admin/resource/scopes"
10
+ require "active_admin/resource/includes"
11
+ require "active_admin/resource/scope_to"
12
+ require "active_admin/resource/sidebars"
13
+ require "active_admin/resource/belongs_to"
14
+ require "active_admin/resource/ordering"
15
+ require "active_admin/resource/model"
16
16
 
17
17
  module ActiveAdmin
18
18
 
@@ -27,7 +27,7 @@ module ActiveAdmin
27
27
  class Resource
28
28
 
29
29
  # Event dispatched when a new resource is registered
30
- RegisterEvent = 'active_admin.resource.register'.freeze
30
+ RegisterEvent = "active_admin.resource.register".freeze
31
31
 
32
32
  # The namespace this config belongs to
33
33
  attr_reader :namespace
@@ -44,7 +44,7 @@ module ActiveAdmin
44
44
  # The default sort order to use in the controller
45
45
  attr_writer :sort_order
46
46
  def sort_order
47
- @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : 'id') + '_desc'
47
+ @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
48
48
  end
49
49
 
50
50
  # Set the configuration for the CSV
@@ -70,7 +70,7 @@ module ActiveAdmin
70
70
  def initialize(namespace, resource_class, options = {})
71
71
  @namespace = namespace
72
72
  @resource_class_name = "::#{resource_class.name}"
73
- @options = options
73
+ @options = options
74
74
  @sort_order = options[:sort_order]
75
75
  @member_actions = []
76
76
  @collection_actions = []
@@ -258,7 +258,7 @@ module ActiveAdmin
258
258
  end
259
259
 
260
260
  def collection_applies(options = {})
261
- only = Array(options.fetch(:only, COLLECTION_APPLIES))
261
+ only = Array(options.fetch(:only, COLLECTION_APPLIES))
262
262
  except = Array(options.fetch(:except, []))
263
263
 
264
264
  COLLECTION_APPLIES & only - except
@@ -28,7 +28,7 @@ module ActiveAdmin
28
28
 
29
29
  def decorate?
30
30
  case action_name
31
- when 'new', 'edit', 'create', 'update'
31
+ when "new", "edit", "create", "update"
32
32
  form = active_admin_config.get_page_presenter :form
33
33
  form && form.options[:decorate] && decorator_class.present?
34
34
  else
@@ -53,49 +53,27 @@ module ActiveAdmin
53
53
 
54
54
  def self.wrap(decorator)
55
55
  collection_decorator = find_collection_decorator(decorator)
56
-
57
- if draper_collection_decorator? collection_decorator
58
- name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
59
- @cache[name] ||= wrap! collection_decorator, name
60
- else
61
- collection_decorator
62
- end
56
+ name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
57
+ @cache[name] ||= wrap! collection_decorator, name
63
58
  end
64
59
 
65
- private
66
-
67
60
  def self.wrap!(parent, name)
68
61
  ::Class.new parent do
69
62
  delegate :reorder, :page, :current_page, :total_pages, :limit_value,
70
63
  :total_count, :total_pages, :offset, :to_key, :group_values,
71
- :except, :find_each, :ransack
64
+ :except, :find_each, :ransack, to: :object
72
65
 
73
66
  define_singleton_method(:name) { name }
74
67
  end
75
68
  end
76
69
 
77
- # Draper::CollectionDecorator was introduced in 1.0.0
78
- # Draper::Decorator#collection_decorator_class was introduced in 1.3.0
79
70
  def self.find_collection_decorator(decorator)
80
- if Dependency.draper? '>= 1.3.0'
71
+ if decorator.respond_to?(:collection_decorator_class)
81
72
  decorator.collection_decorator_class
82
- elsif Dependency.draper? '>= 1.0.0'
83
- draper_collection_decorator
84
73
  else
85
- decorator
74
+ CollectionDecorator
86
75
  end
87
76
  end
88
-
89
- def self.draper_collection_decorator?(decorator)
90
- decorator && decorator <= draper_collection_decorator
91
- rescue NameError
92
- false
93
- end
94
-
95
- def self.draper_collection_decorator
96
- ::Draper::CollectionDecorator
97
- end
98
-
99
77
  end
100
78
  end
101
79
  end
@@ -25,8 +25,9 @@ module ActiveAdmin
25
25
  return ActiveAdmin::Model.new(active_admin_config, record)
26
26
  end
27
27
 
28
- if record.is_a?(parent.class)
29
- return ActiveAdmin::Model.new(active_admin_config.belongs_to_config.resource, record)
28
+ belongs_to_resource = active_admin_config.belongs_to_config.try(:resource)
29
+ if belongs_to_resource && record.is_a?(belongs_to_resource.resource_class)
30
+ return ActiveAdmin::Model.new(belongs_to_resource, record)
30
31
  end
31
32
 
32
33
  record
@@ -1,4 +1,4 @@
1
- require 'csv'
1
+ require "csv"
2
2
 
3
3
  module ActiveAdmin
4
4
  class ResourceController < BaseController
@@ -18,11 +18,12 @@ module ActiveAdmin
18
18
  protected
19
19
 
20
20
  def stream_resource(&block)
21
- headers['X-Accel-Buffering'] = 'no'
22
- headers['Cache-Control'] = 'no-cache'
21
+ headers["X-Accel-Buffering"] = "no"
22
+ headers["Cache-Control"] = "no-cache"
23
+ headers["Last-Modified"] = Time.current.httpdate
23
24
 
24
25
  if ActiveAdmin.application.disable_streaming_in.include? Rails.env
25
- self.response_body = block['']
26
+ self.response_body = block[""]
26
27
  else
27
28
  self.response_body = Enumerator.new &block
28
29
  end
@@ -33,8 +34,8 @@ module ActiveAdmin
33
34
  end
34
35
 
35
36
  def stream_csv
36
- headers['Content-Type'] = 'text/csv; charset=utf-8' # In Rails 5 it's set to HTML??
37
- headers['Content-Disposition'] = %{attachment; filename="#{csv_filename}"}
37
+ headers["Content-Type"] = "text/csv; charset=utf-8" # In Rails 5 it's set to HTML??
38
+ headers["Content-Disposition"] = %{attachment; filename="#{csv_filename}"}
38
39
  stream_resource &active_admin_config.csv_builder.method(:build).to_proc.curry[self]
39
40
  end
40
41
 
@@ -1,11 +1,12 @@
1
- require 'active_admin/resource_controller/action_builder'
2
- require 'active_admin/resource_controller/data_access'
3
- require 'active_admin/resource_controller/decorators'
4
- require 'active_admin/resource_controller/polymorphic_routes'
5
- require 'active_admin/resource_controller/scoping'
6
- require 'active_admin/resource_controller/streaming'
7
- require 'active_admin/resource_controller/sidebars'
8
- require 'active_admin/resource_controller/resource_class_methods'
1
+ require "active_admin/collection_decorator"
2
+ require "active_admin/resource_controller/action_builder"
3
+ require "active_admin/resource_controller/data_access"
4
+ require "active_admin/resource_controller/decorators"
5
+ require "active_admin/resource_controller/polymorphic_routes"
6
+ require "active_admin/resource_controller/scoping"
7
+ require "active_admin/resource_controller/streaming"
8
+ require "active_admin/resource_controller/sidebars"
9
+ require "active_admin/resource_controller/resource_class_methods"
9
10
 
10
11
  module ActiveAdmin
11
12
  # All Resources Controller inherits from this controller.
@@ -24,13 +25,13 @@ module ActiveAdmin
24
25
  include Streaming
25
26
  include Sidebars
26
27
  include ViewHelpers::DownloadFormatLinksHelper
27
- extend ResourceClassMethods
28
+ extend ResourceClassMethods
28
29
 
29
30
  def self.active_admin_config=(config)
30
31
  if @active_admin_config = config
31
32
  defaults resource_class: config.resource_class,
32
- route_prefix: config.route_prefix,
33
- instance_name: config.resource_name.singular
33
+ route_prefix: config.route_prefix,
34
+ instance_name: config.resource_name.singular
34
35
  end
35
36
  end
36
37
 
@@ -183,16 +183,16 @@ module ActiveAdmin
183
183
  # == Before / After Destroy
184
184
  # Called before and after the object is destroyed from the database.
185
185
  #
186
- delegate :before_build, :after_build, to: :controller
187
- delegate :before_create, :after_create, to: :controller
188
- delegate :before_update, :after_update, to: :controller
189
- delegate :before_save, :after_save, to: :controller
186
+ delegate :before_build, :after_build, to: :controller
187
+ delegate :before_create, :after_create, to: :controller
188
+ delegate :before_update, :after_update, to: :controller
189
+ delegate :before_save, :after_save, to: :controller
190
190
  delegate :before_destroy, :after_destroy, to: :controller
191
191
 
192
192
  # This code defines both *_filter and *_action for Rails 5.0 and *_action for Rails >= 5.1
193
193
  phases = [
194
194
  :before, :skip_before,
195
- :after, :skip_after,
195
+ :after, :skip_after,
196
196
  :around, :skip
197
197
  ]
198
198
  keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
@@ -45,17 +45,17 @@ module ActiveAdmin
45
45
  @scope_block = block
46
46
  end
47
47
 
48
- @localizer = options[:localizer]
49
- @show_count = options.fetch(:show_count, true)
50
- @display_if_block = options[:if] || proc { true }
51
- @default_block = options[:default] || proc { false }
52
- @group = options[:group].try(:to_sym)
48
+ @localizer = options[:localizer]
49
+ @show_count = options.fetch(:show_count, true)
50
+ @display_if_block = options[:if] || proc { true }
51
+ @default_block = options[:default] || proc { false }
52
+ @group = options[:group].try(:to_sym)
53
53
  end
54
54
 
55
55
  def name
56
56
  case @name
57
57
  when String then @name
58
- when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
58
+ when Symbol then @localizer ? @localizer.t(@name, scope: "scopes") : @name.to_s.titleize
59
59
  else @name
60
60
  end
61
61
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '2.4.0'
2
+ VERSION = "2.9.0"
3
3
  end
@@ -1,27 +1,27 @@
1
- require 'active_admin/abstract_view_factory'
1
+ require "active_admin/abstract_view_factory"
2
2
 
3
3
  module ActiveAdmin
4
4
  class ViewFactory < AbstractViewFactory
5
5
 
6
6
  # Register Helper Renderers
7
- register global_navigation: ActiveAdmin::Views::TabbedNavigation,
8
- utility_navigation: ActiveAdmin::Views::TabbedNavigation,
9
- site_title: ActiveAdmin::Views::SiteTitle,
10
- unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
11
- action_items: ActiveAdmin::Views::ActionItems,
12
- title_bar: ActiveAdmin::Views::TitleBar,
13
- header: ActiveAdmin::Views::Header,
14
- footer: ActiveAdmin::Views::Footer,
15
- index_scopes: ActiveAdmin::Views::Scopes,
16
- blank_slate: ActiveAdmin::Views::BlankSlate
7
+ register global_navigation: ActiveAdmin::Views::TabbedNavigation,
8
+ utility_navigation: ActiveAdmin::Views::TabbedNavigation,
9
+ site_title: ActiveAdmin::Views::SiteTitle,
10
+ unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
11
+ action_items: ActiveAdmin::Views::ActionItems,
12
+ title_bar: ActiveAdmin::Views::TitleBar,
13
+ header: ActiveAdmin::Views::Header,
14
+ footer: ActiveAdmin::Views::Footer,
15
+ index_scopes: ActiveAdmin::Views::Scopes,
16
+ blank_slate: ActiveAdmin::Views::BlankSlate
17
17
 
18
18
  # Register All The Pages
19
- register index_page: ActiveAdmin::Views::Pages::Index,
20
- show_page: ActiveAdmin::Views::Pages::Show,
21
- new_page: ActiveAdmin::Views::Pages::Form,
22
- edit_page: ActiveAdmin::Views::Pages::Form,
23
- layout: ActiveAdmin::Views::Pages::Layout,
24
- page: ActiveAdmin::Views::Pages::Page
19
+ register index_page: ActiveAdmin::Views::Pages::Index,
20
+ show_page: ActiveAdmin::Views::Pages::Show,
21
+ new_page: ActiveAdmin::Views::Pages::Form,
22
+ edit_page: ActiveAdmin::Views::Pages::Form,
23
+ layout: ActiveAdmin::Views::Pages::Layout,
24
+ page: ActiveAdmin::Views::Pages::Page
25
25
 
26
26
  end
27
27
  end
@@ -6,7 +6,7 @@ module ActiveAdmin
6
6
  def breadcrumb_links(path = request.path)
7
7
  # remove leading "/" and split up the URL
8
8
  # and remove last since it's used as the page title
9
- parts = path.split('/').select(&:present?)[0..-2]
9
+ parts = path.split("/").select(&:present?)[0..-2]
10
10
 
11
11
  parts.each_with_index.map do |part, index|
12
12
  # 1. try using `display_name` if we can locate a DB object
@@ -15,13 +15,13 @@ module ActiveAdmin
15
15
  if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
16
16
  parent = active_admin_config.belongs_to_config.try :target
17
17
  config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
- name = display_name config.find_resource part
18
+ name = display_name config.find_resource part
19
19
  end
20
20
  name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
21
21
 
22
22
  # Don't create a link if the resource's show action is disabled
23
23
  if !config || config.defined_actions.include?(:show)
24
- link_to name, '/' + parts[0..index].join('/')
24
+ link_to name, "/" + parts[0..index].join("/")
25
25
  else
26
26
  name
27
27
  end
@@ -5,12 +5,12 @@ module ActiveAdmin
5
5
  DISPLAY_NAME_FALLBACK = -> {
6
6
  name = ""
7
7
  klass = self.class
8
- name << klass.model_name.human if klass.respond_to? :model_name
8
+ name << klass.model_name.human if klass.respond_to? :model_name
9
9
  name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
10
10
  name.present? ? name : to_s
11
11
  }
12
12
  def DISPLAY_NAME_FALLBACK.inspect
13
- 'DISPLAY_NAME_FALLBACK'
13
+ "DISPLAY_NAME_FALLBACK"
14
14
  end
15
15
 
16
16
  # Attempts to call any known display name methods on the resource.
@@ -26,7 +26,7 @@ module ActiveAdmin
26
26
  @@display_name_methods_cache ||= {}
27
27
  @@display_name_methods_cache[resource.class] ||= begin
28
28
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
29
- method = methods.detect { |method| resource.respond_to? method }
29
+ method = methods.detect { |method| resource.respond_to? method }
30
30
 
31
31
  if method != :to_s || resource.method(method).source_location
32
32
  method
@@ -74,7 +74,7 @@ module ActiveAdmin
74
74
  format_collection(object)
75
75
  else
76
76
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
77
- defined?(::Mongoid) && object.class.include?(Mongoid::Document)
77
+ defined?(::Mongoid) && object.class.include?(Mongoid::Document)
78
78
  auto_link object
79
79
  elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
80
  format_collection(object)
@@ -85,7 +85,7 @@ module ActiveAdmin
85
85
  end
86
86
 
87
87
  def format_collection(collection)
88
- safe_join(collection.map { |item| pretty_format(item) }, ', ')
88
+ safe_join(collection.map { |item| pretty_format(item) }, ", ")
89
89
  end
90
90
 
91
91
  def boolean_attr?(resource, attr, value)
@@ -18,7 +18,7 @@ module ActiveAdmin
18
18
  def build_download_format_links(formats = self.class.formats)
19
19
  params = request.query_parameters.except :format, :commit
20
20
  div class: "download_links" do
21
- span I18n.t('active_admin.download')
21
+ span I18n.t("active_admin.download")
22
22
  formats.each do |format|
23
23
  a format.upcase, href: url_for(params: params, format: format)
24
24
  end
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  #
16
16
  def fields_for_params(params, options = {})
17
17
  namespace = options[:namespace]
18
- except = Array.wrap(options[:except]).map &:to_s
18
+ except = Array.wrap(options[:except]).map &:to_s
19
19
 
20
20
  params.flat_map do |k, v|
21
21
  next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
@@ -37,7 +37,7 @@ module ActiveAdmin
37
37
  { "#{k}[]" => v }
38
38
  end
39
39
  when nil
40
- { k => '' }
40
+ { k => "" }
41
41
  when TrueClass, FalseClass
42
42
  { k => v }
43
43
  else
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
 
4
4
  # Require all ruby files in the view helpers dir
5
- Dir[File.expand_path('view_helpers', __dir__) + "/*.rb"].each { |f| require f }
5
+ Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
6
6
 
7
7
  include ActiveAdminApplicationHelper
8
8
  include AutoLinkHelper
@@ -111,14 +111,14 @@ module ActiveAdmin
111
111
  create_another = params[:create_another]
112
112
  label = @resource.class.model_name.human
113
113
  Arbre::Context.new do
114
- li class: 'create_another' do
114
+ li class: "create_another" do
115
115
  input(
116
116
  checked: create_another,
117
- id: 'create_another',
118
- name: 'create_another',
119
- type: 'checkbox'
117
+ id: "create_another",
118
+ name: "create_another",
119
+ type: "checkbox"
120
120
  )
121
- label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
121
+ label(I18n.t("active_admin.create_another", model: label), for: "create_another")
122
122
  end
123
123
  end
124
124
  end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  builder_method :attributes_table_for
6
6
 
7
7
  def build(obj, *attrs)
8
- @collection = Array.wrap(obj)
8
+ @collection = Array.wrap(obj)
9
9
  @resource_class = @collection.first.class
10
10
  options = {}
11
11
  options[:for] = @collection.first if single_record?
@@ -20,7 +20,7 @@ module ActiveAdmin
20
20
  end
21
21
 
22
22
  def row(*args, &block)
23
- title = args[0]
23
+ title = args[0]
24
24
  options = args.extract_options!
25
25
  classes = [:row]
26
26
  if options[:class]
@@ -28,7 +28,7 @@ module ActiveAdmin
28
28
  elsif title.present?
29
29
  classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
30
  end
31
- options[:class] = classes.join(' ')
31
+ options[:class] = classes.join(" ")
32
32
 
33
33
  @table << tr(options) do
34
34
  th do
@@ -45,7 +45,7 @@ module ActiveAdmin
45
45
  protected
46
46
 
47
47
  def default_id_for_prefix
48
- 'attributes_table'
48
+ "attributes_table"
49
49
  end
50
50
 
51
51
  # Build Colgroups
@@ -75,7 +75,7 @@ module ActiveAdmin
75
75
  end
76
76
 
77
77
  def empty_value
78
- span I18n.t('active_admin.empty'), class: "empty"
78
+ span I18n.t("active_admin.empty"), class: "empty"
79
79
  end
80
80
 
81
81
  def content_for(record, attr)
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  builder_method :blank_slate
6
6
 
7
7
  def default_class_name
8
- 'blank_slate_container'
8
+ "blank_slate_container"
9
9
  end
10
10
 
11
11
  def build(content)