activeadmin 1.3.0 → 2.0.0.rc1

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 (423) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +307 -123
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +90 -46
  5. data/README.md +66 -19
  6. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  8. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  9. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  10. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  11. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  12. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  13. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
  14. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  15. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  16. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  17. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  18. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  19. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  20. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  21. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  22. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  25. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  26. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  27. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  28. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  29. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  30. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  31. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  32. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  33. data/config/locales/bg.yml +0 -1
  34. data/config/locales/de.yml +10 -0
  35. data/config/locales/en.yml +19 -1
  36. data/config/locales/es.yml +20 -1
  37. data/config/locales/fi.yml +1 -1
  38. data/config/locales/he.yml +0 -1
  39. data/config/locales/hu.yml +4 -0
  40. data/config/locales/it.yml +4 -0
  41. data/config/locales/lt.yml +2 -2
  42. data/config/locales/nb.yml +15 -5
  43. data/config/locales/nl.yml +11 -0
  44. data/config/locales/pl.yml +71 -3
  45. data/config/locales/ru.yml +2 -0
  46. data/config/locales/tr.yml +9 -0
  47. data/config/locales/uk.yml +2 -0
  48. data/config/locales/zh-CN.yml +33 -5
  49. data/docs/.gitignore +1 -0
  50. data/docs/0-installation.md +2 -2
  51. data/docs/1-general-configuration.md +16 -1
  52. data/docs/10-custom-pages.md +14 -0
  53. data/docs/12-arbre-components.md +28 -1
  54. data/docs/13-authorization-adapter.md +40 -21
  55. data/docs/2-resource-customization.md +8 -3
  56. data/docs/3-index-pages/custom-index.md +1 -1
  57. data/docs/3-index-pages/index-as-blog.md +1 -1
  58. data/docs/3-index-pages/index-as-table.md +5 -5
  59. data/docs/3-index-pages.md +17 -0
  60. data/docs/5-forms.md +16 -2
  61. data/docs/8-custom-actions.md +11 -0
  62. data/docs/CNAME +1 -1
  63. data/docs/Gemfile +2 -0
  64. data/docs/Gemfile.lock +249 -0
  65. data/docs/_config.yml +1 -1
  66. data/docs/_includes/toc.html +1 -1
  67. data/docs/_includes/top-menu.html +9 -1
  68. data/docs/documentation.md +1 -1
  69. data/docs/images/tidelift.svg +14 -0
  70. data/docs/index.html +2 -2
  71. data/docs/stylesheets/main.css +26 -2
  72. data/lib/active_admin/abstract_view_factory.rb +13 -51
  73. data/lib/active_admin/application.rb +49 -155
  74. data/lib/active_admin/application_settings.rb +42 -0
  75. data/lib/active_admin/asset_registration.rb +0 -8
  76. data/lib/active_admin/base_controller/authorization.rb +3 -6
  77. data/lib/active_admin/base_controller.rb +6 -6
  78. data/lib/active_admin/batch_actions/controller.rb +2 -2
  79. data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
  80. data/lib/active_admin/callbacks.rb +1 -1
  81. data/lib/active_admin/csv_builder.rb +1 -1
  82. data/lib/active_admin/dependency.rb +1 -69
  83. data/lib/active_admin/deprecation.rb +0 -25
  84. data/lib/active_admin/dsl.rb +1 -8
  85. data/lib/active_admin/dynamic_setting.rb +38 -0
  86. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  87. data/lib/active_admin/engine.rb +5 -0
  88. data/lib/active_admin/error.rb +1 -1
  89. data/lib/active_admin/filters/active_filter.rb +4 -2
  90. data/lib/active_admin/filters/active_sidebar.rb +5 -1
  91. data/lib/active_admin/filters/forms.rb +7 -4
  92. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  93. data/lib/active_admin/filters/resource_extension.rb +4 -4
  94. data/lib/active_admin/form_builder.rb +97 -62
  95. data/lib/active_admin/generators/boilerplate.rb +1 -1
  96. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  97. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  98. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  99. data/lib/active_admin/menu.rb +2 -8
  100. data/lib/active_admin/menu_item.rb +4 -32
  101. data/lib/active_admin/namespace.rb +20 -8
  102. data/lib/active_admin/namespace_settings.rb +110 -0
  103. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  104. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
  105. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  106. data/lib/active_admin/page_dsl.rb +1 -1
  107. data/lib/active_admin/pundit_adapter.rb +13 -4
  108. data/lib/active_admin/resource/action_items.rb +7 -2
  109. data/lib/active_admin/resource/attributes.rb +7 -4
  110. data/lib/active_admin/resource/menu.rb +3 -3
  111. data/lib/active_admin/resource/naming.rb +3 -3
  112. data/lib/active_admin/resource/routes.rb +9 -4
  113. data/lib/active_admin/resource/scopes.rb +3 -3
  114. data/lib/active_admin/resource/sidebars.rb +1 -1
  115. data/lib/active_admin/resource.rb +2 -2
  116. data/lib/active_admin/resource_collection.rb +2 -2
  117. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  118. data/lib/active_admin/resource_controller/decorators.rb +3 -3
  119. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  120. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  121. data/lib/active_admin/resource_dsl.rb +5 -3
  122. data/lib/active_admin/router.rb +89 -84
  123. data/lib/active_admin/scope.rb +9 -5
  124. data/lib/active_admin/settings_node.rb +19 -0
  125. data/lib/active_admin/version.rb +1 -1
  126. data/lib/active_admin/view_helpers/display_helper.rb +10 -2
  127. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  128. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  129. data/lib/active_admin/view_helpers.rb +1 -1
  130. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  131. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  132. data/lib/active_admin/views/components/menu.rb +32 -0
  133. data/lib/active_admin/views/components/menu_item.rb +58 -0
  134. data/lib/active_admin/views/components/paginated_collection.rb +1 -1
  135. data/lib/active_admin/views/components/scopes.rb +11 -4
  136. data/lib/active_admin/views/components/sidebar.rb +13 -0
  137. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  138. data/lib/active_admin/views/components/site_title.rb +5 -6
  139. data/lib/active_admin/views/components/status_tag.rb +1 -18
  140. data/lib/active_admin/views/components/table_for.rb +3 -12
  141. data/lib/active_admin/views/components/tabs.rb +15 -3
  142. data/lib/active_admin/views/footer.rb +3 -7
  143. data/lib/active_admin/views/header.rb +3 -15
  144. data/lib/active_admin/views/index_as_blog.rb +1 -1
  145. data/lib/active_admin/views/index_as_grid.rb +25 -25
  146. data/lib/active_admin/views/index_as_table.rb +11 -10
  147. data/lib/active_admin/views/pages/base.rb +30 -53
  148. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  149. data/lib/active_admin/views.rb +1 -1
  150. data/lib/active_admin.rb +9 -4
  151. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  152. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  153. data/lib/generators/active_admin/install/install_generator.rb +6 -2
  154. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
  155. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  156. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  157. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  158. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  159. data/lib/ransack_ext.rb +3 -3
  160. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  161. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  162. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  163. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  164. metadata +120 -523
  165. data/.github/ISSUE_TEMPLATE.md +0 -20
  166. data/.gitignore +0 -49
  167. data/.mdlrc +0 -1
  168. data/.rubocop.yml +0 -76
  169. data/.simplecov +0 -13
  170. data/.travis.yml +0 -51
  171. data/.yardopts +0 -7
  172. data/Gemfile +0 -58
  173. data/Rakefile +0 -54
  174. data/activeadmin.gemspec +0 -32
  175. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  176. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  177. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  178. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  179. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  180. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  181. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  182. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  183. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  184. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  185. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  186. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  187. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  188. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  189. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  190. data/codecov.yml +0 -25
  191. data/config/i18n-tasks.yml +0 -26
  192. data/config/mdl_style.rb +0 -9
  193. data/cucumber.yml +0 -3
  194. data/features/action_item.feature +0 -73
  195. data/features/authorization.feature +0 -64
  196. data/features/authorization_cancan.feature +0 -52
  197. data/features/authorization_pundit.feature +0 -37
  198. data/features/belongs_to.feature +0 -124
  199. data/features/breadcrumb.feature +0 -75
  200. data/features/comments/commenting.feature +0 -178
  201. data/features/comments/viewing_index.feature +0 -19
  202. data/features/create_another.feature +0 -55
  203. data/features/dashboard.feature +0 -16
  204. data/features/decorators.feature +0 -43
  205. data/features/development_reloading.feature +0 -28
  206. data/features/edit_page.feature +0 -116
  207. data/features/favicon.feature +0 -20
  208. data/features/first_boot.feature +0 -16
  209. data/features/footer.feature +0 -28
  210. data/features/global_navigation.feature +0 -29
  211. data/features/i18n.feature +0 -55
  212. data/features/index/batch_actions.feature +0 -218
  213. data/features/index/filters.feature +0 -250
  214. data/features/index/format_as_csv.feature +0 -220
  215. data/features/index/formats.feature +0 -88
  216. data/features/index/index_as_block.feature +0 -15
  217. data/features/index/index_as_blog.feature +0 -69
  218. data/features/index/index_as_grid.feature +0 -45
  219. data/features/index/index_as_table.feature +0 -291
  220. data/features/index/index_blank_slate.feature +0 -83
  221. data/features/index/index_parameters.feature +0 -75
  222. data/features/index/index_scope_to.feature +0 -56
  223. data/features/index/index_scopes.feature +0 -285
  224. data/features/index/page_title.feature +0 -41
  225. data/features/index/pagination.feature +0 -63
  226. data/features/index/switch_index_view.feature +0 -73
  227. data/features/menu.feature +0 -72
  228. data/features/meta_tags.feature +0 -21
  229. data/features/new_page.feature +0 -136
  230. data/features/registering_assets.feature +0 -38
  231. data/features/registering_pages.feature +0 -237
  232. data/features/registering_resources.feature +0 -33
  233. data/features/renamed_resource.feature +0 -30
  234. data/features/root_to.feature +0 -17
  235. data/features/show/attributes_table_title.feature +0 -54
  236. data/features/show/columns.feature +0 -40
  237. data/features/show/default_content.feature +0 -44
  238. data/features/show/page_title.feature +0 -58
  239. data/features/show/tabs.feature +0 -33
  240. data/features/sidebar_sections.feature +0 -210
  241. data/features/site_title.feature +0 -47
  242. data/features/specifying_actions.feature +0 -118
  243. data/features/step_definitions/action_item_steps.rb +0 -7
  244. data/features/step_definitions/action_link_steps.rb +0 -19
  245. data/features/step_definitions/additional_web_steps.rb +0 -81
  246. data/features/step_definitions/asset_steps.rb +0 -15
  247. data/features/step_definitions/attribute_steps.rb +0 -18
  248. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  249. data/features/step_definitions/batch_action_steps.rb +0 -81
  250. data/features/step_definitions/blog_steps.rb +0 -3
  251. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  252. data/features/step_definitions/column_steps.rb +0 -8
  253. data/features/step_definitions/comment_steps.rb +0 -32
  254. data/features/step_definitions/configuration_steps.rb +0 -100
  255. data/features/step_definitions/dashboard_steps.rb +0 -15
  256. data/features/step_definitions/factory_steps.rb +0 -35
  257. data/features/step_definitions/filter_steps.rb +0 -47
  258. data/features/step_definitions/flash_steps.rb +0 -11
  259. data/features/step_definitions/footer_steps.rb +0 -11
  260. data/features/step_definitions/format_steps.rb +0 -56
  261. data/features/step_definitions/i18n_steps.rb +0 -11
  262. data/features/step_definitions/index_scope_steps.rb +0 -29
  263. data/features/step_definitions/index_views_steps.rb +0 -3
  264. data/features/step_definitions/layout_steps.rb +0 -3
  265. data/features/step_definitions/member_link_steps.rb +0 -7
  266. data/features/step_definitions/menu_steps.rb +0 -11
  267. data/features/step_definitions/meta_tag_steps.rb +0 -3
  268. data/features/step_definitions/pagination_steps.rb +0 -15
  269. data/features/step_definitions/sidebar_steps.rb +0 -11
  270. data/features/step_definitions/site_title_steps.rb +0 -17
  271. data/features/step_definitions/tab_steps.rb +0 -8
  272. data/features/step_definitions/table_steps.rb +0 -116
  273. data/features/step_definitions/user_steps.rb +0 -52
  274. data/features/step_definitions/web_steps.rb +0 -86
  275. data/features/sti_resource.feature +0 -65
  276. data/features/strong_parameters.feature +0 -69
  277. data/features/support/env.rb +0 -122
  278. data/features/support/paths.rb +0 -73
  279. data/features/support/regular_env.rb +0 -7
  280. data/features/support/reload_env.rb +0 -7
  281. data/features/support/selectors.rb +0 -45
  282. data/features/users/logging_in.feature +0 -36
  283. data/features/users/logging_out.feature +0 -13
  284. data/features/users/resetting_password.feature +0 -34
  285. data/gemfiles/rails_42.gemfile +0 -10
  286. data/gemfiles/rails_50.gemfile +0 -10
  287. data/gemfiles/rails_51.gemfile +0 -10
  288. data/gemfiles/rails_52.gemfile +0 -11
  289. data/lib/active_admin/event.rb +0 -24
  290. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  291. data/lib/active_admin/helpers/settings.rb +0 -114
  292. data/lib/bug_report_templates/active_admin_master.rb +0 -112
  293. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  294. data/spec/bug_report_templates_spec.rb +0 -26
  295. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  296. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  297. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  298. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  299. data/spec/javascripts/fixtures/flashes.html +0 -2
  300. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  301. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  302. data/spec/javascripts/support/jasmine.yml +0 -74
  303. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  304. data/spec/rails_helper.rb +0 -59
  305. data/spec/requests/default_namespace_spec.rb +0 -81
  306. data/spec/requests/memory_spec.rb +0 -25
  307. data/spec/requests/stylesheets_spec.rb +0 -18
  308. data/spec/spec_helper.rb +0 -1
  309. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  310. data/spec/support/active_admin_request_helpers.rb +0 -39
  311. data/spec/support/rails_template.rb +0 -153
  312. data/spec/support/rails_template_with_data.rb +0 -327
  313. data/spec/support/templates/admin/stores.rb +0 -7
  314. data/spec/support/templates/en.yml +0 -8
  315. data/spec/support/templates/manifest.js +0 -3
  316. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  317. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  318. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  319. data/spec/support/templates/policies/application_policy.rb +0 -44
  320. data/spec/support/templates/policies/category_policy.rb +0 -7
  321. data/spec/support/templates/policies/post_policy.rb +0 -15
  322. data/spec/support/templates/policies/store_policy.rb +0 -11
  323. data/spec/support/templates/policies/user_policy.rb +0 -11
  324. data/spec/support/templates/post_decorator.rb +0 -24
  325. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  326. data/spec/unit/action_builder_spec.rb +0 -158
  327. data/spec/unit/active_admin_spec.rb +0 -11
  328. data/spec/unit/application_spec.rb +0 -184
  329. data/spec/unit/asset_registration_spec.rb +0 -81
  330. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  331. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  332. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  333. data/spec/unit/auto_link_spec.rb +0 -93
  334. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  335. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  336. data/spec/unit/belongs_to_spec.rb +0 -76
  337. data/spec/unit/cancan_adapter_spec.rb +0 -43
  338. data/spec/unit/comments_spec.rb +0 -176
  339. data/spec/unit/component_spec.rb +0 -18
  340. data/spec/unit/config_shared_examples.rb +0 -59
  341. data/spec/unit/controller_filters_spec.rb +0 -41
  342. data/spec/unit/csv_builder_spec.rb +0 -313
  343. data/spec/unit/dependency_spec.rb +0 -135
  344. data/spec/unit/devise_spec.rb +0 -110
  345. data/spec/unit/dsl_spec.rb +0 -120
  346. data/spec/unit/filters/active_filter_spec.rb +0 -189
  347. data/spec/unit/filters/active_spec.rb +0 -24
  348. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  349. data/spec/unit/filters/resource_spec.rb +0 -128
  350. data/spec/unit/form_builder_spec.rb +0 -990
  351. data/spec/unit/generators/install_spec.rb +0 -31
  352. data/spec/unit/helpers/collection_spec.rb +0 -68
  353. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  354. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  355. data/spec/unit/helpers/settings_spec.rb +0 -30
  356. data/spec/unit/i18n_spec.rb +0 -29
  357. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  358. data/spec/unit/menu_collection_spec.rb +0 -62
  359. data/spec/unit/menu_item_spec.rb +0 -141
  360. data/spec/unit/menu_spec.rb +0 -71
  361. data/spec/unit/namespace/authorization_spec.rb +0 -27
  362. data/spec/unit/namespace/register_page_spec.rb +0 -99
  363. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  364. data/spec/unit/namespace_spec.rb +0 -124
  365. data/spec/unit/order_clause_spec.rb +0 -81
  366. data/spec/unit/page_controller_spec.rb +0 -5
  367. data/spec/unit/page_spec.rb +0 -128
  368. data/spec/unit/pretty_format_spec.rb +0 -82
  369. data/spec/unit/pundit_adapter_spec.rb +0 -98
  370. data/spec/unit/resource/action_items_spec.rb +0 -69
  371. data/spec/unit/resource/attributes_spec.rb +0 -49
  372. data/spec/unit/resource/includes_spec.rb +0 -21
  373. data/spec/unit/resource/menu_spec.rb +0 -18
  374. data/spec/unit/resource/naming_spec.rb +0 -122
  375. data/spec/unit/resource/ordering_spec.rb +0 -35
  376. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  377. data/spec/unit/resource/pagination_spec.rb +0 -38
  378. data/spec/unit/resource/routes_spec.rb +0 -125
  379. data/spec/unit/resource/scopes_spec.rb +0 -50
  380. data/spec/unit/resource/sidebars_spec.rb +0 -43
  381. data/spec/unit/resource_collection_spec.rb +0 -175
  382. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  383. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  384. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  385. data/spec/unit/resource_controller_spec.rb +0 -273
  386. data/spec/unit/resource_registration_spec.rb +0 -61
  387. data/spec/unit/resource_spec.rb +0 -320
  388. data/spec/unit/routing_spec.rb +0 -211
  389. data/spec/unit/scope_spec.rb +0 -209
  390. data/spec/unit/settings_spec.rb +0 -117
  391. data/spec/unit/view_factory_spec.rb +0 -19
  392. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  393. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  394. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  395. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  396. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  397. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  398. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  399. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  400. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  401. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  402. data/spec/unit/views/components/columns_spec.rb +0 -187
  403. data/spec/unit/views/components/index_list_spec.rb +0 -49
  404. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  405. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  406. data/spec/unit/views/components/panel_spec.rb +0 -58
  407. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  408. data/spec/unit/views/components/site_title_spec.rb +0 -76
  409. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  410. data/spec/unit/views/components/table_for_spec.rb +0 -436
  411. data/spec/unit/views/components/tabs_spec.rb +0 -67
  412. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  413. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  414. data/spec/unit/views/pages/form_spec.rb +0 -54
  415. data/spec/unit/views/pages/index_spec.rb +0 -60
  416. data/spec/unit/views/pages/layout_spec.rb +0 -59
  417. data/spec/unit/views/pages/show_spec.rb +0 -32
  418. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  419. data/tasks/docs.rake +0 -64
  420. data/tasks/lint.rake +0 -21
  421. data/tasks/local.rake +0 -25
  422. data/tasks/parallel_tests.rake +0 -66
  423. data/tasks/test.rake +0 -29
