Class: RomFactory::Builder
- Inherits:
-
Object
- Object
- RomFactory::Builder
- Defined in:
- lib/rom_factory/builder.rb
Instance Attribute Summary collapse
-
#_name ⇒ Object
readonly
Returns the value of attribute _name.
Class Method Summary collapse
Instance Method Summary collapse
- #create(attrs) ⇒ Object
- #factory(name:, relation:) {|_self| ... } ⇒ Object
-
#initialize {|_self| ... } ⇒ Builder
constructor
A new instance of Builder.
Constructor Details
#initialize {|_self| ... } ⇒ Builder
Returns a new instance of Builder.
21 22 23 |
# File 'lib/rom_factory/builder.rb', line 21 def initialize yield(self) end |
Instance Attribute Details
#_name ⇒ Object (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
.container ⇒ Object
5 6 7 |
# File 'lib/rom_factory/builder.rb', line 5 def self.container @container end |
.create(name, attrs = {}) ⇒ Object
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
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
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 |