active_scaffold 3.7.12 → 4.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +9 -23
  3. data/README.md +3 -2
  4. data/app/assets/config/active_scaffold_manifest.js +3 -0
  5. data/app/assets/javascripts/active_scaffold.js.erb +24 -34
  6. data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
  7. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
  8. data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
  9. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
  10. data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
  11. data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
  12. data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
  13. data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
  14. data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
  15. data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
  16. data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
  17. data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
  18. data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
  19. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
  20. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
  21. data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
  22. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
  23. data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
  24. data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
  25. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
  26. data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
  27. data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
  28. data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
  29. data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
  30. data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
  31. data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
  32. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
  33. data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
  34. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
  35. data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
  36. data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
  37. data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
  38. data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
  39. data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
  40. data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
  41. data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
  42. data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
  43. data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
  44. data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
  45. data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
  46. data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
  47. data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
  48. data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
  49. data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
  50. data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
  51. data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
  52. data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
  53. data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
  54. data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
  55. data/app/views/active_scaffold_overrides/create.html.erb +1 -1
  56. data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
  57. data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
  58. data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
  59. data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
  60. data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
  61. data/app/views/active_scaffold_overrides/list.html.erb +1 -1
  62. data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
  63. data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
  64. data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
  65. data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
  66. data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
  67. data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
  68. data/app/views/active_scaffold_overrides/row.js.erb +2 -2
  69. data/app/views/active_scaffold_overrides/search.html.erb +1 -1
  70. data/app/views/active_scaffold_overrides/show.html.erb +3 -3
  71. data/app/views/active_scaffold_overrides/update.html.erb +2 -2
  72. data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
  73. data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
  74. data/lib/active_scaffold/actions/common_search.rb +5 -3
  75. data/lib/active_scaffold/actions/core.rb +57 -32
  76. data/lib/active_scaffold/actions/create.rb +19 -17
  77. data/lib/active_scaffold/actions/delete.rb +10 -12
  78. data/lib/active_scaffold/actions/field_search.rb +28 -13
  79. data/lib/active_scaffold/actions/list.rb +34 -34
  80. data/lib/active_scaffold/actions/mark.rb +5 -5
  81. data/lib/active_scaffold/actions/nested.rb +64 -56
  82. data/lib/active_scaffold/actions/search.rb +2 -2
  83. data/lib/active_scaffold/actions/show.rb +5 -5
  84. data/lib/active_scaffold/actions/subform.rb +15 -4
  85. data/lib/active_scaffold/actions/update.rb +20 -20
  86. data/lib/active_scaffold/active_record_permissions.rb +4 -3
  87. data/lib/active_scaffold/attribute_params.rb +51 -50
  88. data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
  89. data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
  90. data/lib/active_scaffold/bridges/active_storage.rb +1 -1
  91. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
  92. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
  93. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  94. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
  95. data/lib/active_scaffold/bridges/cancan.rb +8 -8
  96. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
  97. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
  98. data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
  99. data/lib/active_scaffold/bridges/chosen.rb +1 -5
  100. data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
  101. data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
  102. data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
  103. data/lib/active_scaffold/bridges/date_picker.rb +1 -4
  104. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
  105. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
  106. data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
  107. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
  108. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
  109. data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
  110. data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
  111. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
  112. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
  113. data/lib/active_scaffold/bridges/file_column.rb +1 -0
  114. data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
  115. data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
  116. data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
  117. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
  118. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
  119. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
  120. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
  121. data/lib/active_scaffold/bridges/paperclip.rb +2 -1
  122. data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
  123. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
  124. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
  125. data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
  126. data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
  127. data/lib/active_scaffold/bridges.rb +7 -5
  128. data/lib/active_scaffold/config/base.rb +20 -24
  129. data/lib/active_scaffold/config/core.rb +27 -39
  130. data/lib/active_scaffold/config/create.rb +1 -1
  131. data/lib/active_scaffold/config/delete.rb +9 -9
  132. data/lib/active_scaffold/config/field_search.rb +4 -9
  133. data/lib/active_scaffold/config/form.rb +3 -1
  134. data/lib/active_scaffold/config/list.rb +19 -15
  135. data/lib/active_scaffold/config/nested.rb +2 -2
  136. data/lib/active_scaffold/config/search.rb +5 -5
  137. data/lib/active_scaffold/config/show.rb +1 -1
  138. data/lib/active_scaffold/config/subform.rb +1 -1
  139. data/lib/active_scaffold/config/update.rb +4 -5
  140. data/lib/active_scaffold/configurable.rb +2 -1
  141. data/lib/active_scaffold/constraints.rb +16 -11
  142. data/lib/active_scaffold/core.rb +25 -27
  143. data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
  144. data/lib/active_scaffold/data_structures/action_link.rb +19 -9
  145. data/lib/active_scaffold/data_structures/action_links.rb +20 -26
  146. data/lib/active_scaffold/data_structures/actions.rb +3 -3
  147. data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
  148. data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
  149. data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
  150. data/lib/active_scaffold/data_structures/column.rb +368 -327
  151. data/lib/active_scaffold/data_structures/columns.rb +3 -2
  152. data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
  153. data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
  154. data/lib/active_scaffold/data_structures/set.rb +7 -4
  155. data/lib/active_scaffold/data_structures/sorting.rb +21 -12
  156. data/lib/active_scaffold/engine.rb +12 -12
  157. data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
  158. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
  159. data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
  160. data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
  161. data/lib/active_scaffold/extensions/localize.rb +2 -2
  162. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
  163. data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
  164. data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
  165. data/lib/active_scaffold/finder.rb +71 -78
  166. data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
  167. data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
  168. data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
  169. data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
  170. data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
  171. data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
  172. data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
  173. data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
  174. data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
  175. data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
  176. data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
  177. data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
  178. data/lib/active_scaffold/marked_model.rb +1 -2
  179. data/lib/active_scaffold/orm_checks.rb +6 -4
  180. data/lib/active_scaffold/paginator.rb +3 -2
  181. data/lib/active_scaffold/registry.rb +5 -0
  182. data/lib/active_scaffold/tableless.rb +24 -14
  183. data/lib/active_scaffold/version.rb +4 -4
  184. data/lib/active_scaffold.rb +8 -34
  185. data/lib/generators/active_scaffold/controller_generator.rb +20 -20
  186. data/lib/generators/active_scaffold/install_generator.rb +4 -8
  187. data/lib/generators/active_scaffold/resource_generator.rb +31 -31
  188. data/lib/tasks/brakeman.rake +1 -1
  189. data/shoulda_macros/macros.rb +14 -14
  190. metadata +11 -232
  191. data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
  192. data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
  193. data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
  194. data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
  195. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
  196. data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
  197. data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
  198. data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
  199. data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
  200. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
  201. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
  202. data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
  203. data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
  204. data/test/active_scaffold_config_mock.rb +0 -33
  205. data/test/bridges/bridge_test.rb +0 -88
  206. data/test/bridges/date_picker_test.rb +0 -31
  207. data/test/bridges/paper_trail_test.rb +0 -16
  208. data/test/bridges/paperclip_test.rb +0 -85
  209. data/test/bridges/tiny_mce_test.rb +0 -61
  210. data/test/class_with_finder.rb +0 -42
  211. data/test/company.rb +0 -97
  212. data/test/config/base_test.rb +0 -17
  213. data/test/config/core_test.rb +0 -66
  214. data/test/config/create_test.rb +0 -72
  215. data/test/config/delete_test.rb +0 -35
  216. data/test/config/field_search_test.rb +0 -49
  217. data/test/config/list_test.rb +0 -134
  218. data/test/config/nested_test.rb +0 -55
  219. data/test/config/search_test.rb +0 -62
  220. data/test/config/show_test.rb +0 -45
  221. data/test/config/subform_test.rb +0 -19
  222. data/test/config/update_test.rb +0 -52
  223. data/test/const_mocker.rb +0 -32
  224. data/test/data_structures/action_columns_test.rb +0 -112
  225. data/test/data_structures/action_link_test.rb +0 -79
  226. data/test/data_structures/action_links_test.rb +0 -78
  227. data/test/data_structures/actions_test.rb +0 -25
  228. data/test/data_structures/association_column_test.rb +0 -41
  229. data/test/data_structures/column_test.rb +0 -186
  230. data/test/data_structures/columns_test.rb +0 -68
  231. data/test/data_structures/set_test.rb +0 -84
  232. data/test/data_structures/sorting_test.rb +0 -148
  233. data/test/data_structures/standard_column_test.rb +0 -23
  234. data/test/data_structures/validation_reflection_test.rb +0 -69
  235. data/test/data_structures/virtual_column_test.rb +0 -23
  236. data/test/extensions/action_view_rendering_test.rb +0 -20
  237. data/test/extensions/active_record_test.rb +0 -44
  238. data/test/extensions/routing_mapper_test.rb +0 -73
  239. data/test/helpers/form_column_helpers_test.rb +0 -34
  240. data/test/helpers/list_column_helpers_test.rb +0 -53
  241. data/test/helpers/pagination_helpers_test.rb +0 -65
  242. data/test/helpers/search_column_helpers_test.rb +0 -15
  243. data/test/misc/active_record_permissions_test.rb +0 -193
  244. data/test/misc/attribute_params_test.rb +0 -460
  245. data/test/misc/calculation_test.rb +0 -39
  246. data/test/misc/configurable_test.rb +0 -97
  247. data/test/misc/constraints_test.rb +0 -209
  248. data/test/misc/convert_numbers_format_test.rb +0 -171
  249. data/test/misc/finder_test.rb +0 -124
  250. data/test/misc/lang_test.rb +0 -10
  251. data/test/misc/parse_datetime_test.rb +0 -159
  252. data/test/misc/render_test.rb +0 -9
  253. data/test/misc/tableless_test.rb +0 -56
  254. data/test/mock_app/.gitignore +0 -2
  255. data/test/mock_app/Rakefile +0 -7
  256. data/test/mock_app/app/assets/config/manifest.js +0 -0
  257. data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
  258. data/test/mock_app/app/controllers/application_controller.rb +0 -10
  259. data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
  260. data/test/mock_app/app/controllers/cars_controller.rb +0 -5
  261. data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
  262. data/test/mock_app/app/controllers/floors_controller.rb +0 -6
  263. data/test/mock_app/app/controllers/people_controller.rb +0 -8
  264. data/test/mock_app/app/controllers/roles_controller.rb +0 -4
  265. data/test/mock_app/app/helpers/application_helper.rb +0 -3
  266. data/test/mock_app/app/models/address.rb +0 -3
  267. data/test/mock_app/app/models/building.rb +0 -9
  268. data/test/mock_app/app/models/car.rb +0 -3
  269. data/test/mock_app/app/models/contact.rb +0 -3
  270. data/test/mock_app/app/models/file_model.rb +0 -31
  271. data/test/mock_app/app/models/floor.rb +0 -8
  272. data/test/mock_app/app/models/person.rb +0 -12
  273. data/test/mock_app/app/models/role.rb +0 -3
  274. data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
  275. data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
  276. data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
  277. data/test/mock_app/app/views/people/_form.html.erb +0 -2
  278. data/test/mock_app/app/views/people/list.html.erb +0 -2
  279. data/test/mock_app/config/application.rb +0 -14
  280. data/test/mock_app/config/boot.rb +0 -7
  281. data/test/mock_app/config/database.yml +0 -16
  282. data/test/mock_app/config/environment.rb +0 -6
  283. data/test/mock_app/config/environments/development.rb +0 -24
  284. data/test/mock_app/config/environments/production.rb +0 -49
  285. data/test/mock_app/config/environments/test.rb +0 -34
  286. data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
  287. data/test/mock_app/config/initializers/inflections.rb +0 -10
  288. data/test/mock_app/config/initializers/mime_types.rb +0 -5
  289. data/test/mock_app/config/initializers/secret_token.rb +0 -11
  290. data/test/mock_app/config/initializers/session_store.rb +0 -8
  291. data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
  292. data/test/mock_app/config/locales/en.yml +0 -5
  293. data/test/mock_app/config/routes.rb +0 -17
  294. data/test/mock_app/config.ru +0 -4
  295. data/test/mock_app/db/schema.rb +0 -68
  296. data/test/mock_app/db/test.sqlite3 +0 -1
  297. data/test/model_stub.rb +0 -64
  298. data/test/performance/list_cars_performance_test.rb +0 -34
  299. data/test/performance/list_people_performance_test.rb +0 -31
  300. data/test/performance_test_help.rb +0 -3
  301. data/test/run_all.rb +0 -6
  302. data/test/test_helper.rb +0 -71
  303. data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -1,460 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AttributeParamsTest < Minitest::Test
