active_scaffold 3.2.7 → 3.2.8

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 (50) hide show
  1. data/CHANGELOG +16 -1
  2. data/app/assets/javascripts/jquery/active_scaffold.js +50 -16
  3. data/app/assets/javascripts/jquery/jquery.editinplace.js +6 -6
  4. data/app/assets/javascripts/prototype/active_scaffold.js +39 -15
  5. data/app/assets/stylesheets/active_scaffold_layout.css +24 -1
  6. data/frontends/default/views/_base_form.html.erb +9 -10
  7. data/frontends/default/views/_form.html.erb +8 -7
  8. data/frontends/default/views/_form_attribute.html.erb +6 -3
  9. data/frontends/default/views/_form_messages.html.erb +3 -3
  10. data/frontends/default/views/_horizontal_subform_record.html.erb +1 -1
  11. data/frontends/default/views/_list_calculations.html.erb +1 -1
  12. data/frontends/default/views/_list_messages.html.erb +10 -13
  13. data/frontends/default/views/_list_record_columns.html.erb +2 -2
  14. data/frontends/default/views/_messages.html.erb +1 -1
  15. data/frontends/default/views/_refresh_list.js.erb +1 -0
  16. data/frontends/default/views/_row.html.erb +2 -2
  17. data/frontends/default/views/_search.html.erb +2 -2
  18. data/frontends/default/views/_update_calculations.js.erb +4 -0
  19. data/frontends/default/views/_update_messages.js.erb +2 -0
  20. data/frontends/default/views/_vertical_subform_record.html.erb +1 -1
  21. data/frontends/default/views/add_existing.js.erb +2 -6
  22. data/frontends/default/views/destroy.js.erb +25 -23
  23. data/frontends/default/views/on_action_update.js.erb +21 -12
  24. data/frontends/default/views/on_create.js.erb +24 -21
  25. data/frontends/default/views/on_update.js.erb +19 -18
  26. data/frontends/default/views/refresh_list.js.erb +2 -1
  27. data/frontends/default/views/row.js.erb +1 -0
  28. data/frontends/default/views/update_column.js.erb +14 -15
  29. data/lib/active_scaffold.rb +1 -1
  30. data/lib/active_scaffold/actions/core.rb +6 -2
  31. data/lib/active_scaffold/actions/create.rb +9 -12
  32. data/lib/active_scaffold/actions/delete.rb +1 -4
  33. data/lib/active_scaffold/actions/list.rb +15 -12
  34. data/lib/active_scaffold/actions/mark.rb +1 -2
  35. data/lib/active_scaffold/actions/nested.rb +2 -1
  36. data/lib/active_scaffold/actions/update.rb +5 -8
  37. data/lib/active_scaffold/config/list.rb +18 -0
  38. data/lib/active_scaffold/constraints.rb +2 -12
  39. data/lib/active_scaffold/data_structures/column.rb +5 -2
  40. data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
  41. data/lib/active_scaffold/finder.rb +11 -7
  42. data/lib/active_scaffold/helpers/controller_helpers.rb +16 -6
  43. data/lib/active_scaffold/helpers/form_column_helpers.rb +10 -20
  44. data/lib/active_scaffold/helpers/id_helpers.rb +2 -2
  45. data/lib/active_scaffold/helpers/list_column_helpers.rb +15 -20
  46. data/lib/active_scaffold/helpers/search_column_helpers.rb +15 -27
  47. data/lib/active_scaffold/helpers/show_column_helpers.rb +9 -20
  48. data/lib/active_scaffold/helpers/view_helpers.rb +20 -1
  49. data/lib/active_scaffold/version.rb +1 -1
  50. metadata +8 -4
@@ -48,8 +48,7 @@ module ActiveScaffold::Actions
48
48
  end
49
49
  else
50
50
  if !nested? && active_scaffold_config.actions.include?(:list) && active_scaffold_config.list.always_show_create
51
- do_list
52
- render(:action => 'list')
51
+ list
53
52
  else
54
53
  render(:action => 'create')
55
54
  end
@@ -58,10 +57,7 @@ module ActiveScaffold::Actions
58
57
  end
59
58
 
60
59
  def create_respond_to_js
61
- if successful? && active_scaffold_config.create.refresh_list && !render_parent?
62
- do_search if respond_to? :do_search
63
- do_list
64
- end
60
+ do_refresh_list if successful? && active_scaffold_config.create.refresh_list && !render_parent?
65
61
  render :action => 'on_create'
66
62
  end
67
63
 
