Last active
August 6, 2017 19:26
-
-
Save sshaw/dbd0f1066f0da2b8407d65fb66285872 to your computer and use it in GitHub Desktop.
Ruby module to help create classes for form parameters (or other things). Also see Class2: https://github.com/sshaw/class2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module FormFields | |
def self.included(klass) | |
klass.class_eval do | |
def self.fields(*args) | |
args.flatten! | |
attr_accessor(*args) | |
@@fields = args.map(&:to_sym) | |
end | |
end | |
end | |
def initialize(hash = nil) | |
(hash || {}).each do |name, value| | |
next unless @@fields.include?(name) || name.respond_to?(:to_sym) && @@fields.include?(name.to_sym) | |
public_send("#{name}=", value) | |
end | |
end | |
def to_h | |
@@fields.each_with_object({}) { |name, h| h[name] = public_send(name) } | |
end | |
end | |
class SomeForm | |
include FormFields | |
include ActiveModel::Validations | |
fields :foo, :bar, :baz | |
validates :foo, :presence => true | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment