Sha256: 62af4b53909155c3af33f364c9dab17f1f26fac96d0eb79e4ef31343eff2a117

Contents?: true

Size: 1.08 KB

Versions: 7

Compression:

Stored size: 1.08 KB

Contents

# A filter chain is a collection of filter sets. A filter set hold individual 
# filters of which only one can be active/selected at a time.

module HasFilter
  module Filter
    class Chain < Array
      class << self
        def build(owner, *args)
          new owner, Set.build(*args)
        end
      end
      
      attr_reader :owner, :view
      
      def initialize(owner, *sets)
        @owner = owner
        concat sets.each { |set| set.chain = self }
      end
      
      def select(params)
        params ||= []
        adjust_size(params)
        each { |set| set.select(params[set.index]) }
        self
      end
      
      def scope(target = nil)
        inject(target || owner) { |target, set| set.scope(target) }
      end
		  
  		def to_form_fields(view, options = {})
  		  @view = view
        map { |set| set.to_field_set_tag(options) }
  		end
  		
  		protected
  		  
  		  def adjust_size(params)
  		    size = [params.size, 1].max
  		    replace (1..size).map { first.dup }
  		    each_with_index { |set, index| set.index = index }
        end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
adva-0.1.4 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva-0.1.3 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva-0.1.2 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva-0.1.1 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva-0.1.0 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva_cms-0.0.1 vendor/gems/has_filter/lib/has_filter/filter/chain.rb
adva-0.0.1 adva_cms/vendor/gems/has_filter/lib/has_filter/filter/chain.rb