scaffolding_extensions 1.1.8 → 1.1.9

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.
@@ -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