Sha256: 4a91f5c6252644b26328a018570c1acdc9456fdd1dcc7bfdce62ebbcf5868d0a
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
# frozen_string_literal: true require "dry/core/class_builder" require_relative "core" module ROM module Components module DSL # Mapper definition DSL used by Setup DSL # # @private class Mapper < Core key(:mappers) nested(true) # Define a mapper class # # @param [Symbol] id Mapper identifier # @param [Hash] options # # @return [Class] # # @api public def define(id, parent: id, **options, &block) class_opts = {name: class_name(id), parent: class_parent(parent)} constant = build_class(**class_opts) do |dsl| config.update(options) config.component.update(id: id, relation: parent) config.component.join!({namespace: parent}, :right) if dsl.config.namespace != parent class_eval(&block) if block end call(constant: constant, config: constant.config.component) end # @api private def class_parent(parent) components.get(:mappers, relation: parent)&.constant || ROM::Mapper end # @api private def class_name(id) "ROM::Mapper[#{id}]" end # Register any object as a mapper for a given relation # # @param [Symbol] relation The relation registry id # @param [Hash<Symbol, Object>] mappers A hash with mapper objects # # @return [Array<Components::Mapper>] # # @api public def register(namespace, mappers) mappers.map do |id, mapper| call( object: mapper, config: config.join({id: id, relation: namespace, namespace: namespace}, :right) ) end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rom-6.0.0.alpha1 | lib/rom/components/dsl/mapper.rb |