Class: ObjectForge::Forge

Inherits:
Object
  • Object
show all
Defined in:
lib/object_forge/forge.rb

Overview

Object instantitation forge.

Since:

  • 0.1.0

Defined Under Namespace

Classes: Parameters

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(forged, parameters, name: nil) ⇒ Forge

Returns a new instance of Forge.

Since:

  • 0.1.0



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

#forgedClass (readonly)

Returns class to forge.

Since:

  • 0.1.0



42
43
44
# File 'lib/object_forge/forge.rb', line 42

def forged
  @forged
end

#nameSymbol? (readonly)

Returns forge name.

Since:

  • 0.1.0



39
40
41
# File 'lib/object_forge/forge.rb', line 39

def name
  @name
end

#parametersParameters, ForgeDSL (readonly)

Returns forge parameters.

Since:

  • 0.1.0



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.

Yield Parameters:

Yield Returns:

  • (void)

See Also:

Since:

  • 0.1.0



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.

Since:

  • 0.1.0



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