active_scaffold 3.2.17 → 3.2.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (246) hide show
  1. data/CHANGELOG +5 -1
  2. metadata +17 -261
  3. data/app/assets/images/active_scaffold/add.png +0 -0
  4. data/app/assets/images/active_scaffold/arrow_down.png +0 -0
  5. data/app/assets/images/active_scaffold/arrow_up.png +0 -0
  6. data/app/assets/images/active_scaffold/close.png +0 -0
  7. data/app/assets/images/active_scaffold/close_touch.png +0 -0
  8. data/app/assets/images/active_scaffold/config.png +0 -0
  9. data/app/assets/images/active_scaffold/cross.png +0 -0
  10. data/app/assets/images/active_scaffold/gears.png +0 -0
  11. data/app/assets/images/active_scaffold/indicator-small.gif +0 -0
  12. data/app/assets/images/active_scaffold/indicator.gif +0 -0
  13. data/app/assets/images/active_scaffold/magnifier.png +0 -0
  14. data/app/assets/javascripts/active_scaffold.js.erb +0 -19
  15. data/app/assets/javascripts/jquery/active_scaffold.js +0 -1113
  16. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +0 -24
  17. data/app/assets/javascripts/jquery/draggable_lists.js +0 -27
  18. data/app/assets/javascripts/jquery/jquery.editinplace.js +0 -743
  19. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +0 -7
  20. data/app/assets/javascripts/prototype/active_scaffold.js +0 -1107
  21. data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
  22. data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
  23. data/app/assets/javascripts/prototype/rico_corner.js +0 -370
  24. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -7
  25. data/app/assets/stylesheets/active_scaffold-ie.css.scss +0 -54
  26. data/app/assets/stylesheets/active_scaffold.css.scss +0 -14
  27. data/app/assets/stylesheets/active_scaffold_colors.css.scss +0 -395
  28. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +0 -2
  29. data/app/assets/stylesheets/active_scaffold_images.css.scss +0 -40
  30. data/app/assets/stylesheets/active_scaffold_layout.css +0 -936
  31. data/app/assets/stylesheets/blue-theme.css +0 -74
  32. data/config/locales/de.yml +0 -125
  33. data/config/locales/en.yml +0 -127
  34. data/config/locales/es.yml +0 -128
  35. data/config/locales/fr.yml +0 -131
  36. data/config/locales/hu.yml +0 -126
  37. data/config/locales/ja.yml +0 -126
  38. data/config/locales/ru.yml +0 -135
  39. data/frontends/default/views/_action_group.html.erb +0 -24
  40. data/frontends/default/views/_add_existing_form.html.erb +0 -30
  41. data/frontends/default/views/_base_form.html.erb +0 -53
  42. data/frontends/default/views/_create_form.html.erb +0 -8
  43. data/frontends/default/views/_create_form_on_list.html.erb +0 -6
  44. data/frontends/default/views/_field_search.html.erb +0 -32
  45. data/frontends/default/views/_form.html.erb +0 -28
  46. data/frontends/default/views/_form_association.html.erb +0 -17
  47. data/frontends/default/views/_form_association_footer.html.erb +0 -47
  48. data/frontends/default/views/_form_attribute.html.erb +0 -23
  49. data/frontends/default/views/_form_hidden_attribute.html.erb +0 -7
  50. data/frontends/default/views/_form_messages.html.erb +0 -5
  51. data/frontends/default/views/_horizontal_subform.html.erb +0 -22
  52. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  53. data/frontends/default/views/_horizontal_subform_header.html.erb +0 -11
  54. data/frontends/default/views/_horizontal_subform_record.html.erb +0 -43
  55. data/frontends/default/views/_human_conditions.html.erb +0 -1
  56. data/frontends/default/views/_list.html.erb +0 -18
  57. data/frontends/default/views/_list_actions.html.erb +0 -15
  58. data/frontends/default/views/_list_calculations.html.erb +0 -16
  59. data/frontends/default/views/_list_column_headings.html.erb +0 -12
  60. data/frontends/default/views/_list_header.html.erb +0 -10
  61. data/frontends/default/views/_list_inline_adapter.html.erb +0 -21
  62. data/frontends/default/views/_list_messages.html.erb +0 -28
  63. data/frontends/default/views/_list_pagination.html.erb +0 -11
  64. data/frontends/default/views/_list_pagination_links.html.erb +0 -9
  65. data/frontends/default/views/_list_record.html.erb +0 -13
  66. data/frontends/default/views/_list_record_columns.html.erb +0 -8
  67. data/frontends/default/views/_list_with_header.html.erb +0 -36
  68. data/frontends/default/views/_messages.html.erb +0 -10
  69. data/frontends/default/views/_refresh_list.js.erb +0 -1
  70. data/frontends/default/views/_render_field.js.erb +0 -20
  71. data/frontends/default/views/_row.html.erb +0 -1
  72. data/frontends/default/views/_search.html.erb +0 -34
  73. data/frontends/default/views/_search_attribute.html.erb +0 -10
  74. data/frontends/default/views/_show.html.erb +0 -8
  75. data/frontends/default/views/_show_columns.html.erb +0 -15
  76. data/frontends/default/views/_update_actions.html.erb +0 -9
  77. data/frontends/default/views/_update_calculations.js.erb +0 -4
  78. data/frontends/default/views/_update_form.html.erb +0 -6
  79. data/frontends/default/views/_update_messages.js.erb +0 -2
  80. data/frontends/default/views/_vertical_subform.html.erb +0 -12
  81. data/frontends/default/views/_vertical_subform_record.html.erb +0 -43
  82. data/frontends/default/views/action_confirmation.html.erb +0 -13
  83. data/frontends/default/views/add_existing.js.erb +0 -14
  84. data/frontends/default/views/add_existing_form.html.erb +0 -5
  85. data/frontends/default/views/create.html.erb +0 -5
  86. data/frontends/default/views/delete.html.erb +0 -13
  87. data/frontends/default/views/destroy.js.erb +0 -26
  88. data/frontends/default/views/edit_associated.js.erb +0 -12
  89. data/frontends/default/views/field_search.html.erb +0 -5
  90. data/frontends/default/views/form_messages.js.erb +0 -1
  91. data/frontends/default/views/list.html.erb +0 -1
  92. data/frontends/default/views/on_action_update.js.erb +0 -22
  93. data/frontends/default/views/on_create.js.erb +0 -38
  94. data/frontends/default/views/on_mark.js.erb +0 -6
  95. data/frontends/default/views/on_update.js.erb +0 -29
  96. data/frontends/default/views/refresh_list.js.erb +0 -2
  97. data/frontends/default/views/render_field.js.erb +0 -1
  98. data/frontends/default/views/row.js.erb +0 -2
  99. data/frontends/default/views/search.html.erb +0 -5
  100. data/frontends/default/views/show.html.erb +0 -5
  101. data/frontends/default/views/update.html.erb +0 -8
  102. data/frontends/default/views/update_column.js.erb +0 -15
  103. data/frontends/default/views/update_row.js.erb +0 -1
  104. data/lib/active_scaffold.rb +0 -373
  105. data/lib/active_scaffold/actions/common_search.rb +0 -22
  106. data/lib/active_scaffold/actions/core.rb +0 -203
  107. data/lib/active_scaffold/actions/create.rb +0 -139
  108. data/lib/active_scaffold/actions/delete.rb +0 -74
  109. data/lib/active_scaffold/actions/field_search.rb +0 -78
  110. data/lib/active_scaffold/actions/list.rb +0 -208
  111. data/lib/active_scaffold/actions/mark.rb +0 -89
  112. data/lib/active_scaffold/actions/nested.rb +0 -244
  113. data/lib/active_scaffold/actions/search.rb +0 -48
  114. data/lib/active_scaffold/actions/show.rb +0 -61
  115. data/lib/active_scaffold/actions/subform.rb +0 -23
  116. data/lib/active_scaffold/actions/update.rb +0 -156
  117. data/lib/active_scaffold/active_record_permissions.rb +0 -135
  118. data/lib/active_scaffold/attribute_params.rb +0 -200
  119. data/lib/active_scaffold/bridges.rb +0 -61
  120. data/lib/active_scaffold/bridges/ancestry.rb +0 -5
  121. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +0 -39
  122. data/lib/active_scaffold/bridges/bitfields.rb +0 -6
  123. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +0 -37
  124. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -24
  125. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -66
  126. data/lib/active_scaffold/bridges/cancan.rb +0 -15
  127. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +0 -127
  128. data/lib/active_scaffold/bridges/carrierwave.rb +0 -12
  129. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +0 -31
  130. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +0 -10
  131. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +0 -45
  132. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +0 -17
  133. data/lib/active_scaffold/bridges/country_helper.rb +0 -9
  134. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +0 -358
  135. data/lib/active_scaffold/bridges/date_picker.rb +0 -23
  136. data/lib/active_scaffold/bridges/date_picker/ext.rb +0 -63
  137. data/lib/active_scaffold/bridges/date_picker/helper.rb +0 -180
  138. data/lib/active_scaffold/bridges/dragonfly.rb +0 -9
  139. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +0 -34
  140. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +0 -10
  141. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +0 -27
  142. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +0 -16
  143. data/lib/active_scaffold/bridges/file_column.rb +0 -11
  144. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +0 -46
  145. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +0 -57
  146. data/lib/active_scaffold/bridges/file_column/form_ui.rb +0 -34
  147. data/lib/active_scaffold/bridges/file_column/list_ui.rb +0 -26
  148. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +0 -43
  149. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +0 -9
  150. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +0 -15
  151. data/lib/active_scaffold/bridges/paperclip.rb +0 -12
  152. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +0 -27
  153. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +0 -16
  154. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +0 -36
  155. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +0 -24
  156. data/lib/active_scaffold/bridges/record_select.rb +0 -11
  157. data/lib/active_scaffold/bridges/record_select/helpers.rb +0 -92
  158. data/lib/active_scaffold/bridges/semantic_attributes.rb +0 -5
  159. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +0 -20
  160. data/lib/active_scaffold/bridges/shared/date_bridge.rb +0 -209
  161. data/lib/active_scaffold/bridges/tiny_mce.rb +0 -17
  162. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +0 -46
  163. data/lib/active_scaffold/config/base.rb +0 -75
  164. data/lib/active_scaffold/config/core.rb +0 -236
  165. data/lib/active_scaffold/config/create.rb +0 -32
  166. data/lib/active_scaffold/config/delete.rb +0 -32
  167. data/lib/active_scaffold/config/field_search.rb +0 -79
  168. data/lib/active_scaffold/config/form.rb +0 -64
  169. data/lib/active_scaffold/config/list.rb +0 -247
  170. data/lib/active_scaffold/config/mark.rb +0 -30
  171. data/lib/active_scaffold/config/nested.rb +0 -42
  172. data/lib/active_scaffold/config/search.rb +0 -73
  173. data/lib/active_scaffold/config/show.rb +0 -31
  174. data/lib/active_scaffold/config/subform.rb +0 -35
  175. data/lib/active_scaffold/config/update.rb +0 -33
  176. data/lib/active_scaffold/configurable.rb +0 -29
  177. data/lib/active_scaffold/constraints.rb +0 -171
  178. data/lib/active_scaffold/data_structures/action_columns.rb +0 -142
  179. data/lib/active_scaffold/data_structures/action_link.rb +0 -185
  180. data/lib/active_scaffold/data_structures/action_links.rb +0 -191
  181. data/lib/active_scaffold/data_structures/actions.rb +0 -45
  182. data/lib/active_scaffold/data_structures/bridge.rb +0 -22
  183. data/lib/active_scaffold/data_structures/column.rb +0 -401
  184. data/lib/active_scaffold/data_structures/columns.rb +0 -75
  185. data/lib/active_scaffold/data_structures/error_message.rb +0 -24
  186. data/lib/active_scaffold/data_structures/nested_info.rb +0 -171
  187. data/lib/active_scaffold/data_structures/set.rb +0 -61
  188. data/lib/active_scaffold/data_structures/sorting.rb +0 -167
  189. data/lib/active_scaffold/engine.rb +0 -4
  190. data/lib/active_scaffold/extensions/action_controller_rendering.rb +0 -20
  191. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +0 -7
  192. data/lib/active_scaffold/extensions/action_view_rendering.rb +0 -115
  193. data/lib/active_scaffold/extensions/active_record_offset.rb +0 -12
  194. data/lib/active_scaffold/extensions/array.rb +0 -7
  195. data/lib/active_scaffold/extensions/cache_association.rb +0 -16
  196. data/lib/active_scaffold/extensions/localize.rb +0 -10
  197. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +0 -12
  198. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +0 -7
  199. data/lib/active_scaffold/extensions/paginator_extensions.rb +0 -26
  200. data/lib/active_scaffold/extensions/reverse_associations.rb +0 -64
  201. data/lib/active_scaffold/extensions/routing_mapper.rb +0 -48
  202. data/lib/active_scaffold/extensions/to_label.rb +0 -8
  203. data/lib/active_scaffold/extensions/unsaved_associated.rb +0 -61
  204. data/lib/active_scaffold/extensions/unsaved_record.rb +0 -20
  205. data/lib/active_scaffold/extensions/usa_state.rb +0 -46
  206. data/lib/active_scaffold/finder.rb +0 -399
  207. data/lib/active_scaffold/helpers/association_helpers.rb +0 -42
  208. data/lib/active_scaffold/helpers/controller_helpers.rb +0 -94
  209. data/lib/active_scaffold/helpers/form_column_helpers.rb +0 -322
  210. data/lib/active_scaffold/helpers/human_condition_helpers.rb +0 -64
  211. data/lib/active_scaffold/helpers/id_helpers.rb +0 -131
  212. data/lib/active_scaffold/helpers/list_column_helpers.rb +0 -374
  213. data/lib/active_scaffold/helpers/pagination_helpers.rb +0 -62
  214. data/lib/active_scaffold/helpers/search_column_helpers.rb +0 -257
  215. data/lib/active_scaffold/helpers/show_column_helpers.rb +0 -44
  216. data/lib/active_scaffold/helpers/view_helpers.rb +0 -398
  217. data/lib/active_scaffold/marked_model.rb +0 -38
  218. data/lib/active_scaffold/paginator.rb +0 -136
  219. data/lib/active_scaffold/responds_to_parent.rb +0 -70
  220. data/lib/active_scaffold/tableless.rb +0 -83
  221. data/lib/active_scaffold/version.rb +0 -9
  222. data/lib/active_scaffold_env.rb +0 -13
  223. data/lib/generators/active_scaffold/USAGE +0 -29
  224. data/lib/generators/active_scaffold/active_scaffold_generator.rb +0 -21
  225. data/lib/generators/active_scaffold_controller/USAGE +0 -19
  226. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +0 -29
  227. data/lib/generators/active_scaffold_controller/templates/controller.rb +0 -4
  228. data/lib/generators/active_scaffold_controller/templates/helper.rb +0 -2
  229. data/public/blank.html +0 -33
  230. data/shoulda_macros/macros.rb +0 -136
  231. data/vendor/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  232. data/vendor/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  233. data/vendor/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
  234. data/vendor/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  235. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  236. data/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  237. data/vendor/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  238. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  239. data/vendor/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  240. data/vendor/assets/images/ui-icons_222222_256x240.png +0 -0
  241. data/vendor/assets/images/ui-icons_228ef1_256x240.png +0 -0
  242. data/vendor/assets/images/ui-icons_ef8c08_256x240.png +0 -0
  243. data/vendor/assets/images/ui-icons_ffd27a_256x240.png +0 -0
  244. data/vendor/assets/images/ui-icons_ffffff_256x240.png +0 -0
  245. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +0 -1276
  246. data/vendor/assets/stylesheets/jquery-ui.css +0 -568
