activeadmin 1.4.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +306 -144
  3. data/CONTRIBUTING.md +21 -16
  4. data/README.md +44 -11
  5. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  6. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  8. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  9. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  10. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  11. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  12. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  13. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  14. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  15. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  16. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  17. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  18. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  19. data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
  20. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  21. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  22. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  23. data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
  24. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  25. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  26. data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
  27. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  28. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  29. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  30. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  31. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  32. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  33. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  34. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  35. data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
  36. data/config/locales/ar.yml +3 -2
  37. data/config/locales/bg.yml +1 -1
  38. data/config/locales/bs.yml +1 -0
  39. data/config/locales/ca.yml +1 -1
  40. data/config/locales/cs.yml +1 -0
  41. data/config/locales/da.yml +1 -0
  42. data/config/locales/de-CH.yml +1 -0
  43. data/config/locales/de.yml +1 -0
  44. data/config/locales/el.yml +1 -0
  45. data/config/locales/en-CA.yml +1 -0
  46. data/config/locales/en-GB.yml +1 -0
  47. data/config/locales/en.yml +1 -0
  48. data/config/locales/eo.yml +1 -0
  49. data/config/locales/es-MX.yml +1 -0
  50. data/config/locales/es.yml +1 -0
  51. data/config/locales/fa.yml +1 -0
  52. data/config/locales/fi.yml +1 -0
  53. data/config/locales/fr.yml +2 -1
  54. data/config/locales/he.yml +1 -1
  55. data/config/locales/hr.yml +1 -0
  56. data/config/locales/hu.yml +5 -0
  57. data/config/locales/id.yml +1 -0
  58. data/config/locales/it.yml +1 -0
  59. data/config/locales/ja.yml +1 -0
  60. data/config/locales/ko.yml +1 -0
  61. data/config/locales/lt.yml +3 -2
  62. data/config/locales/lv.yml +1 -0
  63. data/config/locales/mk.yml +134 -0
  64. data/config/locales/nb.yml +1 -0
  65. data/config/locales/nl.yml +1 -0
  66. data/config/locales/pl.yml +1 -0
  67. data/config/locales/pt-BR.yml +1 -0
  68. data/config/locales/pt-PT.yml +1 -0
  69. data/config/locales/ro.yml +1 -0
  70. data/config/locales/ru.yml +1 -0
  71. data/config/locales/sk.yml +1 -0
  72. data/config/locales/sv-SE.yml +1 -0
  73. data/config/locales/tr.yml +1 -0
  74. data/config/locales/uk.yml +3 -0
  75. data/config/locales/vi.yml +1 -0
  76. data/config/locales/zh-CN.yml +1 -0
  77. data/config/locales/zh-TW.yml +1 -0
  78. data/docs/0-installation.md +2 -2
  79. data/docs/12-arbre-components.md +13 -0
  80. data/docs/13-authorization-adapter.md +6 -6
  81. data/docs/2-resource-customization.md +1 -1
  82. data/docs/3-index-pages/index-as-table.md +7 -0
  83. data/docs/CNAME +1 -1
  84. data/docs/Gemfile +0 -1
  85. data/docs/Gemfile.lock +3 -4
  86. data/docs/_config.yml +2 -0
  87. data/docs/_includes/top-menu.html +2 -2
  88. data/docs/index.html +109 -8
  89. data/docs/stylesheets/main.css +29 -0
  90. data/lib/active_admin.rb +10 -4
  91. data/lib/active_admin/application.rb +11 -18
  92. data/lib/active_admin/application_settings.rb +3 -0
  93. data/lib/active_admin/asset_registration.rb +0 -8
  94. data/lib/active_admin/base_controller.rb +6 -6
  95. data/lib/active_admin/base_controller/authorization.rb +3 -4
  96. data/lib/active_admin/batch_actions/controller.rb +2 -2
  97. data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
  98. data/lib/active_admin/callbacks.rb +1 -1
  99. data/lib/active_admin/controller_action.rb +2 -1
  100. data/lib/active_admin/csv_builder.rb +4 -3
  101. data/lib/active_admin/dependency.rb +3 -75
  102. data/lib/active_admin/dsl.rb +1 -8
  103. data/lib/active_admin/error.rb +4 -2
  104. data/lib/active_admin/filters/active_filter.rb +5 -4
  105. data/lib/active_admin/filters/active_sidebar.rb +5 -1
  106. data/lib/active_admin/filters/forms.rb +2 -2
  107. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  108. data/lib/active_admin/filters/resource_extension.rb +3 -3
  109. data/lib/active_admin/form_builder.rb +3 -3
  110. data/lib/active_admin/generators/boilerplate.rb +12 -4
  111. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  112. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  113. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  114. data/lib/active_admin/menu_item.rb +1 -1
  115. data/lib/active_admin/namespace.rb +2 -2
  116. data/lib/active_admin/namespace_settings.rb +7 -4
  117. data/lib/active_admin/orm/active_record/comments.rb +4 -4
  118. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  119. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
  120. data/lib/active_admin/page_dsl.rb +1 -1
  121. data/lib/active_admin/page_presenter.rb +2 -1
  122. data/lib/active_admin/pundit_adapter.rb +18 -5
  123. data/lib/active_admin/resource.rb +17 -3
  124. data/lib/active_admin/resource/action_items.rb +1 -1
  125. data/lib/active_admin/resource/attributes.rb +7 -4
  126. data/lib/active_admin/resource/belongs_to.rb +6 -1
  127. data/lib/active_admin/resource/menu.rb +3 -3
  128. data/lib/active_admin/resource/model.rb +15 -0
  129. data/lib/active_admin/resource/naming.rb +3 -3
  130. data/lib/active_admin/resource/routes.rb +20 -7
  131. data/lib/active_admin/resource/scopes.rb +3 -3
  132. data/lib/active_admin/resource/sidebars.rb +1 -1
  133. data/lib/active_admin/resource_collection.rb +2 -2
  134. data/lib/active_admin/resource_controller.rb +2 -0
  135. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  136. data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -0
  137. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  138. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  139. data/lib/active_admin/resource_dsl.rb +6 -4
  140. data/lib/active_admin/router.rb +3 -2
  141. data/lib/active_admin/scope.rb +11 -7
  142. data/lib/active_admin/settings_node.rb +1 -1
  143. data/lib/active_admin/sidebar_section.rb +3 -1
  144. data/lib/active_admin/version.rb +1 -1
  145. data/lib/active_admin/view_helpers.rb +1 -1
  146. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  147. data/lib/active_admin/view_helpers/display_helper.rb +13 -4
  148. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  149. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  150. data/lib/active_admin/views.rb +1 -1
  151. data/lib/active_admin/views/components/active_admin_form.rb +7 -1
  152. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  153. data/lib/active_admin/views/components/paginated_collection.rb +2 -2
  154. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  155. data/lib/active_admin/views/components/status_tag.rb +6 -19
  156. data/lib/active_admin/views/components/table_for.rb +2 -2
  157. data/lib/active_admin/views/components/tabs.rb +11 -2
  158. data/lib/active_admin/views/footer.rb +1 -1
  159. data/lib/active_admin/views/index_as_table.rb +12 -4
  160. data/lib/active_admin/views/pages/base.rb +3 -0
  161. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  162. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  163. data/lib/generators/active_admin/install/install_generator.rb +6 -2
  164. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +24 -2
  165. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  166. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  167. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  168. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  169. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  170. data/lib/ransack_ext.rb +3 -3
  171. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  172. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  173. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  174. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  175. metadata +113 -100
  176. data/.circleci/config.yml +0 -467
  177. data/.github/ISSUE_TEMPLATE.md +0 -20
  178. data/.gitignore +0 -46
  179. data/.mdlrc +0 -1
  180. data/.rspec +0 -1
  181. data/.rspec_parallel +0 -2
  182. data/.rubocop.yml +0 -94
  183. data/.simplecov +0 -11
  184. data/.yardopts +0 -7
  185. data/Gemfile +0 -10
  186. data/Gemfile.common +0 -53
  187. data/Gemfile.lock +0 -431
  188. data/Rakefile +0 -23
  189. data/activeadmin.gemspec +0 -32
  190. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  191. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  192. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  193. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  194. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  195. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  196. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  197. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  198. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  199. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  200. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  201. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  202. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  203. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  204. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  205. data/bin/install_chromedriver.sh +0 -17
  206. data/codecov.yml +0 -25
  207. data/config/i18n-tasks.yml +0 -26
  208. data/config/mdl_style.rb +0 -11
  209. data/cucumber.yml +0 -7
  210. data/gemfiles/rails_42.gemfile +0 -10
  211. data/gemfiles/rails_42.gemfile.lock +0 -410
  212. data/gemfiles/rails_50.gemfile +0 -10
  213. data/gemfiles/rails_50.gemfile.lock +0 -424
  214. data/gemfiles/rails_51.gemfile +0 -10
  215. data/gemfiles/rails_51.gemfile.lock +0 -423
  216. data/lib/active_admin/event.rb +0 -24
  217. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  218. data/lib/active_admin/reloader.rb +0 -25
  219. data/lib/bug_report_templates/active_admin_master.rb +0 -111
  220. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  221. data/tasks/application_generator.rb +0 -48
  222. data/tasks/docs.rake +0 -64
  223. data/tasks/gemfiles.rake +0 -8
  224. data/tasks/lint.rake +0 -110
  225. data/tasks/local.rake +0 -27
  226. data/tasks/test.rake +0 -43
