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,209 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ModelStubs
4
- class ModelStub < ActiveRecord::Base
5
- self.abstract_class = true
6
- def self.columns; @columns ||= [ColumnMock.new('foo', '', 'string')] end
7
-
8
- def self.columns_hash; @hash ||= Hash[@columns.map { |c| [c.name, c] }] end
9
-
10
- if respond_to? :type_for_attribute
11
- def self.type_for_attribute(column_name)
12
- defined?(ActiveModel::Type) ? ActiveModel::Type::String.new : super
13
- end
14
- end
15
-
16
- def self.table_name
17
- @table_name || to_s.split('::').last.underscore.pluralize
18
- end
19
- self.store_full_sti_class = false
20
- def self.load_schema; end
21
- end
22
-
23
- ##
24
- ## Standard associations
25
- ##
26
-
27
- class Address < ModelStub
28
- belongs_to :addressable, :polymorphic => true
29
- end
30
-
31
- class User < ModelStub
32
- has_and_belongs_to_many :roles
33
- has_one :subscription
34
- has_one :address, :as => :addressable
35
- end
36
-
37
- class Service < ModelStub
38
- has_many :subscriptions
39
- has_many :users, :through => :subscriptions
40
- end
41
-
42
- class Subscription < ModelStub
43
- belongs_to :service
44
- belongs_to :user
45
- end
46
-
47
- class Role < ModelStub
48
- has_and_belongs_to_many :users
49
- end
50
-
51
- ##
52
- ## These versions of the associations require extra configuration to work properly
53
- ##
54
-
55
- class OtherAddress < ModelStub
56
- self.table_name = 'addresses'
57
- belongs_to :other_addressable, :polymorphic => true
58
- end
59
-
60
- class OtherUser < ModelStub
61
- self.table_name = 'users'
62
- has_and_belongs_to_many :other_roles, :class_name => 'ModelStubs::OtherRole', :foreign_key => 'user_id', :association_foreign_key => 'role_id', :join_table => 'roles_users'
63
- has_one :other_subscription, :class_name => 'ModelStubs::OtherSubscription', :foreign_key => 'user_id'
64
- has_one :other_address, :as => :other_addressable, :class_name => 'ModelStubs::OtherAddress', :foreign_key => 'addressable_id'
65
- end
66
-
67
- class OtherService < ModelStub
68
- self.table_name = 'services'
69
- has_many :other_subscriptions, :class_name => 'ModelStubs::OtherSubscription', :foreign_key => 'service_id'
70
- has_many :other_users, :through => :other_subscriptions # :class_name and :foreign_key are ignored for :through
71
- end
72
-
73
- class OtherSubscription < ModelStub
74
- self.table_name = 'subscriptions'
75
- belongs_to :other_service, :class_name => 'ModelStubs::OtherService', :foreign_key => 'service_id'
76
- belongs_to :other_user, :class_name => 'ModelStubs::OtherUser', :foreign_key => 'user_id'
77
- end
78
-
79
- class OtherRole < ModelStub
80
- self.table_name = 'roles'
81
- has_and_belongs_to_many :other_users, :class_name => 'ModelStubs::OtherUser', :foreign_key => 'role_id', :association_foreign_key => 'user_id', :join_table => 'roles_users'
82
- end
83
-
84
- class PrimaryKeyUser < ModelStub
85
- has_many :locations, :class_name => 'PrimaryKeyLocation', :foreign_key => :username, :primary_key => :name
86
- end
87
-
88
- class PrimaryKeyLocation < ModelStub
89
- belongs_to :user, :class_name => 'PrimaryKeyUser', :foreign_key => :username, :primary_key => :name
90
- end
91
- end
92
-
93
- class ConstraintsTestObject
94
- # stub out what the mixin expects to find ...
95
- def self.before_action(*); end
96
-
97
- def self.helper_method(*); end
98
- attr_accessor :active_scaffold_preload
99
- attr_accessor :active_scaffold_references
100
- attr_accessor :active_scaffold_habtm_joins
101
- attr_accessor :active_scaffold_config
102
- attr_accessor :params
103
- def merge_conditions(old, new)
104
- [old, new].compact.flatten
105
- end
106
-
107
- # mixin the constraint code
108
- include ActiveScaffold::Constraints
109
-
110
- # make the constraints read-write, instead of coming from the session
111
- attr_accessor :active_scaffold_constraints
112
-
113
- def initialize
114
- @active_scaffold_preload = []
115
- @active_scaffold_references = []
116
- @active_scaffold_habtm_joins = []
117
- @params = {}
118
- end
119
-
120
- def params_hash?(value)
121
- value.is_a? Hash
122
- end
123
- end
124
-
125
- class ConstraintsTest < Minitest::Test
126
- def setup
127
- @test_object = ConstraintsTestObject.new
128
- end
129
-
130
- def test_constraint_conditions_for_default_associations
131
- @test_object.active_scaffold_config = config_for('user')
132
- # has_one (vs belongs_to)
133
- assert_constraint_condition({:subscription => 5}, [{'subscriptions' => {'id' => 5}}], 'find the user with subscription #5')
134
- # habtm (vs habtm)
135
- assert_constraint_condition({:roles => 4}, [{'roles' => {'id' => 4}}], 'find all users with role #4')
136
- # has_one (vs polymorphic)
137
- assert_constraint_condition({:address => 11}, [{'addresses' => {'id' => 11}}], 'find the user with address #11')
138
- # reverse of a has_many :through
139
- assert_constraint_condition({:subscription => {:service => 5}}, [{'services' => {'id' => 5}}], 'find all users subscribed to service #5')
140
- assert(@test_object.active_scaffold_references.include?(:subscription => :service), 'multi-level association include')
141
-
142
- @test_object.active_scaffold_config = config_for('subscription')
143
- # belongs_to (vs has_one)
144
- assert_constraint_condition({:user => 2}, [{'subscriptions' => {'user_id' => 2}}], 'find the subscription for user #2')
145
- # belongs_to (vs has_many)
146
- assert_constraint_condition({:service => 1}, [{'subscriptions' => {'service_id' => 1}}], 'find all subscriptions for service #1')
147
-
148
- @test_object.active_scaffold_config = config_for('service')
149
- # has_many (vs belongs_to)
150
- assert_constraint_condition({:subscriptions => 10}, [{'subscriptions' => {'id' => 10}}], 'find the service with subscription #10')
151
- # has_many :through (through has_many)
152
- assert_constraint_condition({:users => 7}, [{'users' => {'id' => 7}}], 'find the service with user #7')
153
-
154
- @test_object.active_scaffold_config = config_for('address')
155
- # belongs_to :polymorphic => true
156
- assert_constraint_condition({:addressable => ['ModelStubs::User', 14]}, [{'addresses' => {'addressable_id' => 14, 'addressable_type' => 'ModelStubs::User'}}], 'find all addresses for user #14')
157
- end
158
-
159
- def test_constraint_conditions_for_configured_associations
160
- @test_object.active_scaffold_config = config_for('other_user')
161
- # has_one (vs belongs_to)
162
- assert_constraint_condition({:other_subscription => 5}, [{'subscriptions' => {'id' => 5}}], 'find the user with subscription #5')
163
- # habtm (vs habtm)
164
- assert_constraint_condition({:other_roles => 4}, [{'roles' => {'id' => 4}}], 'find all users with role #4')
165
- # has_one (vs polymorphic)
166
- assert_constraint_condition({:other_address => 11}, [{'addresses' => {'id' => 11}}], 'find the user with address #11')
167
- # reverse of a has_many :through
168
- assert_constraint_condition({:other_subscription => {:other_service => 5}}, [{'services' => {'id' => 5}}], 'find all users subscribed to service #5')
169
-
170
- @test_object.active_scaffold_config = config_for('other_subscription')
171
- # belongs_to (vs has_one)
172
- assert_constraint_condition({:other_user => 2}, [{'subscriptions' => {'user_id' => 2}}], 'find the subscription for user #2')
173
- # belongs_to (vs has_many)
174
- assert_constraint_condition({:other_service => 1}, [{'subscriptions' => {'service_id' => 1}}], 'find all subscriptions for service #1')
175
-
176
- @test_object.active_scaffold_config = config_for('other_service')
177
- # has_many (vs belongs_to)
178
- assert_constraint_condition({:other_subscriptions => 10}, [{'subscriptions' => {'id' => 10}}], 'find the service with subscription #10')
179
- # has_many :through (through has_many)
180
- assert_constraint_condition({:other_users => 7}, [{'users' => {'id' => 7}}], 'find the service with user #7')
181
-
182
- @test_object.active_scaffold_config = config_for('other_address')
183
- # belongs_to :polymorphic => true
184
- assert_constraint_condition({:other_addressable => ['ModelStubs::OtherUser', 14]}, [{'addresses' => {'other_addressable_id' => 14, 'other_addressable_type' => 'ModelStubs::OtherUser'}}], 'find all addresses for user #14')
185
- end
186
-
187
- def test_constraint_conditions_for_normal_attributes
188
- @test_object.active_scaffold_config = config_for('user')
189
- assert_constraint_condition({'foo' => 'bar'}, [['"users"."foo" = ?', 'bar']], 'normal column-based constraint')
190
- end
191
-
192
- def test_constraint_conditions_for_associations_with_primary_key_option
193
- @test_object.active_scaffold_config = config_for('primary_key_location')
194
- # user = ModelStubs::PrimaryKeyUser.new(:id => 1, :name => 'User Name')
195
- ModelStubs::PrimaryKeyUser.expects(:find).with(1).returns(stub(:id => 1, :name => 'User Name'))
196
- assert_constraint_condition({'user' => 1}, [{'primary_key_locations' => {'username' => 'User Name'}}], 'association with primary-key constraint')
197
- end
198
-
199
- protected
200
-
201
- def assert_constraint_condition(constraint, condition, message = nil)
202
- @test_object.active_scaffold_constraints = constraint
203
- assert_equal condition, @test_object.send(:conditions_from_constraints), message
204
- end
205
-
206
- def config_for(klass, namespace = nil)
207
- super(klass, 'model_stubs/')
208
- end
209
- end
@@ -1,171 +0,0 @@
1
- require 'test_helper'
2
- require 'active_scaffold_config_mock'
3
-
4
- class NumberModel < ActiveRecord::Base
5
- include ActiveScaffold::ActiveRecordPermissions::ModelUserAccess::Model
6
- def self.columns
7
- @columns ||= [ColumnMock.new('id', '', 'int(11)'), ColumnMock.new('number', '', 'double(10,2)')]
8
- end
9
-
10
- def self.columns_hash
11
- @columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
12
- end
13
-
14
- def self.load_schema!
15
- columns_hash.each do |name, column|
16
- define_attribute(
17
- name,
18
- connection.lookup_cast_type_from_column(column),
19
- default: column.default
20
- )
21
- end
22
- end
23
- end
24
-
25
- class ConvertNumbersFormatTest < Minitest::Test
26
- include ActiveScaffoldConfigMock
27
- include ActiveScaffold::AttributeParams
28
- include ActiveScaffold::Finder
29
- include ActiveScaffold::Helpers::ControllerHelpers
30
-
31
- def setup
32
- NumberModel.load_schema! if Rails.version >= '5.0'
33
- I18n.backend.store_translations :en, :number => {:format => {
34
- :delimiter => ',',
35
- :separator => '.'
36
- }}
37
- I18n.backend.store_translations :es, :number => {:format => {
38
- :delimiter => '.',
39
- :separator => ','
40
- }}
41
- I18n.backend.store_translations :ru, :number => {:currency => {
42
- :format => {
43
- :separator => ',',
44
- :delimiter => ''
45
- }
46
- }}
47
-
48
- @config = config_for('number_model')
49
- @config.columns[:number].form_ui = nil
50
- end
51
-
52
- def teardown
53
- I18n.locale = :en
54
- end
55
-
56
- def test_english_format_with_decimal_separator_using_english_language
57
- I18n.locale = :en
58
- assert_equal 0.1, convert_number('.1')
59
- assert_equal 0.1, convert_number('.100')
60
- assert_equal 0.1, convert_number('0.1')
61
- assert_equal 0.345, convert_number('0.345')
62
- assert_equal 0.345, convert_number('+0.345')
63
- assert_equal(-0.345, convert_number('-0.345'))
64
- assert_equal 9.345, convert_number('9.345')
65
- assert_equal 9.1, convert_number('9.1')
66
- assert_equal 90.1, convert_number('90.1')
67
- end
68
-
69
- def test_english_format_with_thousand_delimiter_using_english_language
70
- I18n.locale = :en
71
- assert_equal 1000, convert_number('1,000')
72
- assert_equal 1000, convert_number('+1,000')
73
- assert_equal(-1000, convert_number('-1,000'))
74
- assert_equal 1_000_000, convert_number('1,000,000')
75
- end
76
-
77
- def test_english_format_with_separator_and_delimiter_using_english_language
78
- I18n.locale = :en
79
- assert_equal 1234.1, convert_number('1,234.1')
80
- assert_equal 1234.1, convert_number('1,234.100')
81
- assert_equal 1234.345, convert_number('+1,234.345')
82
- assert_equal(-1234.345, convert_number('-1,234.345'))
83
- assert_equal 1_234_000.1, convert_number('1,234,000.100')
84
- end
85
-
86
- def test_english_format_with_decimal_separator_using_spanish_language
87
- I18n.locale = :es
88
- assert_equal 0.1, convert_number('.1')
89
- assert_equal 0.1, convert_number('0.1')
90
- assert_equal 0.12, convert_number('+0.12')
91
- assert_equal(-0.12, convert_number('-0.12'))
92
- assert_equal 9.1, convert_number('9.1')
93
- assert_equal 90.1, convert_number('90.1')
94
- end
95
-
96
- def test_spanish_format_with_decimal_separator_using_spanish_language
97
- I18n.locale = :es
98
- assert_equal 0.1, convert_number(',1')
99
- assert_equal 0.1, convert_number(',100')
100
- assert_equal 0.1, convert_number('0,1')
101
- assert_equal 0.345, convert_number('0,345')
102
- assert_equal 0.345, convert_number('+0,345')
103
- assert_equal(-0.345, convert_number('-0,345'))
104
- assert_equal 9.1, convert_number('9,1')
105
- assert_equal 90.1, convert_number('90,1')
106
- assert_equal 9.1, convert_number('9,100')
107
- end
108
-
109
- def test_spanish_format_with_thousand_delimiter_using_spanish_language
110
- I18n.locale = :es
111
- assert_equal 1000, convert_number('1.000')
112
- assert_equal 1000, convert_number('+1.000')
113
- assert_equal(-1000, convert_number('-1.000'))
114
- assert_equal 1_000_000, convert_number('1.000.000')
115
- end
116
-
117
- def test_spanish_format_with_separator_and_decimal_using_spanish_language
118
- I18n.locale = :es
119
- assert_equal 1230.1, convert_number('1.230,1')
120
- assert_equal 1230.1, convert_number('1.230,100')
121
- assert_equal 1234.345, convert_number('+1.234,345')
122
- assert_equal(-1234.345, convert_number('-1.234,345'))
123
- assert_equal 1_234_000.1, convert_number('1.234.000,100')
124
- end
125
-
126
- def test_english_currency_format_with_decimal_separator_using_russian_language
127
- I18n.locale = :ru
128
- assert_equal 0.1, convert_number('.1', :currency)
129
- assert_equal 0.1, convert_number('0.1', :currency)
130
- assert_equal 0.12, convert_number('+0.12', :currency)
131
- assert_equal(-0.12, convert_number('-0.12', :currency))
132
- assert_equal 9.1, convert_number('9.1', :currency)
133
- assert_equal 90.1, convert_number('90.1', :currency)
134
- end
135
-
136
- def test_russian_currency_format_with_decimal_separator_using_russian_language
137
- I18n.locale = :ru
138
- assert_equal 0.1, convert_number(',1', :currency)
139
- assert_equal 0.1, convert_number(',100', :currency)
140
- assert_equal 0.1, convert_number('0,1', :currency)
141
- assert_equal 0.345, convert_number('0,345', :currency)
142
- assert_equal 0.345, convert_number('+0,345', :currency)
143
- assert_equal(-0.345, convert_number('-0,345', :currency))
144
- assert_equal 9.1, convert_number('9,1', :currency)
145
- assert_equal 90.1, convert_number('90,1', :currency)
146
- assert_equal 9.1, convert_number('9,100', :currency)
147
- end
148
-
149
- def test_english_format_with_decimal_separator_with_no_localized_format
150
- I18n.locale = :ru
151
- assert_equal 0.1, convert_number('.1')
152
- assert_equal 0.1, convert_number('0.1')
153
- end
154
-
155
- private
156
-
157
- def convert_number(value, format = nil)
158
- record = NumberModel.new
159
- @config.columns[:number].options[:format] = format unless format.nil?
160
- update_record_from_params(record, @config.create.columns, HashWithIndifferentAccess.new(:number => value))
161
- record.number
162
- end
163
-
164
- def params_hash?(value)
165
- value.is_a? Hash
166
- end
167
-
168
- def params_hash(value)
169
- value
170
- end
171
- end
@@ -1,124 +0,0 @@
1
- require 'test_helper'
2
- require 'class_with_finder'
3
-
4
- class FinderTest < Minitest::Test
5
- def setup
6
- @klass = ClassWithFinder.new
7
- @klass.active_scaffold_config.stubs(model: ModelStub)
8
- end
9
-
10
- def test_create_conditions_for_columns
11
- columns = [
12
- ActiveScaffold::DataStructures::Column.new(:a, ModelStub),
13
- ActiveScaffold::DataStructures::Column.new(:b, ModelStub)
14
- ]
15
- tokens = %w[foo bar]
16
-
17
- expected_conditions = [
18
- ['"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?', '%foo%', '%foo%'],
19
- ['"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?', '%bar%', '%bar%']
20
- ]
21
- assert_equal expected_conditions, ClassWithFinder.conditions_for_columns(tokens, columns)
22
-
23
- expected_conditions = [
24
- '"model_stubs"."a" LIKE ? OR "model_stubs"."b" LIKE ?',
25
- '%foo%', '%foo%'
26
- ]
27
- assert_equal [expected_conditions], ClassWithFinder.conditions_for_columns('foo', columns)
28
-
29
- assert_nil ClassWithFinder.conditions_for_columns('foo', [])
30
- end
31
-
32
- def test_method_sorting
33
- column = ActiveScaffold::DataStructures::Column.new('a', ModelStub)
34
- column.sort_by :method => proc { self }
35
-
36
- collection = [16_000, 2853, 98_765, 6188, 4]
37
- assert_equal collection.sort, @klass.send(:sort_collection_by_column, collection, column, 'asc')
38
- assert_equal collection.sort.reverse, @klass.send(:sort_collection_by_column, collection, column, 'desc')
39
-
40
- collection = ['a', nil, 'b']
41
- result = @klass.send(:sort_collection_by_column, collection, column, 'asc')
42
- assert_equal [nil, 'a', 'b'], result
43
-
44
- column.sort_by :method => 'self'
45
- collection = [3, 1, 2]
46
- assert_equal collection.sort, @klass.send(:sort_collection_by_column, collection, column, 'asc')
47
- end
48
-
49
- def test_count_with_group
50
- @klass.expects(:custom_finder_options).returns(:group => :a)
51
- relation_class.any_instance.expects(:count).returns('foo' => 5, 'bar' => 4)
52
- relation_class.any_instance.expects(:limit).with(20).returns(ModelStub.where(nil))
53
- relation_class.any_instance.expects(:offset).with(0).returns(ModelStub.where(nil))
54
- page = @klass.send :find_page, :per_page => 20, :pagination => true
55
- page.items
56
-
57
- assert_kind_of Integer, page.pager.count
58
- assert_equal 2, page.pager.count
59
- assert_equal 1, page.pager.number_of_pages
60
- end
61
-
62
- def test_disabled_pagination
63
- relation_class.any_instance.expects(:count).never
64
- relation_class.any_instance.expects(:limit).never
65
- relation_class.any_instance.expects(:offset).never
66
- ModelStub.expects(:count).never
67
- page = @klass.send :find_page, :per_page => 20, :pagination => false
68
- page.items
69
- end
70
-
71
- def test_infinite_pagination
72
- ModelStub.expects(:count).never
73
- @klass.send :find_page, :pagination => :infinite
74
- end
75
-
76
- def test_condition_for_column
77
- column = ActiveScaffold::DataStructures::Column.new('adult', Person)
78
- assert_equal ['"people"."adult" = ?', false], ClassWithFinder.condition_for_column(column, '0', :full, {})
79
- end
80
-
81
- def test_condition_for_polymorphic_column
82
- column = ActiveScaffold::DataStructures::Column.new('addressable', Address)
83
- column.search_sql = [{subquery: [Building, 'name']}]
84
- condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
85
- assert_equal Building.where(['name LIKE ?', '%test search%']).select(:id).to_sql, condition[1].to_sql
86
- assert_equal '"addresses"."addressable_id" IN (?) AND "addresses"."addressable_type" = ?', condition[0]
87
- assert_equal ['Building'], condition[2..-1]
88
- end
89
-
90
- def test_condition_for_polymorphic_column_with_relation
91
- column = ActiveScaffold::DataStructures::Column.new('contactable', Contact)
92
- column.search_sql = [{subquery: [Person.joins(:buildings), 'first_name', 'last_name']}]
93
- condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
94
- assert_equal Person.joins(:buildings).where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
95
- assert_equal '"contacts"."contactable_id" IN (?) AND "contacts"."contactable_type" = ?', condition[0]
96
- assert_equal ['Person'], condition[2..-1]
97
- end
98
-
99
- def test_subquery_condition_for_association_with_condition
100
- column = ActiveScaffold::DataStructures::Column.new('owner', Building)
101
- column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0']}]
102
- column.search_ui = :text
103
- condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
104
- assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
105
- assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0', condition[0]
106
- assert_equal [], condition[2..-1]
107
- end
108
-
109
- def test_subquery_condition_for_association_with_conditions
110
- column = ActiveScaffold::DataStructures::Column.new('owner', Building)
111
- column.search_sql = [{subquery: [Person, 'first_name', 'last_name'], conditions: ['floor_count > 0 AND name != ?', '']}]
112
- column.search_ui = :text
113
- condition = ClassWithFinder.condition_for_column(column, 'test search', :full, {})
114
- assert_equal Person.where(['first_name LIKE ? OR last_name LIKE ?', '%test search%', '%test search%']).select(:id).to_sql, condition[1].to_sql
115
- assert_equal '"buildings"."owner_id" IN (?) AND floor_count > 0 AND name != ?', condition[0]
116
- assert_equal [''], condition[2..-1]
117
- end
118
-
119
- private
120
-
121
- def relation_class
122
- @klass.active_scaffold_config.model.send(:relation).class
123
- end
124
- end
@@ -1,10 +0,0 @@
1
- require 'test_helper'
2
-
3
- class LocalizationTest < Minitest::Test
4
- def test_localization
5
- assert_equal 'Dutch', as_(:dutch)
6
- assert_equal 'dutch', as_('dutch')
7
- I18n.backend.store_translations :en, :active_scaffold => {:create_model => 'Create %<model>s'}
8
- assert_equal 'Create Test', as_(:create_model, :model => 'Test')
9
- end
10
- end
@@ -1,159 +0,0 @@
1
- require 'test_helper'
2
- require 'active_scaffold_config_mock'
3
-
4
- class DateTimeModel < ActiveRecord::Base
5
- include ActiveScaffold::ActiveRecordPermissions::ModelUserAccess::Model
6
- def self.columns
7
- @columns ||= [ColumnMock.new('id', '', 'int(11)'), ColumnMock.new('run_at', '', 'datetime')]
8
- end
9
-
10
- def self.columns_hash
11
- @columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
12
- end
13
-
14
- def self.load_schema!
15
- columns_hash.each do |name, column|
16
- define_attribute(
17
- name,
18
- connection.lookup_cast_type_from_column(column),
19
- default: column.default
20
- )
21
- end
22
- end
23
- end
24
-
25
- class ParseDatetimeTest < Minitest::Test
26
- include ActiveScaffoldConfigMock
27
- include ActiveScaffold::AttributeParams
28
- include ActiveScaffold::Finder
29
-
30
- def setup
31
- DateTimeModel.load_schema! if Rails.version >= '5.0'
32
- spanish = {
33
- time: {
34
- formats: {picker: '%a, %d %b %Y %H:%M:%S'}
35
- },
36
- date: {
37
- day_names: %w[Domingo Lunes Martes Miércoles Jueves Viernes Sábado],
38
- abbr_day_names: %w[Dom Lun Mar Mié Jue Vie Sáb],
39
- month_names: [nil, 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
40
- abbr_month_names: [nil, 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
41
- formats: {default: '%Y-%m-%d', long: '%d de %B de %Y'}
42
- }
43
- }
44
- I18n.backend.store_translations :es, spanish
45
-
46
- @config = config_for('date_time_model')
47
- end
48
-
49
- def teardown
50
- I18n.locale = :en
51
- end
52
-
53
- def test_translate_to_english
54
- I18n.locale = :es
55
- assert_equal 'Mon, 03 Apr 2017 16:30:26', translate_datetime('Lun, 03 Abr 2017 16:30:26')
56
- assert_equal 'Fri, 24 Mar 2017 16:30:26', translate_datetime('Vie, 24 Mar 2017 16:30:26')
57
- assert_equal 'Tue, 28 Mar 2017 16:30:26', translate_datetime('Mar, 28 Mar 2017 16:30:26')
58
- end
59
-
60
- def test_translate_to_english_with_different_order
61
- I18n.locale = :es
62
- format = '%d %b %Y, %a, %H:%M:%S'
63
- assert_equal '03 Apr 2017, Mon, 16:30:26', translate_datetime('03 Abr 2017, Lun, 16:30:26', format)
64
- assert_equal '24 Mar 2017, Fri, 16:30:26', translate_datetime('24 Mar 2017, Vie, 16:30:26', format)
65
- assert_equal '28 Mar 2017, Tue, 16:30:26', translate_datetime('28 Mar 2017, Mar, 16:30:26', format)
66
- end
67
-
68
- def test_translate_to_english_with_words
69
- I18n.locale = :es
70
- format = '%A, %d de %B %Y, %H:%M:%S'
71
- assert_equal 'Monday, 03 de April de 2017, 16:30:26', translate_datetime('Lunes, 03 de Abril de 2017, 16:30:26', format)
72
- assert_equal 'Friday, 24 de March de 2017, 16:30:26', translate_datetime('Viernes, 24 de Marzo de 2017, 16:30:26', format)
73
- assert_equal 'Tuesday, 28 de March de 2017, 16:30:26', translate_datetime('Martes, 28 de Marzo de 2017, 16:30:26', format)
74
- end
75
-
76
- def test_condition_for_spanish_datetime
77
- with_js_framework :jquery do
78
- I18n.locale = :es
79
- assert_equal Time.zone.local(2017, 4, 3, 16, 30, 26), condition_value('Lun, 03 Abr 2017 16:30:26')
80
- assert_equal Time.zone.local(2017, 3, 24, 16, 30, 26), condition_value('Vie, 24 Mar 2017 16:30:26')
81
- assert_equal Time.zone.local(2017, 3, 28, 16, 30, 26), condition_value('Mar, 28 Mar 2017 16:30:26')
82
- end
83
- end
84
-
85
- def test_condition_for_english_datetime
86
- with_js_framework :jquery do
87
- assert_equal Time.zone.local(2017, 4, 3, 16, 30, 26), condition_value('Mon, 03 Apr 2017 16:30:26')
88
- assert_equal Time.zone.local(2017, 3, 24, 16, 30, 26), condition_value('Fri, 24 Mar 2017 16:30:26')
89
- assert_equal Time.zone.local(2017, 3, 28, 16, 30, 26), condition_value('Tue, 28 Mar 2017 16:30:26')
90
- end
91
- end
92
-
93
- def test_condition_for_english_datetime_without_time
94
- with_js_framework :jquery do
95
- assert_equal Time.zone.local(2017, 4, 3, 0, 0, 0), condition_value('Mon, 03 Apr 2017')
96
- assert_equal Time.zone.local(2017, 3, 24, 0, 0, 0), condition_value('Fri, 24 Mar 2017')
97
- assert_equal Time.zone.local(2017, 3, 28, 0, 0, 0), condition_value('Tue, 28 Mar 2017')
98
- end
99
- end
100
-
101
- def test_condition_for_default_datetime_without_time
102
- assert_equal Time.zone.local(2017, 4, 3, 0, 0, 0), condition_value('2017-04-03')
103
- assert_equal Time.zone.local(2017, 3, 24, 0, 0, 0), condition_value('2017-03-24')
104
- assert_equal Time.zone.local(2017, 3, 28, 0, 0, 0), condition_value('2017-03-28')
105
- end
106
-
107
- def test_condition_for_english_datetime_without_seconds
108
- with_js_framework :jquery do
109
- assert_equal Time.zone.local(2017, 4, 3, 16, 30), condition_value('Mon, 03 Apr 2017 16:30')
110
- assert_equal Time.zone.local(2017, 3, 24, 16, 30), condition_value('Fri, 24 Mar 2017 16:30')
111
- assert_equal Time.zone.local(2017, 3, 28, 16, 30), condition_value('Tue, 28 Mar 2017 16:30')
112
- end
113
- end
114
-
115
- def test_condition_for_default_datetime_without_seconds
116
- assert_equal Time.zone.local(2017, 4, 3, 16, 30, 0), condition_value('2017-04-03 16:30')
117
- assert_equal Time.zone.local(2017, 3, 24, 16, 30, 0), condition_value('2017-03-24 16:30')
118
- assert_equal Time.zone.local(2017, 3, 28, 16, 30, 0), condition_value('2017-03-28 16:30')
119
- end
120
-
121
- def test_condition_for_time
122
- assert_equal Time.current.change(hour: 16, min: 30), condition_value('16:30')
123
- assert_equal Time.current.change(hour: 16, min: 30, sec: 26), condition_value('16:30:26')
124
- end
125
-
126
- def test_condition_for_datetime_with_zone
127
- assert_equal ActiveSupport::TimeZone[3].local(2017, 4, 8, 16, 30, 0), condition_value('2017-04-08 16:30 +0300')
128
- end
129
-
130
- def test_condition_for_spanish_date
131
- @config.columns[:run_at].options[:format] = :long
132
- I18n.locale = :es
133
- assert_equal Date.new(2017, 4, 3), condition_value('03 de Abril de 2017', :to_date)
134
- assert_equal Date.new(2017, 3, 24), condition_value('24 de Marzo de 2017', :to_date)
135
- assert_equal Date.new(2017, 3, 28), condition_value('28 de Marzo de 2017', :to_date)
136
- end
137
-
138
- def test_condition_for_english_date
139
- @config.columns[:run_at].options[:format] = :long
140
- assert_equal Date.new(2017, 4, 3), condition_value('April 03, 2017', :to_date)
141
- assert_equal Date.new(2017, 3, 24), condition_value('March 24, 2017', :to_date)
142
- assert_equal Date.new(2017, 3, 28), condition_value('March 28, 2017', :to_date)
143
- end
144
-
145
- private
146
-
147
- def translate_datetime(value, format = nil)
148
- format ||= I18n.t('time.formats.picker')
149
- self.class.translate_days_and_months(value, format)
150
- end
151
-
152
- def condition_value(value, conversion = nil)
153
- self.class.condition_value_for_datetime(@config.columns[:run_at], value, conversion || :to_time)
154
- end
155
-
156
- def params_hash?(value)
157
- value.is_a? Hash
158
- end
159
- end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RenderTest < ActionController::TestCase
4
- tests AddressesController
5
- test 'render activescaffold views' do
6
- get :index
7
- assert_select 'div.active-scaffold'
8
- end
9
- end