active_scaffold 3.0.0

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 (272) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG +152 -0
  3. data/Gemfile +4 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README +51 -0
  6. data/Rakefile +24 -0
  7. data/active_scaffold.gemspec +24 -0
  8. data/environment.rb +22 -0
  9. data/frontends/default/images/add.gif +0 -0
  10. data/frontends/default/images/arrow_down.gif +0 -0
  11. data/frontends/default/images/arrow_up.gif +0 -0
  12. data/frontends/default/images/close.gif +0 -0
  13. data/frontends/default/images/cross.png +0 -0
  14. data/frontends/default/images/indicator-small.gif +0 -0
  15. data/frontends/default/images/indicator.gif +0 -0
  16. data/frontends/default/images/magnifier.png +0 -0
  17. data/frontends/default/javascripts/jquery/active_scaffold.js +957 -0
  18. data/frontends/default/javascripts/jquery/jquery.editinplace.js +726 -0
  19. data/frontends/default/javascripts/prototype/active_scaffold.js +954 -0
  20. data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
  21. data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
  22. data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
  23. data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  24. data/frontends/default/stylesheets/stylesheet.css +858 -0
  25. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  26. data/frontends/default/views/_base_form.html.erb +41 -0
  27. data/frontends/default/views/_create_form.html.erb +6 -0
  28. data/frontends/default/views/_create_form_on_list.html.erb +5 -0
  29. data/frontends/default/views/_field_search.html.erb +32 -0
  30. data/frontends/default/views/_form.html.erb +24 -0
  31. data/frontends/default/views/_form_association.html.erb +14 -0
  32. data/frontends/default/views/_form_association_footer.html.erb +40 -0
  33. data/frontends/default/views/_form_attribute.html.erb +15 -0
  34. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  35. data/frontends/default/views/_form_messages.html.erb +5 -0
  36. data/frontends/default/views/_horizontal_subform.html.erb +19 -0
  37. data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
  38. data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
  39. data/frontends/default/views/_human_conditions.html.erb +1 -0
  40. data/frontends/default/views/_list.html.erb +18 -0
  41. data/frontends/default/views/_list_actions.html.erb +16 -0
  42. data/frontends/default/views/_list_calculations.html.erb +16 -0
  43. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  44. data/frontends/default/views/_list_header.html.erb +12 -0
  45. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  46. data/frontends/default/views/_list_messages.html.erb +32 -0
  47. data/frontends/default/views/_list_pagination.html.erb +11 -0
  48. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  49. data/frontends/default/views/_list_record.html.erb +14 -0
  50. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  51. data/frontends/default/views/_list_with_header.html.erb +32 -0
  52. data/frontends/default/views/_messages.html.erb +10 -0
  53. data/frontends/default/views/_render_field.js.rjs +13 -0
  54. data/frontends/default/views/_row.html.erb +12 -0
  55. data/frontends/default/views/_search.html.erb +34 -0
  56. data/frontends/default/views/_search_attribute.html.erb +10 -0
  57. data/frontends/default/views/_show.html.erb +8 -0
  58. data/frontends/default/views/_show_columns.html.erb +12 -0
  59. data/frontends/default/views/_update_actions.html.erb +9 -0
  60. data/frontends/default/views/_update_form.html.erb +5 -0
  61. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  62. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  63. data/frontends/default/views/add_existing.js.rjs +17 -0
  64. data/frontends/default/views/add_existing_form.html.erb +5 -0
  65. data/frontends/default/views/create.html.erb +5 -0
  66. data/frontends/default/views/delete.html.erb +13 -0
  67. data/frontends/default/views/destroy.js.rjs +5 -0
  68. data/frontends/default/views/edit_associated.js.rjs +11 -0
  69. data/frontends/default/views/field_search.html.erb +5 -0
  70. data/frontends/default/views/form_messages.js.rjs +1 -0
  71. data/frontends/default/views/list.html.erb +1 -0
  72. data/frontends/default/views/list.js.rjs +1 -0
  73. data/frontends/default/views/on_action_update.js.rjs +8 -0
  74. data/frontends/default/views/on_create.js.rjs +24 -0
  75. data/frontends/default/views/on_update.js.rjs +15 -0
  76. data/frontends/default/views/search.html.erb +5 -0
  77. data/frontends/default/views/show.html.erb +5 -0
  78. data/frontends/default/views/update.html.erb +8 -0
  79. data/frontends/default/views/update_column.js.rjs +13 -0
  80. data/frontends/default/views/update_row.js.rjs +1 -0
  81. data/init.rb +1 -0
  82. data/install_assets.rb +44 -0
  83. data/lib/active_record_permissions.rb +134 -0
  84. data/lib/active_scaffold.rb +279 -0
  85. data/lib/active_scaffold/actions/common_search.rb +22 -0
  86. data/lib/active_scaffold/actions/core.rb +150 -0
  87. data/lib/active_scaffold/actions/create.rb +152 -0
  88. data/lib/active_scaffold/actions/delete.rb +72 -0
  89. data/lib/active_scaffold/actions/field_search.rb +82 -0
  90. data/lib/active_scaffold/actions/list.rb +128 -0
  91. data/lib/active_scaffold/actions/mark.rb +50 -0
  92. data/lib/active_scaffold/actions/nested.rb +241 -0
  93. data/lib/active_scaffold/actions/search.rb +47 -0
  94. data/lib/active_scaffold/actions/show.rb +54 -0
  95. data/lib/active_scaffold/actions/subform.rb +17 -0
  96. data/lib/active_scaffold/actions/update.rb +134 -0
  97. data/lib/active_scaffold/attribute_params.rb +207 -0
  98. data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
  99. data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +38 -0
  100. data/lib/active_scaffold/bridges/bridge.rb +52 -0
  101. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
  102. data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +79 -0
  103. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +7 -0
  104. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +38 -0
  105. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +26 -0
  106. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +35 -0
  107. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
  108. data/lib/active_scaffold/bridges/date_picker/bridge.rb +22 -0
  109. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
  110. data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
  111. data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
  112. data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
  113. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
  114. data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
  115. data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
  116. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  117. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  118. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  119. data/lib/active_scaffold/bridges/paperclip/bridge.rb +12 -0
  120. data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
  121. data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
  122. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
  123. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
  124. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
  125. data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
  126. data/lib/active_scaffold/bridges/shared/date_bridge.rb +187 -0
  127. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
  128. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +45 -0
  129. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
  130. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
  131. data/lib/active_scaffold/config/base.rb +54 -0
  132. data/lib/active_scaffold/config/core.rb +229 -0
  133. data/lib/active_scaffold/config/create.rb +43 -0
  134. data/lib/active_scaffold/config/delete.rb +25 -0
  135. data/lib/active_scaffold/config/field_search.rb +74 -0
  136. data/lib/active_scaffold/config/form.rb +46 -0
  137. data/lib/active_scaffold/config/list.rb +174 -0
  138. data/lib/active_scaffold/config/mark.rb +22 -0
  139. data/lib/active_scaffold/config/nested.rb +43 -0
  140. data/lib/active_scaffold/config/search.rb +68 -0
  141. data/lib/active_scaffold/config/show.rb +34 -0
  142. data/lib/active_scaffold/config/subform.rb +35 -0
  143. data/lib/active_scaffold/config/update.rb +38 -0
  144. data/lib/active_scaffold/configurable.rb +29 -0
  145. data/lib/active_scaffold/constraints.rb +179 -0
  146. data/lib/active_scaffold/data_structures/action_columns.rb +133 -0
  147. data/lib/active_scaffold/data_structures/action_link.rb +162 -0
  148. data/lib/active_scaffold/data_structures/action_links.rb +59 -0
  149. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  150. data/lib/active_scaffold/data_structures/column.rb +348 -0
  151. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  152. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  153. data/lib/active_scaffold/data_structures/nested_info.rb +108 -0
  154. data/lib/active_scaffold/data_structures/set.rb +62 -0
  155. data/lib/active_scaffold/data_structures/sorting.rb +168 -0
  156. data/lib/active_scaffold/finder.rb +333 -0
  157. data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
  158. data/lib/active_scaffold/helpers/controller_helpers.rb +40 -0
  159. data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
  160. data/lib/active_scaffold/helpers/form_column_helpers.rb +343 -0
  161. data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
  162. data/lib/active_scaffold/helpers/id_helpers.rb +131 -0
  163. data/lib/active_scaffold/helpers/list_column_helpers.rb +363 -0
  164. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  165. data/lib/active_scaffold/helpers/search_column_helpers.rb +238 -0
  166. data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
  167. data/lib/active_scaffold/helpers/view_helpers.rb +315 -0
  168. data/lib/active_scaffold/locale/de.rb +113 -0
  169. data/lib/active_scaffold/locale/en.rb +118 -0
  170. data/lib/active_scaffold/locale/es.yml +112 -0
  171. data/lib/active_scaffold/locale/fr.rb +113 -0
  172. data/lib/active_scaffold/locale/hu.yml +63 -0
  173. data/lib/active_scaffold/locale/ja.yml +64 -0
  174. data/lib/active_scaffold/locale/ru.yml +62 -0
  175. data/lib/active_scaffold/marked_model.rb +38 -0
  176. data/lib/dhtml_confirm.rb +54 -0
  177. data/lib/extensions/action_controller_rendering.rb +20 -0
  178. data/lib/extensions/action_view_rendering.rb +113 -0
  179. data/lib/extensions/action_view_resolver.rb +7 -0
  180. data/lib/extensions/active_record_offset.rb +12 -0
  181. data/lib/extensions/array.rb +7 -0
  182. data/lib/extensions/localize.rb +10 -0
  183. data/lib/extensions/name_option_for_datetime.rb +12 -0
  184. data/lib/extensions/nil_id_in_url_params.rb +7 -0
  185. data/lib/extensions/paginator_extensions.rb +26 -0
  186. data/lib/extensions/reverse_associations.rb +62 -0
  187. data/lib/extensions/routing_mapper.rb +34 -0
  188. data/lib/extensions/to_label.rb +8 -0
  189. data/lib/extensions/unsaved_associated.rb +61 -0
  190. data/lib/extensions/unsaved_record.rb +20 -0
  191. data/lib/extensions/usa_state.rb +46 -0
  192. data/lib/generators/active_scaffold/USAGE +29 -0
  193. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  194. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  195. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +28 -0
  196. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  197. data/lib/generators/active_scaffold_setup/USAGE +10 -0
  198. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +53 -0
  199. data/lib/paginator.rb +136 -0
  200. data/lib/responds_to_parent.rb +70 -0
  201. data/public/blank.html +33 -0
  202. data/shoulda_macros/macros.rb +136 -0
  203. data/test/bridges/bridge_test.rb +47 -0
  204. data/test/config/base_test.rb +15 -0
  205. data/test/config/create_test.rb +55 -0
  206. data/test/config/list_test.rb +74 -0
  207. data/test/config/show_test.rb +43 -0
  208. data/test/config/update_test.rb +17 -0
  209. data/test/const_mocker.rb +36 -0
  210. data/test/data_structures/action_columns_test.rb +113 -0
  211. data/test/data_structures/action_link_test.rb +78 -0
  212. data/test/data_structures/action_links_test.rb +78 -0
  213. data/test/data_structures/actions_test.rb +25 -0
  214. data/test/data_structures/association_column_test.rb +42 -0
  215. data/test/data_structures/column_test.rb +185 -0
  216. data/test/data_structures/columns_test.rb +69 -0
  217. data/test/data_structures/error_message_test.rb +28 -0
  218. data/test/data_structures/set_test.rb +86 -0
  219. data/test/data_structures/sorting_test.rb +126 -0
  220. data/test/data_structures/standard_column_test.rb +24 -0
  221. data/test/data_structures/virtual_column_test.rb +23 -0
  222. data/test/extensions/active_record_test.rb +45 -0
  223. data/test/extensions/array_test.rb +12 -0
  224. data/test/helpers/form_column_helpers_test.rb +31 -0
  225. data/test/helpers/list_column_helpers_test.rb +31 -0
  226. data/test/helpers/pagination_helpers_test.rb +55 -0
  227. data/test/misc/active_record_permissions_test.rb +154 -0
  228. data/test/misc/attribute_params_test.rb +110 -0
  229. data/test/misc/configurable_test.rb +96 -0
  230. data/test/misc/constraints_test.rb +193 -0
  231. data/test/misc/finder_test.rb +93 -0
  232. data/test/misc/lang_test.rb +12 -0
  233. data/test/mock_app/.gitignore +2 -0
  234. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  235. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  236. data/test/mock_app/config/boot.rb +110 -0
  237. data/test/mock_app/config/database.yml +16 -0
  238. data/test/mock_app/config/environment.rb +43 -0
  239. data/test/mock_app/config/environments/development.rb +17 -0
  240. data/test/mock_app/config/environments/production.rb +28 -0
  241. data/test/mock_app/config/environments/test.rb +28 -0
  242. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  243. data/test/mock_app/config/initializers/inflections.rb +10 -0
  244. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  245. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  246. data/test/mock_app/config/initializers/session_store.rb +15 -0
  247. data/test/mock_app/config/locales/en.yml +5 -0
  248. data/test/mock_app/config/routes.rb +43 -0
  249. data/test/mock_app/db/test.sqlite3 +1 -0
  250. data/test/mock_app/public/blank.html +33 -0
  251. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  252. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  253. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  254. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  255. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  256. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  257. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  258. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  259. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  260. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  261. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  262. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  263. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  264. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  265. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  266. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  267. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +839 -0
  268. data/test/model_stub.rb +55 -0
  269. data/test/run_all.rb +8 -0
  270. data/test/test_helper.rb +39 -0
  271. data/uninstall.rb +13 -0
  272. metadata +478 -0
@@ -0,0 +1,74 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class Config::ListTest < Test::Unit::TestCase
4
+ def setup
5
+ @config = ActiveScaffold::Config::Core.new :model_stub
6
+ end
7
+
8
+ def test_default_options
9
+ assert_equal 15, @config.list.per_page
10
+ assert_equal '-', @config.list.empty_field_text
11
+ assert @config.actions.include?(:search)
12
+ assert_equal 'search', @config.list.search_partial
13
+ assert_equal :no_entries, @config.list.no_entries_message
14
+ assert_equal :filtered, @config.list.filtered_message
15
+ assert !@config.list.always_show_create
16
+ assert !@config.list.always_show_search
17
+ end
18
+
19
+ def test_no_entries
20
+ @config.list.no_entries_message = 'No items'
21
+ assert_equal 'No items', @config.list.no_entries_message
22
+ end
23
+
24
+ def test_filtered_message
25
+ @config.list.filtered_message = 'filtered items'
26
+ assert_equal 'filtered items', @config.list.filtered_message
27
+ end
28
+
29
+ def test_per_page
30
+ per_page = 35
31
+ @config.list.per_page = per_page
32
+ assert_equal per_page, @config.list.per_page
33
+ end
34
+
35
+ def test_always_show_create
36
+ always_show_create = true
37
+ @config.list.always_show_create = always_show_create
38
+ assert_equal always_show_create, @config.list.always_show_create
39
+ end
40
+
41
+ def test_always_show_create_when_create_is_not_enabled
42
+ always_show_create = true
43
+ @config.list.always_show_create = always_show_create
44
+ @config.actions.exclude :create
45
+ assert_equal false, @config.list.always_show_create
46
+ end
47
+
48
+ def test_always_show_search
49
+ @config.list.always_show_search = true
50
+ assert @config.list.always_show_search
51
+ assert_equal 'search', @config.list.search_partial
52
+ end
53
+
54
+ def test_always_show_search_when_search_is_not_enabled
55
+ @config.list.always_show_search = true
56
+ @config.actions.exclude :search
57
+ assert_equal false, @config.list.always_show_search
58
+ end
59
+
60
+ def test_always_show_search_when_field_search
61
+ @config.list.always_show_search = true
62
+ @config.actions.swap :search, :live_search
63
+ assert @config.list.always_show_search
64
+ assert_equal 'live_search', @config.list.search_partial
65
+ end
66
+
67
+ def test_always_show_search_when_field_search
68
+ @config.list.always_show_search = true
69
+ @config.actions.swap :search, :field_search
70
+ assert @config.list.always_show_search
71
+ assert_equal 'field_search', @config.list.search_partial
72
+ end
73
+
74
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class Config::ShowTest < Test::Unit::TestCase
4
+ def setup
5
+ @config = ActiveScaffold::Config::Core.new :model_stub
6
+ @default_link = @config.show.link
7
+ end
8
+
9
+ def teardown
10
+ @config.show.link = @default_link
11
+ end
12
+
13
+ def test_default_options
14
+ assert_equal 'Show Modelstub', @config.show.label
15
+ end
16
+
17
+ def test_link_defaults
18
+ link = @config.show.link
19
+ assert !link.page?
20
+ assert !link.popup?
21
+ assert !link.confirm?
22
+ assert_equal "show", link.action
23
+ assert_equal "Show", link.label
24
+ assert link.inline?
25
+ blank = {}
26
+ assert_equal blank, link.html_options
27
+ assert_equal :get, link.method
28
+ assert_equal :member, link.type
29
+ assert_equal :read, link.crud_type
30
+ assert_equal :show_authorized?, link.security_method
31
+ end
32
+
33
+ def test_setting_link
34
+ @config.show.link = ActiveScaffold::DataStructures::ActionLink.new('update', :label => 'Monkeys')
35
+ assert_not_equal(@default_link, @config.show.link)
36
+ end
37
+
38
+ def test_label
39
+ label = 'create new monkeys'
40
+ @config.show.label = label
41
+ assert_equal label, @config.show.label
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class Config::UpdateTest < Test::Unit::TestCase
4
+ def setup
5
+ @config = ActiveScaffold::Config::Core.new :model_stub
6
+ @update = @config.update
7
+
8
+ @config._load_action_columns
9
+ end
10
+
11
+ def test__params_for_columns__returns_all_params
12
+ @config.columns[:a].params.add :keep_a, :a_temp
13
+
14
+ assert @config.columns[:a].params.include?(:keep_a)
15
+ assert @config.columns[:a].params.include?(:a_temp)
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ class ConstMocker
2
+ def initialize(*const_names)
3
+ @const_names = const_names
4
+ @const_states = {}
5
+ @const_names.each{|const_name|
6
+ @const_states[const_name] = Object.const_defined?(const_name) ? Object.const_get(const_name) : nil
7
+ }
8
+ end
9
+
10
+ def remove
11
+ @const_names.each{|const_name|
12
+ Object.send :remove_const, const_name if Object.const_defined?(const_name)
13
+ }
14
+ end
15
+
16
+ def declare
17
+ @const_names.each{|const_name|
18
+ Object.class_eval "class #{const_name}; end;" unless Object.const_defined?(const_name)
19
+ }
20
+ end
21
+
22
+ def restore
23
+ remove
24
+
25
+ @const_states.each_pair{|const_name, const|
26
+ Object.const_set const_name, const if const
27
+ }
28
+ end
29
+
30
+ def self.mock(*const_names, &block)
31
+ cm = new(*const_names)
32
+ yield(cm)
33
+ cm.restore
34
+ true
35
+ end
36
+ end
@@ -0,0 +1,113 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+ # require 'test/model_stub'
3
+ require File.join(File.dirname(__FILE__), '../../lib/active_scaffold/data_structures/set.rb')
4
+
5
+ class ActionColumnsTest < Test::Unit::TestCase
6
+ def setup
7
+ @columns = ActiveScaffold::DataStructures::ActionColumns.new([:a, :b])
8
+ end
9
+
10
+ def test_label
11
+ assert_nothing_raised do
12
+ @columns.label = 'foo';
13
+ end
14
+ assert @columns.label == 'foo'
15
+ end
16
+
17
+ def test_initialization
18
+ assert @columns.include?(:a)
19
+ assert @columns.include?(:b)
20
+ assert !@columns.include?(:c)
21
+ end
22
+
23
+ def test_exclude
24
+ # exclude with a symbol
25
+ assert @columns.include?(:b)
26
+ @columns.exclude :b
27
+ assert !@columns.include?(:b)
28
+
29
+ # exclude with a string
30
+ assert @columns.include?(:a)
31
+ @columns.exclude 'a'
32
+ assert !@columns.include?(:a)
33
+ end
34
+
35
+ def test_exclude_array
36
+ # exclude with a symbol
37
+ assert @columns.include?(:b)
38
+ @columns.exclude [:a, :b]
39
+ assert !@columns.include?(:b)
40
+ assert !@columns.include?(:a)
41
+ end
42
+
43
+ def test_add
44
+ # try adding a simple column using a string
45
+ assert !@columns.include?(:c)
46
+ @columns.add 'c'
47
+ assert @columns.include?(:c)
48
+
49
+ # try adding a simple column using a symbol
50
+ assert !@columns.include?(:d)
51
+ @columns.add :d
52
+ assert @columns.include?(:d)
53
+
54
+ # test that << also adds
55
+ assert !@columns.include?(:e)
56
+ @columns << :e
57
+ assert @columns.include?(:e)
58
+
59
+ # try adding an array of columns
60
+ assert !@columns.include?(:f)
61
+ @columns.add [:f, :g]
62
+ assert @columns.include?(:f)
63
+ assert @columns.include?(:g)
64
+
65
+ end
66
+
67
+ def test_length
68
+ assert_equal 2, @columns.length
69
+ end
70
+
71
+ def test_add_subgroup
72
+ # first, use @columns.add directly
73
+ @c2 = ActiveScaffold::DataStructures::ActionColumns.new
74
+ @columns.add @c2
75
+ assert @columns.any? { |c| c == @c2 }
76
+
77
+ # then use the shortcut
78
+ @columns.add_subgroup 'foo' do
79
+ end
80
+ assert @columns.any? { |c| c.respond_to? :label and c.label == 'foo' }
81
+ end
82
+
83
+ def test_block_config
84
+ @columns.configure do |config|
85
+ # we may use the config argument
86
+ config.add :c
87
+ # or we may not
88
+ exclude :b
89
+ add_subgroup 'my subgroup' do
90
+ add :e
91
+ end
92
+ end
93
+
94
+ assert @columns.include?(:c)
95
+ assert !@columns.include?(:b)
96
+ @columns.each { |c|
97
+ next unless c.is_a? ActiveScaffold::DataStructures::Columns
98
+ assert c.include?(:e)
99
+ assert_equal 'my subgroup', c.name
100
+ }
101
+ end
102
+
103
+ def test_include
104
+ @columns.add_subgroup 'foo' do
105
+ add :c
106
+ end
107
+
108
+ assert @columns.include?(:a)
109
+ assert @columns.include?(:b)
110
+ assert @columns.include?(:c)
111
+ assert !@columns.include?(:d)
112
+ end
113
+ end
@@ -0,0 +1,78 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class ActionLinkTest < Test::Unit::TestCase
4
+ def setup
5
+ @link = ActiveScaffold::DataStructures::ActionLink.new('foo')
6
+ end
7
+
8
+ def test_simple_attributes
9
+ assert_equal 'foo', @link.action
10
+ @link.action = 'bar'
11
+ assert_equal 'bar', @link.action
12
+
13
+ hash = {:a => :b}
14
+ @link.parameters = hash
15
+ assert_equal hash, @link.parameters
16
+
17
+ @link.label = 'hello world'
18
+ assert_equal 'hello world', @link.label
19
+
20
+ assert !@link.confirm
21
+ @link.confirm = true
22
+ assert @link.confirm
23
+
24
+ assert_equal 'bar_authorized?', @link.security_method
25
+
26
+ assert_equal false, @link.security_method_set?
27
+ @link.security_method = 'blueberry_pie'
28
+ assert_equal true, @link.security_method_set?
29
+ assert_equal 'blueberry_pie', @link.security_method
30
+
31
+ @link.type = :collection
32
+ assert_equal :collection, @link.type
33
+ @link.type = :member
34
+ assert_equal :member, @link.type
35
+
36
+ assert_equal :get, @link.method
37
+ @link.method = :put
38
+ assert_equal :put, @link.method
39
+ end
40
+
41
+ def test_position
42
+ @link.position = true
43
+
44
+ @link.type = :collection
45
+ assert_equal :top, @link.position
46
+
47
+ @link.type = :member
48
+ assert_equal :replace, @link.position
49
+
50
+ @link.position = :before
51
+ assert_equal :before, @link.position
52
+
53
+ @link.position = false
54
+ assert_equal false, @link.position
55
+ end
56
+
57
+ def test_presentation_style
58
+ # default
59
+ assert @link.inline?
60
+ assert !@link.popup?
61
+ assert !@link.page?
62
+
63
+ @link.popup = true
64
+ assert !@link.inline?
65
+ assert @link.popup?
66
+ assert !@link.page?
67
+
68
+ @link.page = true
69
+ assert !@link.inline?
70
+ assert !@link.popup?
71
+ assert @link.page?
72
+
73
+ @link.inline = true
74
+ assert @link.inline?
75
+ assert !@link.popup?
76
+ assert !@link.page?
77
+ end
78
+ end
@@ -0,0 +1,78 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class ActionLinksTest < Test::Unit::TestCase
4
+ def setup
5
+ @links = ActiveScaffold::DataStructures::ActionLinks.new
6
+ end
7
+
8
+ def test_add_and_find
9
+ # test adding with a shortcut
10
+ @links.add 'foo/bar'
11
+
12
+ assert_equal 1, @links.find_all{true}.size
13
+ assert_equal 'foo/bar', @links.find_all{true}[0].action
14
+ assert_equal 'foo/bar', @links['foo/bar'].action
15
+
16
+ # test adding an ActionLink object directly
17
+ @links.add ActiveScaffold::DataStructures::ActionLink.new('hello/world')
18
+
19
+ assert_equal 2, @links.find_all{true}.size
20
+
21
+ # test the << alias
22
+ @links << 'a/b'
23
+
24
+ assert_equal 3, @links.find_all{true}.size
25
+ end
26
+
27
+ def test_array_access
28
+ @link1 = ActiveScaffold::DataStructures::ActionLink.new 'foo/bar'
29
+ @link2 = ActiveScaffold::DataStructures::ActionLink.new 'hello_world'
30
+
31
+ @links.add @link1
32
+ @links.add @link2
33
+
34
+ assert_equal @link1, @links[@link1.action]
35
+ assert_equal @link2, @links[@link2.action]
36
+ end
37
+
38
+ def test_empty
39
+ assert @links.empty?
40
+ @links.add 'a'
41
+ assert !@links.empty?
42
+ end
43
+
44
+ def test_cloning
45
+ @links.add 'foo/bar'
46
+ @links_copy = @links.clone
47
+
48
+ assert !@links.equal?(@links_copy)
49
+ assert !@links['foo/bar'].equal?(@links_copy['foo/bar'])
50
+ end
51
+
52
+ def test_each
53
+ @links.add 'foo', :type => :collection
54
+ @links.add 'bar', :type => :member
55
+
56
+ @links.each :collection do |link|
57
+ assert_equal 'foo', link.action
58
+ end
59
+ @links.each :member do |link|
60
+ assert_equal 'bar', link.action
61
+ end
62
+ end
63
+
64
+ def test_delete
65
+ @links.add 'foo'
66
+ @links.add 'bar'
67
+
68
+ @links.delete :foo
69
+ assert @links['foo'].nil?
70
+ begin
71
+ @links.delete :foo
72
+ @links.delete 'foo'
73
+ rescue
74
+ assert false, "deleting from action links when item doesn't exist should not throw an error"
75
+ end
76
+ assert !@links['bar'].nil?
77
+ end
78
+ end