Sha256: 724211e86023fb2f3c4f6d1b7781e128f77818fc79a6cc95361922918a14322a
Contents?: true
Size: 1.12 KB
Versions: 2
Compression:
Stored size: 1.12 KB
Contents
require 'rom/struct' require 'rom/support/cache' require 'rom/support/constants' require 'rom/support/class_builder' require 'rom/repository/struct_attributes' module ROM class Repository # @api private class StructBuilder extend Cache def call(*args) fetch_or_store(*args) do name, header = args build_class(name) { |klass| klass.send(:include, StructAttributes.new(visit(header))) } end end alias_method :[], :call private def visit(ast) name, node = ast __send__("visit_#{name}", node) end def visit_header(node) node.map(&method(:visit)) end def visit_relation(node) relation_name, meta, * = node meta[:combine_name] || relation_name.relation end def visit_attribute(node) node end def build_class(name, &block) ROM::ClassBuilder.new(name: class_name(name), parent: Struct).call(&block) end def class_name(name) "ROM::Struct[#{Inflector.classify(Inflector.singularize(name))}]" end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rom-repository-0.3.1 | lib/rom/repository/struct_builder.rb |
rom-repository-0.3.0 | lib/rom/repository/struct_builder.rb |