active_scaffold 3.0.26 → 3.1.3

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 (236) hide show
  1. data/CHANGELOG +1 -1
  2. data/{frontends/default → app/assets}/images/add.gif +0 -0
  3. data/{frontends/default → app/assets}/images/arrow_down.gif +0 -0
  4. data/{frontends/default → app/assets}/images/arrow_up.gif +0 -0
  5. data/{frontends/default → app/assets}/images/close.gif +0 -0
  6. data/{frontends/default → app/assets}/images/close_touch.png +0 -0
  7. data/{frontends/default → app/assets}/images/config.png +0 -0
  8. data/{frontends/default → app/assets}/images/cross.png +0 -0
  9. data/{frontends/default → app/assets}/images/gears.png +0 -0
  10. data/{frontends/default → app/assets}/images/indicator-small.gif +0 -0
  11. data/{frontends/default → app/assets}/images/indicator.gif +0 -0
  12. data/{frontends/default → app/assets}/images/magnifier.png +0 -0
  13. data/app/assets/javascripts/active_scaffold.js.erb +16 -0
  14. data/{frontends/default → app/assets}/javascripts/jquery/active_scaffold.js +16 -28
  15. data/app/assets/javascripts/jquery/active_scaffold.js~ +1036 -0
  16. data/{lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js → app/assets/javascripts/jquery/date_picker_bridge.js.erb} +3 -1
  17. data/{frontends/default → app/assets}/javascripts/jquery/jquery.editinplace.js +0 -0
  18. data/app/assets/javascripts/prototype/active_scaffold.js +1033 -0
  19. data/{frontends/default/javascripts/prototype/active_scaffold.js → app/assets/javascripts/prototype/active_scaffold.js~} +1 -0
  20. data/{frontends/default → app/assets}/javascripts/prototype/dhtml_history.js +0 -0
  21. data/{frontends/default → app/assets}/javascripts/prototype/form_enhancements.js +0 -0
  22. data/{frontends/default → app/assets}/javascripts/prototype/rico_corner.js +0 -0
  23. data/{frontends/default/stylesheets/stylesheet-ie.css → app/assets/stylesheets/active_scaffold-ie.css} +0 -0
  24. data/{frontends/default/stylesheets/stylesheet.css → app/assets/stylesheets/active_scaffold.css.erb} +29 -24
  25. data/{lib/active_scaffold/locale → config/locales}/de.yml +3 -0
  26. data/{lib/active_scaffold/locale → config/locales}/en.yml +3 -0
  27. data/{lib/active_scaffold/locale → config/locales}/es.yml +5 -0
  28. data/{lib/active_scaffold/locale → config/locales}/fr.yml +3 -0
  29. data/{lib/active_scaffold/locale → config/locales}/hu.yml +13 -2
  30. data/{lib/active_scaffold/locale → config/locales}/ja.yml +9 -0
  31. data/{lib/active_scaffold/locale → config/locales}/ru.yml +3 -0
  32. data/frontends/default/views/_form.html.erb +1 -1
  33. data/frontends/default/views/_form_association.html.erb +1 -5
  34. data/frontends/default/views/_horizontal_subform.html.erb +7 -4
  35. data/frontends/default/views/_horizontal_subform.html.erb~ +2 -5
  36. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  37. data/frontends/default/views/_horizontal_subform_header.html.erb +1 -1
  38. data/frontends/default/views/_horizontal_subform_header.html.erb~ +1 -1
  39. data/frontends/default/views/_horizontal_subform_record.html.erb~ +1 -1
  40. data/frontends/default/views/_list_actions.html.erb +1 -1
  41. data/frontends/default/views/_list_messages.html.erb +1 -3
  42. data/frontends/default/views/_render_field.js.erb +20 -0
  43. data/frontends/default/views/_row.html.erb +3 -9
  44. data/frontends/default/views/_show.html.erb +2 -2
  45. data/frontends/default/views/add_existing.js.erb +20 -0
  46. data/frontends/default/views/destroy.js.erb +24 -0
  47. data/frontends/default/views/{edit_associated.js.rjs → edit_associated.js.erb} +3 -2
  48. data/frontends/default/views/form_messages.js.erb +1 -0
  49. data/frontends/default/views/list.js.erb +1 -0
  50. data/frontends/default/views/mark.js.rjs +6 -0
  51. data/frontends/default/views/on_action_update.js.erb +13 -0
  52. data/frontends/default/views/{on_create.js.erb~ → on_create.js.erb} +0 -0
  53. data/frontends/default/views/on_mark_all.js.erb +12 -0
  54. data/frontends/default/views/{on_update.js.erb~ → on_update.js.erb} +0 -0
  55. data/frontends/default/views/render_field.js.erb +1 -0
  56. data/frontends/default/views/search.html.erb +1 -1
  57. data/frontends/default/views/{update_column.js.erb~ → update_column.js.erb} +3 -3
  58. data/frontends/default/views/update_row.js.erb +1 -0
  59. data/lib/active_scaffold.rb +22 -46
  60. data/lib/active_scaffold/actions/core.rb +14 -6
  61. data/lib/active_scaffold/actions/core.rb~ +3 -3
  62. data/lib/active_scaffold/actions/create.rb +2 -5
  63. data/lib/active_scaffold/actions/create.rb~ +3 -2
  64. data/lib/active_scaffold/actions/delete.rb +1 -0
  65. data/lib/active_scaffold/actions/field_search.rb +1 -1
  66. data/lib/active_scaffold/actions/list.rb +10 -6
  67. data/lib/active_scaffold/actions/list.rb~ +3 -3
  68. data/lib/active_scaffold/actions/mark.rb +8 -8
  69. data/lib/active_scaffold/actions/nested.rb +2 -9
  70. data/lib/active_scaffold/actions/nested.rb~ +5 -7
  71. data/lib/active_scaffold/actions/search.rb +2 -1
  72. data/lib/active_scaffold/actions/subform.rb +1 -5
  73. data/lib/active_scaffold/actions/update.rb +1 -4
  74. data/lib/active_scaffold/actions/update.rb~ +5 -5
  75. data/lib/active_scaffold/attribute_params.rb +15 -26
  76. data/lib/active_scaffold/attribute_params.rb~ +1 -2
  77. data/lib/active_scaffold/bridges.rb +61 -0
  78. data/lib/active_scaffold/bridges/ancestry.rb +5 -0
  79. data/lib/active_scaffold/bridges/ancestry/{lib/ancestry_bridge.rb → ancestry_bridge.rb} +3 -3
  80. data/lib/active_scaffold/bridges/{calendar_date_select/bridge.rb → calendar_date_select.rb} +13 -5
  81. data/lib/active_scaffold/bridges/calendar_date_select/{lib/as_cds_bridge.rb → as_cds_bridge.rb} +4 -20
  82. data/lib/active_scaffold/bridges/cancan.rb +15 -0
  83. data/lib/active_scaffold/bridges/cancan/{lib/cancan_bridge.rb → cancan_bridge.rb} +2 -2
  84. data/lib/active_scaffold/bridges/carrierwave.rb +12 -0
  85. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +31 -0
  86. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +10 -0
  87. data/lib/active_scaffold/bridges/carrierwave/{lib/form_ui.rb → form_ui.rb} +0 -0
  88. data/lib/active_scaffold/bridges/carrierwave/{lib/list_ui.rb → list_ui.rb} +1 -1
  89. data/lib/active_scaffold/bridges/country_helper.rb +9 -0
  90. data/lib/active_scaffold/bridges/country_helper/{lib/country_helper_bridge.rb → country_helper_bridge.rb} +5 -5
  91. data/lib/active_scaffold/bridges/date_picker.rb +23 -0
  92. data/lib/active_scaffold/bridges/date_picker/ext.rb +54 -0
  93. data/lib/active_scaffold/bridges/date_picker/helper.rb +188 -0
  94. data/lib/active_scaffold/bridges/dragonfly.rb +9 -0
  95. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +34 -0
  96. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +10 -0
  97. data/lib/active_scaffold/bridges/dragonfly/{lib/form_ui.rb → form_ui.rb} +0 -0
  98. data/lib/active_scaffold/bridges/dragonfly/{lib/list_ui.rb → list_ui.rb} +2 -2
  99. data/lib/active_scaffold/bridges/file_column.rb +11 -0
  100. data/lib/active_scaffold/bridges/file_column/{lib/as_file_column_bridge.rb → as_file_column_bridge.rb} +2 -2
  101. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +57 -0
  102. data/lib/active_scaffold/bridges/file_column/{lib/form_ui.rb → form_ui.rb} +2 -2
  103. data/lib/active_scaffold/bridges/file_column/{lib/list_ui.rb → list_ui.rb} +0 -0
  104. data/lib/active_scaffold/bridges/paperclip.rb +12 -0
  105. data/lib/active_scaffold/bridges/paperclip/{lib/form_ui.rb → form_ui.rb} +0 -0
  106. data/lib/active_scaffold/bridges/paperclip/{lib/list_ui.rb → list_ui.rb} +3 -3
  107. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +36 -0
  108. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +24 -0
  109. data/lib/active_scaffold/bridges/record_select.rb +11 -0
  110. data/lib/active_scaffold/bridges/record_select/{lib/record_select_bridge.rb → helpers.rb} +5 -16
  111. data/lib/active_scaffold/bridges/record_select/helpers.rb~ +9 -14
  112. data/lib/active_scaffold/bridges/semantic_attributes.rb +5 -0
  113. data/lib/active_scaffold/bridges/semantic_attributes/{lib/semantic_attributes_bridge.rb → column.rb} +3 -3
  114. data/lib/active_scaffold/bridges/tiny_mce.rb +5 -0
  115. data/lib/active_scaffold/bridges/tiny_mce/{lib/tiny_mce_bridge.rb → helpers.rb} +16 -8
  116. data/lib/active_scaffold/config/base.rb +9 -1
  117. data/lib/active_scaffold/config/core.rb +1 -1
  118. data/lib/active_scaffold/config/create.rb +3 -10
  119. data/lib/active_scaffold/config/delete.rb +1 -2
  120. data/lib/active_scaffold/config/field_search.rb +1 -2
  121. data/lib/active_scaffold/config/form.rb +2 -6
  122. data/lib/active_scaffold/config/list.rb +8 -2
  123. data/lib/active_scaffold/config/nested.rb +2 -6
  124. data/lib/active_scaffold/config/search.rb +6 -2
  125. data/lib/active_scaffold/config/show.rb +1 -4
  126. data/lib/active_scaffold/config/subform.rb +1 -1
  127. data/lib/active_scaffold/config/update.rb +1 -6
  128. data/lib/active_scaffold/data_structures/action_columns.rb +3 -0
  129. data/lib/active_scaffold/data_structures/action_link.rb +14 -10
  130. data/lib/active_scaffold/data_structures/bridge.rb +22 -0
  131. data/lib/active_scaffold/data_structures/column.rb +36 -4
  132. data/lib/active_scaffold/data_structures/nested_info.rb +4 -4
  133. data/lib/active_scaffold/data_structures/set.rb +1 -6
  134. data/lib/active_scaffold/data_structures/sorting.rb +2 -2
  135. data/lib/active_scaffold/engine.rb +4 -0
  136. data/lib/active_scaffold/extensions/action_controller_rendering.rb +2 -2
  137. data/lib/active_scaffold/extensions/action_controller_rendering.rb~ +1 -1
  138. data/lib/active_scaffold/extensions/action_view_rendering.rb +90 -93
  139. data/lib/active_scaffold/extensions/action_view_rendering.rb~ +1 -13
  140. data/lib/active_scaffold/extensions/active_association_reflection.rb +16 -7
  141. data/lib/active_scaffold/extensions/cache_association.rb +16 -0
  142. data/lib/active_scaffold/extensions/reverse_associations.rb +15 -13
  143. data/lib/active_scaffold/extensions/unsaved_associated.rb +1 -1
  144. data/lib/active_scaffold/finder.rb +40 -23
  145. data/lib/active_scaffold/finder.rb~ +3 -11
  146. data/lib/active_scaffold/helpers/association_helpers.rb +1 -1
  147. data/lib/active_scaffold/helpers/controller_helpers.rb +9 -1
  148. data/lib/active_scaffold/helpers/controller_helpers.rb~ +12 -5
  149. data/lib/active_scaffold/helpers/form_column_helpers.rb +20 -21
  150. data/lib/active_scaffold/helpers/form_column_helpers.rb~ +2 -1
  151. data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
  152. data/lib/active_scaffold/helpers/list_column_helpers.rb +14 -24
  153. data/lib/active_scaffold/helpers/list_column_helpers.rb~ +15 -20
  154. data/lib/active_scaffold/helpers/search_column_helpers.rb +10 -1
  155. data/lib/active_scaffold/helpers/search_column_helpers.rb~ +1 -1
  156. data/lib/active_scaffold/helpers/view_helpers.rb +14 -40
  157. data/lib/active_scaffold/helpers/view_helpers.rb~ +3 -3
  158. data/lib/active_scaffold/version.rb +2 -2
  159. data/lib/active_scaffold_env.rb +0 -2
  160. data/test/bridges/active_scaffold_dependent_protect_test.rb +34 -0
  161. data/test/bridges/bridge_test.rb +43 -0
  162. data/test/bridges/company.rb +81 -0
  163. data/test/bridges/paperclip_test.rb +68 -0
  164. data/test/bridges/tiny_mce_test.rb +27 -0
  165. data/test/bridges/unobtrusive_date_picker_test.rb +49 -0
  166. data/test/bridges/validation_reflection_test.rb +57 -0
  167. data/test/config/base_test.rb +1 -1
  168. data/test/config/core_test.rb +58 -0
  169. data/test/config/create_test.rb +8 -5
  170. data/test/config/delete_test.rb +33 -0
  171. data/test/config/field_search_test.rb +47 -0
  172. data/test/config/list_test.rb +64 -9
  173. data/test/config/nested_test.rb +62 -0
  174. data/test/config/search_test.rb +60 -0
  175. data/test/config/show_test.rb +5 -5
  176. data/test/config/subform_test.rb +17 -0
  177. data/test/config/update_test.rb +27 -4
  178. data/test/helpers/list_column_helpers_test.rb +16 -5
  179. data/test/helpers/pagination_helpers_test.rb +4 -0
  180. data/test/misc/attribute_params_test.rb +37 -1
  181. data/test/misc/finder_test.rb +0 -1
  182. data/test/misc/lang_test.rb +2 -3
  183. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +2 -2
  184. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +13 -7
  185. metadata +137 -154
  186. data/frontends/default/views/_list_with_header.html.erb~ +0 -32
  187. data/frontends/default/views/_render_field.js.rjs +0 -14
  188. data/frontends/default/views/_show.html.erb~ +0 -8
  189. data/frontends/default/views/_update_form.html.erb~ +0 -6
  190. data/frontends/default/views/add_existing.js.erb~ +0 -18
  191. data/frontends/default/views/add_existing.js.rjs +0 -17
  192. data/frontends/default/views/destroy.js.rjs +0 -23
  193. data/frontends/default/views/form_messages.js.rjs +0 -1
  194. data/frontends/default/views/list.js.rjs +0 -1
  195. data/frontends/default/views/on_action_update.js.rjs +0 -10
  196. data/frontends/default/views/on_create.js.rjs +0 -41
  197. data/frontends/default/views/on_mark_all.js.rjs +0 -12
  198. data/frontends/default/views/on_update.js.rjs +0 -28
  199. data/frontends/default/views/render_field.js.rjs +0 -1
  200. data/frontends/default/views/update_column.js.rjs +0 -13
  201. data/frontends/default/views/update_row.js.rjs +0 -1
  202. data/lib/active_scaffold.rb~ +0 -362
  203. data/lib/active_scaffold/bridges/ancestry/bridge.rb +0 -5
  204. data/lib/active_scaffold/bridges/bridge.rb +0 -59
  205. data/lib/active_scaffold/bridges/cancan/bridge.rb +0 -12
  206. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +0 -9
  207. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +0 -33
  208. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +0 -12
  209. data/lib/active_scaffold/bridges/country_helper/bridge.rb +0 -9
  210. data/lib/active_scaffold/bridges/date_picker/bridge.rb +0 -24
  211. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +0 -234
  212. data/lib/active_scaffold/bridges/dragonfly/bridge.rb +0 -9
  213. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge.rb +0 -36
  214. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge_helpers.rb +0 -12
  215. data/lib/active_scaffold/bridges/file_column/bridge.rb +0 -11
  216. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +0 -59
  217. data/lib/active_scaffold/bridges/paperclip/bridge.rb +0 -12
  218. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +0 -38
  219. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +0 -26
  220. data/lib/active_scaffold/bridges/record_select/bridge.rb +0 -5
  221. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +0 -5
  222. data/lib/active_scaffold/bridges/shared/date_bridge.rb~ +0 -209
  223. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +0 -5
  224. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +0 -8
  225. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +0 -21
  226. data/lib/active_scaffold/config/base.rb~ +0 -70
  227. data/lib/active_scaffold/config/nested.rb~ +0 -41
  228. data/lib/active_scaffold/constraints.rb~ +0 -186
  229. data/lib/active_scaffold/data_structures/action_link.rb~ +0 -179
  230. data/lib/active_scaffold/data_structures/nested_info.rb~ +0 -123
  231. data/lib/active_scaffold/extensions/action_view_resolver.rb +0 -7
  232. data/lib/active_scaffold/extensions/active_association_reflection.rb~ +0 -22
  233. data/lib/active_scaffold/extensions/unsaved_associated.rb~ +0 -62
  234. data/lib/active_scaffold_assets.rb +0 -45
  235. data/lib/generators/active_scaffold_setup/USAGE +0 -10
  236. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +0 -59
