class EntitySchema::Schema

aggregate of field resolvers

Attributes

fields[R]
fields_by_key[R]
owner_name[R]

Public Class Methods

new(owner_name:, extends: nil) click to toggle source
# File lib/entity_schema/schema.rb, line 8
def initialize(owner_name:, extends: nil)
  @owner_name = owner_name

  if extends
    @fields        = extends.fields
    @fields_by_key = extends.fields_by_key
  else
    @fields        = new_strict_hash
    @fields_by_key = {}
  end
end

Public Instance Methods

add_field(field) click to toggle source
# File lib/entity_schema/schema.rb, line 20
def add_field(field)
  fields[field.name]           = field
  fields_by_key[field.src_key] = field
end
deep_freeze() click to toggle source

TODO: use it

# File lib/entity_schema/schema.rb, line 54
def deep_freeze
  fields.each do |name, field|
    name.freeze
    field.freeze
  end.freeze
  freeze
end
field?(name) click to toggle source
# File lib/entity_schema/schema.rb, line 41
def field?(name)
  fields.key?(name)
end
given?(obj, name) click to toggle source
# File lib/entity_schema/schema.rb, line 45
def given?(obj, name)
  fields[name].given?(obj)
end
public_get(obj, name) click to toggle source
# File lib/entity_schema/schema.rb, line 33
def public_get(obj, name)
  fields[name].public_get(obj)
end
public_set(obj, name, value) click to toggle source
# File lib/entity_schema/schema.rb, line 29
def public_set(obj, name, value)
  fields[name].public_set(obj, value)
end
serialize(obj) click to toggle source
# File lib/entity_schema/schema.rb, line 37
def serialize(obj)
  fields.values.each_with_object({}) { |field, output| field.serialize(obj, output) }
end
set_from_params(obj, params) click to toggle source
# File lib/entity_schema/schema.rb, line 25
def set_from_params(obj, params)
  params.each { |key, value| fields_by_key[key]&.set(obj, value) }
end
weak_given?(obj, name) click to toggle source
# File lib/entity_schema/schema.rb, line 49
def weak_given?(obj, name)
  fields.fetch(name, nil)&.given?(obj)
end

Private Instance Methods

new_strict_hash() click to toggle source
# File lib/entity_schema/schema.rb, line 68
def new_strict_hash
  Hash.new { |_, key| raise NameError, "Unknown field '#{key}' for `#{owner_name}`" }
end