Sha256: f7ba130ccd6b1065aa80906cf12118fe83651dd3395ab1139d6991a179fc9b4c

Contents?: true

Size: 1.07 KB

Versions: 5

Compression:

Stored size: 1.07 KB

Contents

module Tableficate
  module Filter
    class Collection < Array
      def initialize(container, options = {})
        container = container.to_a if container.is_a?(Range)

        selected = Array.wrap(options[:selected]).map{|item| item.to_s}
        disabled = Array.wrap(options[:disabled]).map{|item| item.to_s}

        container.map do |element|
          text, value, choice_options = case
            when Array === element
              html_attrs = element.detect {|e| Hash === e} || {}
              element = element.reject {|e| Hash === e} 
              [element.first, element.last, html_attrs]
            when !element.is_a?(String) && element.respond_to?(:first) && element.respond_to?(:last)
              [element.first, element.last, {}]
            else
              [element, element, {}]
            end

          choice_options[:selected] = 'selected' if selected.include?(value.to_s)
          choice_options[:disabled] = 'disabled' if disabled.include?(value.to_s)

          self.push(Choice.new(text, value, choice_options))
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
tableficate-0.3.2 lib/tableficate/filters/collection.rb
tableficate-0.3.1 lib/tableficate/filters/collection.rb
tableficate-0.3.0 lib/tableficate/filters/collection.rb
tableficate-0.2.1 lib/tableficate/filters/collection.rb
tableficate-0.2.0 lib/tableficate/filters/collection.rb