@@ -88,7 +88,7 @@ module ActiveScaffold
88
88
  else
89
89
  options[:include_blank] ||= as_(:_select_)
90
90
  end
91
- select(:record, method, select_options, options, html_options)
91
+ select(:record, method, options_for_select, options, html_options)
92
92
  end
93
93
 
94
94
  def active_scaffold_search_text(column, options)
@@ -42,6 +42,12 @@ module ActiveScaffold
42
42
  end
43
43
  end
44
44
 
45
+ # This is the template finder logic, keep it updated with however we find stuff in rails
46
+ # currently this very similar to the logic in ActionBase::Base.render for options file
47
+ def template_exists?(template_name, partial = false)
48
+ lookup_context.exists? template_name, '', partial
49
+ end
50
+
45
51
  def generate_temporary_id
46
52
  (Time.now.to_f*1000).to_i.to_s
47
53
  end
@@ -64,7 +70,7 @@ module ActiveScaffold
64
70
  return false if column.polymorphic_association?
65
71
 
66
72
  # A column shouldn't be in the subform if it's the reverse association to the parent
67
- return false if column.association.reverse_for?(parent_record.class)
73
+ return false if column.association.inverse_for?(parent_record.class)
68
74
 
69
75
  return true
70
76
  end
@@ -78,42 +84,9 @@ module ActiveScaffold
78
84
  (output << "<iframe id='#{action_iframe_id(url_for_options)}' name='#{action_iframe_id(url_for_options)}' style='display:none'></iframe>").html_safe
