active_scaffold 3.4.17 → 3.4.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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +12 -1
  3. data/README.md +8 -4
  4. data/app/assets/javascripts/jquery/active_scaffold.js +82 -67
  5. data/app/assets/stylesheets/active_scaffold.scss +1 -1
  6. data/app/assets/stylesheets/active_scaffold_colors.scss +1 -1
  7. data/app/assets/stylesheets/blue-theme.css +1 -1
  8. data/app/views/active_scaffold_overrides/_form_association.html.erb +3 -3
  9. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +3 -3
  10. data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
  11. data/lib/active_scaffold.rb +16 -16
  12. data/lib/active_scaffold/actions/common_search.rb +13 -11
  13. data/lib/active_scaffold/actions/core.rb +85 -78
  14. data/lib/active_scaffold/actions/create.rb +29 -28
  15. data/lib/active_scaffold/actions/delete.rb +17 -17
  16. data/lib/active_scaffold/actions/field_search.rb +18 -19
  17. data/lib/active_scaffold/actions/list.rb +30 -22
  18. data/lib/active_scaffold/actions/mark.rb +1 -1
  19. data/lib/active_scaffold/actions/nested.rb +78 -65
  20. data/lib/active_scaffold/actions/search.rb +13 -10
  21. data/lib/active_scaffold/actions/show.rb +10 -6
  22. data/lib/active_scaffold/actions/subform.rb +1 -2
  23. data/lib/active_scaffold/actions/update.rb +39 -31
  24. data/lib/active_scaffold/active_record_permissions.rb +14 -15
  25. data/lib/active_scaffold/attribute_params.rb +42 -43
  26. data/lib/active_scaffold/bridges.rb +22 -12
  27. data/lib/active_scaffold/bridges/ancestry.rb +1 -1
  28. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +6 -6
  29. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  30. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +12 -13
  31. data/lib/active_scaffold/bridges/calendar_date_select.rb +5 -5
  32. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +17 -20
  33. data/lib/active_scaffold/bridges/cancan.rb +1 -1
  34. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +8 -9
  35. data/lib/active_scaffold/bridges/carrierwave.rb +4 -4
  36. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +9 -8
  37. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -10
  38. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +7 -6
  39. data/lib/active_scaffold/bridges/chosen.rb +1 -1
  40. data/lib/active_scaffold/bridges/chosen/helpers.rb +4 -4
  41. data/lib/active_scaffold/bridges/country_helper.rb +1 -1
  42. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +259 -260
  43. data/lib/active_scaffold/bridges/date_picker.rb +2 -2
  44. data/lib/active_scaffold/bridges/date_picker/ext.rb +9 -11
  45. data/lib/active_scaffold/bridges/date_picker/helper.rb +61 -67
  46. data/lib/active_scaffold/bridges/dragonfly.rb +4 -4
  47. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +9 -8
  48. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +11 -10
  49. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -5
  50. data/lib/active_scaffold/bridges/file_column.rb +5 -5
  51. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +20 -23
  52. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +20 -23
  53. data/lib/active_scaffold/bridges/file_column/form_ui.rb +13 -14
  54. data/lib/active_scaffold/bridges/file_column/list_ui.rb +7 -8
  55. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +18 -22
  56. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +5 -4
  57. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +2 -10
  58. data/lib/active_scaffold/bridges/paper_trail.rb +7 -5
  59. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +4 -3
  60. data/lib/active_scaffold/bridges/paperclip.rb +5 -5
  61. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +11 -10
  62. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +6 -5
  63. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +10 -9
  64. data/lib/active_scaffold/bridges/record_select.rb +1 -1
  65. data/lib/active_scaffold/bridges/record_select/helpers.rb +28 -28
  66. data/lib/active_scaffold/bridges/semantic_attributes.rb +1 -1
  67. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +1 -1
  68. data/lib/active_scaffold/bridges/shared/date_bridge.rb +58 -52
  69. data/lib/active_scaffold/bridges/tiny_mce.rb +2 -2
  70. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -3
  71. data/lib/active_scaffold/config/base.rb +9 -10
  72. data/lib/active_scaffold/config/core.rb +24 -29
  73. data/lib/active_scaffold/config/create.rb +0 -1
  74. data/lib/active_scaffold/config/field_search.rb +8 -10
  75. data/lib/active_scaffold/config/form.rb +5 -5
  76. data/lib/active_scaffold/config/list.rb +21 -20
  77. data/lib/active_scaffold/config/mark.rb +3 -3
  78. data/lib/active_scaffold/config/nested.rb +11 -10
  79. data/lib/active_scaffold/config/search.rb +2 -3
  80. data/lib/active_scaffold/config/show.rb +1 -1
  81. data/lib/active_scaffold/config/update.rb +1 -2
  82. data/lib/active_scaffold/configurable.rb +9 -11
  83. data/lib/active_scaffold/constraints.rb +9 -8
  84. data/lib/active_scaffold/core.rb +72 -84
  85. data/lib/active_scaffold/data_structures/action_columns.rb +26 -25
  86. data/lib/active_scaffold/data_structures/action_link.rb +43 -43
  87. data/lib/active_scaffold/data_structures/action_links.rb +17 -15
  88. data/lib/active_scaffold/data_structures/actions.rb +5 -5
  89. data/lib/active_scaffold/data_structures/bridge.rb +6 -3
  90. data/lib/active_scaffold/data_structures/column.rb +110 -89
  91. data/lib/active_scaffold/data_structures/columns.rb +3 -3
  92. data/lib/active_scaffold/data_structures/error_message.rb +4 -6
  93. data/lib/active_scaffold/data_structures/nested_info.rb +43 -48
  94. data/lib/active_scaffold/data_structures/set.rb +7 -8
  95. data/lib/active_scaffold/data_structures/sorting.rb +38 -33
  96. data/lib/active_scaffold/delayed_setup.rb +5 -6
  97. data/lib/active_scaffold/engine.rb +4 -4
  98. data/lib/active_scaffold/extensions/action_controller_rendering.rb +3 -4
  99. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
  100. data/lib/active_scaffold/extensions/action_view_rendering.rb +5 -6
  101. data/lib/active_scaffold/extensions/left_outer_joins.rb +11 -11
  102. data/lib/active_scaffold/extensions/localize.rb +1 -1
  103. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
  104. data/lib/active_scaffold/extensions/paginator_extensions.rb +2 -5
  105. data/lib/active_scaffold/extensions/reverse_associations.rb +13 -13
  106. data/lib/active_scaffold/extensions/routing_mapper.rb +9 -9
  107. data/lib/active_scaffold/extensions/unsaved_associated.rb +9 -9
  108. data/lib/active_scaffold/finder.rb +90 -93
  109. data/lib/active_scaffold/helpers/association_helpers.rb +5 -5
  110. data/lib/active_scaffold/helpers/controller_helpers.rb +22 -19
  111. data/lib/active_scaffold/helpers/form_column_helpers.rb +115 -105
  112. data/lib/active_scaffold/helpers/human_condition_helpers.rb +62 -35
  113. data/lib/active_scaffold/helpers/id_helpers.rb +6 -6
  114. data/lib/active_scaffold/helpers/list_column_helpers.rb +89 -94
  115. data/lib/active_scaffold/helpers/pagination_helpers.rb +9 -9
  116. data/lib/active_scaffold/helpers/search_column_helpers.rb +47 -44
  117. data/lib/active_scaffold/helpers/show_column_helpers.rb +2 -2
  118. data/lib/active_scaffold/helpers/view_helpers.rb +86 -91
  119. data/lib/active_scaffold/marked_model.rb +10 -10
  120. data/lib/active_scaffold/paginator.rb +30 -34
  121. data/lib/active_scaffold/responds_to_parent.rb +27 -28
  122. data/lib/active_scaffold/tableless.rb +20 -15
  123. data/lib/active_scaffold/version.rb +1 -1
  124. data/lib/generators/active_scaffold/active_scaffold_generator.rb +8 -8
  125. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +9 -9
  126. data/shoulda_macros/macros.rb +27 -22
  127. data/test/bridges/bridge_test.rb +38 -29
  128. data/test/bridges/date_picker_test.rb +1 -1
  129. data/test/bridges/paper_trail_test.rb +17 -0
  130. data/test/bridges/paperclip_test.rb +3 -2
  131. data/test/bridges/tiny_mce_test.rb +5 -2
  132. data/test/company.rb +25 -30
  133. data/test/config/base_test.rb +1 -1
  134. data/test/config/core_test.rb +9 -9
  135. data/test/config/create_test.rb +14 -8
  136. data/test/config/delete_test.rb +4 -4
  137. data/test/config/field_search_test.rb +6 -6
  138. data/test/config/list_test.rb +16 -16
  139. data/test/config/nested_test.rb +4 -4
  140. data/test/config/search_test.rb +8 -8
  141. data/test/config/show_test.rb +6 -6
  142. data/test/config/subform_test.rb +1 -1
  143. data/test/config/update_test.rb +5 -5
  144. data/test/const_mocker.rb +4 -4
  145. data/test/data_structures/action_columns_test.rb +4 -5
  146. data/test/data_structures/action_link_test.rb +1 -0
  147. data/test/data_structures/action_links_test.rb +5 -5
  148. data/test/data_structures/column_test.rb +9 -9
  149. data/test/data_structures/columns_test.rb +2 -2
  150. data/test/data_structures/error_message_test.rb +4 -5
  151. data/test/data_structures/set_test.rb +1 -2
  152. data/test/data_structures/sorting_test.rb +10 -10
  153. data/test/data_structures/validation_reflection_test.rb +8 -0
  154. data/test/extensions/routing_mapper_test.rb +2 -2
  155. data/test/helpers/list_column_helpers_test.rb +3 -2
  156. data/test/helpers/pagination_helpers_test.rb +5 -4
  157. data/test/helpers/search_column_helpers_test.rb +1 -1
  158. data/test/misc/active_record_permissions_test.rb +63 -50
  159. data/test/misc/attribute_params_test.rb +28 -26
  160. data/test/misc/calculation_test.rb +10 -3
  161. data/test/misc/configurable_test.rb +12 -13
  162. data/test/misc/constraints_test.rb +6 -6
  163. data/test/misc/convert_numbers_format_test.rb +7 -6
  164. data/test/misc/finder_test.rb +17 -12
  165. data/test/misc/lang_test.rb +3 -4
  166. data/test/misc/tableless_test.rb +2 -3
  167. data/test/mock_app/app/controllers/addresses_controller.rb +1 -1
  168. data/test/mock_app/app/controllers/buildings_controller.rb +1 -1
  169. data/test/mock_app/app/controllers/cars_controller.rb +1 -1
  170. data/test/mock_app/app/controllers/contacts_controller.rb +1 -1
  171. data/test/mock_app/app/controllers/people_controller.rb +1 -1
  172. data/test/mock_app/app/models/file_model.rb +2 -2
  173. data/test/mock_app/app/models/person.rb +1 -1
  174. data/test/mock_app/config/application.rb +3 -3
  175. data/test/mock_app/config/boot.rb +1 -1
  176. data/test/mock_app/config/environment.rb +1 -0
  177. data/test/mock_app/config/environments/development.rb +0 -1
  178. data/test/mock_app/config/environments/production.rb +1 -1
  179. data/test/mock_app/db/schema.rb +14 -15
  180. data/test/model_stub.rb +13 -16
  181. data/test/run_all.rb +5 -7
  182. data/test/test_helper.rb +12 -9
  183. metadata +19 -3
