Sha256: e92c3d18513153bbcc8ed0507f1f067ae3e25b5a2e2a35db22abe278b56a2be5
Contents?: true
Size: 1.92 KB
Versions: 2
Compression:
Stored size: 1.92 KB
Contents
require "active_support" module Hexx # Module defines: # # * <tt>validate!</tt> public instance method # * +attr_coerced+ public class methods. # # Include the module into the Rails model: # # require "hexx" # require_relative "attributes/string" # # class User < ActiveRecord::Base # include Hexx::Models # # # coerces attributes # attr_coerced :name, login, type: Attributes::String # end # module Models extend ActiveSupport::Concern # Runs validations and raises a RecordInvalid exceptions in case of # an invalid case. def validate! return true if valid? fail RecordInvalid.new self end # Model class helpers for attributes coercion. module ClassMethods def attr_coerced(*names, type:) names.each { |name| _attr_coerced(name, type) } end private def _attr_coerced(name, type) if ancestors.map(&:name).include? "ActiveRecord::Base" coerce_activerecord_reader name, type coerce_activerecord_writer name, type else coerce_simple_reader name, type coerce_simple_writer name, type end end def coerce_simple_reader(name, type) class_eval( "def #{ name }; #{ type.name }.new(@#{ name }); end" ) end def coerce_simple_writer(name, type) class_eval( "def #{ name }=(value); @#{ name } = #{ type.name }.new(value); end" ) end def coerce_activerecord_reader(name, type) class_eval( "def #{ name }; #{ type.name }.new read_attribute(:#{ name }); end" ) end def coerce_activerecord_writer(name, type) class_eval( "def #{ name }=(value); write_attribute :#{ name }, #{ type.name }.new(value); end" ) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
hexx-0.1.1 | lib/hexx/models.rb |
hexx-0.1.0 | lib/hexx/models.rb |