active_scaffold_san 3.0.18

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 (284) 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 +69 -0
  8. data/Rakefile +53 -0
  9. data/active_scaffold_vho.gemspec +388 -0
  10. data/frontends/default/images/add.gif +0 -0
  11. data/frontends/default/images/arrow_down.gif +0 -0
  12. data/frontends/default/images/arrow_up.gif +0 -0
  13. data/frontends/default/images/close.gif +0 -0
  14. data/frontends/default/images/config.png +0 -0
  15. data/frontends/default/images/cross.png +0 -0
  16. data/frontends/default/images/gears.png +0 -0
  17. data/frontends/default/images/indicator-small.gif +0 -0
  18. data/frontends/default/images/indicator.gif +0 -0
  19. data/frontends/default/images/magnifier.png +0 -0
  20. data/frontends/default/javascripts/jquery/active_scaffold.js +1004 -0
  21. data/frontends/default/javascripts/jquery/jquery.editinplace.js +743 -0
  22. data/frontends/default/javascripts/prototype/active_scaffold.js +1003 -0
  23. data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
  24. data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
  25. data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
  26. data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  27. data/frontends/default/stylesheets/stylesheet.css +973 -0
  28. data/frontends/default/views/_action_group.html.erb +20 -0
  29. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  30. data/frontends/default/views/_base_form.html.erb +51 -0
  31. data/frontends/default/views/_create_form.html.erb +8 -0
  32. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  33. data/frontends/default/views/_field_search.html.erb +32 -0
  34. data/frontends/default/views/_form.html.erb +24 -0
  35. data/frontends/default/views/_form_association.html.erb +19 -0
  36. data/frontends/default/views/_form_association_footer.html.erb +40 -0
  37. data/frontends/default/views/_form_attribute.html.erb +15 -0
  38. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  39. data/frontends/default/views/_form_messages.html.erb +5 -0
  40. data/frontends/default/views/_horizontal_subform.html.erb +29 -0
  41. data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
  42. data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
  43. data/frontends/default/views/_human_conditions.html.erb +1 -0
  44. data/frontends/default/views/_list.html.erb +18 -0
  45. data/frontends/default/views/_list_actions.html.erb +15 -0
  46. data/frontends/default/views/_list_calculations.html.erb +16 -0
  47. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  48. data/frontends/default/views/_list_header.html.erb +10 -0
  49. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  50. data/frontends/default/views/_list_messages.html.erb +32 -0
  51. data/frontends/default/views/_list_pagination.html.erb +11 -0
  52. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  53. data/frontends/default/views/_list_record.html.erb +14 -0
  54. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  55. data/frontends/default/views/_list_with_header.html.erb +32 -0
  56. data/frontends/default/views/_messages.html.erb +10 -0
  57. data/frontends/default/views/_render_field.js.rjs +10 -0
  58. data/frontends/default/views/_row.html.erb +12 -0
  59. data/frontends/default/views/_search.html.erb +34 -0
  60. data/frontends/default/views/_search_attribute.html.erb +10 -0
  61. data/frontends/default/views/_show.html.erb +8 -0
  62. data/frontends/default/views/_show_columns.html.erb +15 -0
  63. data/frontends/default/views/_update_actions.html.erb +9 -0
  64. data/frontends/default/views/_update_form.html.erb +6 -0
  65. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  66. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  67. data/frontends/default/views/action_confirmation.html.erb +13 -0
  68. data/frontends/default/views/add_existing.js.rjs +17 -0
  69. data/frontends/default/views/add_existing_form.html.erb +5 -0
  70. data/frontends/default/views/create.html.erb +5 -0
  71. data/frontends/default/views/delete.html.erb +13 -0
  72. data/frontends/default/views/destroy.js.rjs +23 -0
  73. data/frontends/default/views/edit_associated.js.rjs +11 -0
  74. data/frontends/default/views/field_search.html.erb +5 -0
  75. data/frontends/default/views/form_messages.js.rjs +1 -0
  76. data/frontends/default/views/list.html.erb +1 -0
  77. data/frontends/default/views/list.js.rjs +1 -0
  78. data/frontends/default/views/on_action_update.js.rjs +8 -0
  79. data/frontends/default/views/on_create.js.rjs +41 -0
  80. data/frontends/default/views/on_mark_all.js.rjs +4 -0
  81. data/frontends/default/views/on_update.js.rjs +28 -0
  82. data/frontends/default/views/search.html.erb +5 -0
  83. data/frontends/default/views/show.html.erb +5 -0
  84. data/frontends/default/views/update.html.erb +8 -0
  85. data/frontends/default/views/update_column.js.rjs +13 -0
  86. data/frontends/default/views/update_row.js.rjs +1 -0
  87. data/init.rb +8 -0
  88. data/lib/active_scaffold.rb +360 -0
  89. data/lib/active_scaffold/actions/common_search.rb +22 -0
  90. data/lib/active_scaffold/actions/core.rb +180 -0
  91. data/lib/active_scaffold/actions/create.rb +149 -0
  92. data/lib/active_scaffold/actions/delete.rb +75 -0
  93. data/lib/active_scaffold/actions/field_search.rb +82 -0
  94. data/lib/active_scaffold/actions/list.rb +184 -0
  95. data/lib/active_scaffold/actions/mark.rb +63 -0
  96. data/lib/active_scaffold/actions/nested.rb +250 -0
  97. data/lib/active_scaffold/actions/search.rb +47 -0
  98. data/lib/active_scaffold/actions/show.rb +61 -0
  99. data/lib/active_scaffold/actions/subform.rb +27 -0
  100. data/lib/active_scaffold/actions/update.rb +151 -0
  101. data/lib/active_scaffold/active_record_permissions.rb +134 -0
  102. data/lib/active_scaffold/attribute_params.rb +211 -0
  103. data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
  104. data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +39 -0
  105. data/lib/active_scaffold/bridges/bridge.rb +59 -0
  106. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
  107. data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +83 -0
  108. data/lib/active_scaffold/bridges/cancan/bridge.rb +12 -0
  109. data/lib/active_scaffold/bridges/cancan/lib/cancan_bridge.rb +107 -0
  110. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +9 -0
  111. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +33 -0
  112. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +12 -0
  113. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +45 -0
  114. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
  115. data/lib/active_scaffold/bridges/date_picker/bridge.rb +24 -0
  116. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
  117. data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
  118. data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
  119. data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
  120. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
  121. data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
  122. data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
  123. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  124. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  125. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  126. data/lib/active_scaffold/bridges/paperclip/bridge.rb +12 -0
  127. data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
  128. data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
  129. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
  130. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
  131. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
  132. data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
  133. data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
  134. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
  135. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +61 -0
  136. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
  137. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
  138. data/lib/active_scaffold/config/base.rb +62 -0
  139. data/lib/active_scaffold/config/core.rb +220 -0
  140. data/lib/active_scaffold/config/create.rb +51 -0
  141. data/lib/active_scaffold/config/delete.rb +34 -0
  142. data/lib/active_scaffold/config/field_search.rb +75 -0
  143. data/lib/active_scaffold/config/form.rb +47 -0
  144. data/lib/active_scaffold/config/list.rb +174 -0
  145. data/lib/active_scaffold/config/mark.rb +22 -0
  146. data/lib/active_scaffold/config/nested.rb +44 -0
  147. data/lib/active_scaffold/config/search.rb +69 -0
  148. data/lib/active_scaffold/config/show.rb +35 -0
  149. data/lib/active_scaffold/config/subform.rb +35 -0
  150. data/lib/active_scaffold/config/update.rb +46 -0
  151. data/lib/active_scaffold/configurable.rb +29 -0
  152. data/lib/active_scaffold/constraints.rb +184 -0
  153. data/lib/active_scaffold/data_structures/action_columns.rb +137 -0
  154. data/lib/active_scaffold/data_structures/action_link.rb +175 -0
  155. data/lib/active_scaffold/data_structures/action_links.rb +185 -0
  156. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  157. data/lib/active_scaffold/data_structures/column.rb +355 -0
  158. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  159. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  160. data/lib/active_scaffold/data_structures/nested_info.rb +123 -0
  161. data/lib/active_scaffold/data_structures/set.rb +62 -0
  162. data/lib/active_scaffold/data_structures/sorting.rb +168 -0
  163. data/lib/active_scaffold/extensions/action_controller_rendering.rb +20 -0
  164. data/lib/active_scaffold/extensions/action_view_rendering.rb +123 -0
  165. data/lib/active_scaffold/extensions/action_view_resolver.rb +7 -0
  166. data/lib/active_scaffold/extensions/active_association_reflection.rb +13 -0
  167. data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
  168. data/lib/active_scaffold/extensions/array.rb +7 -0
  169. data/lib/active_scaffold/extensions/localize.rb +10 -0
  170. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
  171. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
  172. data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
  173. data/lib/active_scaffold/extensions/reverse_associations.rb +62 -0
  174. data/lib/active_scaffold/extensions/routing_mapper.rb +34 -0
  175. data/lib/active_scaffold/extensions/to_label.rb +8 -0
  176. data/lib/active_scaffold/extensions/unsaved_associated.rb +61 -0
  177. data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
  178. data/lib/active_scaffold/extensions/usa_state.rb +46 -0
  179. data/lib/active_scaffold/finder.rb +343 -0
  180. data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
  181. data/lib/active_scaffold/helpers/controller_helpers.rb +87 -0
  182. data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
  183. data/lib/active_scaffold/helpers/form_column_helpers.rb +350 -0
  184. data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
  185. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  186. data/lib/active_scaffold/helpers/list_column_helpers.rb +361 -0
  187. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  188. data/lib/active_scaffold/helpers/search_column_helpers.rb +249 -0
  189. data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
  190. data/lib/active_scaffold/helpers/view_helpers.rb +360 -0
  191. data/lib/active_scaffold/locale/de.rb +120 -0
  192. data/lib/active_scaffold/locale/en.rb +119 -0
  193. data/lib/active_scaffold/locale/es.yml +115 -0
  194. data/lib/active_scaffold/locale/fr.rb +122 -0
  195. data/lib/active_scaffold/locale/hu.yml +63 -0
  196. data/lib/active_scaffold/locale/ja.yml +64 -0
  197. data/lib/active_scaffold/locale/ru.yml +119 -0
  198. data/lib/active_scaffold/marked_model.rb +38 -0
  199. data/lib/active_scaffold/paginator.rb +136 -0
  200. data/lib/active_scaffold/responds_to_parent.rb +70 -0
  201. data/lib/active_scaffold/version.rb +9 -0
  202. data/lib/active_scaffold_assets.rb +45 -0
  203. data/lib/active_scaffold_env.rb +14 -0
  204. data/lib/active_scaffold_vho.rb +2 -0
  205. data/lib/generators/active_scaffold/USAGE +29 -0
  206. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  207. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  208. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
  209. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  210. data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
  211. data/lib/generators/active_scaffold_setup/USAGE +10 -0
  212. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +61 -0
  213. data/public/blank.html +33 -0
  214. data/shoulda_macros/macros.rb +136 -0
  215. data/test/bridges/bridge_test.rb +47 -0
  216. data/test/config/base_test.rb +15 -0
  217. data/test/config/create_test.rb +55 -0
  218. data/test/config/list_test.rb +74 -0
  219. data/test/config/show_test.rb +43 -0
  220. data/test/config/update_test.rb +17 -0
  221. data/test/const_mocker.rb +36 -0
  222. data/test/data_structures/action_columns_test.rb +113 -0
  223. data/test/data_structures/action_link_test.rb +78 -0
  224. data/test/data_structures/action_links_test.rb +78 -0
  225. data/test/data_structures/actions_test.rb +25 -0
  226. data/test/data_structures/association_column_test.rb +42 -0
  227. data/test/data_structures/column_test.rb +185 -0
  228. data/test/data_structures/columns_test.rb +69 -0
  229. data/test/data_structures/error_message_test.rb +28 -0
  230. data/test/data_structures/set_test.rb +86 -0
  231. data/test/data_structures/sorting_test.rb +126 -0
  232. data/test/data_structures/standard_column_test.rb +24 -0
  233. data/test/data_structures/virtual_column_test.rb +23 -0
  234. data/test/extensions/active_record_test.rb +45 -0
  235. data/test/extensions/array_test.rb +12 -0
  236. data/test/helpers/form_column_helpers_test.rb +31 -0
  237. data/test/helpers/list_column_helpers_test.rb +31 -0
  238. data/test/helpers/pagination_helpers_test.rb +55 -0
  239. data/test/misc/active_record_permissions_test.rb +154 -0
  240. data/test/misc/attribute_params_test.rb +110 -0
  241. data/test/misc/configurable_test.rb +96 -0
  242. data/test/misc/constraints_test.rb +193 -0
  243. data/test/misc/finder_test.rb +93 -0
  244. data/test/misc/lang_test.rb +12 -0
  245. data/test/mock_app/.gitignore +2 -0
  246. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  247. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  248. data/test/mock_app/config/boot.rb +110 -0
  249. data/test/mock_app/config/database.yml +16 -0
  250. data/test/mock_app/config/environment.rb +43 -0
  251. data/test/mock_app/config/environments/development.rb +17 -0
  252. data/test/mock_app/config/environments/production.rb +28 -0
  253. data/test/mock_app/config/environments/test.rb +28 -0
  254. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  255. data/test/mock_app/config/initializers/inflections.rb +10 -0
  256. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  257. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  258. data/test/mock_app/config/initializers/session_store.rb +15 -0
  259. data/test/mock_app/config/locales/en.yml +5 -0
  260. data/test/mock_app/config/routes.rb +43 -0
  261. data/test/mock_app/db/test.sqlite3 +1 -0
  262. data/test/mock_app/public/blank.html +33 -0
  263. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  264. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  265. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  266. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  267. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  268. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  269. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  270. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  271. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  272. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  273. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  274. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  275. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  276. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  277. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  278. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  279. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +842 -0
  280. data/test/model_stub.rb +55 -0
  281. data/test/run_all.rb +8 -0
  282. data/test/test_helper.rb +39 -0
  283. data/uninstall.rb +13 -0
  284. metadata +497 -0
