Class: ObjectForge::Forge
- Inherits:
-
Object
- Object
- ObjectForge::Forge
- Defined in:
- lib/object_forge/forge.rb
Overview
Object instantitation forge.
Defined Under Namespace
Classes: Parameters
Instance Attribute Summary collapse
-
#forged ⇒ Class
readonly
Class to forge.
-
#name ⇒ Symbol?
readonly
Forge name.
-
#parameters ⇒ Parameters, ForgeDSL
readonly
Forge parameters.
Class Method Summary collapse
-
.define(forged, name: nil) {|f| ... } ⇒ Forge
Define (and create) a forge using DSL.
Instance Method Summary collapse
-
#forge(*traits, **overrides) ⇒ Any
(also: #build, #[])
Forge a new instance.
-
#initialize(forged, parameters, name: nil) ⇒ Forge
constructor
A new instance of Forge.
Constructor Details
#initialize(forged, parameters, name: nil) ⇒ Forge
Returns a new instance of Forge.
50 51 52 53 54 |
# File 'lib/object_forge/forge.rb', line 50 def initialize(forged, parameters, name: nil) @name = name @forged = forged @parameters = parameters end |
Instance Attribute Details
#forged ⇒ Class (readonly)
Returns class to forge.
42 43 44 |
# File 'lib/object_forge/forge.rb', line 42 def forged @forged end |
#name ⇒ Symbol? (readonly)
Returns forge name.
39 40 41 |
# File 'lib/object_forge/forge.rb', line 39 def name @name end |
#parameters ⇒ Parameters, ForgeDSL (readonly)
Returns forge parameters.
45 46 47 |
# File 'lib/object_forge/forge.rb', line 45 def parameters @parameters end |
Class Method Details
.define(forged, name: nil) {|f| ... } ⇒ Forge
Define (and create) a forge using DSL.
34 35 36 |
# File 'lib/object_forge/forge.rb', line 34 def self.define(forged, name: nil, &) new(forged, ForgeDSL.new(&), name:) end |
Instance Method Details
#forge(*traits, **overrides) ⇒ Any #forge(traits, overrides) ⇒ Any Also known as: build, []
Forge a new instance.
Positional arguments are taken as trait names, keyword arguments as attribute overrides, unless there are exactly two positional arguments: an array and a hash.
All traits and overrides are applied in argument order, with overrides always applied after traits.
73 74 75 76 77 78 79 80 |
# File 'lib/object_forge/forge.rb', line 73 def forge(*traits, **overrides) # @type var traits: Array[(Array[Symbol] | Hash[Symbol, untyped])] traits, overrides = check_traits_and_overrides(traits, overrides) attributes = @parameters.attributes.merge(*@parameters.traits.values_at(*traits), overrides) attributes = Crucible.new(attributes).resolve! forged.new(attributes) end |