@@ -28,7 +28,7 @@ module ActiveScaffold::Config
28
28
 
29
29
  # show value of unauthorized columns instead of skip them
30
30
  attr_accessor :show_unauthorized_columns
31
-
31
+
32
32
  # the ActionLink for this action
33
33
  attr_accessor :link
34
34
 
@@ -45,14 +45,14 @@ module ActiveScaffold::Config
45
45
  def columns
46
46
  unless @columns # lazy evaluation
47
47
  self.columns = @core.columns._inheritable
48
- self.columns.exclude :created_on, :created_at, :updated_on, :updated_at, :as_marked
49
- self.columns.exclude *@core.columns.collect{|c| c.name if c.polymorphic_association?}.compact
48
+ columns.exclude :created_on, :created_at, :updated_on, :updated_at, :as_marked
49
+ columns.exclude *@core.columns.collect { |c| c.name if c.polymorphic_association? }.compact
50
50
  end
51
51
  @columns
52
52
  end
53
-
53
+
54
54
  public :columns=
55
-
55
+
56
56
  # whether the form should be multipart
57
57
  attr_writer :multipart
58
58
  def multipart?
@@ -9,7 +9,7 @@ module ActiveScaffold::Config
9
9
  @per_page = self.class.per_page
10
10
  @page_links_inner_window = self.class.page_links_inner_window
