Class: ObjectForge::Forge

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

Overview

Object building forge.

Usually created through Forge.define or ObjectForge::Forgeyard#define using ForgeDSL. Alternatively, can be directly initalized with Parameters if you prefer not using the DSL.

Then, #forge can be called to build instances of #forge_target.

Since:

  • 0.1.0

Defined Under Namespace

Classes: Parameters

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Forge.

Parameters:

  • forge_target (Class, Any)

    class or object to forge, will be passed to mold as forge_target argument

  • parameters (Parameters, ForgeDSL)

    forge parameters

  • name (Symbol, nil) (defaults to: nil)

    forge name

Raises:

Since:

  • 0.1.0



74
75
76
77
78
79
80
81
82
83
# File 'lib/object_forge/forge.rb', line 74

def initialize(forge_target, parameters, name: nil)
  @name = name
  @forge_target = forge_target
  @parameters = parameters

  options = @parameters.options
  @crucible = determine_crucible(options)
  @mold = determine_mold(forge_target, options)
  @after_forge_hook = determine_after_forge_hook(options)
end

Instance Attribute Details

#forge_targetClass, Any (readonly) Also known as: target

Returns class or object to forge.

Returns:

  • (Class, Any)

    class or object to forge

Since:

  • 0.4.0



61
62
63
# File 'lib/object_forge/forge.rb', line 61

def forge_target
  @forge_target
end

#nameSymbol? (readonly)

Returns forge name, only used for identification purposes.

Returns:

  • (Symbol, nil)

    forge name, only used for identification purposes

Since:

  • 0.1.0



57
58
59
# File 'lib/object_forge/forge.rb', line 57

def name
  @name
end

#parametersParameters, ForgeDSL (readonly)

Returns forge parameters.

Returns:

Since:

  • 0.1.0



65
66
67
# File 'lib/object_forge/forge.rb', line 65

def parameters
  @parameters
end

Class Method Details

.define(forge_target, name: nil) {|dsl| ... } ⇒ Forge

Define (and initialize) a forge using DSL.

Parameters:

  • forge_target (Class, Any)

    class or object to forge

  • name (Symbol, nil) (defaults to: nil)

    forge name

Yield Parameters:

Yield Returns:

  • (void)

Returns:

See Also:

Since:

  • 0.1.0



52
53
54
# File 'lib/object_forge/forge.rb', line 52

def self.define(forge_target, name: nil, &)
  new(forge_target, ForgeDSL.new(&), name:)
end

Instance Method Details

#forge(*traits, **overrides) {|object| ... } ⇒ Any Also known as: build, call

Forge a new instance, applying attributes to forge target.

Positional arguments are taken as trait names, keyword arguments as attribute overrides.

All traits and overrides are applied in argument order, with overrides always applied after traits.

If a block is given, forged instance is yielded to it after being built.

Parameters:

  • traits (Array<Symbol>)

    traits to apply

  • overrides (Hash{Symbol => Proc, Any})

    attribute overrides

Yield Parameters:

  • object (Any)

    forged instance

Yield Returns:

  • (void)

Returns:

  • (Any)

    forged instance

Raises:

  • (ArgumentError)

    if a trait name is unknown

Since:

  • 0.1.0



104
105
106
107
108
109
110
# File 'lib/object_forge/forge.rb', line 104

def forge(*traits, **overrides)
  resolved_attributes = resolve_attributes(traits, overrides)
  instance = @mold.call(forge_target: @forge_target, attributes: resolved_attributes)
  @after_forge_hook&.call(instance)
  yield instance if block_given?
  instance
end