Sha256: 34f31a4596fb310d729b816b6481ba5c4447c40274b7cf2c3e6e5f0c3e39be0d
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
require 'active_support/time_with_zone' module Formulaic class Form ATTRIBUTE_INPUT_MAP = { ActiveSupport::TimeWithZone => Formulaic::Inputs::DateInput, Date => Formulaic::Inputs::DateInput, DateTime => Formulaic::Inputs::DateTimeInput, Array => Formulaic::Inputs::ArrayInput, String => Formulaic::Inputs::StringInput, Symbol => Formulaic::Inputs::StringInput, 1.class => Formulaic::Inputs::StringInput, Float => Formulaic::Inputs::StringInput, TrueClass => Formulaic::Inputs::BooleanInput, FalseClass => Formulaic::Inputs::BooleanInput, File => Formulaic::Inputs::FileInput, }.freeze def initialize(model_name, action, attributes) @action = action @inputs = build_inputs(model_name, attributes) end def fill @inputs.each { |input| input.fill } end private attr_reader :model_name, :inputs, :action def build_inputs(model_name, attributes) attributes.map do |field, value| build_input(model_name, field, value) end end def build_input(model_name, field, value) label = Label.new(model_name, field, action) input_class_for(value).new(label, value) end def input_class_for(value) ATTRIBUTE_INPUT_MAP.fetch(value.class) do raise InvalidAttributeTypeError.new("Formulaic does not know how to fill in a #{value.class} value") end end class InvalidAttributeTypeError < StandardError; end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
formulaic-0.4.1 | lib/formulaic/form.rb |
formulaic-0.4.0 | lib/formulaic/form.rb |