@@ -0,0 +1,9 @@
1
+ module ActiveScaffold
2
+ module Version
3
+ MAJOR = 3
4
+ MINOR = 0
5
+ PATCH = 18
6
+
7
+ STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end
@@ -0,0 +1,45 @@
1
+ class ActiveScaffoldAssets
2
+
3
+ def self.copy_to_public(from, options = {})
4
+ unless defined?(ACTIVE_SCAFFOLD_INSTALL_ASSETS) && ACTIVE_SCAFFOLD_INSTALL_ASSETS == false
5
+ copy_files("/public", "/public", from)
6
+ available_frontends = Dir[File.join(from, 'frontends', '*')].collect { |d| File.basename d }
7
+ [:stylesheets, :javascripts, :images].each do |asset_type|
8
+ copy_asset_type(from, available_frontends, asset_type, options)
9
+ end
10
+ end
11
+ end
12
+
13
+ protected
14
+
15
+ def self.copy_asset_type(from, available_frontends, asset_type, options = {})
16
+ path = "/public/#{asset_type}/active_scaffold"
17
+ copy_files(path, path, from)
18
+
19
+ File.open(File.join(Rails.root, path, 'DO_NOT_EDIT'), 'w') do |f|
20
+ f.puts "Any changes made to files in sub-folders will be lost."
21
+ f.puts "See http://activescaffold.com/tutorials/faq#custom-css."
22
+ end
23
+
24
+ available_frontends.each do |frontend|
25
+ if asset_type == :javascripts
26
+ file_mask = '*.js'
27
+ source = "/frontends/#{frontend}/#{asset_type}/#{ActiveScaffold.js_framework}"
28
+ else
29
+ file_mask = '*.*'
30
+ source = "/frontends/#{frontend}/#{asset_type}"
31
+ end
32
+ destination = "/public/#{asset_type}/active_scaffold/#{frontend}"
33
+ copy_files(source, destination, from, file_mask, options)
34
+ end
35
+ end
36
+
37
+ def self.copy_files(source_path, destination_path, directory, file_mask = '*.*', options = {})
38
+ source, destination = File.join(directory, source_path), File.join(Rails.root, destination_path)
39
+ FileUtils.mkdir_p(destination) unless File.exist?(destination)
40
+ Dir.glob('*.so')
41
+
42
+ FileUtils.rm Dir.glob("#{destination}/*") if options[:clean_up_destination]
43
+ FileUtils.cp_r(Dir.glob("#{source}/#{file_mask}"), destination)
44
+ end
45
+ end
@@ -0,0 +1,14 @@
1
+ # TODO: clean up extensions. some could be organized for autoloading, and others could be removed entirely.
2
+ Dir["#{File.dirname __FILE__}/active_scaffold/extensions/*.rb"].each { |file| require file }
3
+
4
+ ActionController::Base.send(:include, ActiveScaffold)
5
+ ActionController::Base.send(:include, RespondsToParent)
6
+ ActionController::Base.send(:include, ActiveScaffold::Helpers::ControllerHelpers)
7
+ ActionView::Base.send(:include, ActiveScaffold::Helpers::ViewHelpers)
8
+
9
+ ActionController::Base.class_eval {include ActiveRecordPermissions::ModelUserAccess::Controller}
10
+ ActiveRecord::Base.class_eval {include ActiveRecordPermissions::ModelUserAccess::Model}
11
+ ActiveRecord::Base.class_eval {include ActiveRecordPermissions::Permissions}
12
+
13
+ I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'active_scaffold', 'locale', '*.{rb,yml}')]
14
+ #ActiveScaffold.js_framework = :jquery
@@ -0,0 +1,2 @@
1
+ ACTIVE_SCAFFOLD_GEM = true
2
+ require 'active_scaffold'
@@ -0,0 +1,29 @@
1
+ Description:
2
+ Scaffolds an entire resource, from model and migration to controller,
3
+ along with a full test suite and configured to use active_scaffold.
4
+ The resource is ready to use as a starting point for your RESTful,
5
+ resource-oriented application.
6
+
7
+ Pass the name of the model (in singular form), either CamelCased or
8
+ under_scored, as the first argument, and an optional list of attribute
9
+ pairs.
10
+
11
+ Attribute pairs are field:type arguments specifying the
12
+ model's attributes. Timestamps are added by default, so you don't have to
13
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
14
+
15
+ You don't have to think up every attribute up front, but it helps to
16
+ sketch out a few so you can start working with the resource immediately.
17
+
18
+ For example, 'active_scaffold post title:string body:text published:boolean'
19
+ gives you a model with those three attributes, a controller configured to use active_scaffold,
20
+ as well as a resources :posts with additional active_scaffold routes
21
+ declaration in config/routes.rb.
22
+
23
+ If you want to remove all the generated files, run
24
+ 'rails destroy active_scaffold ModelName'.
25
+
26
+ Examples:
27
+ `rails generate active_scaffold post`
28
+ `rails generate active_scaffold post title:string body:text published:boolean`
29
+ `rails generate active_scaffold purchase order_id:integer amount:decimal`
@@ -0,0 +1,20 @@
1
+ require 'rails/generators/rails/resource/resource_generator'
2
+ #require 'generators/active_scaffold_controller/active_scaffold_controller_generator'
3
+
4
+ module Rails
5
+ module Generators
6
+ class ActiveScaffoldGenerator < ResourceGenerator #metagenerator
7
+ remove_hook_for :resource_controller
8
+ remove_class_option :actions
9
+
10
+ def add_resource_route
11
+ route_config = class_path.collect{|namespace| "namespace :#{namespace} do " }.join(" ")
12
+ route_config << "resources :#{file_name.pluralize} do as_routes end"
13
+ route_config << " end" * class_path.size
14
+ route route_config
15
+ end
16
+
17
+ invoke "active_scaffold_controller"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ Description:
2
+ Stubs out a active_scaffolded controller. Pass the model name,
3
+ either CamelCased or under_scored.
4
+ The controller name is retrieved as a pluralized version of the model
5
+ name.
6
+
7
+ To create a controller within a module, specify the model name as a
8
+ path like 'parent_module/controller_name'.
9
+
10
+ This generates a controller class in app/controllers and invokes helper,
11
+ template engine and test framework generators.
12
+
13
+ Example:
14
+ `rails generate active_scaffold_controller CreditCard`
15
+
16
+ Credit card controller with URLs like /credit_card/debit.
17
+ Controller: app/controllers/credit_cards_controller.rb
18
+ Functional Test: test/functional/credit_cards_controller_test.rb
19
+ Helper: app/helpers/credit_cards_helper.rb
@@ -0,0 +1,29 @@
1
+ #require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
2
+
3
+ module Rails
4
+ module Generators
5
+ class ActiveScaffoldControllerGenerator < NamedBase #metagenerator
6
+ include ResourceHelpers
7
+
8
+ def self.source_root
9
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
10
+ end
11
+
12
+ check_class_collision :suffix => "Controller"
13
+
14
+ class_option :orm, :banner => "NAME", :type => :string, :required => true,
15
+ :desc => "ORM to generate the controller for"
16
+
17
+ def create_controller_files
18
+ template 'controller.rb', File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb")
19
+ template 'helper.rb', File.join('app/helpers', class_path, "#{controller_file_name}_helper.rb")
20
+ end
21
+
22
+ hook_for :test_framework, :as => :scaffold
23
+
24
+ def create_view_root_folder
25
+ empty_directory File.join("app/views", controller_file_path)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ class <%= controller_class_name %>Controller < ApplicationController
2
+ active_scaffold :<%= class_name.demodulize.underscore %> do |conf|
3
+ end
4
+ end
@@ -0,0 +1,2 @@
1
+ module <%= controller_class_name %>Helper
2
+ end
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Setup a new Rails 3 Application with active_scaffold.
3
+ Pass 'jquery' in case you would like to use it instead of prototype
4
+
5
+ This installs required plugins and configures active_scaffold to use
6
+ specified js lib and application layout file to include all required
7
+ assets
8
+
9
+ Example:
10
+ `rails generate active_scaffold_setup jquery`
@@ -0,0 +1,61 @@
1
+ module Rails
2
+ module Generators
3
+ class ActiveScaffoldSetupGenerator < Rails::Generators::Base #metagenerator
4
+ argument :js_lib, :type => :string, :default => 'prototype', :desc => 'js_lib for activescaffold (prototype|jquery)'
5
+
6
+ def self.source_root
7
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
8
+ end
9
+
10
+ def install_plugins
11
+ unless defined?(ACTIVE_SCAFFOLD_GEM)
12
+ plugin 'verification', :git => 'git://github.com/rails/verification.git'
13
+ plugin 'render_component', :git => 'git://github.com/vhochstein/render_component.git'
14
+ end
15
+ if js_lib == 'prototype'
16
+ get "https://github.com/vhochstein/prototype-ujs/raw/master/src/rails.js", "public/javascripts/rails.js"
17
+ elsif js_lib == 'jquery'
18
+ get "https://github.com/vhochstein/jquery-ujs/raw/master/src/rails.js", "public/javascripts/rails_jquery.js"
19
+ get "https://github.com/vhochstein/jQuery-Timepicker-Addon/raw/master/jquery-ui-timepicker-addon.js", "public/javascripts/jquery-ui-timepicker-addon.js"
20
+ end
21
+ end
22
+
23
+ def configure_active_scaffold
24
+ unless defined?(ACTIVE_SCAFFOLD_GEM)
25
+ if js_lib == 'jquery'
26
+ gsub_file 'vendor/plugins/active_scaffold/lib/active_scaffold_env.rb', /#ActiveScaffold.js_framework = :jquery/, 'ActiveScaffold.js_framework = :jquery'
27
+ end
28
+ else
29
+ if js_lib == 'jquery'
30
+ create_file "config/initializers/active_scaffold.rb", "ActiveScaffold.js_framework = :jquery"
31
+ end
32
+ end
33
+ end
34
+
35
+ def configure_application_layout
36
+ if js_lib == 'prototype'
37
+ inject_into_file "app/views/layouts/application.html.erb",
38
+ " <%= active_scaffold_includes %>\n",
39
+ :after => "<%= javascript_include_tag :defaults %>\n"
40
+ elsif js_lib == 'jquery'
41
+ inject_into_file "app/views/layouts/application.html.erb",
42
+ " <%= stylesheet_link_tag 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/ui-lightness/jquery-ui.css' %>
43
+ <%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js' %>
44
+ <%= javascript_include_tag 'rails_jquery.js' %>
45
+ <%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.js' %>
46
+ <%= javascript_include_tag 'jquery-ui-timepicker-addon.js' %>
47
+ <%= javascript_include_tag 'application.js' %>
48
+ <%= active_scaffold_includes %>\n",
49
+ :after => "<%= javascript_include_tag :defaults %>\n"
50
+
51
+ inject_into_file "config/locales/en.yml",
52
+ " time:
53
+ formats:
54
+ default: \"%a, %d %b %Y %H:%M:%S\"",
55
+ :after => "hello: \"Hello world\"\n"
56
+ gsub_file 'app/views/layouts/application.html.erb', /<%= javascript_include_tag :defaults/, '<%# javascript_include_tag :defaults'
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,33 @@
1
+ <!--
2
+ Copyright (c) 2005, Brad Neuberg, bkn3@columbia.edu
3
+ http://codinginparadise.org
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the "Software"),
7
+ to deal in the Software without restriction, including without limitation
8
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
+ and/or sell copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
20
+ OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
21
+ THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ -->
23
+
24
+ <html>
25
+ <script language="JavaScript">
26
+ function pageLoaded() {
27
+ window.parent.dhtmlHistory.iframeLoaded(window.location);
28
+ }
29
+ </script>
30
+ <body onload="pageLoaded()">
31
+ <h1>blank.html - Needed for Internet Explorer's hidden IFrame</h1>
32
+ </body>
33
+ </html>
@@ -0,0 +1,136 @@
1
+ class ActiveSupport::TestCase
2
+ def self.should_have_columns_in(action, *columns)
3
+ should "have #{columns.to_sentence} columns in #{action}" do
4
+ assert_equal columns, column_names(action)
5
+ end
6
+ end
7
+
8
+ def self.should_include_columns_in(action, *columns)
9
+ should "include #{columns.to_sentence} columns in #{action}" do
10
+ action_columns = column_names(action)
11
+ columns.each do |column|
12
+ assert action_columns.include?(column.to_sym), "#{column} is not included in #{action}"
13
+ end
14
+ end
15
+ end
16
+
17
+ def self.should_not_include_columns_in(action, *columns)
18
+ should "not include #{columns.to_sentence} columns in #{action}" do
19
+ action_columns = column_names(action)
20
+ columns.each do |column|
21
+ assert !action_columns.include?(column.to_sym), "#{column} is included in #{action}"
22
+ end
23
+ end
24
+ end
25
+
26
+ def self.should_render_as_form_ui(column_name, form_ui)
27
+ should "render column #{column_name} as #{form_ui} form_ui", :before => lambda{
28
+ @rendered_columns = []
29
+ ActionView::Base.any_instance.expects(:"active_scaffold_input_#{form_ui}").at_least_once.with {|column, options|
30
+ @rendered_columns << column.name
31
+ true
32
+ }
33
+ } do
34
+ assert_equal form_ui, @controller.active_scaffold_config.columns[column_name].form_ui
35
+ assert @rendered_columns.include?(column_name)
36
+ end
37
+ end
38
+
39
+ def self.should_render_with_options_for_select(column_name, *options)
40
+ should "render column #{column_name} with options for select" do
41
+ converting_sort = lambda{|a,b| a.to_s <=> b.to_s}
42
+ assert_equal options.sort(&converting_sort), @controller.active_scaffold_config.columns[column_name].options[:options].sort(&converting_sort)
43
+ end
44
+ end
45
+
46
+ def self.should_render_as_form_override(column_name)
47
+ should "render column #{column_name} as form override" do
48
+ column = @controller.active_scaffold_config.columns[column_name]
49
+ assert @response.template.override_form_field?(column)
50
+ assert_template :partial => "_#{column_name}_form_column", :count => 0
51
+ end
52
+ end
53
+
54
+ def self.should_render_as_form_partial_override(column_name)
55
+ should "render column #{column_name} as form partial override" do
56
+ assert_template :partial => "_#{column_name}_form_column"
57
+ end
58
+ end
59
+
60
+ def self.should_render_as_form_hidden(column_name)
61
+ should "render column #{column_name} as form hidden", :before => lambda{
62
+ @rendered_columns = []
63
+ ActionView::Base.any_instance.expects(:"hidden_field").at_least_once.with {|object, method, options|
64
+ @rendered_columns << method
65
+ true
66
+ }
67
+ } do
68
+ assert_template :partial => "_form_hidden_attribute"
69
+ assert @rendered_columns.include?(column_name)
70
+ end
71
+ end
72
+
73
+ def self.should_render_as_list_ui(column_name, list_ui)
74
+ should "render column #{column_name} as #{list_ui} list_ui", :before => lambda{
75
+ @rendered_columns = []
76
+ ActionView::Base.any_instance.expects(:"active_scaffold_column_#{list_ui}").at_least_once.with {|column, options|
77
+ @rendered_columns << column.name
78
+ true
79
+ }
80
+ } do
81
+ assert_equal list_ui, @controller.active_scaffold_config.columns[column_name].list_ui
82
+ assert @rendered_columns.include?(column_name)
83
+ end
84
+ end
85
+
86
+ def self.should_render_as_field_override(column_name)
87
+ should "render column #{column_name} as field override" do
88
+ column = @controller.active_scaffold_config.columns[column_name]
89
+ assert @response.template.override_form_field?(column)
90
+ assert_template :partial => "_#{column_name}_column", :count => 0
91
+ end
92
+ end
93
+
94
+ def self.should_render_as_field_partial_override(column_name)
95
+ should "render column #{column_name} as field partial override" do
96
+ assert_template :partial => "_#{column_name}_column"
97
+ end
98
+ end
99
+
100
+ def self.should_render_as_inplace_edit(column_name)
101
+ should "render column #{column_name} as inplace edit", :before => lambda{
102
+ @column = @controller.active_scaffold_config.columns[column_name]
103
+ @rendered_columns = []
104
+ method = @column.list_ui == :checkbox ? :format_column_checkbox : :active_scaffold_inplace_edit
105
+ ActionView::Base.any_instance.expects(method).at_least_once.with {|model, column, options|
106
+ @rendered_columns << column.name
107
+ true
108
+ }
109
+ } do
110
+ assert @column.inplace_edit
111
+ assert @rendered_columns.include?(column_name)
112
+ end
113
+ end
114
+
115
+ def self.should_respond_to_parent_redirecting_to(description, &block)
116
+ should_respond_to_parent("redirecting to #{description}") { "document.location.href = \"#{instance_eval(&block)}\"" }
117
+ end
118
+
119
+ def self.should_respond_to_parent(description = nil, &block)
120
+ should "respond to parent #{description}" do
121
+ script = block ? instance_eval(&block) : /.*/
122
+ script = script.is_a?(Regexp) ? script.source : Regexp.quote(script)
123
+ script = script.gsub('\n', '\\\\\\n').
124
+ gsub(/['"]/, '\\\\\\\\\&').
125
+ gsub('</script>','</scr"+"ipt>')
126
+ assert_select 'script[type=text/javascript]', Regexp.new('.*' + Regexp.quote("with(window.parent) { setTimeout(function() { window.eval('") + script + Regexp.quote("'); if (typeof(loc) !== 'undefined') loc.replace('about:blank'); }, 1) };") + '.*')
127
+ end
128
+ end
129
+
130
+ private
131
+ def column_names(action)
132
+ columns = []
133
+ @controller.active_scaffold_config.send(action).columns.each(:flatten => true) {|col| columns << col.name}
134
+ columns
135
+ end
136
+ end
@@ -0,0 +1,47 @@
1
+ def dbg; require "ruby-debug"; debugger; end;
2
+
3
+ require File.join(File.dirname(__FILE__), '../test_helper.rb')
4
+
5
+
6
+ class Bridges::BridgeTest < Test::Unit::TestCase
7
+ def setup
8
+ @const_store = {}
9
+ end
10
+
11
+ def teardown
12
+ end
13
+
14
+ def test__shouldnt_throw_errors
15
+ ActiveScaffold::Bridge.run_all
16
+ end
17
+
18
+ def test__cds_bridge
19
+ ConstMocker.mock("CalendarDateSelect") do |cm|
20
+ cm.remove
21
+ assert(! bridge_will_be_installed("CalendarDateSelect"))
22
+ cm.declare
23
+ assert(bridge_will_be_installed("CalendarDateSelect"))
24
+ end
25
+ end
26
+
27
+ def test__file_column_bridge
28
+ ConstMocker.mock("FileColumn") do |cm|
29
+ cm.remove
30
+ assert(! bridge_will_be_installed("FileColumn"))
31
+ cm.declare
32
+ assert(bridge_will_be_installed("FileColumn"))
33
+ end
34
+ end
35
+
36
+ protected
37
+
38
+ def find_bridge(name)
39
+ ActiveScaffold::Bridge.bridges.find{|b| b.name.to_s==name.to_s}
40
+ end
41
+
42
+ def bridge_will_be_installed(name)
43
+ assert bridge=find_bridge(name), "No bridge found matching #{name}"
44
+
45
+ bridge.instance_variable_get("@install_if").call
46
+ end
47
+ end