11
11
  @page_links_outer_window = self.class.page_links_outer_window
12
-
12
+
13
13
  # originates here
14
14
  @sorting = ActiveScaffold::DataStructures::Sorting.new(@core.columns)
15
15
  @sorting.set_default_sorting(@core.model)
@@ -47,7 +47,7 @@ module ActiveScaffold::Config
47
47
  # how many page links around first and last page to show
48
48
  cattr_accessor :page_links_outer_window
49
49
  @@page_links_outer_window = 0
50
-
50
+
51
51
  # what string to use when a field is empty
52
52
  cattr_accessor :empty_field_text
53
53
  @@empty_field_text = '-'
@@ -89,7 +89,7 @@ module ActiveScaffold::Config
89
89
  # Show search form in the list header instead of display the link
90
90
  cattr_accessor :always_show_search
91
91
  @@always_show_search = false
92
-
92
+
93
93
  # Show create form in the list header instead of display the link
94
94
  cattr_accessor :always_show_create
95
95
  @@always_show_create = false
@@ -111,7 +111,7 @@ module ActiveScaffold::Config
111
111
  self.columns = @core.columns._inheritable unless @columns # lazy evaluation
112
112
  @columns
113
113
  end
114
-
114
+
115
115
  public :columns=
116
116
 
117
117
  # include list header on refresh
@@ -125,7 +125,7 @@ module ActiveScaffold::Config
125
125
 
126
126
  # how many page links around current page to show
127
127
  attr_accessor :page_links_outer_window
128
-
128
+
129
129
  # What kind of pagination to use:
130
130
  # * true: The usual pagination
131
131
  # * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
@@ -160,10 +160,11 @@ module ActiveScaffold::Config
160
160
  val = [val] if val.is_a? Hash
161
161
  sorting.set *val
162
162
  end
163
+
163
164
  def sorting
164
165
  @sorting ||= ActiveScaffold::DataStructures::Sorting.new(@core.columns)
165
166
  end
166
-
167
+
167
168
  # overwrite the includes used for the count sql query
168
169
  attr_accessor :count_includes
169
170
 
@@ -182,25 +183,25 @@ module ActiveScaffold::Config
182
183
  def filtered_message
