Class: RomFactory::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/rom_factory/builder.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize {|_self| ... } ⇒ Builder

Returns a new instance of Builder.

Yields:

  • (_self)

Yield Parameters:



21
22
23
# File 'lib/rom_factory/builder.rb', line 21

def initialize
  yield(self)
end

Instance Attribute Details

#_nameObject (readonly)

Returns the value of attribute _name.



45
46
47
# File 'lib/rom_factory/builder.rb', line 45

def _name
  @_name
end

Class Method Details

.containerObject



5
6
7
# File 'lib/rom_factory/builder.rb', line 5

def self.container
  @container
end

.create(name, attrs = {}) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
# File 'lib/rom_factory/builder.rb', line 15

def self.create(name, attrs = {})
  raise ArgumentError, "Factory #{name} does not exist" unless container.key?(name)
  factory = container.resolve(name)
  factory.create(attrs)
end

.define(&block) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
13
# File 'lib/rom_factory/builder.rb', line 9

def self.define(&block)
  factory = new(&block)
  raise ArgumentError, "Factory with key #{factory._name} already present" if container.key?(factory._name)
  container.register(factory._name, factory)
end

Instance Method Details

#create(attrs) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rom_factory/builder.rb', line 33

def create(attrs)
  values = _schema.merge(attrs).map do |k, v|
    if v.respond_to?(:call)
      [k, v.call]
    else
      [k, v]
    end
  end
  record_id = _relation.insert(values.to_h)
  OpenStruct.new(_relation.where(id: record_id).one)
end

#factory(name:, relation:) {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



25
26
27
28
29
30
31
# File 'lib/rom_factory/builder.rb', line 25

def factory(name:, relation:, &block)
  @_relation = RomFactory::Config.config.container.relations.fetch(relation)
  @_name = name
  @_schema = {}
  define_methods_from_relation
  yield(self)
end