active_scaffold_vho 3.0.6

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 (279) hide show
  1. data/.autotest +27 -0
  2. data/.document +5 -0
  3. data/CHANGELOG +179 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +20 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README +63 -0
  8. data/Rakefile +53 -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/config.png +0 -0
  14. data/frontends/default/images/cross.png +0 -0
  15. data/frontends/default/images/gears.png +0 -0
  16. data/frontends/default/images/indicator-small.gif +0 -0
  17. data/frontends/default/images/indicator.gif +0 -0
  18. data/frontends/default/images/magnifier.png +0 -0
  19. data/frontends/default/javascripts/jquery/active_scaffold.js +957 -0
  20. data/frontends/default/javascripts/jquery/jquery.editinplace.js +743 -0
  21. data/frontends/default/javascripts/prototype/active_scaffold.js +957 -0
  22. data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
  23. data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
  24. data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
  25. data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  26. data/frontends/default/stylesheets/stylesheet.css +964 -0
  27. data/frontends/default/views/_action_group.html.erb +20 -0
  28. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  29. data/frontends/default/views/_base_form.html.erb +45 -0
  30. data/frontends/default/views/_create_form.html.erb +8 -0
  31. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  32. data/frontends/default/views/_field_search.html.erb +32 -0
  33. data/frontends/default/views/_form.html.erb +24 -0
  34. data/frontends/default/views/_form_association.html.erb +14 -0
  35. data/frontends/default/views/_form_association_footer.html.erb +40 -0
  36. data/frontends/default/views/_form_attribute.html.erb +15 -0
  37. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  38. data/frontends/default/views/_form_messages.html.erb +5 -0
  39. data/frontends/default/views/_horizontal_subform.html.erb +19 -0
  40. data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
  41. data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
  42. data/frontends/default/views/_human_conditions.html.erb +1 -0
  43. data/frontends/default/views/_list.html.erb +18 -0
  44. data/frontends/default/views/_list_actions.html.erb +15 -0
  45. data/frontends/default/views/_list_calculations.html.erb +16 -0
  46. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  47. data/frontends/default/views/_list_header.html.erb +10 -0
  48. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  49. data/frontends/default/views/_list_messages.html.erb +32 -0
  50. data/frontends/default/views/_list_pagination.html.erb +11 -0
  51. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  52. data/frontends/default/views/_list_record.html.erb +14 -0
  53. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  54. data/frontends/default/views/_list_with_header.html.erb +32 -0
  55. data/frontends/default/views/_messages.html.erb +10 -0
  56. data/frontends/default/views/_render_field.js.rjs +13 -0
  57. data/frontends/default/views/_row.html.erb +12 -0
  58. data/frontends/default/views/_search.html.erb +34 -0
  59. data/frontends/default/views/_search_attribute.html.erb +10 -0
  60. data/frontends/default/views/_show.html.erb +8 -0
  61. data/frontends/default/views/_show_columns.html.erb +15 -0
  62. data/frontends/default/views/_update_actions.html.erb +9 -0
  63. data/frontends/default/views/_update_form.html.erb +6 -0
  64. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  65. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  66. data/frontends/default/views/action_confirmation.html.erb +13 -0
  67. data/frontends/default/views/add_existing.js.rjs +17 -0
  68. data/frontends/default/views/add_existing_form.html.erb +5 -0
  69. data/frontends/default/views/create.html.erb +5 -0
  70. data/frontends/default/views/delete.html.erb +13 -0
  71. data/frontends/default/views/destroy.js.rjs +11 -0
  72. data/frontends/default/views/edit_associated.js.rjs +11 -0
  73. data/frontends/default/views/field_search.html.erb +5 -0
  74. data/frontends/default/views/form_messages.js.rjs +1 -0
  75. data/frontends/default/views/list.html.erb +1 -0
  76. data/frontends/default/views/list.js.rjs +1 -0
  77. data/frontends/default/views/on_action_update.js.rjs +8 -0
  78. data/frontends/default/views/on_create.js.rjs +41 -0
  79. data/frontends/default/views/on_update.js.rjs +28 -0
  80. data/frontends/default/views/search.html.erb +5 -0
  81. data/frontends/default/views/show.html.erb +5 -0
  82. data/frontends/default/views/update.html.erb +8 -0
  83. data/frontends/default/views/update_column.js.rjs +13 -0
  84. data/frontends/default/views/update_row.js.rjs +1 -0
  85. data/init.rb +9 -0
  86. data/lib/active_record_permissions.rb +134 -0
  87. data/lib/active_scaffold/actions/common_search.rb +22 -0
  88. data/lib/active_scaffold/actions/core.rb +170 -0
  89. data/lib/active_scaffold/actions/create.rb +145 -0
  90. data/lib/active_scaffold/actions/delete.rb +75 -0
  91. data/lib/active_scaffold/actions/field_search.rb +82 -0
  92. data/lib/active_scaffold/actions/list.rb +184 -0
  93. data/lib/active_scaffold/actions/mark.rb +50 -0
  94. data/lib/active_scaffold/actions/nested.rb +250 -0
  95. data/lib/active_scaffold/actions/search.rb +47 -0
  96. data/lib/active_scaffold/actions/show.rb +61 -0
  97. data/lib/active_scaffold/actions/subform.rb +17 -0
  98. data/lib/active_scaffold/actions/update.rb +141 -0
  99. data/lib/active_scaffold/attribute_params.rb +207 -0
  100. data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
  101. data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +39 -0
  102. data/lib/active_scaffold/bridges/bridge.rb +52 -0
  103. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
  104. data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +79 -0
  105. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +7 -0
  106. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +38 -0
  107. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +26 -0
  108. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +35 -0
  109. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
  110. data/lib/active_scaffold/bridges/date_picker/bridge.rb +22 -0
  111. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
  112. data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
  113. data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
  114. data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
  115. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
  116. data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
  117. data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
  118. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  119. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  120. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  121. data/lib/active_scaffold/bridges/paperclip/bridge.rb +10 -0
  122. data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
  123. data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
  124. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
  125. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
  126. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
  127. data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
  128. data/lib/active_scaffold/bridges/shared/date_bridge.rb +187 -0
  129. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
  130. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +45 -0
  131. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
  132. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
  133. data/lib/active_scaffold/config/base.rb +62 -0
  134. data/lib/active_scaffold/config/core.rb +220 -0
  135. data/lib/active_scaffold/config/create.rb +51 -0
  136. data/lib/active_scaffold/config/delete.rb +34 -0
  137. data/lib/active_scaffold/config/field_search.rb +75 -0
  138. data/lib/active_scaffold/config/form.rb +47 -0
  139. data/lib/active_scaffold/config/list.rb +174 -0
  140. data/lib/active_scaffold/config/mark.rb +22 -0
  141. data/lib/active_scaffold/config/nested.rb +44 -0
  142. data/lib/active_scaffold/config/search.rb +69 -0
  143. data/lib/active_scaffold/config/show.rb +35 -0
  144. data/lib/active_scaffold/config/subform.rb +35 -0
  145. data/lib/active_scaffold/config/update.rb +46 -0
  146. data/lib/active_scaffold/configurable.rb +29 -0
  147. data/lib/active_scaffold/constraints.rb +184 -0
  148. data/lib/active_scaffold/data_structures/action_columns.rb +133 -0
  149. data/lib/active_scaffold/data_structures/action_link.rb +171 -0
  150. data/lib/active_scaffold/data_structures/action_links.rb +175 -0
  151. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  152. data/lib/active_scaffold/data_structures/column.rb +351 -0
  153. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  154. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  155. data/lib/active_scaffold/data_structures/nested_info.rb +123 -0
  156. data/lib/active_scaffold/data_structures/set.rb +62 -0
  157. data/lib/active_scaffold/data_structures/sorting.rb +168 -0
  158. data/lib/active_scaffold/finder.rb +333 -0
  159. data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
  160. data/lib/active_scaffold/helpers/controller_helpers.rb +82 -0
  161. data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
  162. data/lib/active_scaffold/helpers/form_column_helpers.rb +347 -0
  163. data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
  164. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  165. data/lib/active_scaffold/helpers/list_column_helpers.rb +361 -0
  166. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  167. data/lib/active_scaffold/helpers/search_column_helpers.rb +243 -0
  168. data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
  169. data/lib/active_scaffold/helpers/view_helpers.rb +356 -0
  170. data/lib/active_scaffold/locale/de.rb +120 -0
  171. data/lib/active_scaffold/locale/en.rb +119 -0
  172. data/lib/active_scaffold/locale/es.yml +115 -0
  173. data/lib/active_scaffold/locale/fr.rb +116 -0
  174. data/lib/active_scaffold/locale/hu.yml +63 -0
  175. data/lib/active_scaffold/locale/ja.yml +64 -0
  176. data/lib/active_scaffold/locale/ru.yml +119 -0
  177. data/lib/active_scaffold/marked_model.rb +38 -0
  178. data/lib/active_scaffold/version.rb +9 -0
  179. data/lib/active_scaffold.rb +345 -0
  180. data/lib/active_scaffold_assets.rb +45 -0
  181. data/lib/dhtml_confirm.rb +54 -0
  182. data/lib/environment.rb +14 -0
  183. data/lib/extensions/action_controller_rendering.rb +20 -0
  184. data/lib/extensions/action_view_rendering.rb +113 -0
  185. data/lib/extensions/action_view_resolver.rb +7 -0
  186. data/lib/extensions/active_association_reflection.rb +13 -0
  187. data/lib/extensions/active_record_offset.rb +12 -0
  188. data/lib/extensions/array.rb +7 -0
  189. data/lib/extensions/localize.rb +10 -0
  190. data/lib/extensions/name_option_for_datetime.rb +12 -0
  191. data/lib/extensions/nil_id_in_url_params.rb +7 -0
  192. data/lib/extensions/paginator_extensions.rb +26 -0
  193. data/lib/extensions/reverse_associations.rb +62 -0
  194. data/lib/extensions/routing_mapper.rb +34 -0
  195. data/lib/extensions/to_label.rb +8 -0
  196. data/lib/extensions/unsaved_associated.rb +61 -0
  197. data/lib/extensions/unsaved_record.rb +20 -0
  198. data/lib/extensions/usa_state.rb +46 -0
  199. data/lib/generators/active_scaffold/USAGE +29 -0
  200. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  201. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  202. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +28 -0
  203. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  204. data/lib/generators/active_scaffold_setup/USAGE +10 -0
  205. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +53 -0
  206. data/lib/paginator.rb +136 -0
  207. data/lib/responds_to_parent.rb +70 -0
  208. data/public/blank.html +33 -0
  209. data/shoulda_macros/macros.rb +136 -0
  210. data/test/bridges/bridge_test.rb +47 -0
  211. data/test/config/base_test.rb +15 -0
  212. data/test/config/create_test.rb +55 -0
  213. data/test/config/list_test.rb +74 -0
  214. data/test/config/show_test.rb +43 -0
  215. data/test/config/update_test.rb +17 -0
  216. data/test/const_mocker.rb +36 -0
  217. data/test/data_structures/action_columns_test.rb +113 -0
  218. data/test/data_structures/action_link_test.rb +78 -0
  219. data/test/data_structures/action_links_test.rb +78 -0
  220. data/test/data_structures/actions_test.rb +25 -0
  221. data/test/data_structures/association_column_test.rb +42 -0
  222. data/test/data_structures/column_test.rb +185 -0
  223. data/test/data_structures/columns_test.rb +69 -0
  224. data/test/data_structures/error_message_test.rb +28 -0
  225. data/test/data_structures/set_test.rb +86 -0
  226. data/test/data_structures/sorting_test.rb +126 -0
  227. data/test/data_structures/standard_column_test.rb +24 -0
  228. data/test/data_structures/virtual_column_test.rb +23 -0
  229. data/test/extensions/active_record_test.rb +45 -0
  230. data/test/extensions/array_test.rb +12 -0
  231. data/test/helpers/form_column_helpers_test.rb +31 -0
  232. data/test/helpers/list_column_helpers_test.rb +31 -0
  233. data/test/helpers/pagination_helpers_test.rb +55 -0
  234. data/test/misc/active_record_permissions_test.rb +154 -0
  235. data/test/misc/attribute_params_test.rb +110 -0
  236. data/test/misc/configurable_test.rb +96 -0
  237. data/test/misc/constraints_test.rb +193 -0
  238. data/test/misc/finder_test.rb +93 -0
  239. data/test/misc/lang_test.rb +12 -0
  240. data/test/mock_app/.gitignore +2 -0
  241. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  242. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  243. data/test/mock_app/config/boot.rb +110 -0
  244. data/test/mock_app/config/database.yml +16 -0
  245. data/test/mock_app/config/environment.rb +43 -0
  246. data/test/mock_app/config/environments/development.rb +17 -0
  247. data/test/mock_app/config/environments/production.rb +28 -0
  248. data/test/mock_app/config/environments/test.rb +28 -0
  249. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  250. data/test/mock_app/config/initializers/inflections.rb +10 -0
  251. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  252. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  253. data/test/mock_app/config/initializers/session_store.rb +15 -0
  254. data/test/mock_app/config/locales/en.yml +5 -0
  255. data/test/mock_app/config/routes.rb +43 -0
  256. data/test/mock_app/db/test.sqlite3 +1 -0
  257. data/test/mock_app/public/blank.html +33 -0
  258. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  259. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  260. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  261. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  262. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  263. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  264. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  265. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  266. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  267. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  268. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  269. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  270. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  271. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  272. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  273. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  274. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +839 -0
  275. data/test/model_stub.rb +55 -0
  276. data/test/run_all.rb +8 -0
  277. data/test/test_helper.rb +39 -0
  278. data/uninstall.rb +13 -0
  279. metadata +492 -0
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+ #require 'test/model_stub'
3
+
4
+ class ActiveRecordTest < Test::Unit::TestCase
5
+ def setup
6
+ @record = ModelStub.new
7
+ end
8
+
9
+ def test_to_label
10
+ # without anything defined, it'll use the to_s method (e.g. #<ModelStub:0xb7379300>)
11
+ assert_match /^#<[a-z]+:0x[0-9a-f]+>$/i, @record.to_label
12
+
13
+ class << @record
14
+ def to_s
15
+ 'to_s'
16
+ end
17
+ end
18
+
19
+ assert_equal 'to_s', @record.to_label
20
+
21
+ class << @record
22
+ def title
23
+ 'title'
24
+ end
25
+ end
26
+
27
+ assert_equal 'title', @record.to_label
28
+
29
+ class << @record
30
+ def label
31
+ 'label'
32
+ end
33
+ end
34
+
35
+ assert_equal 'label', @record.to_label
36
+
37
+ class << @record
38
+ def name
39
+ 'name'
40
+ end
41
+ end
42
+
43
+ assert_equal 'name', @record.to_label
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class ArrayTest < Test::Unit::TestCase
4
+ def test_after
5
+ @sequence = ['a', 'b', 'c']
6
+
7
+ assert_equal 'b', @sequence.after('a')
8
+ assert_equal 'c', @sequence.after('b')
9
+ assert_equal 'a', @sequence.after('c')
10
+ assert_equal nil, @sequence.after('d')
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class FormColumnHelpersTest < ActionView::TestCase
4
+ include ActiveScaffold::Helpers::FormColumnHelpers
5
+
6
+ def setup
7
+ @column = ActiveScaffold::DataStructures::Column.new(:a, ModelStub)
8
+ @record = stub(:a => nil)
9
+ end
10
+
11
+ def test_choices_for_select_form_ui_for_simple_column
12
+ @column.options[:options] = [:value_1, :value_2, :value_3]
13
+ assert_dom_equal '<select name="record[a]" id="record_a"><option value="value_1">Value 1</option><option value="value_2">Value 2</option><option value="value_3">Value 3</option></select>', active_scaffold_input_select(@column, {})
14
+
15
+ @column.options[:options] = %w(value_1 value_2 value_3)
16
+ assert_dom_equal '<select name="record[a]" id="record_a"><option value="value_1">value_1</option><option value="value_2">value_2</option><option value="value_3">value_3</option></select>', active_scaffold_input_select(@column, {})
17
+
18
+ @column.options[:options] = [%w(text_1 value_1), %w(text_2 value_2), %w(text_3 value_3)]
19
+ assert_dom_equal '<select name="record[a]" id="record_a"><option value="value_1">text_1</option><option value="value_2">text_2</option><option value="value_3">text_3</option></select>', active_scaffold_input_select(@column, {})
20
+
21
+ @column.options[:options] = [[:text_1, :value_1], [:text_2, :value_2], [:text_3, :value_3]]
22
+ assert_dom_equal '<select name="record[a]" id="record_a"><option value="value_1">Text 1</option><option value="value_2">Text 2</option><option value="value_3">Text 3</option></select>', active_scaffold_input_select(@column, {})
23
+ end
24
+
25
+ def test_options_for_select_form_ui_for_simple_column
26
+ @column.options = {:include_blank => 'None', :selected => 'value_2', :disabled => %w(value_1 value_3)}
27
+ @column.options[:options] = %w(value_1 value_2 value_3)
28
+ @column.options[:html_options] = {:class => 'big'}
29
+ assert_dom_equal '<select name="record[a]" class="big" id="record_a"><option value="">None</option><option disabled="disabled" value="value_1">value_1</option><option selected="selected" value="value_2">value_2</option><option disabled="disabled" value="value_3">value_3</option></select>', active_scaffold_input_select(@column, {})
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class ListColumnHelpersTest < ActionView::TestCase
4
+ include ActiveScaffold::Helpers::ListColumnHelpers
5
+ include ActiveScaffold::Helpers::ViewHelpers
6
+
7
+ def setup
8
+ @column = ActiveScaffold::DataStructures::Column.new(:a, ModelStub)
9
+ @record = stub(:a => 'value_2')
10
+ @config = stub(:list => stub(:empty_field_text => '-'))
11
+ end
12
+
13
+ def test_options_for_select_list_ui_for_simple_column
14
+ @column.options[:options] = [:value_1, :value_2, :value_3]
15
+ assert_equal 'Value 2', active_scaffold_column_select(@column, @record)
16
+
17
+ @column.options[:options] = %w(value_1 value_2 value_3)
18
+ assert_equal 'value_2', active_scaffold_column_select(@column, @record)
19
+
20
+ @column.options[:options] = [%w(text_1 value_1), %w(text_2 value_2), %w(text_3 value_3)]
21
+ assert_equal 'text_2', active_scaffold_column_select(@column, @record)
22
+
23
+ @column.options[:options] = [[:text_1, :value_1], [:text_2, :value_2], [:text_3, :value_3]]
24
+ assert_equal 'Text 2', active_scaffold_column_select(@column, @record)
25
+ end
26
+
27
+ private
28
+ def active_scaffold_config
29
+ @config
30
+ end
31
+ end
@@ -0,0 +1,55 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class PaginationHelpersTest < Test::Unit::TestCase
4
+ include ActiveScaffold::Helpers::PaginationHelpers
5
+
6
+ def test_links
7
+ self.stubs(:pagination_ajax_link).returns('l')
8
+
9
+ assert_equal '1', links(1, 1)
10
+ assert_equal '1 l', links(1, 2)
11
+ assert_equal '1 l l', links(1, 3)
12
+ assert_equal '1 l l l', links(1, 4)
13
+ assert_equal '1 l l .. l', links(1, 5)
14
+ assert_equal '1 l l .. l', links(1, 6)
15
+
16
+ assert_equal 'l 2 l l .. l', links(2, 10)
17
+ assert_equal 'l l 3 l l .. l', links(3, 10)
18
+ assert_equal 'l l l 4 l l .. l', links(4, 10)
19
+ assert_equal 'l .. l l 5 l l .. l', links(5, 10)
20
+ assert_equal 'l .. l l 6 l l .. l', links(6, 10)
21
+
22
+ assert_equal '1 l l l l', links(1, 5, 3)
23
+ assert_equal '1 l l l .. l', links(1, 6, 3)
24
+ assert_equal 'l l l l 5 l l l .. l', links(5, 10, 3)
25
+ assert_equal 'l .. l l l 6 l l l l', links(6, 10, 3)
26
+ assert_equal 'l .. l l l 6 l l l .. l', links(6, 20, 3)
27
+ end
28
+
29
+ def test_links_with_infinite_pagination
30
+ self.stubs(:pagination_ajax_link).returns('l')
31
+
32
+ assert_equal '1 l l .. l .. l', links(1, nil, 2, true)
33
+ assert_equal 'l 2 l l .. l .. l', links(2, nil, 2, true)
34
+ assert_equal 'l l 3 l l .. l .. l', links(3, nil, 2, true)
35
+ assert_equal 'l l l 4 l l .. l .. l', links(4, nil, 2, true)
36
+ assert_equal 'l .. l l 5 l l .. l .. l', links(5, nil, 2, true)
37
+
38
+ assert_equal 'l .. l l 20 l l .. l .. l', links(20, nil, 2, true)
39
+ assert_equal 'l .. l l 21 l l .. l .. l', links(21, nil, 2, true)
40
+ assert_equal 'l l .. l l 22 l l .. l .. l', links(22, nil, 2, true)
41
+ assert_equal 'l .. l .. l l 23 l l .. l .. l', links(23, nil, 2, true)
42
+
43
+ assert_equal 'l .. l .. l l 100 l l .. l .. l', links(100, nil, 2, true)
44
+ assert_equal 'l .. l .. l l 101 l l .. l .. l', links(101, nil, 2, true)
45
+ assert_equal 'l l .. l .. l l 102 l l .. l .. l', links(102, nil, 2, true)
46
+ assert_equal 'l .. l .. l .. l l 103 l l .. l .. l', links(103, nil, 2, true)
47
+ end
48
+
49
+ private
50
+ def links(current, last_page, window_size = 2, infinite = false)
51
+ paginator = stub(:last => last_page = stub(:number => last_page), :infinite? => infinite)
52
+ current_page = stub(:number => current, :pager => paginator)
53
+ pagination_ajax_links(current_page, {}, window_size)
54
+ end
55
+ end
@@ -0,0 +1,154 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class PermissionModel < ActiveRecord::Base
4
+ def self.columns; [] end
5
+
6
+ def authorized_for_read?; true; end
7
+ def authorized_for_update?; false; end
8
+ #def authorized_for_create?; end
9
+
10
+ def a1_authorized?; true; end
11
+ def a2_authorized?; false; end
12
+ #def a3_authorized?; end
13
+
14
+ def b1_authorized?; true; end
15
+ def b2_authorized?; false; end
16
+ #def b3_authorized?; end
17
+
18
+ def c1_authorized?; true; end
19
+ def c2_authorized?; false; end
20
+ #def c3_authorized?; end
21
+
22
+ def a3_authorized_for_create?; true; end
23
+ def b3_authorized_for_create?; false; end
24
+ #def c3_authorized_for_create?; end
25
+ def a2_authorized_for_create?; true; end
26
+ def b2_authorized_for_create?; false; end
27
+ #def c2_authorized_for_create?; end
28
+ def a1_authorized_for_create?; true; end
29
+ def b1_authorized_for_create?; false; end
30
+ #def c1_authorized_for_create?; end
31
+
32
+ def a3_authorized_for_read?; true; end
33
+ def b3_authorized_for_read?; false; end
34
+ #def c3_authorized_for_read?; end
35
+ def a2_authorized_for_read?; true; end
36
+ def b2_authorized_for_read?; false; end
37
+ #def c2_authorized_for_read?; end
38
+ def a1_authorized_for_read?; true; end
39
+ def b1_authorized_for_read?; false; end
40
+ #def c1_authorized_for_read?; end
41
+
42
+ def a3_authorized_for_update?; true; end
43
+ def b3_authorized_for_update?; false; end
44
+ #def c3_authorized_for_update?; end
45
+ def a2_authorized_for_update?; true; end
46
+ def b2_authorized_for_update?; false; end
47
+ #def c2_authorized_for_update?; end
48
+ def a1_authorized_for_update?; true; end
49
+ def b1_authorized_for_update?; false; end
50
+ #def c1_authorized_for_update?; end
51
+ end
52
+
53
+ class ActiveRecordPermissionsTest < Test::Unit::TestCase
54
+ def setup
55
+ @model = PermissionModel.new
56
+ end
57
+
58
+ # Combinations Legend:
59
+ # columns are: crud_type method, column method, crud_type/column method
60
+ # symbols are: is (a)bsent, returns (f)alse, returns (t)rue, or n/a (_)
61
+ def test_method_combinations_with_default_true
62
+ ActiveRecordPermissions.default_permission = true
63
+
64
+ pass(@model.authorized_for?(:column => :a3), '_a_')
65
+ fail(@model.authorized_for?(:column => :a2), '_f_')
66
+ pass(@model.authorized_for?(:column => :a1), '_t_')
67
+
68
+ pass(@model.authorized_for?(:crud_type => :create), 'a__')
69
+ fail(@model.authorized_for?(:crud_type => :update), 'f__')
70
+ pass(@model.authorized_for?(:crud_type => :read), 't__')
71
+
72
+ pass(@model.authorized_for?(:crud_type => :create, :column => :c3), 'aaa')
73
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b3), 'aaf')
74
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a3), 'aat')
75
+ fail(@model.authorized_for?(:crud_type => :create, :column => :c2), 'afa')
76
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b2), 'aff')
77
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a2), 'aft')
78
+ pass(@model.authorized_for?(:crud_type => :create, :column => :c1), 'ata')
79
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b1), 'atf')
80
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a1), 'att')
81
+
82
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c3), 'faa')
83
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b3), 'faf')
84
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a3), 'fat')
85
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c2), 'ffa')
86
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b2), 'fff')
87
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a2), 'fft')
88
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c1), 'fta')
89
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b1), 'ftf')
90
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a1), 'ftt')
91
+
92
+ pass(@model.authorized_for?(:crud_type => :read, :column => :c3), 'taa')
93
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b3), 'taf')
94
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a3), 'tat')
95
+ fail(@model.authorized_for?(:crud_type => :read, :column => :c2), 'tfa')
96
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b2), 'tff')
97
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a2), 'tft')
98
+ pass(@model.authorized_for?(:crud_type => :read, :column => :c1), 'tta')
99
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b1), 'ttf')
100
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a1), 'ttt')
101
+ end
102
+
103
+ def test_method_combinations_with_default_false
104
+ ActiveRecordPermissions.default_permission = false
105
+
106
+ fail(@model.authorized_for?(:column => :a3), '_a_')
107
+ fail(@model.authorized_for?(:column => :a2), '_f_')
108
+ pass(@model.authorized_for?(:column => :a1), '_t_')
109
+
110
+ fail(@model.authorized_for?(:crud_type => :create), 'a__')
111
+ fail(@model.authorized_for?(:crud_type => :update), 'f__')
112
+ pass(@model.authorized_for?(:crud_type => :read), 't__')
113
+
114
+ fail(@model.authorized_for?(:crud_type => :create, :column => :c3), 'aaa')
115
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b3), 'aaf')
116
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a3), 'aat')
117
+ fail(@model.authorized_for?(:crud_type => :create, :column => :c2), 'afa')
118
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b2), 'aff')
119
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a2), 'aft')
120
+ pass(@model.authorized_for?(:crud_type => :create, :column => :c1), 'ata')
121
+ fail(@model.authorized_for?(:crud_type => :create, :column => :b1), 'atf')
122
+ pass(@model.authorized_for?(:crud_type => :create, :column => :a1), 'att')
123
+
124
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c3), 'faa')
125
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b3), 'faf')
126
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a3), 'fat')
127
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c2), 'ffa')
128
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b2), 'fff')
129
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a2), 'fft')
130
+ fail(@model.authorized_for?(:crud_type => :update, :column => :c1), 'fta')
131
+ fail(@model.authorized_for?(:crud_type => :update, :column => :b1), 'ftf')
132
+ pass(@model.authorized_for?(:crud_type => :update, :column => :a1), 'ftt')
133
+
134
+ pass(@model.authorized_for?(:crud_type => :read, :column => :c3), 'taa')
135
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b3), 'taf')
136
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a3), 'tat')
137
+ fail(@model.authorized_for?(:crud_type => :read, :column => :c2), 'tfa')
138
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b2), 'tff')
139
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a2), 'tft')
140
+ pass(@model.authorized_for?(:crud_type => :read, :column => :c1), 'tta')
141
+ fail(@model.authorized_for?(:crud_type => :read, :column => :b1), 'ttf')
142
+ pass(@model.authorized_for?(:crud_type => :read, :column => :a1), 'ttt')
143
+ end
144
+
145
+ private
146
+
147
+ def pass(value, message = nil)
148
+ assert value, "#{message} should pass"
149
+ end
150
+
151
+ def fail(value, message = nil)
152
+ assert !value, "#{message} should fail"
153
+ end
154
+ end
@@ -0,0 +1,110 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class NumberModel < ActiveRecord::Base
4
+ abstract_class = true
5
+ def self.columns
6
+ @columns ||= [ActiveRecord::ConnectionAdapters::Column.new('number', '', 'double(10,2)')]
7
+ end
8
+ end
9
+
10
+ class AttributeParamsTest < Test::Unit::TestCase
11
+ include ActiveScaffold::AttributeParams
12
+
13
+ def setup
14
+ I18n.backend.store_translations :en, :number => {:format => {
15
+ :delimiter => ',',
16
+ :separator => '.'
17
+ }}
18
+ I18n.backend.store_translations :es, :number => {:format => {
19
+ :delimiter => '.',
20
+ :separator => ','
21
+ }}
22
+
23
+ @config = config_for('number_model')
24
+ class << @config.list.columns
25
+ include ActiveScaffold::DataStructures::ActionColumns::AfterConfiguration
26
+ end
27
+ @config.list.columns.set_columns @config.columns
28
+ end
29
+
30
+ def teardown
31
+ I18n.locale = :en
32
+ end
33
+
34
+ def test_english_format_with_decimal_separator_using_english_language
35
+ I18n.locale = :en
36
+ assert_equal 0.1, convert_number('.1')
37
+ assert_equal 0.1, convert_number('.100')
38
+ assert_equal 0.1, convert_number('0.1')
39
+ assert_equal 0.345, convert_number('0.345')
40
+ assert_equal 0.345, convert_number('+0.345')
41
+ assert_equal -0.345, convert_number('-0.345')
42
+ assert_equal 9.345, convert_number('9.345')
43
+ assert_equal 9.1, convert_number('9.1')
44
+ assert_equal 90.1, convert_number('90.1')
45
+ end
46
+
47
+ def test_english_format_with_thousand_delimiter_using_english_language
48
+ I18n.locale = :en
49
+ assert_equal 1000, convert_number('1,000')
50
+ assert_equal 1000, convert_number('+1,000')
51
+ assert_equal -1000, convert_number('-1,000')
52
+ assert_equal 1000000, convert_number('1,000,000')
53
+ end
54
+
55
+ def test_english_format_with_separator_and_delimiter_using_english_language
56
+ I18n.locale = :en
57
+ assert_equal 1234.1, convert_number('1,234.1')
58
+ assert_equal 1234.1, convert_number('1,234.100')
59
+ assert_equal 1234.345, convert_number('+1,234.345')
60
+ assert_equal -1234.345, convert_number('-1,234.345')
61
+ assert_equal 1234000.1, convert_number('1,234,000.100')
62
+ end
63
+
64
+ def test_english_format_with_decimal_separator_using_spanish_language
65
+ I18n.locale = :es
66
+ assert_equal 0.1, convert_number('.1')
67
+ assert_equal 0.1, convert_number('0.1')
68
+ assert_equal 0.12, convert_number('+0.12')
69
+ assert_equal -0.12, convert_number('-0.12')
70
+ assert_equal 9.1, convert_number('9.1')
71
+ assert_equal 90.1, convert_number('90.1')
72
+ end
73
+
74
+ def test_spanish_format_with_decimal_separator_using_spanish_language
75
+ I18n.locale = :es
76
+ assert_equal 0.1, convert_number(',1')
77
+ assert_equal 0.1, convert_number(',100')
78
+ assert_equal 0.1, convert_number('0,1')
79
+ assert_equal 0.345, convert_number('0,345')
80
+ assert_equal 0.345, convert_number('+0,345')
81
+ assert_equal -0.345, convert_number('-0,345')
82
+ assert_equal 9.1, convert_number('9,1')
83
+ assert_equal 90.1, convert_number('90,1')
84
+ assert_equal 9.1, convert_number('9,100')
85
+ end
86
+
87
+ def test_spanish_format_with_thousand_delimiter_using_spanish_language
88
+ I18n.locale = :es
89
+ assert_equal 1000, convert_number('1.000')
90
+ assert_equal 1000, convert_number('+1.000')
91
+ assert_equal -1000, convert_number('-1.000')
92
+ assert_equal 1000000, convert_number('1.000.000')
93
+ end
94
+
95
+ def test_spanish_format_with_separator_and_decimal_using_spanish_language
96
+ I18n.locale = :es
97
+ assert_equal 1230.1, convert_number('1.230,1')
98
+ assert_equal 1230.1, convert_number('1.230,100')
99
+ assert_equal 1234.345, convert_number('+1.234,345')
100
+ assert_equal -1234.345, convert_number('-1.234,345')
101
+ assert_equal 1234000.1, convert_number('1.234.000,100')
102
+ end
103
+
104
+ private
105
+ def convert_number(value)
106
+ record = NumberModel.new
107
+ update_record_from_params(record, @config.list.columns, HashWithIndifferentAccess.new({:number => value}))
108
+ record.number
109
+ end
110
+ end
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
2
+
3
+ class ConfigurableClass
4
+ FOO = 'bar'
5
+ def foo; FOO end
6
+ def self.foo; FOO end
7
+ end
8
+
9
+
10
+ class ConfigurableTest < Test::Unit::TestCase
11
+ ##
12
+ ## constants and methods for tests to check against
13
+ ##
14
+ def hello; 'world' end
15
+ HELLO = 'world'
16
+
17
+ def test_instance_configuration
18
+ ConfigurableClass.send :include, ActiveScaffold::Configurable
19
+
20
+ configurable_class = ConfigurableClass.new
21
+
22
+ ##
23
+ ## sanity checks
24
+ ##
25
+ # make sure the configure method is available
26
+ assert ConfigurableClass.respond_to?(:configure)
27
+ # make sure real functions still work
28
+ assert_equal 'bar', configurable_class.foo
29
+ # make sure other functions still don't work
30
+ assert_raise NoMethodError do
31
+ configurable_class.i_do_not_exist
32
+ end
33
+
34
+ ##
35
+ ## test normal block behaviors
36
+ ##
37
+ # functions
38
+ assert_equal hello, configurable_class.configure {hello}
39
+ # variables
40
+ assert_equal configurable_class, configurable_class.configure {configurable_class}
41
+ # constants
42
+ assert_equal ConfigurableTest::HELLO, configurable_class.configure {ConfigurableTest::HELLO}
43
+
44
+ ##
45
+ ## test extra "localized" block behavior
46
+ ##
47
+ # functions
48
+ assert_equal configurable_class.foo, configurable_class.configure {foo}
49
+ # constants - not working
50
+ # assert_equal configurable_class.FOO, configurable_class.configure {FOO}
51
+
52
+ end
53
+
54
+ def test_class_configuration
55
+ ConfigurableClass.send :extend, ActiveScaffold::Configurable
56
+
57
+ ##
58
+ ## sanity checks
59
+ ##
60
+ # make sure the configure method is available
61
+ assert ConfigurableClass.respond_to?(:configure)
62
+ # make sure real functions still work
63
+ assert_equal 'bar', ConfigurableClass.foo
64
+ # make sure other functions still don't work
65
+ assert_raise NoMethodError do
66
+ ConfigurableClass.i_do_not_exist
67
+ end
68
+
69
+ ##
70
+ ## test normal block behaviors
71
+ ##
72
+ # functions
73
+ assert_equal hello, ConfigurableClass.configure {hello}
74
+ # variables
75
+ assert_equal ConfigurableClass, ConfigurableClass.configure {ConfigurableClass}
76
+ # constants
77
+ assert_equal ConfigurableTest::HELLO, ConfigurableClass.configure {ConfigurableTest::HELLO}
78
+
79
+ ##
80
+ ## test extra "localized" block behavior
81
+ ##
82
+ # functions
83
+ assert_equal ConfigurableClass.foo, ConfigurableClass.configure {foo}
84
+ # constants - not working
85
+ # assert_equal ConfigurableClass.FOO, ConfigurableClass.configure {FOO}
86
+ end
87
+
88
+ def test_arity
89
+ ConfigurableClass.send :extend, ActiveScaffold::Configurable
90
+
91
+ # this is the main style
92
+ assert_equal 'foo', ConfigurableClass.configure {'foo'}
93
+ # but we want to let people accept the configurable class as the first argument, too
94
+ assert_equal 'bar', ConfigurableClass.configure {|a| a.foo}
95
+ end
96
+ end