183
184
  @filtered_message ? @filtered_message : :filtered
184
185
  end
185
-
186
+
186
187
  attr_writer :always_show_search
187
188
  def always_show_search
188
189
  @always_show_search && !search_partial.blank?
189
190
  end
190
-
191
+
191
192
  def search_partial
192
193
  if @always_show_search == true
193
194
  auto_search_partial
194
195
  else
195
- @always_show_search.to_s if @core.actions.include? @always_show_search
196
+ @always_show_search.to_s if @core.actions.include? @always_show_search
196
197
  end
197
198
  end
198
-
199
+
199
200
  def auto_search_partial
200
- return "search" if @core.actions.include?(:search)
201
- return "field_search" if @core.actions.include?(:field_search)
201
+ return 'search' if @core.actions.include?(:search)
202
+ return 'field_search' if @core.actions.include?(:field_search)
202
203
  end
203
-
204
+
204
205
  # always show create
205
206
  attr_writer :always_show_create
206
207
  def always_show_create
@@ -212,11 +213,11 @@ module ActiveScaffold::Config
212
213
  def hide_nested_column
213
214
  @hide_nested_column.nil? ? true : @hide_nested_column
214
215
  end
215
-
216
+
216
217
  # wrap normal cells (not inplace editable columns or with link) with a tag
217
218
  # it allows for more css styling
218
219
  attr_accessor :wrap_tag
219
-
220
+
220
221
  # Enable auto select columns on list, so only columns needed for list columns are selected
221
222
  attr_accessor :auto_select_columns
222
223
 
@@ -229,7 +230,7 @@ module ActiveScaffold::Config
229
230
  super(conf, storage, params, :list)
230
231
  @sorting = nil
231
232
  end
232
-
233
+
233
234
  attr_writer :label
234
235
  # This label has already been localized.
235
236
  def label
@@ -237,12 +238,12 @@ module ActiveScaffold::Config
237
238
  end
238
239
 
239
240
  def per_page
240
- self['per_page'] = @params['limit'].to_i if @params.has_key? 'limit'
241
+ self['per_page'] = @params['limit'].to_i if @params.key? 'limit'
241
242
  self['per_page'] || @conf.per_page
242
243
  end
243
244
 
244
245
  def page
245
- self['page'] = @params['page'] || 1 if @params.has_key?('page') || @conf.auto_pagination
246
+ self['page'] = @params['page'] || 1 if @params.key?('page') || @conf.auto_pagination
246
247
  self['page'] || 1
247
248
  end
248
249
 
@@ -268,7 +269,7 @@ module ActiveScaffold::Config
268
269
  def sorting
269
270
  if @sorting.nil?
270
271
  # we want to store as little as possible in the session, but we want to return a Sorting data structure. so we recreate it each page load based on session data.
271
- self['sort'] = [@params['sort'], @params['sort_direction']] if @params['sort'] and @params['sort_direction']
272
+ self['sort'] = [@params['sort'], @params['sort_direction']] if @params['sort'] && @params['sort_direction']
272
273
  self['sort'] = nil if @params['sort_direction'] == 'reset'
273
274
 
274
275
  if self['sort']
@@ -284,7 +285,7 @@ module ActiveScaffold::Config
284
285
  end
285
286
  @sorting
286
287
  end
287
-
288
+
288
289
  def count_includes
289
290
  @conf.count_includes
290
291
  end
@@ -9,16 +9,16 @@ module ActiveScaffold::Config
9
9
  @@mark_all_mode = :search
10
10
 
11
11
  attr_accessor :mark_all_mode
12
-
12
+
13
13
  def initialize(core_config)
14
14
  @core = core_config
15
15
  @mark_all_mode = self.class.mark_all_mode
16
16
  @core.model.send(:include, ActiveScaffold::MarkedModel) unless @core.model < ActiveScaffold::MarkedModel
17
17
  add_mark_column
18
18
  end
19
-
19
+
20
20
  protected
21
-
21
+
22
22
  def add_mark_column
23
23
  @core.columns.add :as_marked
24
24
  @core.columns[:as_marked].label = 'M'
@@ -13,36 +13,37 @@ module ActiveScaffold::Config
13
13
  # --------------------------
14
14
  cattr_accessor :shallow_delete
15
15
  @@shallow_delete = true
16
-
16
+
17
17
  cattr_accessor :ignore_order_from_association
18
18
 
19
19
  # instance-level configuration
20
20
  # ----------------------------
21
21
  attr_accessor :shallow_delete
22
-
22
+
23
23
  attr_accessor :ignore_order_from_association
24
24
 
25
25
  # Add a nested ActionLink
26
26
  def add_link(attribute, options = {})
27
27
  column = @core.columns[attribute.to_sym]
28
28
  if column && column.association
29
- label = if column.polymorphic_association?
30
- column.label
31
- else
32
- column.association.klass.model_name.human({:count => column.singular_association? ? 1 : 2, :default => column.association.klass.name.pluralize})
33
- end
29
+ label =
30
+ if column.polymorphic_association?
31
+ column.label
32
+ else
33
+ column.association.klass.model_name.human(:count => column.singular_association? ? 1 : 2, :default => column.association.klass.name.pluralize)
34
+ end
34
35
  options.reverse_merge! :security_method => :nested_authorized?, :label => label