4
- def setup
5
- @controller = Controller.new
6
- end
7
-
8
- def test_saving_simple_record
9
- model = update_record_from_params(Person.new, :create, :first_name, :last_name, :first_name => 'First', :last_name => '')
10
- assert_equal 'First', model.first_name
11
- assert_nil model.last_name
12
- assert model.buildings.blank?
13
- assert model.save
14
-
15
- model.buildings.create(:name => '1st building')
16
- model = update_record_from_params(model, :update, :first_name, :last_name, :first_name => 'Name', :last_name => 'Last')
17
- assert_equal 'Name', model.first_name
18
- assert_equal 'Last', model.last_name
19
- assert model.buildings.present?, 'buildings should not be cleared'
20
- assert model.save
21
- assert_equal 1, model.buildings_count
22
- end
23
-
24
- def test_saving_unexpected_column_is_ignored
25
- model = Person.new(:first_name => 'First', :last_name => 'Last')
26
- model.buildings.build(:name => '1st building')
27
- assert model.save
28
-
29
- model = update_record_from_params(model, :update, :first_name, :first_name => 'Name', :last_name => 'Surname')
30
- assert_equal 'Name', model.first_name
31
- assert_equal 'Last', model.last_name
32
- assert model.buildings.present?, 'buildings should not be cleared'
33
- assert model.save
34
- end
35
-
36
- def test_saving_multiparameter_attribute
37
- model = update_record_from_params(Contact.new, :update, :first_name, :birthday, :first_name => 'Diego', :last_name => 'Velazquez', 'birthday(1i)' => '1599', 'birthday(2i)' => '6', 'birthday(3i)' => '6')
38
- assert_equal 'Diego', model.first_name
39
- assert_equal Date.new(1599, 6, 6), model.birthday
40
- end
41
-
42
- def test_saving_has_many_select
43
- buildings = Array.new(2) { Building.create }
44
- model = update_record_from_params(Person.new, :create, :first_name, :last_name, :buildings, :first_name => 'First', :last_name => '', :buildings => ['', *buildings.map { |b| b.id.to_s }]) # checkbox_list always add a hidden tag with empty value
45
- assert_equal 'First', model.first_name
46
- assert_nil model.last_name
47
- assert_equal buildings.map(&:id), model.building_ids
48
- assert_equal buildings.map(&:id), model.buildings.map(&:id)
49
- assert_equal model, model.buildings[0].owner
50
- assert model.save
51
- assert_equal 2, model.reload.buildings_count
52
-
53
- model = update_record_from_params(model, :update, :first_name, :last_name, :buildings, :first_name => 'Name', :last_name => 'Last', :buildings => ['']) { raise ActiveRecord::Rollback }
54
- assert_equal 'Name', model.first_name
55
- assert_equal 'Last', model.last_name
56
- assert_equal [model.id] * 2, buildings.map { |b| b.reload.owner_id }, 'owners should not be saved'
57
- assert model.building_ids.blank?, 'buildings should be cleared'
58
- assert model.buildings.blank?, 'buildings should be cleared'
59
- assert_equal 0, model.buildings.size
60
- assert_equal 2, model.reload.buildings_count
61
-
62
- model = update_record_from_params(model, :update, :first_name, :last_name, :buildings, :first_name => 'Name', :last_name => 'Last', :buildings => [''])
63
- assert_equal 'Name', model.first_name
64
- assert_equal 'Last', model.last_name
65
- assert model.building_ids.blank?, 'buildings should be cleared'
66
- assert model.buildings.blank?, 'buildings should be cleared'
67
- assert_equal [nil] * 2, buildings.map { |b| b.reload.owner_id }, 'buildings should be saved'
68
- assert model.save
69
- assert_equal 0, model.reload.buildings_count
70
- end
71
-
72
- def test_saving_belongs_to_select_for_has_one_reverse
73
- person = Person.create
74
- assert person.persisted?
75
- assert_equal 0, person.floors_count
76
-
77
- model = update_record_from_params(Floor.new, :create, :number, :tenant, :number => '1', :tenant => person.id.to_s)
78
- assert_equal 1, model.number
79
- assert_equal person.id, model.tenant_id
80
- assert_equal person, model.tenant
81
- assert model.save
82
- assert_equal 1, person.reload.floors_count
83
-
84
- model = update_record_from_params(model, :update, :number, :tenant, :number => '1', :tenant => '')
85
- assert_equal 1, model.number
86
- assert_nil model.tenant_id, 'tenant should be cleared'
87
- assert_nil model.tenant, 'tenant should be cleared'
88
- assert_equal person.id, Floor.find(model.id).tenant_id, 'floor should not be saved yet'
89
- assert model.save
90
- assert_nil Floor.find(model.id).tenant_id, 'floor should be saved'
91
- assert_equal 0, person.reload.floors_count
92
-
93
- model = update_record_from_params(model, :create, :number, :tenant, :number => '1', :tenant => person.id.to_s)
94
- assert_equal 1, model.number
95
- assert_equal person.id, model.tenant_id
96
- assert_equal person, model.tenant
97
- assert model.save
98
- assert_equal 1, person.reload.floors_count
99
- end
100
-
101
- def test_saving_belongs_to_select_for_has_many_reverse
102
- person = Person.create
103
- assert person.persisted?
104
- assert_equal 0, person.buildings_count
105
-
106
- model = update_record_from_params(Building.new, :create, :name, :owner, :name => 'Tower', :owner => person.id.to_s)
107
- assert_equal 'Tower', model.name
108
- assert_equal person.id, model.owner_id
109
- assert_equal person, model.owner
110
- assert model.save
111
- assert_equal 1, person.reload.buildings_count
112
-
113
- model = update_record_from_params(model, :update, :name, :owner, :name => 'Tower', :owner => '')
114
- assert_equal 'Tower', model.name
115
- assert_nil model.owner_id, 'owner should be cleared'
116
- assert_nil model.owner, 'owner should be cleared'
117
- assert_equal person.id, Building.find(model.id).owner_id, 'building should not be saved yet'
118
- assert model.save
119
- assert_nil Building.find(model.id).owner_id, 'building should be saved'
120
- assert_equal 0, person.reload.buildings_count
121
-
122
- model = update_record_from_params(model, :create, :name, :owner, :name => 'Tower', :owner => person.id.to_s)
123
- assert_equal 'Tower', model.name
124
- assert_equal person.id, model.owner_id
125
- assert_equal person, model.owner
126
- assert model.save
127
- assert_equal 1, person.reload.buildings_count
128
- end
129
-
130
- def test_saving_has_one_select
131
- floor = Floor.create
132
- assert floor.persisted?
133
-
134
- model = update_record_from_params(Person.new, :create, :first_name, :floor, :first_name => 'Name', :floor => floor.id.to_s)
135
- assert_equal 'Name', model.first_name
136
- assert model.floor.present?
137
- assert_equal floor.id, model.floor.id
138
- assert_equal model, model.floor.tenant
139
- assert_nil floor.reload.tenant_id, 'tenant_id should not be saved yet'
140
- assert model.save
141
- assert_equal model.id, floor.reload.tenant_id, 'tenant_id should be saved'
142
-
143
- model = update_record_from_params(model, :update, :first_name, :floor, :first_name => 'First', :floor => '') { raise ActiveRecord::Rollback }
144
- assert_equal 'First', model.first_name
145
- assert_equal model.id, floor.reload.tenant_id, 'previous car should not be saved and nullified'
146
- assert_nil model.floor, 'floor should be cleared'
147
-
148
- model.reload
149
- model = update_record_from_params(model, :update, :first_name, :floor, :first_name => 'First', :floor => '')
150
- assert_equal 'First', model.first_name
151
- assert_nil floor.reload.tenant_id, 'previous car should be saved and nullified'
152
- assert_nil model.floor, 'floor should be cleared'
153
- assert model.save
154
- end
155
-
156
- def test_saving_has_one_through_select
157
- building = Building.create
158
- assert building.persisted?
159
- assert building.floors.create(:number => 2)
160
-
161
- model = update_record_from_params(Person.new, :create, :first_name, :home, :first_name => 'Name', :home => building.id.to_s)
162
- assert_equal 'Name', model.first_name
163
- assert model.home.present?
164
- assert model.floor.present?
165
- assert_equal [nil], building.floors.reload.map(&:tenant_id), 'floor should not be saved yet'
166
- assert model.save
167
- assert_equal model.id, model.floor.tenant_id, 'tenant_id should be saved'
168
- assert_equal [nil, model.id], building.floors.reload.map(&:tenant_id)
169
-
170
- model = update_record_from_params(model, :update, :first_name, :home, :first_name => 'First', :home => '') { raise ActiveRecord::Rollback }
171
- assert_equal 'First', model.first_name
172
- assert_equal [nil, model.id], building.floors.reload.map(&:tenant_id), 'previous floor should not be deleted'
173
- assert_nil model.home, 'home should be cleared'
174
-
175
- model.reload
176
- model = update_record_from_params(model, :update, :first_name, :home, :first_name => 'First', :home => '')
177
- assert_equal 'First', model.first_name
178
- assert_equal [nil], building.floors.reload.map(&:tenant_id), 'previous floor should be deleted'
179
- assert_nil model.home, 'home should be cleared'
180
- assert model.save
181
- end
182
-
183
- def test_saving_has_many_through_select
184
- people = Array.new(2) { Person.create }
185
- assert people.all?(&:persisted?)
186
-
187
- model = update_record_from_params(Building.new, :create, :name, :tenants, :name => 'Tower', :tenants => ['', *people.map { |b| b.id.to_s }]) # checkbox_list always add a hidden tag with empty value
188
- assert_equal 'Tower', model.name
189
- assert model.tenants.present?
190
- assert_equal [nil] * 2, people.map { |p| p.respond_to?(:reload_floor) ? p.reload_floor : p.floor(true) }, 'floor should not be saved yet'
191
- assert model.save
192
- assert_equal [model.id] * 2, model.floors.map(&:building_id)
193
- assert_equal [model.id] * 2, people.map { |p| (p.respond_to?(:reload_floor) ? p.reload_floor : p.floor(true)).building_id }, 'floor should be saved'
194
-
195
- model = update_record_from_params(model, :update, :name, :tenants, :name => 'Skyscrapper', :tenants => ['']) { raise ActiveRecord::Rollback }
196
- assert_equal 'Skyscrapper', model.name
197
- assert_equal [model.id] * 2, people.map { |p| (p.respond_to?(:reload_floor) ? p.reload_floor : p.floor(true)).building_id }, 'previous floor should not be deleted'
198
- assert model.tenants.empty?, 'tenants should be cleared'
199
-
200
- model.reload
201
- model = update_record_from_params(model, :update, :name, :tenants, :name => 'Skyscrapper', :tenants => [''])
202
- assert_equal 'Skyscrapper', model.name
203
- assert_equal [nil] * 2, people.map { |p| p.respond_to?(:reload_floor) ? p.reload_floor : p.floor(true) }, 'previous floor should be deleted'
204
- assert model.tenants.empty?, 'tenants should be cleared'
205
- assert model.save
206
- end
207
-
208
- def test_saving_has_many_crud_with_error
209
- building = Building.create(:name => 'First')
210
- key = Time.now.to_i.to_s
211
- floors = {'0' => '', key => {:number => '', 'tenant' => '', :number_required => true}}
212
- model = update_record_from_params(building, :create, :name, :floors, :name => 'First', :floors => floors)
213
- assert_equal 'First', model.name
214
- assert_equal 1, model.floors.size
215
- assert model.floors.first.errors.present?
216
- refute model.floors.first.persisted?
217
- end
218
-
219
- def test_saving_has_many_crud_and_belongs_to_select
220
- floor = Floor.create
221
- people = Array.new(2) { Person.create }
222
- key = Time.now.to_i.to_s
223
- floors = {'0' => '', floor.id.to_s => {:number => '1', :tenant => '', :id => floor.id.to_s}, key => {:number => '2', 'tenant' => people.first.id.to_s}, key.succ => {:number => '4', 'tenant' => people.last.id.to_s}, key.succ.succ => {:number => '', 'tenant' => ''}}
224
- model = update_record_from_params(Building.new, :create, :name, :floors, :name => 'First', :floors => floors)
225
- assert_equal 'First', model.name
226
- assert_equal 3, model.floors.size
227
- assert_equal floor.id, model.floors.first.id
228
- assert_equal [nil, *people.map(&:id)], model.floors.map(&:tenant_id)
229
- assert_equal model, model.floors[0].building
230
- assert model.save
231
- assert_equal [1, 1], people.map(&:reload).map(&:floors_count)
232
- assert_equal 3, model.reload.floors_count
233
-
234
- last_floor = model.floors.last
235
- floors = {'0' => '', floor.id.to_s => {:number => '1', :tenant => '', :id => floor.id.to_s}, last_floor.id.to_s => {:number => '4', 'tenant' => people.last.id.to_s, :id => last_floor.id.to_s}}
236
- model = update_record_from_params(model, :create, :name, :floors, :name => 'First', :floors => floors)
237
- assert_equal 'First', model.name
238
- assert_equal 2, model.floors.size
239
- assert_equal floor.id, model.floors.first.id
240
- assert_equal [nil, last_floor.tenant_id], model.floors.map(&:tenant_id)
241
- assert model.save
242
- assert_equal 2, model.reload.floors_count
243
-
244
- floors = {'0' => '', floor.id.to_s => {:number => '1', :tenant => '', :id => floor.id.to_s}}
245
- new_model = update_record_from_params(Building.create, :create, :name, :floors, :name => 'Last', :floors => floors)
246
- assert_equal 'Last', new_model.name
247
- assert_equal 1, new_model.floors.size
248
- assert_equal floor.id, new_model.floors.first.id
249
- assert_equal [nil], new_model.floors.map(&:tenant_id)
250
- assert new_model.save
251
- assert_equal 1, new_model.reload.floors_count
252
- assert_equal 1, model.reload.floors_count
253
-
254
- model = update_record_from_params(model, :update, :name, :floors, :name => 'Tower', :floors => {'0' => ''})
255
- assert_equal 'Tower', model.name
256
- assert model.floors.blank?, 'floors should be cleared'
257
- assert model.save
258
- assert_equal 0, model.reload.floors_count
259
- end
260
-
261
- def test_saving_belongs_to_crud
262
- person = Person.create
263
- assert person.persisted?
264
-
265
- model = update_record_from_params(Car.new, :create, :brand, :person, :brand => 'Ford', :person => {:first_name => 'First'})
266
- assert_equal 'Ford', model.brand
267
- assert model.person.present?
268
- assert model.person.new_record?
269
- assert model.save
270
- assert model.person.persisted?
271
-
272
- model = update_record_from_params(model, :update, :brand, :person, :brand => 'Ford', :person => {:first_name => 'First', :id => person.id.to_s})
273
- assert_equal 'Ford', model.brand
274
- assert model.person.present?
275
- assert_equal person.id, model.person.id
276
- assert model.save
277
-
278
- model = update_record_from_params(model, :update, :brand, :person, :brand => 'Mercedes', :person => {:first_name => ''})
279
- assert_equal 'Mercedes', model.brand
280
- assert_nil model.person
281
- assert model.save
282
- end
283
-
284
- def test_saving_belongs_to_crud_with_boolean
285
- model = update_record_from_params(Car.new, :create, :brand, :person, :brand => 'Ford', :person => {:first_name => '', :adult => '0'})
286
- assert_equal 'Ford', model.brand
287
- assert model.save
288
- assert_nil model.person
289
-
290
- model = update_record_from_params(model, :update, :brand, :person, :brand => 'Mercedes', :person => {:first_name => '', :adult => '1'})
291
- assert_equal 'Mercedes', model.brand
292
- assert model.person.present?
293
- assert model.save
294
- assert model.person.persisted?
295
- end
296
-
297
- def test_saving_has_one_crud
298
- car = Car.create :brand => 'Renault'
299
- assert car.persisted?
300
-
301
- model = update_record_from_params(Person.new, :create, :first_name, :car, :first_name => 'First', :car => {:brand => 'Ford'})
302
- assert_equal 'First', model.first_name
303
- assert model.car.present?
304
- assert model.car.new_record?
305
- assert_equal model, model.car.person
306
- assert model.save
307
- assert model.car.persisted?
308
-
309
- model = update_record_from_params(Person.new, :create, :first_name, :car, :first_name => 'First', :car => {:brand => 'Peugeot', :id => car.id.to_s})
310
- assert_equal 'First', model.first_name
311
- assert model.car.present?
312
- assert_equal car.id, model.car.id
313
- assert_nil car.reload.person_id, 'person_id should not be saved yet'
314
- assert_equal 'Peugeot', model.car.brand
315
- assert_equal 'Renault', car.reload.brand, 'brand should not be saved yet'
316
- assert model.save
317
- assert_equal model.id, car.reload.person_id, 'person_id should be saved'
318
-
319
- model = update_record_from_params(model, :update, :first_name, :car, :first_name => 'First', :car => {:brand => 'Mercedes', :id => car.id.to_s})
320
- assert_equal 'First', model.first_name
321
- assert model.car.present?
322
- assert_equal 'Mercedes', model.car.brand
323
- assert model.save
324
- assert model.save_associated
325
- assert_equal 'Mercedes', car.reload.brand, 'brand should be saved'
326
-
327
- model = update_record_from_params(model, :update, :first_name, :car, :first_name => 'First', :car => {:brand => 'Mercedes'})
328
- assert_equal 'First', model.first_name
329
- assert_nil Car.where(:id => car.id).first, 'previous car should be deleted'
330
- assert model.car.present?
331
- refute_equal car.id, model.car.id
332
- assert model.save
333
-
334
- car = model.car.reload
335
- model = update_record_from_params(model, :update, :first_name, :car, :first_name => 'Name', :car => {:brand => ''})
336
- assert_equal 'Name', model.first_name
337
- assert_nil Car.where(:id => car.id).first, 'previous car should be deleted'
338
- assert_nil model.car
339
- assert model.save
340
- end
341
-
342
- def test_saving_belongs_to_polymorphic_select
343
- person = Person.create
344
- assert person.persisted?
345
-
346
- model = update_record_from_params(Contact.new, :create, :first_name, :contactable_type, :contactable, :first_name => 'First', :contactable_type => person.class.name, :contactable => person.id.to_s)
347
- assert_equal 'First', model.first_name
348
- assert_equal person.class.name, model.contactable_type
349
- assert_equal person.id, model.contactable_id
350
- assert_equal person, model.contactable
351
- assert model.save
352
- assert_equal 1, person.reload.contacts_count
353
-
354
- model = update_record_from_params(model, :update, :first_name, :contactable_type, :contactable, :first_name => 'Name', :contactable_type => person.class.name, :contactable => '')
355
- assert_equal 'Name', model.first_name
356
- assert_nil model.contactable_id, 'contactable should be cleared'
357
- assert_nil model.contactable, 'contactable should be cleared'
358
- assert_equal person.id, Contact.find(model.id).contactable_id, 'contact should not be saved yet'
359
- assert model.save
360
- assert_nil Contact.find(model.id).contactable_id, 'contact should be saved'
361
- assert_equal 0, person.reload.contacts_count
362
- end
363
-
364
- def test_saving_has_many_polymorphic_select
365
- contacts = Array.new(2) { Contact.create }
366
-
367
- model = update_record_from_params(Person.new, :create, :first_name, :contacts, :first_name => 'Me', :contacts => ['', contacts.first.id.to_s])
368
- assert_equal 'Me', model.first_name
369
- assert model.contacts.present?
370
- assert model.save
371
- assert_equal [model.id], model.contacts.map(&:contactable_id)
372
- assert_equal model.id, contacts.first.reload.contactable.id, 'contactable should be saved'
373
- assert_equal 1, model.reload.contacts_count
374
-
375
- model = update_record_from_params(model, :update, :first_name, :contacts, :first_name => 'Name', :contacts => ['', *contacts.map { |c| c.id.to_s }])
376
- assert_equal 'Name', model.first_name
377
- assert model.contacts.present?
378
- assert model.save
379
- assert_equal [model.id] * 2, model.contacts.map(&:contactable_id)
380
- assert_equal [model.id] * 2, contacts.map { |c| c.reload.contactable.id }, 'contactable should be saved'
381
- assert_equal 2, model.reload.contacts_count
382
-
383
- model = update_record_from_params(model, :update, :first_name, :contacts, :first_name => 'Name', :contacts => [''])
384
- assert_equal 'Name', model.first_name
385
- assert model.contacts.empty?
386
- assert model.save
387
- assert_equal [nil] * 2, contacts.map { |c| c.reload.contactable }, 'contactable should be saved'
388
- assert_equal 0, model.reload.contacts_count
389
- end
390
-
391
- def test_saving_habtm_select
392
- roles = Array.new(2) { Role.create }
393
-
394
- model = update_record_from_params(Person.new, :create, :first_name, :roles, :first_name => 'Me', :roles => ['', roles.first.id.to_s])
395
- assert_equal 'Me', model.first_name
396
- assert model.roles.present?
397
- assert model.save
398
- assert_equal [[model.id]], model.roles.map(&:person_ids)
399
- assert_equal [model.id], roles.first.reload.person_ids, 'role should be saved'
400
-
401
- model = update_record_from_params(model, :update, :first_name, :roles, :first_name => 'Name', :roles => ['', *roles.map { |c| c.id.to_s }])
402
- assert_equal 'Name', model.first_name
403
- assert model.roles.present?
404
- assert model.save
405
- assert_equal [[model.id]] * 2, model.roles.map(&:person_ids)
406
- assert_equal [[model.id]] * 2, roles.map { |r| r.reload.person_ids }, 'roles should be saved'
407
-
408
- model = update_record_from_params(model, :update, :first_name, :roles, :first_name => 'Name', :roles => [''])
409
- assert_equal 'Name', model.first_name
410
- assert model.roles.empty?
411
- assert model.save
412
- assert roles.all? { |r| r.reload.people.empty? }, 'roles should be saved'
413
- end
414
-
415
- protected
416
-
417
- def update_record_from_params(record, action, *columns, &block)
418
- params = columns.extract_options!.with_indifferent_access
419
- new_record = nil
420
- record.class.transaction do
421
- record = record.class.find(record.id) if record.persisted?
422
- new_record = @controller.update_record_from_params(record, build_action_columns(record, action, columns), params)
423
- yield if block_given?
424
- ActiveScaffold::Registry.constraint_columns.clear
425
- end
426
- new_record
427
- end
428
-
429
- def build_action_columns(record, action, *columns)
430
- config = @controller.active_scaffold_config_for(record.class)
431
- config.build_action_columns(action, columns)
432
- end
433
- end
434
-
435
- class Controller
436
- def self.helper_method(*); end
437
-
438
- def self.before_action(*); end
439
-
440
- include ActiveScaffold::Core
441
- include ActiveScaffold::Helpers::ControllerHelpers
442
- include ActiveScaffold::AttributeParams
443
- public :update_record_from_params
444
-
445
- def logger
446
- @logger ||= Logger.new(STDOUT)
447
- end
448
-
449
- def flash
450
- @flash ||= ActionDispatch::Flash::FlashHash.new
451
- end
452
-
453
- def params_hash?(value)
454
- value.is_a? Hash
455
- end
456
-
457
- def params_hash(value)
458
- value
459
- end
460
- end
@@ -1,39 +0,0 @@
1
- require 'test_helper'
2
- require 'class_with_finder'
3
-
4
- class CalculationTest < Minitest::Test
5
- def setup
6
- @buildings = []
7
- @buildings << Building.create { |b| b.build_owner(:first_name => 'foo') }
8
- @buildings << Building.create(:name => 'foo bar')
9
- @buildings << Building.create
10
-
11
- @klass = ClassWithFinder.new
12
- @klass.active_scaffold_config.stubs(:model).returns(Building)
13
- end
14
-
15
- def teardown
16
- @buildings.each(&:destroy).map(&:owner).compact.each(&:destroy)
17
- end
18
-
19
- def test_calculation_with_conditions
20
- @klass.expects(:conditions_for_collection).returns(['"buildings"."name" LIKE ? OR "people"."first_name" LIKE ?', '%foo%', '%foo%'])
21
- @klass.expects(:active_scaffold_references).returns([:owner])
22
- @klass.active_scaffold_config.expects(:list).returns(mock.tap { |m| m.stubs(:count_includes).returns(nil) })
23
-
24
- column = mock.tap { |m| m.stubs(:field).returns('"buildings"."id"') }
25
- @klass.active_scaffold_config.expects(:columns).returns(mock.tap { |m| m.stubs(:"[]").returns(column) })
26
- query = @klass.send :calculate_query
27
- assert_equal 2, query.count
28
- end
29
-
30
- def test_calculation_without_conditions
31
- @klass.stubs(:active_scaffold_references).returns([:owner])
32
- @klass.active_scaffold_config.expects(:list).returns(mock.tap { |m| m.stubs(:count_includes).returns(nil) })
33
-
34
- column = mock.tap { |m| m.stubs(:field).returns('"buildings"."id"') }
35
- @klass.active_scaffold_config.expects(:columns).returns(mock.tap { |m| m.stubs(:"[]").returns(column) })
36
- query = @klass.send :calculate_query
37
- assert_equal Building.count, query.count
38
- end
39
- end
@@ -1,97 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ConfigurableClass
4
- FOO = 'bar'.freeze
5
- def foo; FOO end
6
-
7
- def self.foo; FOO end
8
- end
9
-
10
- class IncludedClass < ConfigurableClass
11
- include ActiveScaffold::Configurable
12
- end
13
-
14
- class ExtendedClass < ConfigurableClass
15
- extend ActiveScaffold::Configurable
16
- end
17
-
18
- class ConfigurableTest < Minitest::Test
19
- ##
20
- ## constants and methods for tests to check against
21
- ##
22
- def hello; 'world' end
23
- HELLO = 'world'.freeze
24
-
25
- def test_instance_configuration
26
- configurable_class = IncludedClass.new
27
-
28
- ##
29
- ## sanity checks
30
- ##
31
- # make sure the configure method is available
32
- assert configurable_class.respond_to?(:configure)
33
- # make sure real functions still work
34
- assert_equal 'bar', configurable_class.foo
35
- # make sure other functions still don't work
36
- assert_raises NoMethodError do
37
- configurable_class.i_do_not_exist
38
- end
39
-
40
- ##
41
- ## test normal block behaviors
42
- ##
43
- # functions
44
- assert_equal hello, (configurable_class.configure { hello })
45
- # variables
46
- assert_equal configurable_class, (configurable_class.configure { configurable_class })
47
- # constants
48
- assert_equal ConfigurableTest::HELLO, (configurable_class.configure { ConfigurableTest::HELLO })
49
-
50
- ##
51
- ## test extra "localized" block behavior
52
- ##
53
- # functions
54
- assert_equal configurable_class.foo, (configurable_class.configure { foo })
55
- # constants - not working
56
- # assert_equal configurable_class.FOO, configurable_class.configure {FOO}
57
- end
58
-
59
- def test_class_configuration
60
- ##
61
- ## sanity checks
62
- ##
63
- # make sure the configure method is available
64
- assert ExtendedClass.respond_to?(:configure)
65
- # make sure real functions still work
66
- assert_equal 'bar', ExtendedClass.foo
67
- # make sure other functions still don't work
68
- assert_raises NoMethodError do
69
- ExtendedClass.i_do_not_exist
70
- end
71
-
72
- ##
73
- ## test normal block behaviors
74
- ##
75
- # functions
76
- assert_equal hello, (ExtendedClass.configure { hello })
77
- # variables
78
- assert_equal ExtendedClass, (ExtendedClass.configure { ExtendedClass })
79
- # constants
80
- assert_equal ConfigurableTest::HELLO, (ExtendedClass.configure { ConfigurableTest::HELLO })
81
-
82
- ##
83
- ## test extra "localized" block behavior
84
- ##
85
- # functions
86
- assert_equal ExtendedClass.foo, (ExtendedClass.configure { foo })
87
- # constants - not working
88
- # assert_equal ExtendedClass.FOO, ExtendedClass.configure {FOO}
89
- end
90
-
91
- def test_arity
92
- # this is the main style
93
- assert_equal 'foo', (ExtendedClass.configure { 'foo' })
94
- # but we want to let people accept the configurable class as the first argument, too
95
- assert_equal 'bar', (ExtendedClass.configure { |a| a.foo }) # rubocop:disable Style/SymbolProc
96
- end
97
- end