class ROM::Mapping

Builder DSL for ROM relations

Attributes

environment[R]
model[R]
schema[R]

Public Class Methods

build(environment, schema, &block) click to toggle source

Build ROM relations

@example

relation = Axiom::Relation::Base.new(:users, [[:id, Integer], [:user_name, String]])
env      = { users: relation }

User = Class.new(OpenStruct.new)

registry = Mapping.build(env) do
  users do
    map :id
    map :user_name, to: :name
  end
end

registry[:users]
# #<ROM::Relation:0x000000025d3160>

@param [Environment] rom environment @param [Schema] rom schema

@return [Hash]

@api public

# File lib/rom/mapping.rb, line 37
def self.build(environment, schema, &block)
  new(environment, schema, &block)
end
new(environment, schema, &block) click to toggle source

Initialize a new mapping instance

@return [undefined]

@api private

# File lib/rom/mapping.rb, line 46
def initialize(environment, schema, &block)
  @environment = environment
  @schema      = schema
  instance_eval(&block)
end

Private Instance Methods

build_relation(relation, &block) click to toggle source

Build relation

@return [Relation]

@api private

# File lib/rom/mapping.rb, line 74
def build_relation(relation, &block)
  definition = Definition.build(relation.header, &block)
  environment[relation.name] = Relation.build(relation, definition.mapper)
end
method_missing(name, *, &block) click to toggle source

Method missing hook

@return [Relation]

@api private

Calls superclass method
# File lib/rom/mapping.rb, line 59
def method_missing(name, *, &block)
  relation = schema[name]

  if relation
    build_relation(relation, &block)
  else
    super
  end
end