35
36
  action_group = options.delete(:action_group) || self.action_group
36
37
  action_link = @core.link_for_association(column, options)
37
38
  @core.action_links.add_to_group(action_link, action_group) unless action_link.nil?
38
39
  action_link
39
40
  elsif column.nil?
40
- raise ArgumentError.new("unknown column #{attribute}")
41
+ raise ArgumentError, "unknown column #{attribute}"
41
42
  elsif column.association.nil?
42
- raise ArgumentError.new("column #{attribute} is not an association")
43
+ raise ArgumentError, "column #{attribute} is not an association"
43
44
  end
44
45
  end
45
-
46
+
46
47
  def add_scoped_link(named_scope, options = {})
47
48
  action_link = @core.link_for_association_as_scope(named_scope.to_sym, options)
48
49
  @core.action_links.add_to_group(action_link, action_group) unless action_link.nil?
@@ -9,7 +9,6 @@ module ActiveScaffold::Config
9
9
  @split_terms = self.class.split_terms
10
10
  end
11
11
 
12
-
13
12
  # global level configuration
14
13
  # --------------------------
15
14
  # the ActionLink for this action
@@ -32,7 +31,7 @@ module ActiveScaffold::Config
32
31
  end
33
32
 
34
33
  cattr_accessor :split_terms
35
- @@split_terms = " "
34
+ @@split_terms = ' '
36
35
 
37
36
  # instance-level configuration
38
37
  # ----------------------------
@@ -41,7 +40,7 @@ module ActiveScaffold::Config
41
40
  def columns
42
41
  # we want to delay initializing to the @core.columns set for as long as possible. Too soon and .search_sql will not be available to .searchable?
43
42
  unless @columns
44
- self.columns = @core.columns.collect{|c| c.name if @core.columns._inheritable.include?(c.name) and c.searchable? and c.association.nil? and c.text?}.compact
43
+ self.columns = @core.columns.collect { |c| c.name if @core.columns._inheritable.include?(c.name) && c.searchable? && c.association.nil? && c.text? }.compact
45
44
  end
46
45
  @columns
47
46
  end
@@ -19,7 +19,7 @@ module ActiveScaffold::Config
19
19
  self.columns = @core.columns._inheritable unless @columns # lazy evaluation
20
20
  @columns
21
21
  end
22
-
22
+
23
23
  public :columns=
24
24
  end
25
25
  end
@@ -23,11 +23,10 @@ module ActiveScaffold::Config
23
23
  attr_accessor :nested_links
24
24
  cattr_accessor :nested_links
25
25
  @@nested_links = false
26
-
26
+
27
27
  attr_writer :hide_nested_column
28
28
  def hide_nested_column
29
29
  @hide_nested_column.nil? ? true : @hide_nested_column
30
30
  end
31
-
32
31
  end
33
32
  end
@@ -7,22 +7,20 @@ module ActiveScaffold
7
7
  module Configurable
8
8
  def configure(&configuration_block)
9
9
  return unless configuration_block
10
- @configuration_binding = eval("self", configuration_block.binding)
11
- ret = instance_exec self, &configuration_block
10
+ @configuration_binding = configuration_block.binding.eval('self')
11
+ ret = instance_exec(self, &configuration_block)
12
12
  @configuration_binding = nil
13
- return ret
13
+ ret
14
14
  end
15
15
 
16
16
  # this method will surely need tweaking. for example, i'm not sure if it should call super before or after it tries to eval with the binding.
17
17
  def method_missing(name, *args)
18
- begin
19
- super
20
- rescue NoMethodError, NameError
21
- if @configuration_binding.nil?
22
- raise $!
23
- else
24
- @configuration_binding.send(name, *args)
25
- end
18
+ super
19
+ rescue NoMethodError, NameError
20
+ if @configuration_binding.nil?
21
+ raise
22
+ else
23
+ @configuration_binding.send(name, *args)
26
24
  end
27
25
  end
28
26
  end
@@ -17,7 +17,7 @@ module ActiveScaffold
17
17
  # If the constraint value is a Hash, then we assume the constraint is a multi-level association constraint (the reverse of a has_many :through) and we do NOT register the constraint column.
18
18
  def register_constraints_with_action_columns(constrained_fields = nil)
19
19
  constrained_fields ||= []
20
- constrained_fields |= active_scaffold_constraints.reject{|k, v| v.is_a? Hash}.keys.collect(&:to_sym)
20
+ constrained_fields |= active_scaffold_constraints.reject { |_, v| v.is_a? Hash }.keys.collect(&:to_sym)
21
21
  exclude_actions = []
22
22
  [:list, :update].each do |action_name|
23
23
  if active_scaffold_config.actions.include? action_name
@@ -96,11 +96,12 @@ module ActiveScaffold
96
96
  #
97
97
  # please see the relevant tests for concrete examples.
98
98
 
99
- field = if [:has_one, :has_many, :has_and_belongs_to_many].include?(association.macro)
100
- association.klass.primary_key
101
- else
102
- association.options[:foreign_key] || association.name.to_s.foreign_key
103
- end
99
+ field =
100
+ if [:has_one, :has_many, :has_and_belongs_to_many].include?(association.macro)
101
+ association.klass.primary_key
102
+ else
103
+ association.options[:foreign_key] || association.name.to_s.foreign_key
104
+ end
104
105
 
105
106
  table = case association.macro
106
107
  when :belongs_to then active_scaffold_config.model.table_name
@@ -141,7 +142,7 @@ module ActiveScaffold
141
142
 
142
143
  active_scaffold_constraints.each do |k, v|
143
144
  column = active_scaffold_config.columns[k]
144
- if column and column.association
145
+ if column && column.association
145
146
  if column.plural_association?
146
147
  record.send("#{k}").send(:<<, column.association.klass.find(v))
147
148
  elsif column.association.options[:polymorphic]
@@ -156,7 +157,7 @@ module ActiveScaffold
156
157
  # note that we can't take the extra step to correct this unless we're permitted to
157
158
  # run operations where activerecord auto-saves the object.
158
159
  reverse = column.association.klass.reflect_on_association(column.association.reverse)
159
- if reverse.macro == :has_one and options[:allow_autosave]
160
+ if reverse.macro == :has_one && options[:allow_autosave]
160
161
  record.send(k).send("#{column.association.reverse}=", record)
161
162
  end
162
163
  end
@@ -11,7 +11,7 @@ module ActiveScaffold
11
11
  def active_scaffold_config_for(klass)
12
12
  self.class.active_scaffold_config_for(klass)
13
13
  end
14
-
14
+
15
15
  module ClassMethods
16
16
  def active_scaffold(model_id = nil, &block)
17
17
  extend Prefixes
@@ -19,26 +19,26 @@ module ActiveScaffold
19
19
  ActiveScaffold::Bridges.run_all
20
20
 
21
21
  # converts Foo::BarController to 'bar' and FooBarsController to 'foo_bar' and AddressController to 'address'
22
- model_id = self.to_s.split('::').last.sub(/Controller$/, '').pluralize.singularize.underscore unless model_id
22
+ model_id = to_s.split('::').last.sub(/Controller$/, '').pluralize.singularize.underscore unless model_id
23
23
 
24
24
  # run the configuration
25
25
  @active_scaffold_config = ActiveScaffold::Config::Core.new(model_id)
26
26
  @active_scaffold_config_block = block
27
- self.links_for_associations
28
-
29
- self.active_scaffold_superclasses_blocks.each {|superblock| self.active_scaffold_config.configure &superblock}
30
- self.active_scaffold_config.sti_children = nil # reset sti_children if set in parent block
31
- self.active_scaffold_config.configure &block if block_given?
32
- self.active_scaffold_config._configure_sti unless self.active_scaffold_config.sti_children.nil?
33
- self.active_scaffold_config._load_action_columns
27
+ links_for_associations
28
+
29
+ active_scaffold_superclasses_blocks.each { |superblock| active_scaffold_config.configure(&superblock) }
30
+ active_scaffold_config.sti_children = nil # reset sti_children if set in parent block
31
+ active_scaffold_config.configure(&block) if block_given?
32
+ active_scaffold_config._configure_sti unless active_scaffold_config.sti_children.nil?
33
+ active_scaffold_config._load_action_columns
34
34
 
35
35
  # defines the attribute read methods on the model, so record.send() doesn't find protected/private methods instead
36
- klass = self.active_scaffold_config.model
36
+ klass = active_scaffold_config.model
37
37
  # Rails 4.0.4 has removed attribute_methods_generated,
38
38
  # and made define_attribute_methods threadsave to call multiple times.
39
39
  # Check for that here.
40
- if ((Rails::VERSION::MAJOR == 4) && !klass.respond_to?(:attribute_methods_generated)) ||
41
- !klass.attribute_methods_generated?
40
+ if (Rails::VERSION::MAJOR == 4 && !klass.respond_to?(:attribute_methods_generated)) ||
41
+ !klass.attribute_methods_generated?
42
42
  klass.define_attribute_methods
43
43
  end
44
44
  # include the rest of the code into the controller: the action core and the included actions
@@ -50,21 +50,19 @@ module ActiveScaffold
50
50
  include ActiveScaffold::Actions::Core
51
51
  end
52
52
  active_scaffold_config.actions.each do |mod|
53
- name = mod.to_s.camelize
54
- include "ActiveScaffold::Actions::#{name}".constantize
53
+ include "ActiveScaffold::Actions::#{mod.to_s.camelize}".constantize
54
+ mod_conf = active_scaffold_config.send(mod)
55
+ next unless mod_conf.respond_to?(:link) && (link = mod_conf.link)
55
56
 
56
57
  # sneak the action links from the actions into the main set
