Changeset 20

Show
Ignore:
Timestamp:
10/10/2006 09:02:58 AM (2 years ago)
Author:
matthew
Message:

Fixed filter_options_for

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/auto-admin/lib/auto_admin_configuration.rb

    r14 r20  
    118118 
    119119    def filter_options_for column_name, custom_options, &block 
    120       (@custom_filter_options ||= {})[column_name.to_sym] = AutoAdmin::CustomFilterSet.new( column_name, custom_options, &block ) 
     120      (@custom_filter_options ||= {})[column_name.to_sym] = AutoAdmin::CustomFilterSet.new( self, reflect_on_association( column_name ) || find_column( column_name ), custom_options, &block ) 
    121121    end 
    122122    def filters 
  • trunk/auto-admin/lib/auto_admin_filter_sets.rb

    r1 r20  
    4242      @options, @block = options, block 
    4343    end 
     44    def sql_from_string option_name 
     45      @block ? @block.call( option_name ) : super 
     46    end 
    4447    def other_options 
    4548      a = [] 
    4649      @options.each do |k,v| 
    4750        o = build_option( k, v ) 
    48         o[:sql] = block.call( k ) unless block.nil? 
     51        o[:sql] = @block.call( k ) unless @block.nil? 
    4952        a << o 
    5053      end 
  • trunk/auto-admin/test/configuration_tests.rb

    r1 r20  
    134134 
    135135 
     136  def test_filter_options_for 
     137    assert_equal [], Film.columns_for_filter 
     138    Film.filter_by :rating 
     139    Film.filter_options_for :rating, 'A' => 'X', 'B' => 'Y', 'C' => 'Z' 
     140    assert_equal [:rating], Film.columns_for_filter 
     141    assert_equal( { 'rating' => '*' }, Film.filter_defaults ) 
     142    assert_equal ['rating = ?', 'B'], Film.filter_conditions( :rating => 'B' ) 
     143  end 
     144  def test_filter_options_for_with_custom_sql_builder 
     145    assert_equal [], Film.columns_for_filter 
     146    Film.filter_by :length 
     147    Film.filter_options_for( :length, '0-60' => 'Very Short', '60-120' => 'Short', '120-999' => 'Long' ) do |val| 
     148      ["length BETWEEN ? AND ?", *( val.split('-').map {|n| n.to_i } )] 
     149    end 
     150    assert_equal [:length], Film.columns_for_filter 
     151    assert_equal( { 'length' => '*' }, Film.filter_defaults ) 
     152    assert_equal ['length BETWEEN ? AND ?', 0, 60], Film.filter_conditions( :length => '0-60' ) 
     153  end 
    136154  def test_filter_by_string 
    137155    assert_equal [], Film.columns_for_filter