activeadmin 1.0.0 → 1.1.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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +20 -0
  3. data/.mdlrc +1 -0
  4. data/.rubocop.yml +52 -3
  5. data/.simplecov +13 -0
  6. data/.travis.yml +9 -24
  7. data/.yardopts +0 -1
  8. data/CHANGELOG.md +85 -4
  9. data/CONTRIBUTING.md +33 -57
  10. data/Gemfile +26 -17
  11. data/Rakefile +1 -12
  12. data/activeadmin.gemspec +9 -11
  13. data/app/assets/javascripts/active_admin/base.js.coffee +6 -2
  14. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +5 -1
  15. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +5 -1
  16. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +5 -1
  17. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +5 -1
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +6 -3
  19. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +9 -7
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +5 -2
  21. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +6 -2
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +3 -5
  23. data/app/assets/stylesheets/active_admin/_base.scss +2 -2
  24. data/app/assets/stylesheets/active_admin/_forms.scss +6 -12
  25. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  26. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  27. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/components/_tables.scss +4 -1
  29. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -2
  30. data/app/assets/stylesheets/active_admin/print.scss +2 -3
  31. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  32. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  33. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  34. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  35. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  36. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  37. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  38. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  39. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  40. data/codecov.yml +14 -12
  41. data/config/i18n-tasks.yml +26 -0
  42. data/config/locales/ar.yml +1 -3
  43. data/config/locales/bg.yml +0 -2
  44. data/config/locales/bs.yml +0 -2
  45. data/config/locales/ca.yml +0 -2
  46. data/config/locales/cs.yml +0 -2
  47. data/config/locales/da.yml +1 -3
  48. data/config/locales/de-CH.yml +1 -3
  49. data/config/locales/de.yml +1 -3
  50. data/config/locales/el.yml +1 -3
  51. data/config/locales/en-CA.yml +138 -0
  52. data/config/locales/en-GB.yml +43 -3
  53. data/config/locales/en.yml +8 -4
  54. data/config/locales/es-MX.yml +3 -2
  55. data/config/locales/es.yml +10 -4
  56. data/config/locales/fa.yml +0 -2
  57. data/config/locales/fi.yml +0 -2
  58. data/config/locales/fr.yml +9 -2
  59. data/config/locales/he.yml +53 -7
  60. data/config/locales/hr.yml +0 -2
  61. data/config/locales/hu.yml +0 -2
  62. data/config/locales/id.yml +1 -3
  63. data/config/locales/it.yml +2 -4
  64. data/config/locales/ja.yml +1 -3
  65. data/config/locales/ko.yml +0 -2
  66. data/config/locales/lt.yml +24 -4
  67. data/config/locales/lv.yml +0 -2
  68. data/config/locales/nb.yml +0 -2
  69. data/config/locales/nl.yml +1 -3
  70. data/config/locales/pl.yml +3 -2
  71. data/config/locales/pt-BR.yml +1 -3
  72. data/config/locales/pt-PT.yml +0 -2
  73. data/config/locales/ro.yml +0 -2
  74. data/config/locales/ru.yml +1 -3
  75. data/config/locales/sk.yml +0 -2
  76. data/config/locales/sv-SE.yml +1 -3
  77. data/config/locales/tr.yml +0 -2
  78. data/config/locales/uk.yml +1 -3
  79. data/config/locales/vi.yml +0 -2
  80. data/config/locales/zh-CN.yml +0 -2
  81. data/config/locales/zh-TW.yml +1 -3
  82. data/config/mdl_style.rb +9 -0
  83. data/cucumber.yml +3 -3
  84. data/docs/0-installation.md +15 -12
  85. data/docs/1-general-configuration.md +10 -3
  86. data/docs/10-custom-pages.md +10 -5
  87. data/docs/11-decorators.md +1 -0
  88. data/docs/12-arbre-components.md +7 -9
  89. data/docs/13-authorization-adapter.md +39 -24
  90. data/docs/14-gotchas.md +41 -22
  91. data/docs/2-resource-customization.md +41 -18
  92. data/docs/3-index-pages.md +30 -12
  93. data/docs/3-index-pages/custom-index.md +1 -0
  94. data/docs/3-index-pages/index-as-block.md +0 -5
  95. data/docs/3-index-pages/index-as-blog.md +0 -5
  96. data/docs/3-index-pages/index-as-grid.md +0 -5
  97. data/docs/3-index-pages/index-as-table.md +1 -9
  98. data/docs/4-csv-format.md +2 -1
  99. data/docs/5-forms.md +45 -21
  100. data/docs/6-show-pages.md +2 -1
  101. data/docs/7-sidebars.md +2 -1
  102. data/docs/8-custom-actions.md +4 -1
  103. data/docs/9-batch-actions.md +4 -2
  104. data/docs/documentation.md +19 -21
  105. data/features/comments/commenting.feature +20 -0
  106. data/features/index/filters.feature +41 -1
  107. data/features/index/format_as_csv.feature +17 -0
  108. data/features/index/index_scopes.feature +15 -0
  109. data/features/registering_assets.feature +8 -4
  110. data/features/show/attributes_table_title.feature +54 -0
  111. data/features/show/tabs.feature +10 -4
  112. data/features/step_definitions/action_link_steps.rb +0 -1
  113. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  114. data/features/step_definitions/batch_action_steps.rb +2 -2
  115. data/features/step_definitions/comment_steps.rb +21 -1
  116. data/features/step_definitions/configuration_steps.rb +1 -1
  117. data/features/step_definitions/filter_steps.rb +9 -0
  118. data/features/step_definitions/format_steps.rb +1 -1
  119. data/features/step_definitions/index_scope_steps.rb +4 -0
  120. data/features/support/env.rb +5 -4
  121. data/features/support/regular_env.rb +7 -0
  122. data/features/support/reload_env.rb +7 -0
  123. data/gemfiles/rails_42.gemfile +2 -37
  124. data/gemfiles/rails_50.gemfile +5 -40
  125. data/gemfiles/rails_51.gemfile +5 -40
  126. data/lib/active_admin.rb +0 -3
  127. data/lib/active_admin/application.rb +6 -4
  128. data/lib/active_admin/asset_registration.rb +8 -0
  129. data/lib/active_admin/authorization_adapter.rb +0 -3
  130. data/lib/active_admin/base_controller.rb +1 -2
  131. data/lib/active_admin/base_controller/authorization.rb +0 -1
  132. data/lib/active_admin/base_controller/menu.rb +9 -9
  133. data/lib/active_admin/batch_actions/controller.rb +1 -1
  134. data/lib/active_admin/batch_actions/views/selection_cells.rb +6 -5
  135. data/lib/active_admin/csv_builder.rb +3 -3
  136. data/lib/active_admin/dependency.rb +1 -1
  137. data/lib/active_admin/devise.rb +2 -2
  138. data/lib/active_admin/dsl.rb +2 -2
  139. data/lib/active_admin/filters.rb +2 -0
  140. data/lib/active_admin/filters/active.rb +13 -14
  141. data/lib/active_admin/filters/active_filter.rb +87 -0
  142. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  143. data/lib/active_admin/filters/forms.rb +1 -2
  144. data/lib/active_admin/filters/resource_extension.rb +2 -30
  145. data/lib/active_admin/helpers/settings.rb +0 -1
  146. data/lib/active_admin/inputs/datepicker_input.rb +5 -5
  147. data/lib/active_admin/inputs/filters/date_range_input.rb +12 -4
  148. data/lib/active_admin/inputs/filters/text_input.rb +0 -1
  149. data/lib/active_admin/menu.rb +4 -4
  150. data/lib/active_admin/menu_collection.rb +0 -2
  151. data/lib/active_admin/namespace.rb +1 -1
  152. data/lib/active_admin/orm/active_record/comments/comment.rb +1 -5
  153. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +4 -2
  154. data/lib/active_admin/page_controller.rb +1 -1
  155. data/lib/active_admin/resource/action_items.rb +4 -0
  156. data/lib/active_admin/resource/attributes.rb +1 -1
  157. data/lib/active_admin/resource/page_presenters.rb +1 -1
  158. data/lib/active_admin/resource/routes.rb +0 -1
  159. data/lib/active_admin/resource/scopes.rb +2 -1
  160. data/lib/active_admin/resource_controller.rb +1 -1
  161. data/lib/active_admin/resource_controller/data_access.rb +8 -9
  162. data/lib/active_admin/resource_dsl.rb +10 -10
  163. data/lib/active_admin/router.rb +1 -1
  164. data/lib/active_admin/scope.rb +3 -3
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_helpers.rb +1 -0
  167. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  168. data/lib/active_admin/view_helpers/form_helper.rb +1 -1
  169. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  170. data/lib/active_admin/views/action_items.rb +1 -1
  171. data/lib/active_admin/views/components/active_admin_form.rb +1 -1
  172. data/lib/active_admin/views/components/dropdown_menu.rb +2 -2
  173. data/lib/active_admin/views/components/index_list.rb +0 -2
  174. data/lib/active_admin/views/components/paginated_collection.rb +1 -1
  175. data/lib/active_admin/views/components/scopes.rb +2 -10
  176. data/lib/active_admin/views/components/status_tag.rb +19 -11
  177. data/lib/active_admin/views/components/tabs.rb +2 -2
  178. data/lib/active_admin/views/header.rb +0 -1
  179. data/lib/active_admin/views/index_as_blog.rb +1 -2
  180. data/lib/active_admin/views/index_as_grid.rb +2 -2
  181. data/lib/active_admin/views/index_as_table.rb +19 -1
  182. data/lib/active_admin/views/pages/base.rb +4 -4
  183. data/lib/active_admin/views/pages/show.rb +6 -1
  184. data/lib/active_admin/views/title_bar.rb +4 -4
  185. data/lib/bug_report_templates/{rails_5_master.rb → active_admin_master.rb} +35 -40
  186. data/lib/generators/active_admin/devise/devise_generator.rb +1 -1
  187. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +1 -1
  188. data/spec/bug_report_templates_spec.rb +2 -3
  189. data/spec/rails_helper.rb +0 -3
  190. data/spec/spec_helper.rb +1 -12
  191. data/spec/support/active_admin_integration_spec_helper.rb +1 -1
  192. data/spec/support/rails_template.rb +5 -37
  193. data/spec/support/rails_template_with_data.rb +262 -3
  194. data/spec/support/templates/policies/active_admin/comment_policy.rb +1 -1
  195. data/spec/support/templates/policies/active_admin/page_policy.rb +1 -1
  196. data/spec/support/templates/policies/application_policy.rb +1 -2
  197. data/spec/support/templates/post_decorator.rb +0 -1
  198. data/spec/unit/abstract_view_factory_spec.rb +0 -1
  199. data/spec/unit/application_spec.rb +4 -0
  200. data/spec/unit/asset_registration_spec.rb +29 -0
  201. data/spec/unit/belongs_to_spec.rb +1 -2
  202. data/spec/unit/config_shared_examples.rb +1 -1
  203. data/spec/unit/csv_builder_spec.rb +2 -4
  204. data/spec/unit/dependency_spec.rb +7 -7
  205. data/spec/unit/dsl_spec.rb +0 -2
  206. data/spec/unit/filters/active_filter_spec.rb +135 -0
  207. data/spec/unit/filters/active_spec.rb +11 -1
  208. data/spec/unit/filters/filter_form_builder_spec.rb +9 -7
  209. data/spec/unit/form_builder_spec.rb +14 -14
  210. data/spec/unit/helpers/scope_chain_spec.rb +0 -1
  211. data/spec/unit/i18n_spec.rb +17 -0
  212. data/spec/unit/menu_item_spec.rb +1 -3
  213. data/spec/unit/namespace/register_page_spec.rb +1 -1
  214. data/spec/unit/namespace_spec.rb +0 -1
  215. data/spec/unit/page_spec.rb +0 -3
  216. data/spec/unit/resource/action_items_spec.rb +5 -1
  217. data/spec/unit/resource/attributes_spec.rb +1 -2
  218. data/spec/unit/resource/ordering_spec.rb +0 -3
  219. data/spec/unit/resource/scopes_spec.rb +1 -1
  220. data/spec/unit/resource_controller/data_access_spec.rb +2 -2
  221. data/spec/unit/resource_controller_spec.rb +1 -2
  222. data/spec/unit/resource_spec.rb +9 -2
  223. data/spec/unit/routing_spec.rb +0 -2
  224. data/spec/unit/scope_spec.rb +3 -3
  225. data/spec/unit/settings_spec.rb +0 -1
  226. data/spec/unit/view_factory_spec.rb +1 -1
  227. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -1
  228. data/spec/unit/view_helpers/form_helper_spec.rb +3 -4
  229. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -1
  230. data/spec/unit/views/components/attributes_table_spec.rb +0 -1
  231. data/spec/unit/views/components/columns_spec.rb +0 -2
  232. data/spec/unit/views/components/site_title_spec.rb +0 -2
  233. data/spec/unit/views/components/status_tag_spec.rb +23 -7
  234. data/spec/unit/views/components/tabs_spec.rb +29 -1
  235. data/spec/unit/views/pages/index_spec.rb +1 -1
  236. data/tasks/docs.rake +37 -10
  237. data/tasks/lint.rake +14 -1
  238. data/tasks/local.rake +2 -2
  239. data/tasks/test.rake +8 -25
  240. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  241. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  242. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  243. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  244. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  245. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  246. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  247. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  248. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  249. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  250. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  251. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  252. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  253. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  254. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  255. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  256. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
  257. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  258. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  259. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  260. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  261. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  262. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  263. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  264. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  265. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  266. metadata +62 -51
  267. data/.hound.yml +0 -14
  268. data/Appraisals +0 -41
  269. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  270. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -18
  271. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  272. data/lib/active_admin/filters/humanized.rb +0 -68
  273. data/spec/requests/javascript_spec.rb +0 -22
  274. data/spec/support/jslint.yml +0 -80
  275. data/spec/unit/filters/humanized_spec.rb +0 -64
  276. data/tasks/yard.rake +0 -9
