Sha256: 50417579a8fb7db9f50b43225d9a02527514626442add4689bd02004b2e52777

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

class Mechanize
  class Form
    # This class represents a select list where multiple values can be selected.
    # MultiSelectList#value= accepts an array, and those values are used as
    # values for the select list.  For example, to select multiple values,
    # simply do this:
    #  list.value = ['one', 'two']
    # Single values are still supported, so these two are the same:
    #  list.value = ['one']
    #  list.value = 'one'
    class MultiSelectList < Field
      attr_accessor :options

      def initialize(name, node)
        value = []
        @options = []

        # parse
        node.search('option').each do |n|
          option = Option.new(n, self)
          @options << option
        end
        super(name, value)
      end

      def query_value
        value ? value.collect { |v| [name, v] } : ''
      end

      # Select no options
      def select_none
        @value = []
        options.each { |o| o.untick }
      end

      # Select all options
      def select_all
        @value = []
        options.each { |o| o.tick }
      end

      # Get a list of all selected options
      def selected_options
        @options.find_all { |o| o.selected? }
      end

      def value=(values)
        select_none
        [values].flatten.each do |value|
          option = options.find { |o| o.value == value }
          if option.nil?
            @value.push(value)
          else
            option.select
          end
        end
      end

      def value
        value = []
        value.push(*@value)
        value.push(*selected_options.collect { |o| o.value })
        value
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
kitamomonga-mechanize-0.9.3.20090724215219 lib/mechanize/form/multi_select_list.rb
tenderlove-mechanize-0.9.3.20090911221705 lib/mechanize/form/multi_select_list.rb