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