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