class Fried::Schema::Attribute::DefineWriter

Define writer based on attribute {Definition} with type-checking

Attributes

is[RW]

Public Class Methods

build() click to toggle source
# File lib/fried/schema/attribute/define_writer.rb, line 13
def self.build
  new
end
call(attribute_definition, klass) click to toggle source
# File lib/fried/schema/attribute/define_writer.rb, line 17
def self.call(attribute_definition, klass)
  instance = build
  instance.(attribute_definition, klass)
end
new() click to toggle source
# File lib/fried/schema/attribute/define_writer.rb, line 9
def initialize
  self.is = ::Fried::Typings::Is
end

Public Instance Methods

call(definition, klass) click to toggle source

Creates write method with type-checking @param definition [Definition] @param klass [Class, Module] @return [Definition]

# File lib/fried/schema/attribute/define_writer.rb, line 26
def call(definition, klass)
  is_a = is[definition.type]
  define_writer(definition, is_a, klass)
end

Private Instance Methods

define_writer(definition, is_a, klass) click to toggle source
# File lib/fried/schema/attribute/define_writer.rb, line 33
def define_writer(definition, is_a, klass)
  klass.instance_eval do
    define_method(definition.writer) do |value|
      value = is_a.(value)
      instance_variable_set(definition.instance_variable, value)
    end
  end
end