@@ -10,7 +10,7 @@ module ActiveAdmin
10
10
 
11
11
  before_action :authorize_access!
12
12
 
13
- def index(options={}, &block)
13
+ def index(options = {}, &block)
14
14
  render "active_admin/page/index"
15
15
  end
16
16
 
@@ -106,6 +106,10 @@ module ActiveAdmin
106
106
  @block = block
107
107
  normalize_display_options!
108
108
  end
109
+
110
+ def html_class
111
+ "action_item #{@options[:class]}".rstrip
112
+ end
109
113
  end
110
114
 
111
115
  end
@@ -41,4 +41,4 @@ module ActiveAdmin
41
41
 
42
42
  end
43
43
  end
44
- end
44
+ end
@@ -33,7 +33,7 @@ module ActiveAdmin
33
33
  # @param [Symbol, String] action The action to get the config for
34
34
  # @param [String] type The string specified in the presenters index_name method
35
35
  # @return [PagePresenter, nil]
36
- def get_page_presenter(action, type=nil)
36
+ def get_page_presenter(action, type = nil)
37
37
 
38
38
  if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
39
39
  page_presenters[:index][type.to_sym]
@@ -102,7 +102,6 @@ module ActiveAdmin
102
102
  route.compact.join('_').to_sym # :admin_category_posts_path