@@ -84,26 +80,27 @@ module ActiveScaffold::Actions
84
80
  apply_constraints_to_record(@record)
85
81
  if nested?
86
82
  create_association_with_parent(@record)
87
- register_constraints_with_action_columns(nested.constrained_fields)
83
+ register_constraints_with_action_columns
88
84
  end
89
85
  @record
90
86
  end
91
87
 
92
88
  # A somewhat complex method to actually create a new record. The complexity is from support for subforms and associated records.
93
89
  # If you want to customize this behavior, consider using the +before_create_save+ and +after_create_save+ callbacks.
94
- def do_create
90
+ def do_create(hash = nil)
91
+ hash ||= params[:record]
95
92
  begin
96
93
  active_scaffold_config.model.transaction do
97
- @record = update_record_from_params(new_model, active_scaffold_config.create.columns, params[:record])
94
+ @record = update_record_from_params(new_model, active_scaffold_config.create.columns, hash)
98
95
  apply_constraints_to_record(@record, :allow_autosave => true)
99
96
  if nested?
100
97
  create_association_with_parent(@record)
101
- register_constraints_with_action_columns(nested.constrained_fields)
98
+ register_constraints_with_action_columns
102
99
  end
103
100
  create_save
104
101
  end
105
- rescue ActiveRecord::RecordInvalid
106
- flash[:error] = $!.message
102
+ rescue ActiveRecord::ActiveRecordError => ex
103
+ flash[:error] = ex.message
107
104
  self.successful = false
108
105
  end
109
106
  end
@@ -23,10 +23,7 @@ module ActiveScaffold::Actions
23
23
  end
24
24
 
25
25
  def destroy_respond_to_js
26
- if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
27
- do_search if respond_to? :do_search
28
- do_list
29
- end
26
+ do_refresh_list if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
30
27
  render(:action => 'destroy')
31
28
  end
32
29
 
@@ -16,7 +16,11 @@ module ActiveScaffold::Actions
16
16
  end
17
17
 
18
18
  def list
19
- do_list
19
+ if %w(index list).include? action_name
20
+ do_list
21
+ else
22
+ do_refresh_list
23
+ end
20
24
  @nested_auto_open = active_scaffold_config.list.nested_auto_open
21
25
  respond_to_action(:list)
22
26
  end
@@ -33,7 +37,7 @@ module ActiveScaffold::Actions
33
37
  if params[:adapter] || embedded?
34
38
  render(:partial => 'list_with_header')
35
39
  else
36
- render :action => 'refresh_list', :formats => [:js]
40
+ render :partial => 'refresh_list', :formats => [:js]
37
41
  end
38
42
  end
39
43
  def list_respond_to_xml
@@ -78,6 +82,11 @@ module ActiveScaffold::Actions
78
82
  end
79
83
  @page, @records = page, page.items
80
84
  end
85
+
86
+ def do_refresh_list
87
+ do_search if respond_to? :do_search
88
+ do_list
89
+ end
81
90
 
82
91
  def each_record_in_page
83
92
  _page = active_scaffold_config.list.user.page
@@ -89,13 +98,7 @@ module ActiveScaffold::Actions
89
98
 
90
99
  def each_record_in_scope
91
100
  do_search if respond_to? :do_search
92
- finder_options = { :order => "#{active_scaffold_config.model.connection.quote_table_name(active_scaffold_config.model.table_name)}.#{active_scaffold_config.model.primary_key} ASC",
93
- :conditions => all_conditions,
94
- :joins => joins_for_finder}
95
- finder_options.merge! custom_finder_options
96
- finder_options.merge! :include => (active_scaffold_includes.blank? ? nil : active_scaffold_includes)
97
- klass = beginning_of_chain
98
- klass.all(finder_options).each {|record| yield record}
101
+ append_to_query(beginning_of_chain, finder_options).all.each {|record| yield record}
99
102
  end
100
103
 
101
104
  # The default security delegates to ActiveRecordPermissions.
@@ -117,6 +120,7 @@ module ActiveScaffold::Actions
117
120
  @record = find_if_allowed(params[:id], :read) if params[:id] && params[:id] && params[:id].to_i > 0
118
121
  respond_to_action(:action_confirmation)
119
122
  else
123
+ @action_link = active_scaffold_config.action_links[action_name]
120
124
  if params[:id] && params[:id] && params[:id].to_i > 0
121
125
  crud_type ||= (request.post? || request.put?) ? :update : :delete
122
126
  @record = find_if_allowed(params[:id], crud_type)