79
85
  end
80
86
 
81
- # Provides list of javascripts to include with +javascript_include_tag+
82
- # You can use this with your javascripts like
83
- # <%= javascript_include_tag :defaults, 'your_own_cool_script', active_scaffold_javascripts, :cache => true %>
84
- def active_scaffold_javascripts(frontend = :default)
85
- ActiveScaffold::Config::Core.javascripts(frontend).collect do |name|
86
- ActiveScaffold::Config::Core.asset_path(name, frontend)
87
- end
88
- end
89
-
90
- # Provides stylesheets to include with +stylesheet_link_tag+
91
- def active_scaffold_stylesheets(frontend = :default)
92
- [ActiveScaffold::Config::Core.asset_path("stylesheet.css", frontend)]
93
- end
94
-
95
- # Provides stylesheets for IE to include with +stylesheet_link_tag+
96
- def active_scaffold_ie_stylesheets(frontend = :default)
97
- [ActiveScaffold::Config::Core.asset_path("stylesheet-ie.css", frontend)]
98
- end
99
-
100
- # easy way to include ActiveScaffold assets
101
- def active_scaffold_includes(*args)
102
- frontend = args.first.is_a?(Symbol) ? args.shift : :default
103
- options = args.first.is_a?(Hash) ? args.shift : {}
104
- js = javascript_include_tag(*active_scaffold_javascripts(frontend).push(options))
105
-
106
- css = stylesheet_link_tag(*active_scaffold_stylesheets(frontend).push(options))
107
- options[:cache] += '_ie' if options[:cache].is_a? String
108
- options[:concat] += '_ie' if options[:concat].is_a? String
109
- ie_css = stylesheet_link_tag(*active_scaffold_ie_stylesheets(frontend).push(options))
110
-
111
- js + "\n" + css + "\n<!--[if IE]>".html_safe + ie_css + "<![endif]-->\n".html_safe
112
- end
113
-
114
87
  # a general-use loading indicator (the "stuff is happening, please wait" feedback)
