scaffolding_extensions 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,9 +48,9 @@ module ScaffoldingExtensions
48
48
  def scaffold_redirect(action, suffix, notice=nil, oid=nil)
49
49
  action_suffix = "#{action}#{suffix}"
50
50
  meth = "scaffold_#{action_suffix}_redirect"
51
- return send(meth, notice) if respond_to?(meth)
51
+ return send(meth, notice) if respond_to?(meth, true)
52
52
  meth = "scaffold_#{action}_redirect"
53
- return send(meth, suffix, notice) if respond_to?(meth)
53
+ return send(meth, suffix, notice) if respond_to?(meth, true)
54
54
  scaffold_flash[:notice] = notice if notice
55
55
  scaffold_redirect_to(scaffold_url(action_suffix, oid ? {:id=>oid} : {}))
56
56
  end
@@ -48,6 +48,8 @@ module ScaffoldingExtensions::MetaModel
48
48
  # for fields of type text (iv: @scaffold_convert_text_to_string)
49
49
  # - :table_classes: Set the default table classes for different scaffolded HTML tables
50
50
  # (iv: @scaffold_table_classes)
51
+ # - :column_type_options: Override the default options for a given column type
52
+ # (iv: @scaffold_column_type_options)
51
53
  # - :column_types: Override the default column type for a given attribute
52
54
  # (iv: @scaffold_column_types)
53
55
  # - :column_options: Override the default column options for a given attribute
@@ -71,6 +73,7 @@ module ScaffoldingExtensions::MetaModel
71
73
  # autocompleter (iv: @scaffold_auto_complete_options)