103
103
  end
104
104
 
105
-
106
105
  # @return params to pass to instance path
107
106
  def route_instance_params(instance)
108
107
  if nested?
@@ -27,7 +27,8 @@ module ActiveAdmin
27
27
  # If you want to internationalize the scope name, you can add
28
28
  # to your i18n files a key like "active_admin.scopes.scope_method".
29
29
  def scope(*args, &block)
30
- options = args.extract_options!
30
+ default_options = {show_count: namespace.scopes_show_count}
31
+ options = default_options.merge(args.extract_options!)
31
32
  title = args[0] rescue nil
32
33
  method = args[1] rescue nil
33
34
 
@@ -52,7 +52,7 @@ module ActiveAdmin
52
52
  def restrict_format_access!
53
53
  unless request.format.html?
54
54
  presenter = active_admin_config.get_page_presenter(:index)
55
- download_formats = (presenter || {}).fetch(:download_links, active_admin_config.namespace.download_links)
55
+ download_formats = (presenter || {}).fetch(:download_links, active_admin_config.namespace.download_links)
56
56
  unless build_download_formats(download_formats).include?(request.format.symbol)
57
57
  raise ActiveAdmin::AccessDenied.new(current_active_admin_user, :index)
58
58
  end
@@ -14,6 +14,8 @@ module ActiveAdmin
14
14
  include ScopeChain