@@ -139,12 +143,11 @@ module ActiveScaffold::Actions
139
143
  end
140
144
 
141
145
  def action_update_respond_to_html
142
- do_search if respond_to? :do_search
143
- do_list
144
146
  redirect_to :action => 'index'
145
147
  end
146
148
 
147
149
  def action_update_respond_to_js
150
+ do_refresh_list unless @record.present?
148
151
  render(:action => 'on_action_update')
149
152
  end
150
153
 
@@ -171,7 +174,7 @@ module ActiveScaffold::Actions
171
174
  alias_method :index_formats, :list_formats
172
175
 
173
176
  def row_formats
174
- ([:html] + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
177
+ ([:html, :js] + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
175
178
  end
176
179
 
177
180
  def action_update_formats
@@ -13,17 +13,16 @@ module ActiveScaffold::Actions
13
13
  else
14
14
  do_unmark
15
15
  end
16
+ do_list
16
17
  respond_to_action(:mark_all)
17
18
  end
18
19
  protected
19
20
 
20
21
  def mark_all_respond_to_html
21
- do_list
22
22
  list_respond_to_html
23
23
  end
24
24
 
25
25
  def mark_all_respond_to_js
26
- do_list
27
26
  render :action => 'on_mark_all', :locals => {:mark_all => mark_all?}
28
27
  end
29
28
 
@@ -27,8 +27,9 @@ module ActiveScaffold::Actions
27
27
  if params[:parent_scaffold] && (params[:association] || params[:named_scope])
28
28
  @nested = ActiveScaffold::DataStructures::NestedInfo.get(active_scaffold_config.model, params)
29
29
  unless @nested.nil?
30
+ active_scaffold_constraints.merge! @nested.constraints
30
31
  active_scaffold_constraints[:id] = params[:id] if @nested.belongs_to?
31
- register_constraints_with_action_columns(@nested.constrained_fields, active_scaffold_config.list.hide_nested_column ? [] : [:list])
32
+ register_constraints_with_action_columns
32
33
  end
33
34
  end
34
35
  end
@@ -48,10 +48,7 @@ module ActiveScaffold::Actions
48
48
  end
49
49
  def update_respond_to_js
50
50
  if successful?
51
- if update_refresh_list? && !render_parent?
52
- do_search if respond_to? :do_search
53
- do_list
54
- end
51
+ do_refresh_list if update_refresh_list? && !render_parent?
55
52
  flash.now[:info] = as_(:updated_model, :model => @record.to_label) if active_scaffold_config.update.persistent
56
53
  end
57
54
  render :action => 'on_update'
@@ -68,7 +65,7 @@ module ActiveScaffold::Actions
68
65
  # A simple method to find and prepare a record for editing
69
66
  # May be overridden to customize the record (set default values, etc.)
70
67
  def do_edit
71
- register_constraints_with_action_columns(nested.constrained_fields, active_scaffold_config.update.hide_nested_column ? [] : [:update]) if nested?
68
+ register_constraints_with_action_columns(active_scaffold_config.update.hide_nested_column ? [] : [:update]) if nested?
72
69
  @record = find_if_allowed(params[:id], :update)
73
70
  end
74
71
 
@@ -94,15 +91,15 @@ module ActiveScaffold::Actions
94
91
  raise ActiveRecord::Rollback, "don't save habtm associations unless record is valid"
95
92
  end
96
93
  end
97
- rescue ActiveRecord::RecordInvalid
98
- flash[:error] = $!.message
99
- self.successful = false
100
94
  rescue ActiveRecord::StaleObjectError
101
95
  @record.errors.add(:base, as_(:version_inconsistency))
102
96
  self.successful = false
103
97
  rescue ActiveRecord::RecordNotSaved
104
98
  @record.errors.add(:base, as_(:record_not_saved)) if @record.errors.empty?
105
99
  self.successful = false
100
+ rescue ActiveRecord::ActiveRecordError => ex
101
+ flash[:error] = ex.message
102
+ self.successful = false
106
103
  end
107
104
  end
108
105
 
@@ -19,7 +19,9 @@ module ActiveScaffold::Config
19
19
  @association_join_text = self.class.association_join_text
20
20
  @pagination = self.class.pagination
21
21
  @show_search_reset = true
22
+ @reset_link = self.class.reset_link.clone
22
23
  @mark_records = self.class.mark_records
24
+ @wrap_tag = self.class.wrap_tag
23
25
  end
24
26
 
25
27
  # global level configuration
@@ -61,6 +63,15 @@ module ActiveScaffold::Config
61
63
  # Add a checkbox in front of each record to mark them and use them with a batch action later
62
64
  cattr_accessor :mark_records
63
65
 
66
+ # the ActionLink to reset search
67
+ cattr_accessor :reset_link
68
+ @@reset_link = ActiveScaffold::DataStructures::ActionLink.new('index', :label => :click_to_reset, :type => :collection, :position => false)
69
+
70
+ # wrap normal cells (not inplace editable columns or with link) with a tag
71
+ # it allows for more css styling
72
+ cattr_accessor :wrap_tag
73
+ @@wrap_tag = nil
74
+
64
75
  # instance-level configuration
65
76
  # ----------------------------
66
77
 
@@ -101,6 +112,9 @@ module ActiveScaffold::Config
101
112
  # show a link to reset the search next to filtered message
102
113
  attr_accessor :show_search_reset
103
114
 
115
+ # the ActionLink to reset search
116
+ attr_reader :reset_link
117
+
104
118
  # Add a checkbox in front of each record to mark them and use them with a batch action later
105
119
  attr_accessor :mark_records
106
120
 
@@ -161,6 +175,10 @@ module ActiveScaffold::Config
161
175
  # will open nested players view if there are 2 or less records in parent
162
176
  attr_accessor :nested_auto_open
163
177
 
178
+ # wrap normal cells (not inplace editable columns or with link) with a tag
179
+ # it allows for more css styling
180
+ attr_accessor :wrap_tag
181
+
164
182
  class UserSettings < UserSettings
165
183
  def initialize(conf, storage, params)
166
184
  super(conf,storage,params)
@@ -8,23 +8,13 @@ module ActiveScaffold
8
8
  @active_scaffold_constraints ||= active_scaffold_session_storage[:constraints] || {}
9
9
  end
10
10
 
11
- def set_active_scaffold_constraints
12
- associations_by_params = {}
13
- active_scaffold_config.model.reflect_on_all_associations.each do |association|
14
- associations_by_params[association.klass.name.foreign_key] = association.name unless association.options[:polymorphic]
15
- end
16
- params.each do |key, value|
17
- active_scaffold_constraints[associations_by_params[key]] = value if associations_by_params.include? key
18
- end
19
- end
20
-
21
11
  # For each enabled action, adds the constrained columns to the ActionColumns object (if it exists).
22
12
  # This lets the ActionColumns object skip constrained columns.
23
13
  #
24
14
  # 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.
25
- def register_constraints_with_action_columns(association_constrained_fields = [], exclude_actions = [])
15
+ def register_constraints_with_action_columns(exclude_actions = [])
26
16
  constrained_fields = active_scaffold_constraints.reject{|k, v| v.is_a? Hash}.keys.collect{|k| k.to_sym}
27
- constrained_fields = constrained_fields | association_constrained_fields
17
+ exclude_actions << :list unless active_scaffold_config.list.hide_nested_column
28
18
  if self.class.uses_active_scaffold?
29
19
  # we actually want to do this whether constrained_fields exist or not, so that we can reset the array when they don't
30
20
  active_scaffold_config.actions.each do |action_name|
@@ -67,7 +67,10 @@ module ActiveScaffold::DataStructures
67
67
  attr_accessor :send_form_on_update_column
68
68
 
69
69
  # column to be updated in a form when this column changes
70
- attr_accessor :update_column
70
+ def update_column=(column_name)
71
+ ActiveSupport::Deprecation.warn "Use update_columns= instead of update_column="
72
+ self.update_columns = column_name
73
+ end
71
74
 
72
75
  # send all the form instead of only new value when this column change
73
76
  cattr_accessor :send_form_on_update_column
@@ -165,7 +168,7 @@ module ActiveScaffold::DataStructures
165
168
  attr_reader :includes
166
169
  def includes=(value)
167
170
  @includes = case value
168
- when Array, Hash then value
171
+ when Array then value
169
172
  else [value] # automatically convert to an array
170
173
  end
171
174
  end
@@ -19,7 +19,7 @@ module ActiveScaffold::DataStructures
19
19
  end
20
20
  end
21
21
 
22
- attr_accessor :association, :child_association, :parent_model, :parent_scaffold, :parent_id, :constrained_fields, :scope
22
+ attr_accessor :association, :child_association, :parent_model, :parent_scaffold, :parent_id, :constrained_fields, :constraints, :scope
23
23
 
24
24
  def initialize(model, nested_info)
25
25
  @parent_model = nested_info[:parent_model]
@@ -108,16 +108,16 @@ module ActiveScaffold::DataStructures
108
108
  protected
109
109
 
110
110
  def iterate_model_associations(model)
111
- @constrained_fields = []
112
- @constrained_fields << association.foreign_key.to_sym unless association.belongs_to?
111
+ @constraints = {}
112
+ @constraints[association.foreign_key.to_sym] = parent_id unless association.belongs_to?
113
113
  model.reflect_on_all_associations.each do |current|
114
114
  if !current.belongs_to? && association.foreign_key == current.association_foreign_key
115
- constrained_fields << current.name.to_sym
115
+ constraints[current.name.to_sym] = parent_id
116
116
  @child_association = current if current.klass == @parent_model
117
117
  end
118
118
  if association.foreign_key == current.foreign_key
119
119
  # show columns for has_many and has_one child associationes
120
- constrained_fields << current.name.to_sym if current.belongs_to?
120
+ constraints[current.name.to_sym] = parent_id if current.belongs_to?
121
121
  if association.options[:as] and current.options[:polymorphic]
122
122
  @child_association = current if association.options[:as].to_sym == current.name
123
123
  else
@@ -125,6 +125,7 @@ module ActiveScaffold::DataStructures
125
125
  end
126
126
  end
127
127
  end
128
+ @constrained_fields = @constraints.keys
128
129
  end
129
130
  end
130
131
 
@@ -121,11 +121,17 @@ module ActiveScaffold
121
121
  Date.strptime(value, I18n.t('date.formats.default')) rescue nil
122
122
  else
123
123
  parts = Date._parse(value)
124
- time_parts = [[:hour, '%H'], [:min, '%M'], [:sec, '%S']].collect {|part, format_part| format_part if parts[part].present?}.compact
125
- format = "#{I18n.t('date.formats.default')} #{time_parts.join(':')} #{'%z' if parts[:offset].present?}"
124
+ format = I18n.translate 'time.formats.picker', :default => '' if ActiveScaffold.js_framework == :jquery
125
+ if format.blank?
126
+ time_parts = [[:hour, '%H'], [:min, '%M'], [:sec, '%S']].collect {|part, format_part| format_part if parts[part].present?}.compact
127
+ format = "#{I18n.t('date.formats.default')} #{time_parts.join(':')} #{'%z' if parts[:offset].present?}"
128
+ else
129
+ format += ' %z' if parts[:offset].present? && format !~ /%z/i
130
+ end
126
131
  time = DateTime.strptime(value, format)
127
- time = Time.zone.local_to_utc(time) unless parts[:offset]
128
- time.in_time_zone.send(conversion) rescue nil
132
+ time = Time.zone.local_to_utc(time).in_time_zone unless parts[:offset]
133
+ time = time.send(conversion) unless conversion == :to_time
134
+ time
129
135
  end unless value.nil? || value.blank?
130
136
  end
131
137
 
@@ -265,8 +271,6 @@ module ActiveScaffold
265
271
  # * :per_page
266
272
  # * :page
267
273
  def finder_options(options = {})
268
- options.assert_valid_keys :sorting, :per_page, :page, :count_includes, :pagination, :select
269
-
270
274
  search_conditions = all_conditions
271
275
  full_includes = (active_scaffold_includes.blank? ? nil : active_scaffold_includes)
272
276
 
@@ -291,8 +295,8 @@ module ActiveScaffold
291
295
 
292
296
  # returns a Paginator::Page (not from ActiveRecord::Paginator) for the given parameters
293
297
  # See finder_options for valid options
294
- # TODO: this should reside on the model, not the controller
295
298
  def find_page(options = {})
299
+ options.assert_valid_keys :sorting, :per_page, :page, :count_includes, :pagination
296
300
  options[:per_page] ||= 999999999
297
301
  options[:page] ||= 1
298
302
 
@@ -59,7 +59,7 @@ module ActiveScaffold
59
59
  if nested_singular_association?
60
60
  {:controller => nested.parent_scaffold.controller_path, :action => :row, :id => nested.parent_id}
61
61
  elsif params[:parent_sti]
62
- options = {:controller => params[:parent_sti], :action => render_parent_action(params[:parent_sti])}
62
+ options = {:controller => params[:parent_sti], :action => render_parent_action}
63
63
  if render_parent_action(params[:parent_sti]) == :index
64
64
  options.merge(params.slice(:eid))
65
65
  else
@@ -68,17 +68,27 @@ module ActiveScaffold
68
68
  end
69
69
  end
70
70
 
71
- def render_parent_action(controller_path = nil)
71
+ def render_parent_action
72
72
  begin
73
73
  @parent_action = :row
74
- parent_controller = "#{controller_path.to_s.camelize}Controller".constantize
75
- @parent_action = :index if action_name == 'create' && parent_controller.active_scaffold_config.actions.include?(:create) && parent_controller.active_scaffold_config.create.refresh_list == true
76
- @parent_action = :index if action_name == 'update' && parent_controller.active_scaffold_config.actions.include?(:update) && parent_controller.active_scaffold_config.update.refresh_list == true
77
- @parent_action = :index if action_name == 'destroy' && parent_controller.active_scaffold_config.actions.include?(:delete) && parent_controller.active_scaffold_config.delete.refresh_list == true
74
+ if params[:parent_sti]
75
+ parent_controller = "#{params[:parent_sti].to_s.camelize}Controller".constantize
76
+ @parent_action = :index if action_name == 'create' && parent_controller.active_scaffold_config.actions.include?(:create) && parent_controller.active_scaffold_config.create.refresh_list == true
77
+ @parent_action = :index if action_name == 'update' && parent_controller.active_scaffold_config.actions.include?(:update) && parent_controller.active_scaffold_config.update.refresh_list == true
78
+ @parent_action = :index if action_name == 'destroy' && parent_controller.active_scaffold_config.actions.include?(:delete) && parent_controller.active_scaffold_config.delete.refresh_list == true
79
+ end
78
80
  rescue ActiveScaffold::ControllerNotFound
79
81
  end if @parent_action.nil?
80
82
  @parent_action
81
83
  end
84
+
85
+ def render_parent_controller
86
+ if nested_singular_association?
87
+ nested.parent_scaffold.controller_path
88
+ else
89
+ params[:parent_sti]
90
+ end
91
+ end
82
92
 
83
93
  def build_associated(column, record)
84
94
  if column.singular_association?
@@ -15,11 +15,11 @@ module ActiveScaffold
15
15
  def active_scaffold_render_input(column, options)
16
16
  begin
17
17
  # first, check if the dev has created an override for this specific field
18
- if override_form_field?(column)
19
- send(override_form_field(column), @record, options)
18
+ if (method = override_form_field(column))
19
+ send(method, @record, options)
20
20
  # second, check if the dev has specified a valid form_ui for this column
21
- elsif column.form_ui and override_input?(column.form_ui)
22
- send(override_input(column.form_ui), column, options)
21
+ elsif column.form_ui and (method = override_input(column.form_ui))
22
+ send(method, column, options)
23
23
  # fallback: we get to make the decision
24
24
  else
25
25
  if column.association
@@ -36,8 +36,8 @@ module ActiveScaffold
36
36
 
37
37
  else # regular model attribute column
38
38
  # if we (or someone else) have created a custom render option for the column type, use that
39
- if override_input?(column.column.type)
40
- send(override_input(column.column.type), column, options)
39
+ if (method = override_input(column.column.type))
40
+ send(method, column, options)
41
41
  # final ultimate fallback: use rails' generic input method
42
42
  else
43
43
  # for textual fields we pass different options
@@ -229,26 +229,16 @@ module ActiveScaffold
229
229
  end
230
230
 
231
231
  def override_form_field(column)
232
- method_with_class = override_form_field_name(column, true)
233
- return method_with_class if respond_to?(method_with_class)
234
- method = override_form_field_name(column)
235
- method if respond_to?(method)
232
+ override_helper column, 'form_column'
236
233
  end
237
234
  alias_method :override_form_field?, :override_form_field
238
235
 
239
- # the naming convention for overriding form fields with helpers
240
- def override_form_field_name(column, class_prefix = false)
241
- "#{clean_class_name(column.active_record_class.name) + '_' if class_prefix}#{clean_column_name(column.name)}_form_column"
242
- end
243
-
244
- def override_input?(form_ui)
245
- respond_to?(override_input(form_ui))
246
- end
247
-
248
236
  # the naming convention for overriding form input types with helpers
249
237
  def override_input(form_ui)
250
- "active_scaffold_input_#{form_ui}"
238
+ method = "active_scaffold_input_#{form_ui}"
239
+ method if respond_to? method
251
240
  end
241
+ alias_method :override_input?, :override_input
252
242
 
253
243
  def form_partial_for_column(column, renders_as = nil)
254
244
  renders_as ||= column_renders_as(column)