lib/rom/struct_compiler.rb in rom-mapper-1.0.0.beta3 vs lib/rom/struct_compiler.rb in rom-mapper-1.0.0.rc1
- old
+ new
@@ -15,15 +15,19 @@
extend Initializer
param :registry, default: -> { Dry::Types }
option :cache, default: -> { Cache.new }
+ # @api private
def initialize(*args)
super
@cache = cache.namespaced(:structs)
end
+ # Build a struct class based on relation header ast
+ #
+ # @api private
def call(*args)
cache.fetch_or_store(args) do
name, header, ns = args
attributes = header.map(&method(:visit)).compact
@@ -40,10 +44,11 @@
end
alias_method :[], :call
private
+ # @api private
def visit_relation(node)
_, header, meta = node
name = meta[:combine_name] || meta[:alias]
namespace = meta.fetch(:struct_namespace)
@@ -55,39 +60,44 @@
else
Dry::Types::Definition.new(model).constructor(&model.method(:new))
end
if meta[:combine_type] == :many
- [name, Types::Array.member(member)]
+ [name, Types::Array.of(member)]
else
[name, member.optional]
end
end
+ # @api private
def visit_attribute(node)
name, type, meta = node
[meta[:alias] && !meta[:wrapped] ? meta[:alias] : name, visit(type).meta(meta)]
end
+ # @api private
def visit_constructor(node)
definition, * = node
visit(definition)
end
+ # @api private
def visit_constrained(node)
definition, _ = node
visit(definition)
end
+ # @api private
def build_class(name, parent, ns, &block)
Dry::Core::ClassBuilder.
new(name: class_name(name), parent: parent, namespace: ns).
call(&block)
end
+ # @api private
def class_name(name)
Dry::Core::Inflector.classify(Dry::Core::Inflector.singularize(name))
end
end
end