15
15
 
16
16
  define_active_admin_callbacks :build, :create, :update, :save, :destroy
17
+
18
+ helper_method :current_scope
17
19
  end
18
20
  end
19
21
 
@@ -45,7 +47,6 @@ module ActiveAdmin
45
47
  end
46
48
  end
47
49
 
48
-
49
50
  # Does the actual work of retrieving the current collection from the db.
50
51
  # This is a great method to override if you would like to perform
51
52
  # some additional db # work before your controller returns and
@@ -60,7 +61,6 @@ module ActiveAdmin
60
61
  collection
61
62
  end
62
63
 
63
-
64
64
  # Override this method in your controllers to modify the start point
65
65
  # of our searches and index.
66
66
  #
@@ -103,7 +103,6 @@ module ActiveAdmin
103
103
  scoped_collection.send method_for_find, params[:id]
104
104
  end
105
105
 
106
-
107
106
  # Builds, memoize and authorize a new instance of the resource. The
108
107
  # actual work of building the new instance is delegated to the
109
108
  # #build_new_resource method.
@@ -180,12 +179,10 @@ module ActiveAdmin
180
179
  end
181
180
  end
182
181
 
183
-
184
182
  #
185
183
  # Collection Helper Methods
186
184
  #
187
185
 
188
-
189
186
  # Gives the authorization library a change to pre-scope the collection.