57
- mod_conf = active_scaffold_config.send(mod)
58
- if mod_conf.respond_to?(:link) && (link = mod_conf.link)
59
- if link.is_a? Array
60
- link.each {|current| active_scaffold_config.action_links.add_to_group(current, active_scaffold_config.send(mod).action_group)}
61
- elsif link.is_a? ActiveScaffold::DataStructures::ActionLink
62
- active_scaffold_config.action_links.add_to_group(link, active_scaffold_config.send(mod).action_group)
63
- end
58
+ if link.is_a? Array
59
+ link.each { |current| active_scaffold_config.action_links.add_to_group(current, active_scaffold_config.send(mod).action_group) }
60
+ elsif link.is_a? ActiveScaffold::DataStructures::ActionLink
61
+ active_scaffold_config.action_links.add_to_group(link, active_scaffold_config.send(mod).action_group)
64
62
  end
65
63
  end
66
64
  end
67
- self._add_sti_create_links if self.active_scaffold_config.add_sti_create_links?
65
+ _add_sti_create_links if active_scaffold_config.add_sti_create_links?
68
66
  end
69
67
 
70
68
  module Prefixes
@@ -76,64 +74,59 @@ module ActiveScaffold
76
74
  # To be called after include action modules
77
75
  def _add_sti_create_links
78
76
  new_action_link = active_scaffold_config.action_links.collection['new']
79
- unless new_action_link.nil? || active_scaffold_config.sti_children.empty?
80
- active_scaffold_config.action_links.collection.delete('new')
81
- active_scaffold_config.sti_children.each do |child|
82
- new_sti_link = Marshal.load(Marshal.dump(new_action_link)) # deep clone
83
- new_sti_link.label = as_(:create_model, :model => child.to_s.camelize.constantize.model_name.human)
84
- new_sti_link.parameters = {:parent_sti => controller_path}
85
- new_sti_link.controller = Proc.new { active_scaffold_controller_for(child.to_s.camelize.constantize).controller_path }
86
- active_scaffold_config.action_links.collection.create.add(new_sti_link)
87
- end
77
+ return if new_action_link.nil? || active_scaffold_config.sti_children.empty?
78
+ active_scaffold_config.action_links.collection.delete('new')
79
+ active_scaffold_config.sti_children.each do |child|
80
+ new_sti_link = Marshal.load(Marshal.dump(new_action_link)) # deep clone
81
+ new_sti_link.label = as_(:create_model, :model => child.to_s.camelize.constantize.model_name.human)
82
+ new_sti_link.parameters = {:parent_sti => controller_path}
83
+ new_sti_link.controller = proc { active_scaffold_controller_for(child.to_s.camelize.constantize).controller_path }
84
+ active_scaffold_config.action_links.collection.create.add(new_sti_link)
88
85
  end
89
86
  end
90
87
 
91
88
  # Create the automatic column links. Note that this has to happen when configuration is *done*, because otherwise the Nested module could be disabled. Actually, it could still be disabled later, couldn't it?
92
89
  def links_for_associations
93
- return unless active_scaffold_config.actions.include? :list and active_scaffold_config.actions.include? :nested
90
+ return unless active_scaffold_config.actions.include?(:list) && active_scaffold_config.actions.include?(:nested)
94
91
  active_scaffold_config.columns.each do |column|
95
- next unless column.link.nil? and column.autolink?
96
- #lazy load of action_link, cause it was really slowing down app in dev mode
97
- #and might lead to trouble cause of cyclic constantization of controllers
98
- #and might be unnecessary cause it is done before columns are configured
99
- column.set_link(Proc.new {|col| link_for_association(col)})
92
+ next unless column.link.nil? && column.autolink?
93
+ # lazy load of action_link, cause it was really slowing down app in dev mode
94
+ # and might lead to trouble cause of cyclic constantization of controllers
95
+ # and might be unnecessary cause it is done before columns are configured
96
+ column.set_link(proc { |col| link_for_association(col) })
100
97
  end
101
98
  end
102
-
99
+
103
100
  def active_scaffold_controller_for_column(column, options = {})
104
- begin
105
- if column.polymorphic_association?
106
- :polymorph
107
- elsif options.include?(:controller)
108
- "#{options[:controller].to_s.camelize}Controller".constantize
109
- else
110
- active_scaffold_controller_for(column.association.klass)
111
- end
112
- rescue ActiveScaffold::ControllerNotFound
113
- nil
101
+ if column.polymorphic_association?
102
+ :polymorph
103
+ elsif options.include?(:controller)
104
+ "#{options[:controller].to_s.camelize}Controller".constantize
105
+ else
106
+ active_scaffold_controller_for(column.association.klass)
114
107
  end
108
+ rescue ActiveScaffold::ControllerNotFound
109
+ nil
115
110
  end
116
-
111
+
117
112
  def link_for_association(column, options = {})