115
88
  def loading_indicator_tag(options)
116
- image_tag "/images/active_scaffold/default/indicator.gif", :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator"
89
+ image_tag "indicator.gif", :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator"
117
90
  end
118
91
 
119
92
  # Creates a javascript-based link that toggles the visibility of some element on the page.
@@ -161,17 +134,18 @@ module ActiveScaffold
161
134
 
162
135
  def action_link_html_options(link, url_options, record, html_options)
163
136
  link_id = get_action_link_id(url_options, record, link.column)
164
- html_options.reverse_merge! link.html_options.merge(:class => link.action.to_s)
137
+ html_options.reverse_merge! link.html_options.merge(:class => link.action)
165
138
 
166
139
  # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
167
140
  html_options[:method] = link.method if link.method != :get
168
141
 
169
- html_options['data-confirm'] = link.confirm(record.try(:to_label)) if link.confirm?
170
- html_options['data-position'] = link.position if link.position and link.inline?
171
142
  html_options[:class] += ' as_action' if link.inline?
172
- html_options['data-action'] = link.action if link.inline?
143
+ html_options[:data] = {}
144
+ html_options[:data][:confirm] = link.confirm(record.try(:to_label)) if link.confirm?
145
+ html_options[:data][:position] = link.position if link.position and link.inline?
146
+ html_options[:data][:action] = link.action if link.inline?
173
147
  if link.popup?