190
187
  #
191
188
  # In the case of the CanCan adapter, it calls `#accessible_by` on
@@ -241,13 +238,15 @@ module ActiveAdmin
241
238
 
242
239
  def current_scope
243
240
  @current_scope ||= if params[:scope]
244
- active_admin_config.get_scope_by_id(params[:scope])
245
- else
246
- active_admin_config.default_scope(self)
247
- end
241
+ active_admin_config.get_scope_by_id(params[:scope])
242
+ else
243
+ active_admin_config.default_scope(self)
244
+ end
248
245
  end
249
246
 
250
247
  def apply_pagination(chain)
248
+ # skip pagination if already was paginated by scope
249
+ return chain if chain.respond_to?(:total_pages)
251
250
  page_method_name = Kaminari.config.page_method_name
252
251
  page = params[Kaminari.config.param_name]
253
252
 
@@ -105,7 +105,7 @@ module ActiveAdmin
105
105
  # column :name
106
106
  # end
107
107
  #
108
- def csv(options={}, &block)
108
+ def csv(options = {}, &block)
109
109
  options[:resource] = config
110
110
 
111
111
  config.csv_builder = CSVBuilder.new(options, &block)
@@ -192,17 +192,17 @@ module ActiveAdmin
192
192
  :around, :skip
193
193
  ]
194
194
  keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
195
- [:action]
196
- else
197
- [:action, :filter]
198
- end
195
+ [:action]
196
+ else
197
+ [:action, :filter]
198
+ end
199
199
 
200
200
  keywords.each do |name|
201
- phases.each do |action|
202
- define_method "#{action}_#{name}" do |*args, &block|
203
- controller.public_send "#{action}_action", *args, &block
204
- end
205
- end
201
+ phases.each do |action|
202
+ define_method "#{action}_#{name}" do |*args, &block|
203
+ controller.public_send "#{action}_action", *args, &block
204
+ end
205
+ end
206
206
  end
207
207
 
208
208
  # Specify which actions to create in the controller
@@ -71,7 +71,7 @@ module ActiveAdmin
71
71
  def resource_routes(config)
72
72
  Proc.new do
73
73
  # Builds one route for each HTTP verb passed in