118
- controller = active_scaffold_controller_for_column(column, options)
119
-
120
- unless controller.nil?
121
- options.reverse_merge! :position => :after, :type => :member, :controller => (controller == :polymorph ? controller : "/#{controller.controller_path}"), :column => column
122
- options[:parameters] ||= {}
123
- options[:parameters].reverse_merge! :association => column.association.name
124
- if column.plural_association?
125
- ActiveScaffold::DataStructures::ActionLink.new('index', options.merge(:refresh_on_close => true))
126
- else
127
- actions = controller.active_scaffold_config.actions unless controller == :polymorph
128
- actions ||= [:create, :update, :show]
129
- column.actions_for_association_links.delete :new unless actions.include? :create
130
- column.actions_for_association_links.delete :edit unless actions.include? :update
131
- column.actions_for_association_links.delete :show unless actions.include? :show
132
- ActiveScaffold::DataStructures::ActionLink.new(nil, options.merge(:html_options => {:class => column.name}))
133
- end
113
+ return if (controller = active_scaffold_controller_for_column(column, options)).nil?
114
+ options.reverse_merge! :position => :after, :type => :member, :column => column,
115
+ :controller => (controller == :polymorph ? controller : "/#{controller.controller_path}")
116
+ options[:parameters] ||= {}
117
+ options[:parameters].reverse_merge! :association => column.association.name
118
+ if column.plural_association?
119
+ ActiveScaffold::DataStructures::ActionLink.new('index', options.merge(:refresh_on_close => true))
120
+ else
121
+ actions = controller.active_scaffold_config.actions unless controller == :polymorph
122
+ actions ||= [:create, :update, :show]
123
+ column.actions_for_association_links.delete :new unless actions.include? :create
124
+ column.actions_for_association_links.delete :edit unless actions.include? :update
125
+ column.actions_for_association_links.delete :show unless actions.include? :show
126
+ ActiveScaffold::DataStructures::ActionLink.new(nil, options.merge(:html_options => {:class => column.name}))
134
127
  end
135
128
  end
136
-
129
+
137
130
  def link_for_association_as_scope(scope, options = {})
138
131
  options.reverse_merge! :label => scope, :position => :after, :type => :member, :controller => controller_path
139
132
  options[:parameters] ||= {}
@@ -145,7 +138,7 @@ module ActiveScaffold
145
138
  as_path = File.join(ActiveScaffold::Config::Core.plugin_directory, 'app', 'views')
146
139
  index = view_paths.find_index { |p| p.to_s == as_path }
147
140
  if index
148
- self.view_paths = view_paths[0..index-1] + Array(path) + view_paths[index..-1]
141
+ self.view_paths = view_paths[0..index - 1] + Array(path) + view_paths[index..-1]
149
142
  else
150
143
  append_view_path path
151
144
  end
@@ -153,19 +146,17 @@ module ActiveScaffold
153
146
 
154
147
  def active_scaffold_config
155
148
  if @active_scaffold_config.nil?
156
- self.superclass.active_scaffold_config if self.superclass.respond_to? :active_scaffold_config
149
+ superclass.active_scaffold_config if superclass.respond_to? :active_scaffold_config
157
150
  else
158
151
  @active_scaffold_config
159
152
  end
160
153
  end
161
154
 
162
- def active_scaffold_config_block
163
- @active_scaffold_config_block
164
- end
155
+ attr_reader :active_scaffold_config_block
165
156
 
166
157
  def active_scaffold_superclasses_blocks
167
158
  blocks = []
168
- klass = self.superclass
159
+ klass = superclass
169
160
  while klass.respond_to? :active_scaffold_superclasses_blocks
170
161
  blocks << klass.active_scaffold_config_block
171
162
  klass = klass.superclass
@@ -174,23 +165,20 @@ module ActiveScaffold
174
165
  end
175
166
 
176
167
  def active_scaffold_config_for(klass)
177
- begin
178
- controller = active_scaffold_controller_for(klass)
179
- rescue ActiveScaffold::ControllerNotFound
180
- config = ActiveScaffold::Config::Core.new(klass)
181
- config._load_action_columns
182
- config
183
- else
184
- controller.active_scaffold_config
185
- end
168
+ controller = active_scaffold_controller_for(klass)
169
+ rescue ActiveScaffold::ControllerNotFound
170
+ config = ActiveScaffold::Config::Core.new(klass)
171
+ config._load_action_columns
172
+ config
173
+ else
174
+ controller.active_scaffold_config
186
175
  end
187
176
 
188
177
  def active_scaffold_controller_for(klass)
189
178
  return self if uses_active_scaffold? && klass == active_scaffold_config.model
190
- ActiveScaffold::Core.active_scaffold_controller_for(klass, self.to_s.deconstantize + '::')
179
+ ActiveScaffold::Core.active_scaffold_controller_for(klass, to_s.deconstantize + '::')
191
180
  end
192
181
 
193
-
194
182
  def uses_active_scaffold?
195
183
  !active_scaffold_config.nil?
196
184
  end
@@ -220,7 +208,7 @@ module ActiveScaffold
220
208
  return controller
221
209
  end
222
210
  end
223
- raise ActiveScaffold::ControllerNotFound, "Could not find " + error_message.join(" or "), caller
211
+ raise ActiveScaffold::ControllerNotFound, 'Could not find ' + error_message.join(' or '), caller
224
212
  end
225
213
 
226
214
  def self.column_type_cast(value, column)