@@ -1,138 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe MethodOrProcHelper do
4
- let(:receiver) { double }
5
-
6
- let(:context) do
7
- obj = double receiver_in_context: receiver
8
- obj.extend MethodOrProcHelper
9
- obj
10
- end
11
-
12
- describe "#call_method_or_exec_proc" do
13
-
14
- it "should call the method in the context when a symbol" do
15
- expect(context.call_method_or_exec_proc(:receiver_in_context)).to eq receiver
16
- end
17
-
18
- it "should call the method in the context when a string" do
19
- expect(context.call_method_or_exec_proc("receiver_in_context")).to eq receiver
20
- end
21
-
22
- it "should exec a proc in the context" do
23
- test_proc = Proc.new{ raise "Success" if receiver_in_context }
24
-
25
- expect {
26
- context.call_method_or_exec_proc(test_proc)
27
- }.to raise_error("Success")
28
- end
29
-
30
- end
31
-
32
- describe "#call_method_or_proc_on" do
33
-
34
- [:hello, 'hello'].each do |key|
35
- context "when a #{key.class}" do
36
- it "should call the method on the receiver" do
37
- expect(receiver).to receive(key).and_return 'hello'
38
-
39
- expect(context.call_method_or_proc_on(receiver, key)).to eq 'hello'
40
- end
41
-
42
- it "should receive additional arguments" do
43
- expect(receiver).to receive(key).with(:world).and_return 'hello world'
44
-
45
- expect(context.call_method_or_proc_on(receiver, key, :world)).to eq 'hello world'
46
- end
47
- end
48
- end
49
-
50
- context "when a proc" do
51
-
52
- it "should exec the block in the context and pass in the receiver" do
53
- test_proc = Proc.new do |arg|
54
- raise "Success!" if arg == receiver_in_context
55
- end
56
-
57
- expect {
58
- context.call_method_or_proc_on(receiver, test_proc)
59
- }.to raise_error("Success!")
60
- end
61
-
62
- it "should receive additional arguments" do
63
- test_proc = Proc.new do |arg1, arg2|
64
- raise "Success!" if arg1 == receiver_in_context && arg2 == "Hello"
65
- end
66
-
67
- expect {
68
- context.call_method_or_proc_on(receiver, test_proc, "Hello")
69
- }.to raise_error("Success!")
70
- end
71
-
72
- end
73
-
74
- context "when a proc and exec: false" do
75
-
76
- it "should call the proc and pass in the receiver" do
77
- obj_not_in_context = double
78
-
79
- test_proc = Proc.new do |arg|
80
- raise "Success!" if arg == receiver && obj_not_in_context
81
- end
82
-
83
- expect {
84
- context.call_method_or_proc_on(receiver, test_proc, exec: false)
85
- }.to raise_error("Success!")
86
- end
87
-
88
- end
89
-
90
- end
91
-
92
- describe "#render_or_call_method_or_proc_on" do
93
- [ :symbol, Proc.new{} ].each do |key|
94
- context "when a #{key.class}" do
95
- it "should call #call_method_or_proc_on" do
96
- options = { foo: :bar }
97
- expect(context).to receive(:call_method_or_proc_on).with(receiver, key, options).and_return("data")
98
- expect(context.render_or_call_method_or_proc_on(receiver, key, options)).to eq "data"
99
- end
100
- end
101
- end
102
-
103
- context "when a string" do
104
- it "should return the string" do
105
- expect(context.render_or_call_method_or_proc_on(receiver, "string")).to eq "string"
106
- end
107
- end
108
- end
109
-
110
- describe "#render_in_context" do
111
- let(:args) { [1, 2, 3] }
112
-
113
- context "when a Proc" do
114
- let(:object) { Proc.new { } }
115
-
116
- it "should instance_exec the Proc" do
117
- expect(receiver).to receive(:instance_exec).with(args, &object).and_return("data")
118
- expect(context.render_in_context(receiver, object, args)).to eq "data"
119
- end
120
- end
121
-
122
- context "when a Symbol" do
123
- it "should send the symbol" do
124
- expect(receiver).to receive(:public_send).with(:symbol, args).and_return("data")
125
- expect(context.render_in_context(receiver, :symbol, args)).to eq "data"
126
- end
127
- end
128
-
129
- context "when a Object (not Proc or String)" do
130
- let(:object) { Object.new }
131
-
132
- it "should return the Object" do
133
- expect(context.render_in_context(receiver, object)).to eq object
134
- end
135
- end
136
- end
137
-
138
- end
@@ -1,271 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Views::AttributesTable do
4
-
5
- describe "creating with the dsl" do
6
- let(:helpers) { action_view }
7
-
8
- let(:post) do
9
- post = Post.new title: "Hello World", body: nil
10
- allow(post).to receive(:id){ 1 }
11
- allow(post).to receive(:new_record?){ false }
12
- post
13
- end
14
-
15
- let(:assigns){ { post: post } }
16
-
17
- # Loop through a few different ways to make the same table
18
- # and ensure that they produce the same results
19
- {
20
- "when attributes are passed in to the builder methods" => proc {
21
- render_arbre_component(assigns) {
22
- attributes_table_for post, :id, :title, :body
23
- }
24
- },
25
- "when attributes are built using the block" => proc {
26
- render_arbre_component(assigns) {
27
- attributes_table_for post do
28
- rows :id, :title, :body
29
- end
30
- }
31
- },
32
- "when each attribute is passed in by itself" => proc {
33
- render_arbre_component(assigns) {
34
- attributes_table_for post do
35
- row :id
36
- row :title
37
- row :body
38
- end
39
- }
40
- },
41
- "when you create each row with a custom block" => proc {
42
- render_arbre_component(assigns) {
43
- attributes_table_for post do
44
- row("Id") { post.id }
45
- row("Title"){ post.title }
46
- row("Body") { post.body }
47
- end
48
- }
49
- },
50
- "when you create each row with a custom block that returns nil" => proc {
51
- render_arbre_component(assigns) {
52
- attributes_table_for post do
53
- row("Id") { text_node post.id; nil }
54
- row("Title"){ text_node post.title; nil }
55
- row("Body") { text_node post.body; nil }
56
- end
57
- }
58
- },
59
- }.each do |context_title, table_decleration|
60
- context context_title do
61
- let(:table) { instance_eval &table_decleration }
62
-
63
- it "should render a div wrapper with the class '.attributes_table'" do
64
- expect(table.tag_name).to eq 'div'
65
- expect(table.attr(:class)).to include('attributes_table')
66
- end
67
-
68
- it "should add id and type class" do
69
- expect(table.class_names).to include("post")
70
- expect(table.id).to eq "attributes_table_post_1"
71
- end
72
-
73
- it "should render 3 rows" do
74
- expect(table.find_by_tag("tr").size).to eq 3
75
- end
76
-
77
- describe "rendering the rows" do
78
- [
79
- ["Id" , "1"],
80
- ["Title" , "Hello World"],
81
- ["Body" , "<span class=\"empty\">Empty</span>"]
82
- ].each_with_index do |(title, content), i|
83
- describe "for #{title}" do
84
- let(:current_row){ table.find_by_tag("tr")[i] }
85
-
86
- it "should have the title '#{title}'" do
87
- expect(current_row.find_by_tag("th").first.content).to eq title
88
- end
89
-
90
- it "should have the content '#{content}'" do
91
- expect(current_row.find_by_tag("td").first.content.chomp.strip).to eq content
92
- end
93
- end
94
- end
95
- end # describe rendering rows
96
-
97
- end
98
- end # describe dsl styles
99
-
100
- it "should add a class for each row based on the col name" do
101
- table = render_arbre_component(assigns) {
102
- attributes_table_for(post) do
103
- row :title
104
- row :created_at
105
- end
106
- }
107
- expect(table.find_by_tag("tr").first.to_s.
108
- split("\n").first.lstrip).
109
- to eq '<tr class="row row-title">'
110
-
111
- expect(table.find_by_tag("tr").last.to_s.
112
- split("\n").first.lstrip).
113
- to eq '<tr class="row row-created_at">'
114
- end
115
-
116
- it "should allow html options for the row itself" do
117
- table = render_arbre_component(assigns) {
118
- attributes_table_for(post) do
119
- row("Wee", class: "custom_row", style: "custom_style") { }
120
- end
121
- }
122
- expect(table.find_by_tag("tr").first.to_s.split("\n").first.lstrip).
123
- to eq '<tr class="row custom_row" style="custom_style">'
124
- end
125
-
126
- it "should allow html content inside the attributes table" do
127
- table = render_arbre_component(assigns) {
128
- attributes_table_for(post) do
129
- row("ID"){ span(post.id, class: 'id') }
130
- end
131
- }
132
- expect(table.find_by_tag("td").first.content.chomp.strip).to eq "<span class=\"id\">1</span>"
133
- end
134
-
135
- context 'an attribute ending in _id' do
136
- before do
137
- post.foo_id = 23
138
- post.author = User.new username: 'john_doe', first_name: 'John', last_name: 'Doe'
139
- end
140
- it 'should call the association if one exists' do
141
- table = render_arbre_component assigns do
142
- attributes_table_for post, :author
143
- end
144
- expect(table.find_by_tag('th').first.content).to eq 'Author'
145
- expect(table.find_by_tag('td').first.content).to eq 'John Doe'
146
- end
147
- it 'should not attempt to call a nonexistant association' do
148
- table = render_arbre_component assigns do
149
- attributes_table_for post, :foo_id
150
- end
151
- expect(table.find_by_tag('th').first.content).to eq 'Foo'
152
- expect(table.find_by_tag('td').first.content).to eq '23'
153
- end
154
- end
155
-
156
- context "with a collection" do
157
- let(:posts) do
158
- [Post.new(title: "Hello World", id: 1), Post.new(title: "Multi Column", id: 2)].each_with_index do |post, index|
159
- allow(post).to receive(:id).and_return(index + 1)
160
- allow(post).to receive(:new_record?).and_return(false)
161
- end
162
- end
163
-
164
- let(:assigns) { { posts: posts } }
165
-
166
- let(:table) do
167
- render_arbre_component(assigns) do
168
- attributes_table_for posts, :id, :title
169
- end
170
- end
171
-
172
- it "does not set id on the table" do
173
- expect(table.attr(:id)).to eq nil
174
- end
175
-
176
- context "colgroup" do
177
- let(:cols) { table.find_by_tag "col" }
178
-
179
- it "contains a col for each record (plus headers)" do
180
- expect(cols.size).to eq (2 + 1)
181
- end
182
-
183
- it "assigns an id to each col" do
184
- cols[1..-1].each_with_index do |col, index|
185
- expect(col.id).to eq "attributes_table_post_#{index + 1}"
186
- end
187
- end
188
-
189
- it "assigns a class to each col" do
190
- cols[1..-1].each_with_index do |col, index|
191
- expect(col.class_names).to include("post")
192
- end
193
- end
194
-
195
- it "assigns alternation classes to each col" do
196
- cols[1..-1].each_with_index do |col, index|
197
- expect(col.class_names).to include(["even", "odd"][index % 2])
198
- end
199
- end
200
- end
201
-
202
- context "when rendering the rows" do
203
- it "should contain 3 columns" do
204
- expect(table.find_by_tag("tr").first.children.size).to eq 3
205
- end
206
-
207
- [
208
- ["Id" , "1", "2"],
209
- ["Title", "Hello World", "Multi Column"],
210
- ].each_with_index do |set, i|
211
- describe "for #{set[0]}" do
212
- let(:title){ set[0] }
213
- let(:content){ set[1] }
214
- let(:current_row){ table.find_by_tag("tr")[i] }
215
-
216
- it "should have the title '#{set[0]}'" do
217
- expect(current_row.find_by_tag("th").first.content).to eq title
218
- end
219
-
220
- context "with defined attribute name translation" do
221
- it "should have the translated attribute name in the title" do
222
- with_translation activerecord: {attributes: {post: {title: 'Translated Title', id: 'Translated Id'}}} do
223
- expect(current_row.find_by_tag("th").first.content).to eq "Translated #{title}"
224
- end
225
- end
226
- end
227
-
228
- set[1..-1].each_with_index do |content, index|
229
- it "column #{index} should have the content '#{content}'" do
230
- expect(current_row.find_by_tag("td")[index].content.chomp.strip).to eq content
231
- end
232
- end
233
- end
234
- end
235
- end # describe rendering rows
236
- end # with a collection
237
-
238
- context "when using a single Hash" do
239
- let(:table) do
240
- render_arbre_component nil, helpers do
241
- attributes_table_for foo: 1, bar: 2 do
242
- row :foo
243
- row :bar
244
- end
245
- end
246
- end
247
- it "should render" do
248
- expect(table.find_by_tag("th")[0].content).to eq "Foo"
249
- expect(table.find_by_tag("th")[1].content).to eq "Bar"
250
- expect(table.find_by_tag("td")[0].content).to eq "1"
251
- expect(table.find_by_tag("td")[1].content).to eq "2"
252
- end
253
- end
254
-
255
- context "when using an Array of Hashes" do
256
- let(:table) do
257
- render_arbre_component nil, helpers do
258
- attributes_table_for [{foo: 1}, {foo: 2}] do
259
- row :foo
260
- end
261
- end
262
- end
263
- it "should render" do
264
- expect(table.find_by_tag("th")[0].content).to eq "Foo"
265
- expect(table.find_by_tag("td")[0].content).to eq "1"
266
- expect(table.find_by_tag("td")[1].content).to eq "2"
267
- end
268
- end
269
- end
270
-
271
- end
@@ -1,43 +0,0 @@
1
- require 'rails_helper'
2
- require 'active_admin/batch_actions/views/batch_action_selector'
3
-
4
- RSpec.describe ActiveAdmin::BatchActions::BatchActionSelector do
5
-
6
- let(:dropdown) do
7
- render_arbre_component do
8
- batch_action_selector [
9
- ActiveAdmin::BatchAction.new(:action_1, "Action 1"),
10
- ActiveAdmin::BatchAction.new(:action_2, "Action 2"),
11
- ActiveAdmin::BatchAction.new(:action_3, "Action 3")
12
- ]
13
- end
14
- end
15
-
16
- describe "the action list" do
17
- subject do
18
- dropdown.find_by_class("dropdown_menu_list").first
19
- end
20
-
21
- describe '#tag_name' do
22
- subject { super().tag_name }
23
- it { is_expected.to eql("ul") }
24
- end
25
-
26
- describe '#content' do
27
- subject { super().content }
28
- it{ is_expected.to include("class=\"batch_action\" data-action=\"action_1\"") }
29
- end
30
-
31
- describe '#content' do
32
- subject { super().content }
33
- it{ is_expected.to include("class=\"batch_action\" data-action=\"action_2\"") }
34
- end
35
-
36
- describe '#content' do
37
- subject { super().content }
38
- it{ is_expected.to include("class=\"batch_action\" data-action=\"action_3\"") }
39
- end
40
-
41
- end
42
-
43
- end
@@ -1,27 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Views::BlankSlate do
4
-
5
- describe "#blank_slate" do
6
- subject do
7
- render_arbre_component do
8
- blank_slate("There are no Posts yet. <a href=\"/posts/new\">Create one</a></span>")
9
- end
10
- end
11
-
12
- describe '#tag_name' do
13
- subject { super().tag_name }
14
- it { is_expected.to eql 'div' }
15
- end
16
-
17
- describe '#class_list' do
18
- subject { super().class_list }
19
- it { is_expected.to include('blank_slate_container') }
20
- end
21
-
22
- describe '#content' do
23
- subject { super().content }
24
- it { is_expected.to include '<span class="blank_slate">There are no Posts yet. <a href="/posts/new">Create one</a></span>' }
25
- end
26
- end
27
- end
@@ -1,187 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Views::Columns do
4
-
5
- describe "Rendering zero columns" do
6
- let(:cols) do
7
- render_arbre_component do
8
- columns do
9
- end
10
- end
11
- end
12
-
13
- it "should have the class .columns" do
14
- expect(cols.class_list).to include("columns")
15
- end
16
-
17
- it "should have one column" do
18
- expect(cols.children.first.class_list).not_to include("column")
19
- end
20
- end
21
-
22
- describe "Rendering one column" do
23
- let(:cols) do
24
- render_arbre_component do
25
- columns do
26
- column { span "Hello World" }
27
- end
28
- end
29
- end
30
-
31
- it "should have the class .columns" do
32
- expect(cols.class_list).to include("columns")
33
- end
34
-
35
- it "should have one column" do
36
- expect(cols.children.size).to eq 1
37
- expect(cols.children.first.class_list).to include("column")
38
- end
39
-
40
- it "should have one column with the width 100.0%" do
41
- expect(cols.children.first.attr(:style)).to include("width: 100.0%")
42
- end
43
- end
44
-
45
- describe "Rendering two columns" do
46
- let(:cols) do
47
- render_arbre_component do
48
- columns do
49
- column { span "Hello World" }
50
- column { span "Hello World" }
51
- end
52
- end
53
- end
54
-
55
- it "should have two columns" do
56
- expect(cols.children.size).to eq 2
57
- end
58
-
59
- it "should have a first column with width 49% and margin 2%" do
60
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; margin-right: 2%;"
61
- end
62
-
63
- it "should have a second column with width 49% and no right margin" do
64
- expect(cols.children.last.attr(:style)).to eq "width: 49.0%;"
65
- end
66
- end
67
-
68
- describe "Rendering four columns" do
69
- let(:cols) do
70
- render_arbre_component do
71
- columns do
72
- column { span "Hello World" }
73
- column { span "Hello World" }
74
- column { span "Hello World" }
75
- column { span "Hello World" }
76
- end
77
- end
78
- end
79
-
80
- it "should have four columns" do
81
- expect(cols.children.size).to eq 4
82
- end
83
-
84
- (0..2).to_a.each do |index|
85
- it "should have column #{index + 1} with width 49% and margin 2%" do
86
- expect(cols.children[index].attr(:style)).to eq "width: 23.5%; margin-right: 2%;"
87
- end
88
- end
89
-
90
- it "should have column 4 with width 49% and no margin" do
91
- expect(cols.children[3].attr(:style)).to eq "width: 23.5%;"
92
- end
93
- end
94
-
95
- describe "Column Spans" do
96
- let(:cols) do
97
- render_arbre_component do
98
- columns do
99
- column(span: 2){ "Hello World" }
100
- column(){ "Hello World" }
101
- column(){ "Hello World" }
102
- end
103
- end
104
- end
105
-
106
- it "should set the span when declared" do
107
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; margin-right: 2%;"
108
- end
109
-
110
- it "should default to 1 if not passed in" do
111
- expect(cols.children.last.attr(:style)).to eq "width: 23.5%;"
112
- end
113
- end
114
-
115
- describe "Column max width" do
116
-
117
- let(:cols) do
118
- render_arbre_component do
119
- columns do
120
- column(max_width: "100px"){ "Hello World" }
121
- column(){ "Hello World" }
122
- end
123
- end
124
- end
125
-
126
- it "should set the max with if passed in" do
127
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; max-width: 100px; margin-right: 2%;"
128
- end
129
-
130
- it "should omit the value if not present" do
131
- expect(cols.children.last.attr(:style)).to eq "width: 49.0%;"
132
- end
133
-
134
- context "when passed an integer value" do
135
- let(:cols) do
136
- render_arbre_component do
137
- columns do
138
- column(max_width: 100){ "Hello World" }
139
- column(){ "Hello World" }
140
- end
141
- end
142
- end
143
-
144
- it "should be treated as pixels" do
145
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; max-width: 100px; margin-right: 2%;"
146
- end
147
- end
148
-
149
- end
150
-
151
- describe "Column min width" do
152
-
153
- let(:cols) do
154
- render_arbre_component do
155
- columns do
156
- column(min_width: "100px"){ "Hello World" }
157
- column(){ "Hello World" }
158
- end
159
- end
160
- end
161
-
162
- it "should set the min with if passed in" do
163
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; min-width: 100px; margin-right: 2%;"
164
- end
165
-
166
- it "should omit the value if not present" do
167
- expect(cols.children.last.attr(:style)).to eq "width: 49.0%;"
168
- end
169
-
170
- context "when passed an integer value" do
171
- let(:cols) do
172
- render_arbre_component do
173
- columns do
174
- column(min_width: 100){ "Hello World" }
175
- column(){ "Hello World" }
176
- end
177
- end
178
- end
179
-
180
- it "should be treated as pixels" do
181
- expect(cols.children.first.attr(:style)).to eq "width: 49.0%; min-width: 100px; margin-right: 2%;"
182
- end
183
- end
184
-
185
- end
186
-
187
- end