@@ -12,9 +12,9 @@ module ActiveAdmin
12
12
  # 1. try using `display_name` if we can locate a DB object
13
13
  # 2. try using the model name translation
14
14
  # 3. default to calling `titlecase` on the URL fragment
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]
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
- config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
17
+ config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
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
@@ -2,8 +2,9 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DisplayHelper
4
4
 
5
- DISPLAY_NAME_FALLBACK = ->{
6
- name, klass = "", self.class
5
+ DISPLAY_NAME_FALLBACK = -> {
6
+ name = ""
7
+ klass = self.class
7
8
  name << klass.model_name.human if klass.respond_to? :model_name
8
9
  name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
9
10
  name.present? ? name : to_s
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  # Attempts to call any known display name methods on the resource.
16
17
  # See the setting in `application.rb` for the list of methods and their priority.
17
18
  def display_name(resource)
18
- sanitize(render_in_context(resource, display_name_method_for(resource)).to_s) unless resource.nil?
19
+ ERB::Util.html_escape(render_in_context(resource, display_name_method_for(resource))) unless resource.nil?
19
20
  end
20
21
 
21
22
  # Looks up and caches the first available display name method.
@@ -25,7 +26,7 @@ module ActiveAdmin
25
26
  @@display_name_methods_cache ||= {}
26
27
  @@display_name_methods_cache[resource.class] ||= begin
27
28
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
28
- method = methods.detect{ |method| resource.respond_to? method }
29
+ method = methods.detect { |method| resource.respond_to? method }
29
30
 
30
31
  if method != :to_s || resource.method(method).source_location
31
32
  method
@@ -69,16 +70,24 @@ module ActiveAdmin
69
70
  object.to_s
70
71
  when Date, Time
71
72
  I18n.localize object, format: active_admin_application.localize_format
73
+ when Array
74
+ format_collection(object)
72
75
  else
73
76
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
74
77
  defined?(::Mongoid) && object.class.include?(Mongoid::Document)
75
78
  auto_link object
79
+ elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
+ format_collection(object)
76
81
  else
77
82
  display_name object
78
83
  end
79
84
  end
80
85
  end
81
86
 
87
+ def format_collection(collection)
88
+ safe_join(collection.map { |item| pretty_format(item) }, ', ')
89
+ end
90
+
82
91
  def boolean_attr?(resource, attr, value)
83
92
  case value
84
93
  when TrueClass, FalseClass
@@ -1,6 +1,7 @@
1
1
  module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DownloadFormatLinksHelper
4
+ private
4
5
 
5
6
  def build_download_formats(download_links)
6
7
  download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
@@ -1,4 +1,7 @@
1
+ # Utility methods for internal use.
2
+ # @private
1
3
  module MethodOrProcHelper
4
+ extend self
2
5
 
3
6
  # This method will either call the symbol on self or instance_exec the Proc
4
7
  # within self. Any args will be passed along to the method dispatch.
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module Views
3
3
 
4
4
  # Loads all the classes in views/*.rb
5
- Dir[File.expand_path('../views', __FILE__) + "/**/*.rb"].sort.each{ |f| require f }
5
+ Dir[File.expand_path('views', __dir__) + "/**/*.rb"].sort.each { |f| require f }
6
6
 
7
7
  end
8
8
  end
@@ -57,6 +57,12 @@ module ActiveAdmin
57
57
  end
58
58
  insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
59
59
  else
60
+ # Set except option to prevent sensitive fields from being shown in forms by default.
61
+ opts = args.extract_options!
62
+ opts[:except] ||= []
63
+ ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
64
+ args << opts
65
+
60
66
  proxy_call_to_form(:inputs, *args, &block)
61
67
  end
62
68
  end
@@ -125,7 +131,7 @@ module ActiveAdmin
125
131
  legend = args.shift if args.first.is_a?(::String)
126
132
  legend = html_options.delete(:name) if html_options.key?(:name)
127
133
  legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
128
- fieldset_attrs = html_options.map {|k, v| %Q{#{k}="#{v}"} }.join(" ")
134
+ fieldset_attrs = html_options.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
129
135
  @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
130
136
  @closing_tag = "</ol></fieldset>"
131
137
  super(*(args << html_options), &block)
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  def build(obj, *attrs)
8
8
  @collection = Array.wrap(obj)
9
9
  @resource_class = @collection.first.class
10
- options = { }
10
+ options = {}
11
11
  options[:for] = @collection.first if single_record?
12
12
  super(options)
13
13
  @table = table
@@ -16,7 +16,7 @@ module ActiveAdmin
16
16
  end
17
17
 
18
18
  def rows(*attrs)
19
- attrs.each {|attr| row(attr) }
19
+ attrs.each { |attr| row(attr) }
20
20
  end
21
21
 
22
22
  def row(*args, &block)
@@ -26,7 +26,7 @@ module ActiveAdmin
26
26
  if options[:class]
27
27
  classes << options[:class]
28
28
  elsif title.present?
29
- classes << "row-#{ActiveAdmin::Dependency.rails.parameterize(title.to_s)}"
29
+ classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
30
  end
31
31
  options[:class] = classes.join(' ')
32
32
 
@@ -92,7 +92,7 @@ module ActiveAdmin
92
92
  end
93
93
 
94
94
  def build_pagination
95
- options = { theme: 'active_admin' }
95
+ options = { theme: @display_total ? 'active_admin' : 'active_admin_countless' }
96
96
  options[:params] = @params if @params
97
97
  options[:param_name] = @param_name if @param_name
98
98
 
@@ -102,7 +102,7 @@ module ActiveAdmin
102
102
  # you pass in the :total_pages option. We issue a query to determine
103
103
  # if there is another page or not, but the limit/offset make this
104
104
  # query fast.
105
- offset = collection.offset(collection.current_page * @per_page.to_i).limit(1).count
105
+ offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
106
106
  options[:total_pages] = collection.current_page + offset
107
107
  options[:right] = 0
108
108
  end
@@ -1,11 +1,8 @@
1
- require 'active_admin/helpers/output_safety_helper'
2
-
3
1
  module ActiveAdmin
4
2
  module Views
5
3
 
6
4
  class SidebarSection < Panel
7
5
  builder_method :sidebar_section
8
- include OutputSafetyHelper
9
6
 
10
7
  # Takes a ActiveAdmin::SidebarSection instance
11
8
  def build(section)
@@ -28,11 +28,7 @@ module ActiveAdmin
28
28
  # status_tag('active', class: 'important', id: 'status_123', label: 'on')
29
29
  # # => <span class='status_tag active important' id='status_123'>on</span>
30
30
  #
31
- def build(*args)
32
- options = args.extract_options!
33
- status = args[0]
34
- type = args[1]
35
-
31
+ def build(status, options = {})
36
32
  label = options.delete(:label)
37
33
  classes = options.delete(:class)
38
34
  status = convert_to_boolean_status(status)
@@ -46,19 +42,6 @@ module ActiveAdmin
46
42
  super(content, options)
47
43
 
48
44
  add_class(status_to_class(status)) if status
49
-
50
- if type
51
- Deprecation.warn <<-MSG.strip_heredoc
52
- The `type` parameter has been deprecated. Provide the "#{type}" type as
53
- a class instead. For example, `status_tag(status, :#{type}, class: "abc")`
54
- would change to `status_tag(status, class: "#{type} abc")`. Also note that
55
- the "#{type}" CSS rule will be removed too, so you'll have to provide
56
- the styles yourself. See https://github.com/activeadmin/activeadmin/blob/master/CHANGELOG.md#110-
57
- for more information.
58
- MSG
59
- add_class(type.to_s)
60
- end
61
-
62
45
  add_class(classes) if classes
63
46
  end
64
47
 
@@ -68,8 +51,10 @@ module ActiveAdmin
68
51
  case status
69
52
  when true, 'true'
70
53
  'Yes'
71
- when false, 'false', nil
54
+ when false, 'false'
72
55
  'No'
56
+ when nil
57
+ 'Unset'
73
58
  else
74
59
  status
75
60
  end
@@ -77,6 +62,8 @@ module ActiveAdmin
77
62
 
78
63
  def status_to_class(status)
79
64
  case status
65
+ when 'Unset'
66
+ 'unset no'
80
67
  when String, Symbol
81
68
  status.to_s.titleize.gsub(/\s/, '').underscore
82
69
  else
@@ -22,7 +22,7 @@ module ActiveAdmin
22
22
  end
23
23
 
24
24
  def columns(*attrs)
25
- attrs.each {|attr| column(attr) }
25
+ attrs.each { |attr| column(attr) }
26
26
  end
27
27
 
28
28
  def column(*args, &block)
@@ -147,7 +147,7 @@ module ActiveAdmin
147
147
  if @options.has_key?(:class)
148
148
  html_classes << @options.delete(:class)
149
149
  elsif @title.present?
150
- html_classes << "col-#{ActiveAdmin::Dependency.rails.parameterize(@title.to_s)}"
150
+ html_classes << "col-#{@title.to_s.parameterize(separator: "_")}"
151
151
  end
152
152
  @html_class = html_classes.join(' ')
153
153
  @data = args[1] || args[0]
@@ -15,7 +15,8 @@ module ActiveAdmin
15
15
  end
16
16
 
17
17
  def build_menu_item(title, options, &block)
18
- fragment = options.fetch(:id, title.parameterize)
18
+ fragment = options.fetch(:id, fragmentize(title))
19
+
19
20
  html_options = options.fetch(:html_options, {})
20
21
  li html_options do
21
22
  link_to title, "##{fragment}"
@@ -23,9 +24,17 @@ module ActiveAdmin
23
24
  end
24
25
 
25
26
  def build_content_item(title, options, &block)
26
- options = options.reverse_merge(id: title.parameterize)
27
+ options = options.reverse_merge(id: fragmentize(title))
27
28
  div(options, &block)
28
29
  end
30
+
31
+ private
32
+
33
+ def fragmentize(string)
34
+ result = string.parameterize
35
+ result = URI.encode(string) if result.blank?
36
+ result
37
+ end
29
38
  end
30
39
  end
31
40
  end
@@ -21,7 +21,7 @@ module ActiveAdmin
21
21
 
22
22
  def powered_by_message
23
23
  I18n.t('active_admin.powered_by',
24
- active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
24
+ active_admin: link_to("Active Admin", "https://activeadmin.info"),
25
25
  version: ActiveAdmin::VERSION).html_safe
26
26
  end
27
27
 
@@ -192,6 +192,13 @@ module ActiveAdmin
192
192
  # end
193
193
  # ```
194
194
  #
195
+ # You can also define associated objects to include outside of the
196
+ # `scoped_collection` method:
197
+ #
198
+ # ```ruby
199
+ # includes :publisher
200
+ # ```
201
+ #
195
202
  # Then it's simple to sort by any Publisher attribute from within the index table:
196
203
  #
197
204
  # ```ruby
@@ -365,15 +372,16 @@ module ActiveAdmin
365
372
  private
366
373
 
367
374
  def defaults(resource, options = {})
375
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
368
376
  if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
369
- item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}", title: I18n.t('active_admin.view')
377
+ item localizer.t(:view), resource_path(resource), class: "view_link #{options[:css_class]}", title: localizer.t(:view)
370
378
  end
371
379
  if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
372
- item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: I18n.t('active_admin.edit')
380
+ item localizer.t(:edit), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: localizer.t(:edit)
373
381
  end
374
382
  if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
375
- item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}", title: I18n.t('active_admin.delete'),
376
- method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
383
+ item localizer.t(:delete), resource_path(resource), class: "delete_link #{options[:css_class]}", title: localizer.t(:delete),
384
+ method: :delete, data: { confirm: localizer.t(:delete_confirmation) }
377
385
  end
378
386
  end
379
387
 
@@ -4,6 +4,7 @@ module ActiveAdmin
4
4
  class Base < Arbre::HTML::Document
5
5
 
6
6
  def build(*args)
7
+ set_attribute :lang, I18n.locale
7
8
  build_active_admin_head
8
9
  build_page
9
10
  end
@@ -25,6 +26,8 @@ module ActiveAdmin
25
26
  within head do
26
27
  html_title [title, helpers.active_admin_namespace.site_title(self)].compact.join(" | ")
27
28
 
29
+ text_node(active_admin_namespace.head)
30
+
28
31
  active_admin_application.stylesheets.each do |style, options|
29
32
  text_node stylesheet_link_tag(style, options).html_safe
30
33
  end
@@ -2,10 +2,10 @@ module ActiveAdmin
2
2
  module Generators
3
3
  class AssetsGenerator < Rails::Generators::Base
4
4
 
5
- source_root File.expand_path("../templates", __FILE__)
5
+ source_root File.expand_path('templates', __dir__)
6
6
 
7
7
  def install_assets
8
- template 'active_admin.js.coffee', 'app/assets/javascripts/active_admin.js.coffee'
8
+ template 'active_admin.js', 'app/assets/javascripts/active_admin.js'
9
9
  template "active_admin.scss", "app/assets/stylesheets/active_admin.scss"
10
10
  end
11
11
 
@@ -0,0 +1 @@
1
+ //= require active_admin/base
@@ -7,12 +7,14 @@ module ActiveAdmin
7
7
  argument :name, type: :string, default: "AdminUser"
8
8
 
9
9
  hook_for :users, default: "devise", desc: "Admin user generator to run. Skip with --skip-users"
10
+ class_option :skip_comments, type: :boolean, default: false, desc: "Skip installation of comments"
10
11
 
11
- source_root File.expand_path("../templates", __FILE__)
12
+ source_root File.expand_path('templates', __dir__)
12
13
 
13
14
  def copy_initializer
14
15
  @underscored_user_name = name.underscore.gsub('/', '_')
15
16
  @use_authentication_method = options[:users].present?
17
+ @skip_comments = options[:skip_comments]
16
18
  template 'active_admin.rb.erb', 'config/initializers/active_admin.rb'
17
19
  end
18
20
 
@@ -38,7 +40,9 @@ module ActiveAdmin
38
40
  end
39
41
 
40
42
  def create_migrations
41
- migration_template 'migrations/create_active_admin_comments.rb.erb', 'db/migrate/create_active_admin_comments.rb'
43
+ unless options[:skip_comments]
44
+ migration_template 'migrations/create_active_admin_comments.rb.erb', 'db/migrate/create_active_admin_comments.rb'
45
+ end
42
46
  end
43
47
  end
44
48
  end
@@ -69,6 +69,11 @@ ActiveAdmin.setup do |config|
69
69
  # case when Pundit is unable to find suitable policy.
70
70
  # config.pundit_default_policy = "MyDefaultPunditPolicy"
71
71
 
72
+ # If you wish to maintain a separate set of Pundit policies for admin
73
+ # resources, you may set a namespace here that Pundit will search
74
+ # within when looking for a resource's policy.
75
+ # config.pundit_policy_namespace = :admin
76
+
72
77
  # You can customize your CanCan Ability class name here.
73
78
  # config.cancan_ability_class = "Ability"
74
79
 
@@ -119,7 +124,7 @@ ActiveAdmin.setup do |config|
119
124
  # This allows your users to comment on any resource registered with Active Admin.
120
125
  #
121
126
  # You can completely disable comments:
122
- # config.comments = false
127
+ <% unless @skip_comments %># <% end %>config.comments = false
123
128
  #
124
129
  # You can change the name under which comments are registered:
125
130
  # config.comments_registration_name = 'AdminComment'
@@ -147,11 +152,21 @@ ActiveAdmin.setup do |config|
147
152
  #
148
153
  # config.before_action :do_something_awesome
149
154
 
155
+ # == Attribute Filters
156
+ #
157
+ # You can exclude possibly sensitive model attributes from being displayed,
158
+ # added to forms, or exported by default by ActiveAdmin
159
+ #
160
+ config.filter_attributes = [:encrypted_password, :password, :password_confirmation]
161
+
150
162
  # == Localize Date/Time Format
151
163
  #
152
164
  # Set the localize format to display dates and times.
153
165
  # To understand how to localize your app with I18n, read more at
154
- # https://github.com/svenfuchs/i18n/blob/master/lib%2Fi18n%2Fbackend%2Fbase.rb#L52
166
+ # https://guides.rubyonrails.org/i18n.html
167
+ #
168
+ # You can run `bin/rails runner 'puts I18n.t("date.formats")'` to see the
169
+ # available formats in your application.
155
170
  #
156
171
  config.localize_format = :long
157
172
 
@@ -277,6 +292,13 @@ ActiveAdmin.setup do |config|
277
292
  #
278
293
  # config.include_default_association_filters = true
279
294
 
295
+ # == Head
296
+ #
297
+ # You can add your own content to the site head like analytics. Make sure
298
+ # you only pass content you trust.
299
+ #
300
+ # config.head = ''.html_safe
301
+
280
302
  # == Footer
281
303
  #
282
304
  # By default, the footer shows the current Active Admin version. You can
@@ -1,8 +1,7 @@
1
1
  ActiveAdmin.register_page "Dashboard" do
2
+ menu priority: 1, label: proc { I18n.t("active_admin.dashboard") }
2
3
 
3
- menu priority: 1, label: proc{ I18n.t("active_admin.dashboard") }
4
-
5
- content title: proc{ I18n.t("active_admin.dashboard") } do
4
+ content title: proc { I18n.t("active_admin.dashboard") } do
6
5
  div class: "blank_slate_container", id: "dashboard_default_message" do
7
6
  span class: "blank_slate" do
8
7
  span I18n.t("active_admin.dashboard_welcome.welcome")