Sha256: 7f67f99238eaec985e7fa4103e54baa39f19499e3e85c472f549e72e81b6b4be

Contents?: true

Size: 1.15 KB

Versions: 4

Compression:

Stored size: 1.15 KB

Contents

module Yaks
  class Resource
    class Form
      class Field
        include Yaks::Mapper::Form::Field.attributes.add(error: nil)

        undef value
        def value
          if type.equal? :select
            selected = options.find(&:selected)
            selected.value if selected
          else
            @value
          end
        end

        def with_value(value)
          if type.equal? :select
            with(options: select_options_for_value(value))
          else
            with(value: value)
          end
        end

        private

        def select_options_for_value(value)
          unset = ->(option) { option.selected && !value().eql?(value) }
          set   = ->(option) { !option.selected && option.value.eql?(value) }

          options.each_with_object([]) do |option, new_opts|
            new_opts << case option
                        when unset
                          option.with selected: false
                        when set
                          option.with selected: true
                        else
                          option
                        end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yaks-0.13.0 lib/yaks/resource/form/field.rb
yaks-0.12.0 lib/yaks/resource/form/field.rb
yaks-0.11.0 lib/yaks/resource/form/field.rb
yaks-0.10.0 lib/yaks/resource/form/field.rb