174
- html_options['data-popup'] = true
148
+ html_options[:data][:popup] = true
175
149
  html_options[:target] = '_blank'
176
150
  end
177
151
  html_options[:id] = link_id
@@ -70,7 +70,7 @@ module ActiveScaffold
70
70
  return false if column.polymorphic_association?
71
71
 
72
72
  # A column shouldn't be in the subform if it's the reverse association to the parent
73
- return false if column.association.inverse_for?(parent_record.class)
73
+ return false if column.association.reverse_for?(parent_record.class)
74
74
 
75
75
  return true
76
76
  end
@@ -134,7 +134,7 @@ module ActiveScaffold
134
134
 
135
135
  def action_link_html_options(link, url_options, record, html_options)
136
136
  link_id = get_action_link_id(url_options, record, link.column)
137
- html_options.reverse_merge! link.html_options.merge(:class => link.action.to_s)
137
+ html_options.reverse_merge! link.html_options.merge(:class => link.action)
138
138
 
139
139
  # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
140
140
  html_options[:method] = link.method if link.method != :get
@@ -194,7 +194,7 @@ module ActiveScaffold
194
194
  url_options[:eid] = link.eid
195
195
  elsif link.parameters && link.parameters[:named_scope]
196
196
  url_options[:assoc_id] = url_options.delete(:id)
197
- link.eid = "#{controller_id.from(3)}_#{record.id}_#{link.parameters[:named_scope]}" unless record.nil? || options.has_key?(:reuse_eid)
197
+ link.eid = "#{controller_id.from(3)}_#{record.id}_#{link.parameters[:named_scope]}" unless options.has_key?(:reuse_eid)
198
198
  url_options[:eid] = link.eid
