Module: ActiveForm::Mixins::CollectionElementMethods
- Included in:
- Element::CollectionOptionGroup
- Defined in:
- lib/active_form/mixins/collection_element_methods.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add_empty=(value) ⇒ Object
- #add_empty_option(label = '--', value = :blank) ⇒ Object (also: #add_empty)
- #add_optgroup(*args, &block) ⇒ Object (also: #option_group)
- #add_option(value) ⇒ Object (also: #<<)
- #add_options(values) ⇒ Object (also: #append)
- #blank? ⇒ Boolean
- #default_value ⇒ Object
- #each(&block) ⇒ Object
- #element_name ⇒ Object
- #element_value ⇒ Object
- #element_value=(val) ⇒ Object
- #empty_option=(label = '--') ⇒ Object (also: #empty=)
- #fallback_value=(value) ⇒ Object
- #option(label, value = nil) ⇒ Object
- #option_labels ⇒ Object
- #option_values ⇒ Object
- #options ⇒ Object
- #options=(values) ⇒ Object
- #recurse(&block) ⇒ Object
- #required=(value) ⇒ Object
- #reset_options! ⇒ Object
- #select_first=(bool = true) ⇒ Object (also: #select_first)
- #selected_option_label ⇒ Object
- #selected_value?(value) ⇒ Boolean (also: #selected?)
- #valid_option?(value) ⇒ Boolean
- #valid_value? ⇒ Boolean
Class Method Details
.included(base) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 3 def self.included(base) base.send(:include, Enumerable) base.send(:alias_method, :values, :element_value) base.send(:alias_method, :value, :element_value) base.send(:alias_method, :selected=, :element_value=) base.send(:alias_method, :update_from_params, :element_value=) base.send(:alias_method, :params=, :element_value=) base.send(:alias_method, :initial_value=, :element_value=) base.send(:alias_method, :update_value, :element_value=) base.send(:alias_method, :values=, :element_value=) base.send(:alias_method, :value=, :element_value=) base.send(:alias_method, :binding=, :element_value=) base.send(:alias_method, :bind_to, :element_value=) end |
Instance Method Details
#add_empty=(value) ⇒ Object
120 121 122 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 120 def add_empty=(value) add_empty_option if value end |
#add_empty_option(label = '--', value = :blank) ⇒ Object Also known as: add_empty
124 125 126 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 124 def add_empty_option(label = '--', value = :blank) self..unshift(ActiveForm::Element::CollectionOption.new(label, value)) end |
#add_optgroup(*args, &block) ⇒ Object Also known as: option_group
129 130 131 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 129 def add_optgroup(*args, &block) self. << ActiveForm::Element::CollectionOptionGroup.new(*args, &block) end |
#add_option(value) ⇒ Object Also known as: <<
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 95 def add_option(value) if value.kind_of?(ActiveForm::Element::CollectionOption) self. << value elsif (value.kind_of?(Array) || value.kind_of?(Set)) self. << ActiveForm::Element::CollectionOption.new(value.first, value.last) else self. << ActiveForm::Element::CollectionOption.new(value, value) end self end |
#add_options(values) ⇒ Object Also known as: append
90 91 92 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 90 def (values) values.each { |value| add_option(value) } end |
#blank? ⇒ Boolean
148 149 150 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 148 def blank? element_value.blank? || !valid_value? end |
#default_value ⇒ Object
48 49 50 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 48 def default_value multiple? ? [] : super end |
#each(&block) ⇒ Object
20 21 22 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 20 def each(&block) .each(&block) end |
#element_name ⇒ Object
34 35 36 37 38 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 34 def element_name elem_name = super elem_name << '[]' if multiple? elem_name end |
#element_value ⇒ Object
40 41 42 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 40 def element_value multiple? ? [*super].compact.flatten : [*super].compact.first end |
#element_value=(val) ⇒ Object
44 45 46 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 44 def element_value=(val) super(cast_value(multiple? ? [*val].compact.flatten : val.respond_to?(:compact) ? [*val].compact.first : val)) end |
#empty_option=(label = '--') ⇒ Object Also known as: empty=
115 116 117 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 115 def empty_option=(label = '--') add_empty_option(label) end |
#fallback_value=(value) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 52 def fallback_value=(value) if multiple? @fallback_value = value.respond_to?(:to_a) ? value.to_a : [value].flatten else @fallback_value = [*value].compact.first end end |
#option(label, value = nil) ⇒ Object
107 108 109 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 107 def option(label, value = nil) self << [label, (value || label)] end |
#option_labels ⇒ Object
60 61 62 63 64 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 60 def option_labels results = [] self.recurse { |option| results << option.label } results end |
#option_values ⇒ Object
66 67 68 69 70 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 66 def option_values results = [] self.recurse { |option| results << option.value } results end |
#options ⇒ Object
81 82 83 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 81 def @options ||= [] end |
#options=(values) ⇒ Object
85 86 87 88 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 85 def (values) (values) end |
#recurse(&block) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 24 def recurse(&block) .each do |option| if option.kind_of?(ActiveForm::Element::CollectionOptionGroup) option..each(&block) else block.call(option) end end end |
#required=(value) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 152 def required=(value) if value.kind_of?(Numeric) min_required = value.kind_of?(Numeric) ? value.to_i : 0 max_required = min_required elsif value.respond_to?(:first) && value.respond_to?(:last) min_required = value.first.to_i max_required = value.last.to_i else min_required = 0 max_required = 0 end validate_with_count = (min_required > 0 || (min_required == 0 && max_required > 0)) self.option_flags[:required] = value.to_s.to_boolean || validate_with_count if self.option_flags[:required] if validate_with_count validates_with_option_count :code => 'required', :range => (min_required..max_required) else validates_as_required end else validators.delete_if { |v| v.code == 'required' } end end |
#reset_options! ⇒ Object
111 112 113 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 111 def @options = [] end |
#select_first=(bool = true) ⇒ Object Also known as: select_first
134 135 136 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 134 def select_first=(bool = true) self.element_value = option_values.first if bool end |
#selected_option_label ⇒ Object
144 145 146 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 144 def selected_option_label self..inject([]) { |ary, opt| ary << opt.label if selected_value?(opt.value); ary }.join(', ') end |
#selected_value?(value) ⇒ Boolean Also known as: selected?
139 140 141 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 139 def selected_value?(value) multiple? ? (element_value || []).include?(value) : element_value == value end |
#valid_option?(value) ⇒ Boolean
72 73 74 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 72 def valid_option?(value) (option_values + [*fallback_value] + [*default_value]).compact.include?(value) end |
#valid_value? ⇒ Boolean
76 77 78 79 |
# File 'lib/active_form/mixins/collection_element_methods.rb', line 76 def valid_value? raw_values = [*element_value] (raw_values & option_values).length == raw_values.length end |