/usr/lib/ruby/1.8/mechanize/form/multi_select_list.rb is in libwww-mechanize-ruby1.8 1.0.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 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 node
value = []
@options = []
# parse
node.search('option').each do |n|
option = Option.new(n, self)
@options << option
end
super(node, 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
|