74
- build_route = proc{ |verbs, *args|
74
+ build_route = proc{ |verbs, *args|
75
75
  [*verbs].each{ |verb| send verb, *args }
76
76
  }
77
77
  # Deals with +ControllerAction+ instances
@@ -46,9 +46,9 @@ module ActiveAdmin
46
46
 
47
47
  def name
48
48
  case @name
49
- when String then @name
50
- when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
51
- else @name
49
+ when String then @name
50
+ when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
51
+ else @name
52
52
  end
53
53
  end
54
54
 
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -14,6 +14,7 @@ module ActiveAdmin
14
14
  include TitleHelper
15
15
  include ViewFactoryHelper
16
16
  include FlashHelper
17
+ include ScopeNameHelper
17
18
 
18
19
  end
19
20
  end
@@ -82,7 +82,7 @@ module ActiveAdmin
82
82
  def boolean_attr?(resource, attr, value)
83
83
  case value
84
84
  when TrueClass, FalseClass
85
- true
85
+ true
86
86
  else
87
87
  if resource.class.respond_to? :columns_hash
88
88
  column = resource.class.columns_hash[attr.to_s] and column.type == :boolean
@@ -8,7 +8,7 @@ module ActiveAdmin
8
8
  end.content
9
9
  end
10
10
 
11
- def hidden_field_tags_for(params, options={})
11
+ def hidden_field_tags_for(params, options = {})
12
12
  fields_for_params(params.to_unsafe_hash, options).map do |kv|
13
13
  k, v = kv.first
14
14
  hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
@@ -0,0 +1,16 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ScopeNameHelper
4
+
5
+ def scope_name(scope)
6
+ case scope.name
7
+ when Proc then
8
+ self.instance_exec(&scope.name).to_s
9
+ else
10
+ scope.name.to_s
11
+ end
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
 
6
6
  def build(action_items)
7
7
  action_items.each do |action_item|
8
- span class: "action_item" do
8
+ span class: action_item.html_class do
9
9
  instance_exec(&action_item.block)
10
10
  end
11
11
  end
@@ -78,7 +78,7 @@ module ActiveAdmin
78
78
  end
79
79
 
80
80
  def add_create_another_checkbox
81
- if %w(new create).include?(helpers.action_name) && active_admin_config && active_admin_config.create_another
81
+ if %w(new create).include?(helpers.action_name) && active_admin_config && active_admin_config.create_another
82
82
  current_arbre_element.add_child(create_another_checkbox)
83
83
  end
84
84
  end
@@ -26,10 +26,10 @@ module ActiveAdmin
26
26
  options = options.dup
27
27
 
28
28
  # Easily set options for the button or menu
29
- button_options = options.delete(:button) || {}
29
+ button_options = options.delete(:button) || {}
30
30
  menu_options = options.delete(:menu) || {}
31
31
 
32
- @button = build_button(name, button_options)
32
+ @button = build_button(name, button_options)
33
33
  @menu = build_menu(menu_options)
34
34
 
35
35
  super(options)
@@ -67,5 +67,3 @@ module ActiveAdmin
67
67
  end
68
68
  end
69
69
  end
70
-
71
-
@@ -92,7 +92,7 @@ module ActiveAdmin
92
92
  end
93
93
 
94
94
  def build_pagination
95
- options = {}
95
+ options = { theme: 'active_admin' }
96
96
  options[:params] = @params if @params
97
97
  options[:param_name] = @param_name if @param_name
98
98
 
@@ -12,7 +12,6 @@ module ActiveAdmin
12
12
  include ActiveAdmin::ScopeChain
13
13
  include ::ActiveAdmin::Helpers::Collection
14
14
 
15
-
16
15
  def default_class_name
17
16
  "scopes table_tools_segmented_control"
18
17
  end
@@ -31,11 +30,10 @@ module ActiveAdmin
31
30
 
32
31
  def build_scope(scope, options)
33
32
  li class: classes_for_scope(scope) do
34
- scope_name = I18n.t "active_admin.scopes.#{scope.id}", default: name_for_scope(scope)
35
- params = request.query_parameters.except :page, :scope, :commit, :format
33
+ params = request.query_parameters.except :page, :scope, :commit, :format
36
34
 
37
35
  a href: url_for(scope: scope.id, params: params), class: 'table_tools_button' do
38
- text_node scope_name
36
+ text_node scope_name(scope)
39
37
  span class: 'count' do
40
38
  "(#{get_scope_count(scope)})"
41
39
  end if options[:scope_count] && scope.show_count
@@ -62,12 +60,6 @@ module ActiveAdmin
62
60
  collection_size(scope_chain(scope, collection_before_scope))
63
61
  end
64
62
 
65
- def name_for_scope(scope)
66
- case scope.name
67
- when Proc then self.instance_exec(&scope.name).to_s
68
- else scope.name.to_s
69
- end
70
- end
71
63
  end
72
64
  end
73
65
  end
@@ -12,9 +12,8 @@ module ActiveAdmin
12
12
  'status_tag'
13
13
  end
14
14
 
15
- # @overload status_tag(status, type = nil, options = {})
15
+ # @overload status_tag(status, options = {})
16
16
  # @param [String] status the status to display. One of the span classes will be an underscored version of the status.
17
- # @param [Symbol] type type of status. Will become a class of the span. ActiveAdmin provide style for :ok, :warning and :error.
18
17
  # @param [Hash] options
19
18
  # @option options [String] :class to override the default class
20
19
  # @option options [String] :id to override the default id
@@ -26,31 +25,40 @@ module ActiveAdmin
26
25
  # # => <span class='status_tag in_progress'>In Progress</span>
27
26
  #
28
27
  # @example
29
- # status_tag('active', :ok)
30
- # # => <span class='status_tag active ok'>Active</span>
31
- #
32
- # @example
33
- # status_tag('active', :ok, class: 'important', id: 'status_123', label: 'on')
34
- # # => <span class='status_tag active ok important' id='status_123'>on</span>
28
+ # status_tag('active', class: 'important', id: 'status_123', label: 'on')
29
+ # # => <span class='status_tag active important' id='status_123'>on</span>
35
30
  #
36
31
  def build(*args)
37
32
  options = args.extract_options!
38
33
  status = args[0]
39
34
  type = args[1]
35
+
40
36
  label = options.delete(:label)
41
37
  classes = options.delete(:class)
42
38
  status = convert_to_boolean_status(status)
43
39
 
44
40
  if status
45
41
  content = label || if s = status.to_s and s.present?
46
- I18n.t "active_admin.status_tag.#{s.downcase}", default: s.titleize
47
- end
42
+ I18n.t "active_admin.status_tag.#{s.downcase}", default: s.titleize
43
+ end
48
44
  end
49
45
 
50
46
  super(content, options)
51
47
 
52
48
  add_class(status_to_class(status)) if status
53
- add_class(type.to_s) if type
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
+
54
62
  add_class(classes) if classes
55
63
  end
56
64
 
@@ -15,8 +15,8 @@ module ActiveAdmin
15
15
  end
16
16
 
17
17
  def build_menu_item(title, options, &block)
18
- options = options.reverse_merge({})
19
- li { link_to title, "##{title.parameterize}", options }
18
+ fragment = options.fetch(:id, title.parameterize)
19
+ li { link_to title, "##{fragment}" }
20
20
  end
21
21
 
22
22
  def build_content_item(title, options, &block)
@@ -14,7 +14,6 @@ module ActiveAdmin
14
14
  build_utility_navigation
15
15
  end
16
16
 
17
-
18
17
  def build_site_title
19
18
  insert_tag view_factory.site_title, @namespace
20
19
  end
@@ -89,7 +89,6 @@ module ActiveAdmin
89
89
  @title
90
90
  end
91
91
 
92
-
93
92
  # Setter method for the configuration of the body
94
93
  #
95
94
  def body(method = nil, &block)
@@ -124,7 +123,7 @@ module ActiveAdmin
124
123
  if @title
125
124
  h3 do
126
125
  a(href: resource_path(post)) do
127
- render_method_on_post_or_call_proc post, @title
126
+ render_method_on_post_or_call_proc post, @title
128
127
  end
129
128
  end
130
129
  else
@@ -25,7 +25,7 @@ module ActiveAdmin
25
25
  # end
26
26
  # ```
27
27
  #
28
- class IndexAsGrid < ActiveAdmin::Component
28
+ class IndexAsGrid < ActiveAdmin::Component
29
29
 
30
30
  def build(page_presenter, collection)
31
31
  @page_presenter = page_presenter
@@ -42,7 +42,7 @@ module ActiveAdmin
42
42
  "grid"
43
43
  end
44
44
 
45
- protected
45
+ protected
46
46
 
47
47
  def build_table
48
48
  resource_selection_toggle_panel if active_admin_config.batch_actions.any?
@@ -159,6 +159,24 @@ module ActiveAdmin
159
159
  # end
160
160
  # ```
161
161
  #
162
+ # ## Custom sorting
163
+ #
164
+ # It is also possible to use database specific expressions and options for sorting by column
165
+ #
166
+ # ```ruby
167
+ # order_by(:title) do |order_clause|
168
+ # if order_clause.order == 'desc'
169
+ # [order_clause.to_sql, 'NULLS LAST'].join(' ')
170
+ # else
171
+ # [order_clause.to_sql, 'NULLS FIRST'].join(' ')
172
+ # end
173
+ # end
174
+ #
175
+ # index do
176
+ # column :title
177
+ # end
178
+ # ```
179
+ #
162
180
  # ## Associated Sorting
163
181
  #
164
182
  # You're normally able to sort columns alphabetically, but by default you
@@ -368,6 +386,6 @@ module ActiveAdmin
368
386
  end
369
387
  end # IndexTableFor
370
388
 
371
- end # IndexAsTable
389
+ end
372
390
  end
373
391
  end