72
74
  SCAFFOLD_OPTIONS = {:text_to_string=>false,
73
75
  :table_classes=>{:form=>'formtable', :list=>'sortable', :show=>'sortable'},
76
+ :column_type_options=>{},
74
77
  :column_types=>{},
75
78
  :column_options=>{},
76
79
  :association_list_class=>''.freeze,
@@ -220,8 +223,10 @@ module ScaffoldingExtensions::MetaModel
220
223
  # @scaffold_column_names, a hash with the column name as a symbol key and the human name
221
224
  # string as the value.
222
225
  def scaffold_column_name(column_name)
223
- @scaffold_column_names ||= SCAFFOLD_OPTIONS[:column_names].dup
224
- @scaffold_column_names[column_name] ||= if scaffold_association(column_name)
226
+ @scaffold_column_names ||= {}
227
+ @scaffold_column_names[column_name] ||= if n = SCAFFOLD_OPTIONS[:column_names][column_name]
228
+ n
229
+ elsif scaffold_association(column_name)
225
230
  scaffold_associated_human_name(column_name)
226
231
  else
227
232
  column_name.to_s.humanize
@@ -232,8 +237,9 @@ module ScaffoldingExtensions::MetaModel
232
237
  # @scaffold_column_options_hash, a hash with the column name as a symbol key and the html
233
238
  # options hash as the value.
234
239
  def scaffold_column_options(column_name)
235
- @scaffold_column_options_hash ||= SCAFFOLD_OPTIONS[:column_options].dup
236
- @scaffold_column_options_hash[column_name] || {}
240
+ @scaffold_column_options_hash ||= {}
241
+ @scaffold_column_options ||= {}
242
+ @scaffold_column_options[column_name] ||= scaffold_merge_hashes(@scaffold_column_options_hash[column_name], SCAFFOLD_OPTIONS[:column_options][column_name], scaffold_column_type_options(scaffold_column_type(column_name)))
237
243
  end
238
244
 
239
245
  # Returns the column type for the given scaffolded column name. Can be set via the instance
@@ -241,8 +247,8 @@ module ScaffoldingExtensions::MetaModel
241
247
  # type symbol as a value. Associations have the :association type, and other types are looked
242
248
  # up via columns_hash[column_name].type. If no type is provided, :string is used by default.
243
249
  def scaffold_column_type(column_name)
244
- @scaffold_column_types ||= SCAFFOLD_OPTIONS[:column_types].dup
245
- if type = @scaffold_column_types[column_name]
250
+ @scaffold_column_types ||= {}
251
+ @scaffold_column_types[column_name] ||= if type = SCAFFOLD_OPTIONS[:column_types][column_name]
246
252
  type
247
253
  elsif scaffold_association(column_name)
248
254
  :association
@@ -253,6 +259,15 @@ module ScaffoldingExtensions::MetaModel
253
259
  end
254
260
  end
255
261
 
262
+ # The HTML options for a given column type, affecting all columns of that type.
263
+ # Can be set with the @scaffold_column_type_options instance variable, which should
264
+ # be a hash with the column type as a symbol key and the html options hash
265
+ # as the value.
266
+ def scaffold_column_type_options(type)
267
+ @scaffold_column_type_options ||= {}
268
+ @scaffold_column_type_options[type] ||= SCAFFOLD_OPTIONS[:column_type_options][type] || {}
269
+ end
270
+
256
271
  # Returns the foreign key for the field if it is an association, or the field
257
272
  # as a string if it is not.
258
273
  def scaffold_field_id(field)
@@ -445,8 +460,8 @@ module ScaffoldingExtensions::MetaModel
445
460
  # the instance variable @scaffold_table_classes, a hash with the type as the symbol key
446
461
  # and the value as the html class string.
447
462
  def scaffold_table_class(type)
448
- @scaffold_table_classes ||= SCAFFOLD_OPTIONS[:table_classes].dup
449
- @scaffold_table_classes[type]
463
+ @scaffold_table_classes ||= {}
464
+ @scaffold_table_classes[type] ||= SCAFFOLD_OPTIONS[:table_classes][type]
450
465
  end
451
466
 
452
467
  # Run the block inside a database transaction
@@ -548,6 +563,14 @@ module ScaffoldingExtensions::MetaModel
548
563
  scaffold_associated_class(association).scaffold_include(:association)
549
564
  end
550
565
 
566
+ # Merge all given hashes in order of preference, so earlier hashes are considered more important.
567
+ # A nil value is treated the same as the empty hash.
568
+ def scaffold_merge_hashes(*hashes)
569
+ h = {}
570
+ hashes.reverse.each{|hash| h.merge!(hash) if hash}
571
+ h
572
+ end
573
+
551
574
  # Condition to ensure field is not NULL
552
575
  def scaffold_notnull_condition(field)
553
576
  ["#{scaffold_table_name}.#{field} IS NOT NULL"]
@@ -15,7 +15,7 @@ module ScaffoldingExtensions
15
15
  def scaffold_method_iv_override(m, action)
16
16
  return nil unless action
17
17
  meth = "scaffold_#{action}_#{m}"
18
- if respond_to?(meth)
18
+ if respond_to?(meth, true)
19
19
  Proc.new{send(meth)}
20
20
  elsif instance_variables.include?(meth = "@#{meth}")
21
21
  Proc.new{instance_variable_get(meth)}
@@ -27,7 +27,7 @@ module ScaffoldingExtensions
27
27
  def scaffold_method_override(m, action, *args)
28
28
  return nil unless action
29
29
  meth = "scaffold_#{action}_#{m}"
30
- Proc.new{send(meth, *args)} if respond_to?(meth)
30
+ Proc.new{send(meth, *args)} if respond_to?(meth, true)
31
31
  end
32
32
  end
33
33
 
@@ -24,8 +24,8 @@ class Test::Unit::TestCase
24
24
  # Test that getting all display actions for the scaffold returns success
25
25
  def scaffold_test(model, options = {})
26
26
  klass = @controller.class
27
- methods = options[:only] ? klass.scaffold_normalize_options(options[:only]) : ScaffoldingExtensions::DEFAULT_METHODS
28
- methods -= klass.scaffold_normalize_options(options[:except]) if options[:except]
27
+ methods = options[:only] ? klass.send(:scaffold_normalize_options, options[:only]) : ScaffoldingExtensions::DEFAULT_METHODS
28
+ methods -= klass.send(:scaffold_normalize_options, options[:except]) if options[:except]
29
29
  methods.each do |action|
30
30
  assert_nothing_raised("Error requesting scaffolded action #{action} for model #{model.name}") do
31
31
  get "#{action}_#{model.scaffold_name}", nil, scaffold_session
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scaffolding_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.8
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-09 00:00:00 -07:00
12
+ date: 2008-08-08 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15