Module: DynamicFormObjects
- Defined in:
- lib/dynamic_form_objects.rb,
lib/dynamic_form_objects/version.rb
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
-
.define_form(form_name, *args) ⇒ Object
Defines a new form object: .
Class Method Details
.define_form(form_name, *args) ⇒ Object
Defines a new form object:
Usage:
UserForm = DynamicFormObjects.define_form(“UserForm”, :first_name, :last_name, :age, :password).with_validations do
validates_presence_of :first_name
validates_presence_of :last_name
end
– or UserForm = DynamicFormObjects.define_form(“UserForm”).
with_validations { validates_presence_of :name}.
with_validations { validates_presence_of :age }
– Create a new instance user_form = UserForm.new user_form = UserForm.new first_name: ‘Foo’, last_name: ‘Bar’
– Check if valid if user_form.valid? …
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 68 69 70 71 72 73 |
# File 'lib/dynamic_form_objects.rb', line 27 def self.define_form(form_name, *args) Class.new(Object) do |klass| include ActiveModel::Model attr_reader(*args) @__attrs = args @__form_name = form_name def self.attrs @__attrs end def self.with_validations(&block) class_eval(&block) self end def self.model_name ActiveModel::Name.new(self, nil, @__form_name) end def initialize(opts = {}) set_instance_variables(opts) end def to_h @__hash_value end alias_method :to_hash, :to_h def persisted? false end def set_instance_variables(opts = {}) defined_attrs = self.class.attrs attrs_and_values = defined_attrs.map{|k| [k, opts[k]]} attrs_and_values.each do |k, v| instance_variable_set("@#{k.to_s}", v) end instance_variable_set("@__hash_value", Hash[attrs_and_values]) end private :set_instance_variables end end |