Module: Schema::Model::ClassMethods

Defined in:
lib/schema/model.rb

Overview

no-doc

Instance Method Summary collapse

Instance Method Details

#add_aliases(name, options) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/schema/model.rb', line 75

def add_aliases(name, options)
  options[:aliases]&.each do |alias_name|
    add_value_to_class_method(:schema, alias_name.to_sym => options.merge(key: alias_name.to_s, alias_of: name))
    alias_method(alias_name, options[:getter])
    alias_method("#{alias_name}=", options[:setter])
  end
end

#add_attribute_methods(name, options) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/schema/model.rb', line 61

def add_attribute_methods(name, options)
  class_eval(
    <<~STR, __FILE__, __LINE__ + 1
      def #{options[:getter]}
        #{options[:instance_variable]}
      end

      def #{options[:setter]}(v)
        #{options[:instance_variable]} = #{options[:parser]}(#{name.inspect}, parsing_errors, v)
      end
  STR
  )
end

#attribute(name, type, options = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/schema/model.rb', line 37

def attribute(name, type, options = {})
  options[:aliases] = [options[:alias]] if options.key?(:alias)

  options = ::Schema::Model.default_attribute_options(name, type)
                           .merge(
                             parser: "parse_#{type}"
                           ).merge(options)

  add_value_to_class_method(:schema, name => options)
  add_attribute_methods(name, options)
  add_aliases(name, options)
end

#from_hash(data) ⇒ Object



50
51
52
# File 'lib/schema/model.rb', line 50

def from_hash(data)
  new.update_attributes(data)
end

#schema ⇒ Object



27
28
29
# File 'lib/schema/model.rb', line 27

def schema
  {}.freeze
end

#schema_config ⇒ Object



31
32
33
34
35
# File 'lib/schema/model.rb', line 31

def schema_config
  {
    schema_includes: []
  }.freeze
end

#schema_include(mod) ⇒ Object



54
55
56
57
58
59
# File 'lib/schema/model.rb', line 54

def schema_include(mod)
  config = schema_config.dup
  config[:schema_includes] = config[:schema_includes] + [mod]
  redefine_class_method(:schema_config, config.freeze)
  include mod
end