@@ -1,75 +0,0 @@
1
- module ActiveScaffold::DataStructures
2
- class Columns
3
- include Enumerable
4
- include ActiveScaffold::Configurable
5
-
6
- # The motivation for this collection is that this Columns data structure fills two roles: it provides
7
- # the master list of all known columns, and it provides an inheritable list for all other actions (e.g.
8
- # Create and Update and List). Well we actually want to *know* about as many columns as possible, so
9
- # we don't want people actually removing columns from @set. But at the same time, we want to be able to
10
- # manage which columns get inherited. Tada!
11
- #
12
- # This collection is referenced by other parts of ActiveScaffold and by methods within this DataStructure.
13
- # IT IS NOT MEANT FOR PUBLIC USE (but if you know what you're doing, go ahead)
14
- def _inheritable=(value)
15
- @sorted = true
16
- @_inheritable = value
17
- end
18
-
19
- # This accessor is used by ActionColumns to create new Column objects without adding them to this set
20
- attr_reader :active_record_class
21
-
22
- def initialize(active_record_class, *args)
23
- @active_record_class = active_record_class
24
- @_inheritable = []
25
- @set = []
26
-
27
- self.add *args
28
- end
29
-
30
- # the way to add columns to the set. this is primarily useful for virtual columns.
31
- # note that this also makes columns inheritable
32
- def add(*args)
33
- args.flatten! # allow [] as a param
34
- args = args.collect{ |a| a.to_sym }
35
-
36
- # make the columns inheritable
37
- @_inheritable.concat(args)
38
- # then add columns to @set (unless they already exist)
39
- args.each { |a| @set << ActiveScaffold::DataStructures::Column.new(a.to_sym, @active_record_class) unless find_by_name(a) }
40
- end
41
- alias_method :<<, :add
42
-
43
- def exclude(*args)
44
- # only remove columns from _inheritable. we never want to completely forget about a column.
45
- args.each { |a| @_inheritable.delete a }
46
- end
47
-
48
- # returns an array of columns with the provided names
49
- def find_by_names(*names)
50
- @set.find_all { |column| names.include? column.name }
51
- end
52
-
53
- # returns the column of the given name.
54
- def find_by_name(name)
55
- # this works because of `def column.=='
56
- column = @set.find { |c| c == name }
57
- column
58
- end
59
- alias_method :[], :find_by_name
60
-
61
- def each
62
- @set.each {|i| yield i }
63
- end
64
-
65
- def _inheritable
66
- if @sorted
67
- @_inheritable
68
- else
69
- @_inheritable.sort do |a, b|
70
- self[a] <=> self[b]
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,24 +0,0 @@
1
- module ActiveScaffold::DataStructures
2
- # Wrapper for error strings so that they may be exported using to_xxx
3
- class ErrorMessage
4
- def initialize(error)
5
- @error = error
6
- end
7
-
8
- def public_attributes
9
- { :error => @error }
10
- end
11
-
12
- def to_xml
13
- public_attributes.to_xml(:root => "errors")
14
- end
15
-
16
- def to_yaml
17
- public_attributes.to_yaml
18
- end
19
-
20
- def to_s
21
- @error
22
- end
23
- end
24
- end
@@ -1,171 +0,0 @@
1
- module ActiveScaffold::DataStructures
2
- class NestedInfo
3
- def self.get(model, params)
4
- nested_info = {}
5
- begin
6
- nested_info[:name] = (params[:association] || params[:named_scope]).to_sym
7
- nested_info[:parent_scaffold] = "#{params[:parent_scaffold].to_s.camelize}Controller".constantize
8
- nested_info[:parent_model] = nested_info[:parent_scaffold].active_scaffold_config.model
9
- nested_info[:parent_id] = if params[:association].nil?
10
- params[nested_info[:parent_model].name.foreign_key]
11
- else
12
- params[nested_info[:parent_model].reflect_on_association(params[:association].to_sym).active_record.name.foreign_key]
13
- end
14
- if nested_info[:parent_id]
15
- unless params[:association].nil?
16
- ActiveScaffold::DataStructures::NestedInfoAssociation.new(model, nested_info)
17
- else
18
- ActiveScaffold::DataStructures::NestedInfoScope.new(model, nested_info)
19
- end
20
- end
21
- rescue ActiveScaffold::ControllerNotFound
22
- nil
23
- end
24
- end
25
-
26
- attr_accessor :association, :child_association, :parent_model, :parent_scaffold, :parent_id, :constrained_fields, :scope
27
-
28
- def initialize(model, nested_info)
29
- @parent_model = nested_info[:parent_model]
30
- @parent_id = nested_info[:parent_id]
31
- @parent_scaffold = nested_info[:parent_scaffold]
32
- end
33
-
34
- def to_params
35
- {:parent_scaffold => parent_scaffold.controller_path}
36
- end
37
-
38
- def new_instance?
39
- result = @new_instance.nil?
40
- @new_instance = false
41
- result
42
- end
43
-
44
- def parent_scope
45
- @parent_scope ||= parent_model.find(parent_id)
46
- end
47
-
48
- def habtm?
49
- false
50
- end
51
-
52
- def has_many?
53
- false
54
- end
55
-
56
- def belongs_to?
57
- false
58
- end
59
-
60
- def has_one?
61
- false
62
- end
63
-
64
- def singular_association?
65
- belongs_to? || has_one?
66
- end
67
-
68
- def plural_association?
69
- has_many? || habtm?
70
- end
71
-
72
- def through_association?
73
- false
74
- end
75
-
76
- def readonly?
77
- false
78
- end
79
-
80
- def sorted?
81
- false
82
- end
83
- end
84
-
85
- class NestedInfoAssociation < NestedInfo
86
- def initialize(model, nested_info)
87
- super(model, nested_info)
88
- @association = parent_model.reflect_on_association(nested_info[:name])
89
- iterate_model_associations(model)
90
- end
91
-
92
- def name
93
- self.association.name
94
- end
95
-
96
- def has_many?
97
- association.macro == :has_many
98
- end
99
-
100
- def habtm?
101
- association.macro == :has_and_belongs_to_many
102
- end
103
-
104
- def belongs_to?
105
- association.belongs_to?
106
- end
107
-
108
- def has_one?
109
- association.macro == :has_one
110
- end
111
-
112
- def through_association?
113
- association.options[:through]
114
- end
115
-
116
- def readonly?
117
- association.options[:readonly]
118
- end
119
-
120
- def sorted?
121
- association.options.has_key? :order
122
- end
123
-
124
- def default_sorting
125
- association.options[:order]
126
- end
127
-
128
- def to_params
129
- super.merge(:association => @association.name, :assoc_id => parent_id)
130
- end
131
-
132
- protected
133
-
134
- def iterate_model_associations(model)
135
- @constrained_fields = Set.new
136
- constrained_fields << association.foreign_key.to_sym unless association.belongs_to?
137
- model.reflect_on_all_associations.each do |current|
138
- if !current.belongs_to? && association != current && association.foreign_key.to_s == current.association_foreign_key.to_s
139
- constrained_fields << current.name.to_sym
140
- @child_association = current if current.klass == @parent_model
141
- end
142
- if association.foreign_key.to_s == current.foreign_key.to_s
143
- # show columns for has_many and has_one child associationes
144
- constrained_fields << current.name.to_sym if current.belongs_to?
145
- if association.options[:as] and current.options[:polymorphic]
146
- @child_association = current if association.options[:as].to_sym == current.name
147
- else
148
- @child_association = current if current.klass == @parent_model
149
- end
150
- end
151
- end
152
- @constrained_fields = @constrained_fields.to_a
153
- end
154
- end
155
-
156
- class NestedInfoScope < NestedInfo
157
- def initialize(model, nested_info)
158
- super(model, nested_info)
159
- @scope = nested_info[:name]
160
- @constrained_fields = []
161
- end
162
-
163
- def to_params
164
- super.merge(:named_scope => @scope)
165
- end
166
-
167
- def name
168
- self.scope
169
- end
170
- end
171
- end
@@ -1,61 +0,0 @@
1
- module ActiveScaffold::DataStructures
2
- class Set
3
- include Enumerable
4
- include ActiveScaffold::Configurable
5
-
6
- def initialize(*args)
7
- set_values(*args)
8
- end
9
-
10
- def set_values(*args)
11
- @set = []
12
- self.add *args
13
- end
14
-
15
- # the way to add items to the set.
16
- def add(*args)
17
- args.flatten! # allow [] as a param
18
- args.each { |arg|
19
- arg = arg.to_sym if arg.is_a? String
20
- @set << arg unless @set.include? arg # avoid duplicates
21
- }
22
- end
23
- alias_method :<<, :add
24
-
25
- # the way to remove items from the set.
26
- def exclude(*args)
27
- args.flatten! # allow [] as a param
28
- args.collect! { |a| a.to_sym } # symbolize the args
29
- # check respond_to? :to_sym, ActionColumns doesn't respond to to_sym
30
- @set.reject! { |c| c.respond_to? :to_sym and args.include? c.to_sym } # reject all items specified
31
- end
32
- alias_method :remove, :exclude
33
-
34
- # returns an array of items with the provided names
35
- def find_by_names(*names)
36
- @set.find_all { |item| names.include? item }
37
- end
38
-
39
- # returns the item of the given name.
40
- def find_by_name(name)
41
- # this works because of `def item.=='
42
- item = @set.find { |c| c == name }
43
- item
44
- end
45
- alias_method :[], :find_by_name
46
-
47
- def each
48
- @set.each {|i| yield i }
49
- end
50
-
51
- # returns the number of items in the set
52
- def length
53
- @set.length
54
- end
55
-
56
- def empty?
57
- @set.empty?
58
- end
59
-
60
- end
61
- end
@@ -1,167 +0,0 @@
1
- module ActiveScaffold::DataStructures
2
- # encapsulates the column sorting configuration for the List view
3
- class Sorting
4
- include Enumerable
5
-
6
- def initialize(columns)
7
- @columns = columns
8
- @clauses = []
9
- end
10
-
11
- def set_default_sorting(model)
12
- model_scope = model.send(:build_default_scope)
13
- order_clause = model_scope.arel.order_clauses.join(",") if model_scope
14
-
15
- # If an ORDER BY clause is found set default sorting according to it, else
16
- # fallback to setting primary key ordering
17
- if order_clause
18
- set_sorting_from_order_clause(order_clause, model.table_name)
19
- @default_sorting = true
20
- else
21
- set(model.primary_key, 'ASC') if model.column_names.include?(model.primary_key)
22
- end
23
- end
24
-
25
- def set_nested_sorting(table_name, order_clause)
26
- clear
27
- set_sorting_from_order_clause(order_clause, table_name)
28
- end
29
-
30
- # add a clause to the sorting, assuming the column is sortable
31
- def add(column_name, direction = nil)
32
- direction ||= 'ASC'
33
- direction = direction.to_s.upcase
34
- column = get_column(column_name)
35
- raise ArgumentError, "Sorting direction unknown" unless [:ASC, :DESC].include? direction.to_sym
36
- @clauses << [column, direction.untaint] if column and column.sortable?
37
- raise ArgumentError, "Can't mix :method- and :sql-based sorting" if mixed_sorting?
38
- end
39
-
40
- # an alias for +add+. must accept its arguments in a slightly different form, though.
41
- def <<(arg)
42
- add(*arg)
43
- end
44
-
45
- # clears the sorting before setting to the given column/direction
46
- def set(*args)
47
- clear
48
- add(*args)
49
- end
50
-
51
- # clears the sorting
52
- def clear
53
- @default_sorting = false
54
- @clauses = []
55
- end
56
-
57
- # checks whether the given column (a Column object or a column name) is in the sorting
58
- def sorts_on?(column)
59
- !get_clause(column).nil?
60
- end
61
-
62
- def direction_of(column)
63
- clause = get_clause(column)
64
- return if clause.nil?
65
- clause[1]
66
- end
67
-
68
- # checks whether any column is configured to sort by method (using a proc)
69
- def sorts_by_method?
70
- @clauses.any? { |sorting| sorting[0].sort.is_a? Hash and sorting[0].sort.has_key? :method }
71
- end
72
-
73
- def sorts_by_sql?
74
- @clauses.any? { |sorting| sorting[0].sort.is_a? Hash and sorting[0].sort.has_key? :sql }
75
- end
76
-
77
- # iterate over the clauses
78
- def each
79
- @clauses.each { |clause| yield clause }
80
- end
81
-
82
- # provides quick access to the first (and sometimes only) clause
83
- def first
84
- @clauses.first
85
- end
86
-
87
- # builds an order-by clause
88
- def clause
89
- return nil if sorts_by_method? || default_sorting?
90
-
91
- # unless the sorting is by method, create the sql string
92
- order = []
93
- each do |sort_column, sort_direction|
94
- sql = sort_column.sort[:sql]
95
- next if sql.nil? or sql.empty?
96
-
97
- order << Array(sql).map {|column| "#{column} #{sort_direction}"}.join(', ')
98
- end
99
-
100
- order unless order.empty?
101
- end
102
-
103
- protected
104
-
105
- # retrieves the sorting clause for the given column
106
- def get_clause(column)
107
- column = get_column(column)
108
- @clauses.find{ |clause| clause[0] == column}
109
- end
110
-
111
- # possibly converts the given argument into a column object from @columns (if it's not already)
112
- def get_column(name_or_column)
113
- # it's a column
114
- return name_or_column if name_or_column.is_a? ActiveScaffold::DataStructures::Column
115
- # it's a name
116
- name_or_column = name_or_column.to_s.split('.').last if name_or_column.to_s.include? '.'
117
- return @columns[name_or_column]
118
- end
119
-
120
- def mixed_sorting?
121
- sorts_by_method? and sorts_by_sql?
122
- end
123
-
124
- def default_sorting?
125
- @default_sorting
126
- end
127
-
128
- def set_sorting_from_order_clause(order_clause, model_table_name = nil)
129
- clear
130
- order_clause.to_s.split(',').each do |criterion|
131
- unless criterion.blank?
132
- order_parts = extract_order_parts(criterion)
133
- add(order_parts[:column_name], order_parts[:direction]) unless different_table?(model_table_name, order_parts[:table_name])
134
- end
135
- end
136
- end
137
-
138
- def extract_order_parts(criterion_parts)
139
- column_name_part, direction_part = criterion_parts.strip.split(' ')
140
- column_name_parts = column_name_part.split('.')
141
- order = {:direction => extract_direction(direction_part),
142
- :column_name => remove_quotes(column_name_parts.last)}
143
- order[:table_name] = remove_quotes(column_name_parts[-2]) if column_name_parts.length >= 2
144
- order
145
- end
146
-
147
- def different_table?(model_table_name, order_table_name)
148
- !order_table_name.nil? && model_table_name != order_table_name
149
- end
150
-
151
- def remove_quotes(sql_name)
152
- if sql_name.starts_with?('"') || sql_name.starts_with?('`')
153
- sql_name[1, (sql_name.length - 2)]
154
- else
155
- sql_name
156
- end
157
- end
158
-
159
- def extract_direction(direction_part)
160
- if direction_part.to_s.upcase == 'DESC'
161
- 'DESC'
162
- else
163
- 'ASC'
164
- end
165
- end
166
- end
167
- end