module FieldHelpers::ClassMethods
Public Instance Methods
field(name, klasses = nil, options = {})
click to toggle source
field lets you declare your fields instead of using the underscore syntax. An optional class restriction can be passed in.
# File lib/volt/models/field_helpers.rb, line 40 def field(name, klasses = nil, options = {}) if klasses klasses = [klasses].flatten unless klasses.any? {|kl| FIELD_CASTS.key?(kl) } klass_names = FIELD_CASTS.keys.map(&:to_s).join(', ') msg = "valid field types is currently limited to #{klass_names}, you passed: #{klasses.inspect}" fail FieldHelpers::InvalidFieldClass, msg end # Add NilClass as an allowed type unless allow_nil: false was passed. unless options[:allow_nil] == false klasses << NilClass end end self.fields_data ||= {} self.fields_data[name] = [klasses, options] if klasses # Add type validation, execpt for String, since anything can be cast to # a string. unless klasses.include?(String) validate name, type: klasses end end define_method(name) do get(name) end define_method(:"#{name}=") do |val| # Check if the value assigned matches the class restriction if klasses # Cast to the right type klasses.each do |kl| if (func = FIELD_CASTS[kl]) # Cast on the first available caster val = func[val] break end end end set(name, val) end end