199
199
  end
200
200
  end
@@ -1,8 +1,8 @@
1
1
  module ActiveScaffold
2
2
  module Version
3
3
  MAJOR = 3
4
- MINOR = 0
5
- PATCH = 26
4
+ MINOR = 1
5
+ PATCH = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
@@ -9,5 +9,3 @@ ActionView::Base.send(:include, ActiveScaffold::Helpers::ViewHelpers)
9
9
  ActionController::Base.class_eval {include ActiveRecordPermissions::ModelUserAccess::Controller}
10
10
  ActiveRecord::Base.class_eval {include ActiveRecordPermissions::ModelUserAccess::Model}
11
11
  ActiveRecord::Base.class_eval {include ActiveRecordPermissions::Permissions}
12
-
13
- I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'active_scaffold', 'locale', '*.{rb,yml}')]
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), 'company')
3
+
4
+ class ActiveScaffoldDependentProtectTest < Test::Unit::TestCase
5
+ def test_destroy_protected_with_companies
6
+ protected_firm = Company.new(:with_companies)
7
+ assert !protected_firm.send(:authorized_for_delete?)
8
+ end
9
+
10
+ def test_destroy_protected_with_company
11
+ protected_firm = Company.new(:with_company)
12
+ assert !protected_firm.send(:authorized_for_delete?)
13
+ end
14
+
15
+ def test_destroy_protected_with_main_company
16
+ protected_firm = Company.new(:with_main_company)
17
+ assert !protected_firm.send(:authorized_for_delete?)
18
+ end
19
+
20
+ def test_destroy_protected_without_companies
21
+ protected_firm_without_companies = Company.new(:without_companies)
22
+ assert protected_firm_without_companies.send(:authorized_for_delete?)
23
+ end
24
+
25
+ def test_destroy_protected_without_company
26
+ protected_firm_without_company = Company.new(:without_company)
27
+ assert protected_firm_without_company.send(:authorized_for_delete?)
28
+ end
29
+
30
+ def test_destroy_protected_without_main_company
31
+ protected_firm_without_main_company = Company.new(:without_main_company)
32
+ assert protected_firm_without_main_company.send(:authorized_for_delete?)
33
+ end
34
+ end
@@ -32,6 +32,49 @@ class Bridges::BridgeTest < Test::Unit::TestCase
32
32
  assert(bridge_will_be_installed("FileColumn"))
33
33
  end
34
34
  end
35
+
36
+ def test__dependent_protect_bridge
37
+ ConstMocker.mock("DependentProtect") do |cm|
38
+ cm.remove
39
+ assert(! bridge_will_be_installed("DependentProtect"))
40
+ cm.declare
41
+ assert(bridge_will_be_installed("DependentProtect"))
42
+ end
43
+ end
44
+
45
+ def test__paperclip_bridge
46
+ ConstMocker.mock("Paperclip") do |cm|
47
+ cm.remove
48
+ assert(! bridge_will_be_installed("Paperclip"))
49
+ cm.declare
50
+ assert(bridge_will_be_installed("Paperclip"))
51
+ end
52
+ end
53
+
54
+ def test__unobtrusive_date_picker_bridge
55
+ ConstMocker.mock("UnobtrusiveDatePicker") do |cm|
56
+ cm.remove
57
+ assert(! bridge_will_be_installed("UnobtrusiveDatePicker"))
58
+ cm.declare
59
+ assert(bridge_will_be_installed("UnobtrusiveDatePicker"))
60
+ end
61
+ end
62
+
63
+ def test__validation_reflection_bridge
64
+ class << ActiveRecord::Base; undef_method :reflect_on_validations_for; end rescue nil
65
+ assert(! bridge_will_be_installed("ValidationReflection"))
66
+ class << ActiveRecord::Base; define_method :reflect_on_validations_for, lambda{}; end
67
+ assert(bridge_will_be_installed("ValidationReflection"))
68
+ end
69
+
70
+ def test__semantic_attributes_bridge
71
+ ConstMocker.mock("SemanticAttributes") do |cm|
72
+ cm.remove
73
+ assert(! bridge_will_be_installed("SemanticAttributes"))
74
+ cm.declare
75
+ assert(bridge_will_be_installed("SemanticAttributes"))
76
+ end
77
+ end
35
78
 
36
79
  protected
37
80
 
