class NumeritajTipo::AttributeDefinition

Attributes

default[R]
name[R]

Public Class Methods

new(name, values: nil, type: Symbol, default: nil, allow_nil: false) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 7
def initialize(name, values: nil, type: Symbol, default: nil, allow_nil: false)
  @name = name
  @enum_type = EnumType.new(type, values)
  @default = default
  @allow_nil = allow_nil
end

Public Instance Methods

build(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 14
def build(target)
  define_enum! target

  define_helpers! target
  define_predicates! target
  define_scopes! target
end

Private Instance Methods

define_enum!(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 28
def define_enum!(target)
  target.define_enum name, type, default

  define_validation! target
end
define_helpers!(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 34
    def define_helpers!(target)
      return if target.respond_to?(pluralized_name)

      target.class_eval <<-RUBY, __FILE__, __LINE__ + 1
        def self.#{pluralized_name}
          #{enum_values}
        end
      RUBY
    end
define_predicates!(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 44
    def define_predicates!(target)
      enum_values.each do |value|
        unless target.respond_to?("#{value}?")
          target.class_eval <<-RUBY, __FILE__, __LINE__ + 1
            def #{value}?
              read_attribute(:#{name}) == :#{value}
            end
          RUBY
        end
      end
    end
define_scopes!(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 56
def define_scopes!(target)
  target.define_scopes self
end
define_validation!(target) click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 60
def define_validation!(target)
  target.validates_inclusion_of name, in: values_for_validation,
    allow_nil: @allow_nil
end
pluralized_name() click to toggle source
# File lib/numeritaj_tipo/attribute_definition.rb, line 24
def pluralized_name
  name.to_s.pluralize
end