@@ -0,0 +1,81 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require 'active_record/reflection'
4
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/dependent_protect/lib/dependent_protect_bridge')
5
+
6
+ # Mocking everything necesary to test the plugin.
7
+ class Company
8
+ def initialize(with_or_without = nil)
9
+ @with_companies = with_or_without == :with_companies
10
+ @with_company = with_or_without == :with_company
11
+ @with_main_company = with_or_without == :with_main_company
12
+ end
13
+
14
+ def self.columns_hash
15
+ {
16
+ 'name' => ActiveRecord::ConnectionAdapters::Column.new('name', nil, 'varchar(255)'),
17
+ 'date' => ActiveRecord::ConnectionAdapters::Column.new('date', nil, 'date'),
18
+ 'datetime' => ActiveRecord::ConnectionAdapters::Column.new('datetime', nil, 'datetime'),
19
+ 'logo_file_name' => ActiveRecord::ConnectionAdapters::Column.new('logo_file_name', nil, 'varchar(255)'),
20
+ 'logo_content_type' => ActiveRecord::ConnectionAdapters::Column.new('logo_content_type', nil, 'varchar(255)'),
21
+ 'logo_file_size' => ActiveRecord::ConnectionAdapters::Column.new('logo_file_size', nil, 'int(11)'),
22
+ 'logo_updated_at' => ActiveRecord::ConnectionAdapters::Column.new('logo_updated_at', nil, 'datetime'),
23
+ }
24
+ end
25
+
26
+ def self.columns
27
+ self.columns_hash.values
28
+ end
29
+
30
+ def self.class_name
31
+ self.name
32
+ end
33
+
34
+ def self.table_name
35
+ 'companies'
36
+ end
37
+
38
+ def self.attachment_definitions
39
+ {:logo => {}}
40
+ end
41
+
42
+ # not the real signature of the method, but forgive me
43
+ def self.before_destroy(s=nil)
44
+ @@before = s
45
+ end
46
+
47
+ include ActiveRecord::Reflection
48
+ include DependentProtectSecurity
49
+
50
+ def self.has_many(association_id, options = {})
51
+ reflection = create_reflection(:has_many, association_id, options, self)
52
+ end
53
+ def self.has_one(association_id, options = {})
54
+ reflection = create_reflection(:has_one, association_id, options, self)
55
+ end
56
+ def self.belongs_to(association_id, options = {})
57
+ reflection = create_reflection(:belongs_to, association_id, options, self)
58
+ end
59
+ has_many :companies, :dependent => :protect
60
+ has_one :company, :dependent => :protect
61
+ belongs_to :main_company, :dependent => :protect, :class_name => 'Company'
62
+
63
+ def companies
64
+ if @with_companies
65
+ [nil]
66
+ else
67
+ []
68
+ end
69
+ end
70
+
71
+ def company
72
+ @with_company
73
+ end
74
+
75
+ def main_company
76
+ @with_main_company
77
+ end
78
+
79
+ def name
80
+ end
81
+ end
@@ -0,0 +1,68 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), 'company')
3
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/paperclip/lib/paperclip_bridge')
4
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/paperclip/lib/paperclip_bridge_helpers')
5
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/paperclip/lib/form_ui')
6
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/paperclip/lib/list_ui')
7
+
8
+ class PaperclipCore < ActiveScaffold::Config::Core
9
+ include ActiveScaffold::PaperclipBridge
10
+ end
11
+
12
+ class PaperclipTest < ActionView::TestCase
13
+ include ActiveScaffold::Helpers::ViewHelpers
14
+
15
+ def test_initialization_without_paperclip
16
+ Company.expects(:attachment_definitions)
17
+ config = PaperclipCore.new(:company)
18
+ assert !config.create.multipart?
19
+ assert !config.update.multipart?
20
+ assert !config.columns.any? {|column| column.form_ui == :paperclip}
21
+ end
22
+
23
+ def test_initialization
24
+ config = PaperclipCore.new(:company)
25
+ assert config.create.multipart?
26
+ assert config.update.multipart?
27
+ assert_equal :paperclip, config.columns[:logo].form_ui
28
+ assert_equal [:delete_logo], config.columns[:logo].params.to_a
29
+ %w(logo_file_name logo_file_size logo_updated_at logo_content_type).each do |attr|
30
+ assert !config.columns._inheritable.include?(attr.to_sym)
31
+ end
32
+ assert Company.instance_methods.include?('delete_logo')
33
+ assert Company.instance_methods.include?('delete_logo=')
34
+ end
35
+
36
+ def test_delete
37
+ PaperclipCore.new(:company)
38
+ company = Company.new
39
+ company.expects(:logo=).never
40
+ company.delete_logo = 'false'
41
+
42
+ company.expects(:logo).returns(stub(:dirty? => false))
43
+ company.expects(:logo=)
44
+ company.delete_logo = 'true'
45
+ end
46
+
47
+ def test_list_ui
48
+ config = PaperclipCore.new(:company)
49
+ company = Company.new
50
+
51
+ company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
52
+ assert_dom_equal '<a href="/system/file" onclick="window.open(this.href);return false;">file</a>', active_scaffold_column_paperclip(config.columns[:logo], company)
53
+
54
+ company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => {:thumbnail => '40x40'}))
55
+ assert_dom_equal '<a href="/system/file" onclick="window.open(this.href);return false;"><img src="/system/file" border="0" alt="File"/></a>', active_scaffold_column_paperclip(config.columns[:logo], company)
56
+ end
57
+
58
+ def test_form_ui
59
+ config = PaperclipCore.new(:company)
60
+ @record = Company.new
61
+
62
+ @record.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
63
+ assert_dom_equal '<div><a href="/system/file" onclick="window.open(this.href);return false;">file</a>|<a href="#" onclick="$(this).next().value=\'true\'; $(this).up().hide().next().show(); return false;">Remove or Replace file</a><input name="record[delete_logo]" type="hidden" id="record_delete_logo" value="false" /></div><div style="display: none"><input name="record[logo]" size="30" type="file" id="record_logo" /></div>', active_scaffold_input_paperclip(config.columns[:logo], :name => 'record[logo]', :id => 'record_logo')
64
+
65
+ @record.stubs(:logo).returns(stub(:file? => false))
66
+ assert_dom_equal '<input name="record[logo]" size="30" type="file" id="record_logo" />', active_scaffold_input_paperclip(config.columns[:logo], :name => 'record[logo]', :id => 'record_logo')
67
+ end
68
+ end
@@ -0,0 +1,27 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), 'company')
3
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/tiny_mce/lib/tiny_mce_bridge')
4
+
5
+ class TinyMceTest < ActionView::TestCase
6
+ include ActiveScaffold::Helpers::ViewHelpers
7
+ include ActiveScaffold::TinyMceBridge
8
+
9
+ def test_includes
10
+ assert_match /.*<script type="text\/javascript">.*ActiveScaffold\.ActionLink\.Abstract\.prototype\.close = function\(\).*<\/script>.*/m, active_scaffold_includes
11
+ end
12
+
13
+ def test_form_ui
14
+ config = PaperclipCore.new(:company)
15
+ @record = Company.new
16
+ self.expects(:request).returns(stub(:xhr? => true))
17
+
18
+ assert_dom_equal "<textarea name=\"record[name]\" class=\"name-input mceEditor\" id=\"record_name\"></textarea><script type=\"text/javascript\">\n//<![CDATA[\ntinyMCE.execCommand('mceAddControl', false, 'record_name');\n//]]>\n</script>", active_scaffold_input_text_editor(config.columns[:name], :name => 'record[name]', :id => 'record_name', :class => 'name-input')
19
+ end
20
+
21
+ protected
22
+ def include_tiny_mce_if_needed; end
23
+ def tiny_mce_js; end
24
+ def using_tiny_mce?
25
+ true
26
+ end
27
+ end
@@ -0,0 +1,49 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), 'company')
3
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/unobtrusive_date_picker/lib/unobtrusive_date_picker_bridge')
4
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/unobtrusive_date_picker/lib/view_helpers')
5
+ require File.join(File.dirname(__FILE__), '../../lib/bridges/unobtrusive_date_picker/lib/form_ui')
6
+
7
+ class UDPCore < ActiveScaffold::Config::Core
8
+ include ActiveScaffold::UnobtrusiveDatePickerBridge
9
+ end
10
+
11
+ class UnobtrusiveDatePickerTest < ActionView::TestCase
12
+ include ActiveScaffold::Helpers::ViewHelpers
13
+ include ActiveScaffold::UnobtrusiveDatePickerHelpers
14
+
15
+ def test_set_form_ui
16
+ config = UDPCore.new(:company)
17
+ assert_equal nil, config.columns[:name].form_ui, 'form_ui for name'
18
+ assert_equal :datepicker, config.columns[:date].form_ui, 'form_ui for date'
19
+ assert_equal :datepicker, config.columns[:datetime].form_ui, 'form_ui for datetime'
20
+ end
21
+
22
+ def test_stylesheets
23
+ assert active_scaffold_stylesheets.include?('datepicker.css')
24
+ end
25
+
26
+ def test_javascripts
27
+ assert active_scaffold_javascripts.include?('datepicker.js')
28
+ assert active_scaffold_javascripts.include?('datepicker_lang/es.js')
29
+ end
30
+
31
+ def test_form_ui
32
+ config = UDPCore.new(:company)
33
+ self.expects(:date_select).returns('')
34
+ self.expects(:date_picker).returns('')
35
+ assert active_scaffold_input_datepicker(config.columns[:date], :name => 'record[date]', :id => 'record_date')
36
+
37
+ self.expects(:datetime_select).returns('')
38
+ self.expects(:date_picker).returns('')
39
+ assert active_scaffold_input_datepicker(config.columns[:datetime], :name => 'record[datetime]', :id => 'record_datetime')
40
+ end
41
+
42
+ private
43
+ def unobtrusive_datepicker_stylesheets
44
+ ['datepicker.css']
45
+ end
46
+ def unobtrusive_datepicker_javascripts
47
+ ['datepicker.js', 'datepicker_lang/es.js']
48
+ end
49
+ end