Module: Scorpion

Included in:
ChainHunter, Hunter
Defined in:
lib/scorpion.rb,
lib/scorpion/hunt.rb,
lib/scorpion/nest.rb,
lib/scorpion/rack.rb,
lib/scorpion/error.rb,
lib/scorpion/rails.rb,
lib/scorpion/rspec.rb,
lib/scorpion/hunter.rb,
lib/scorpion/method.rb,
lib/scorpion/object.rb,
lib/scorpion/stinger.rb,
lib/scorpion/version.rb,
lib/scorpion/rack/env.rb,
lib/scorpion/attribute.rb,
lib/scorpion/rails/job.rb,
lib/scorpion/dependency.rb,
lib/scorpion/rails/nest.rb,
lib/scorpion/chain_hunter.rb,
lib/scorpion/rails/mailer.rb,
lib/scorpion/rspec/helper.rb,
lib/scorpion/attribute_set.rb,
lib/scorpion/rails/railtie.rb,
lib/scorpion/dependency_map.rb,
lib/scorpion/rack/middleware.rb,
lib/scorpion/rails/controller.rb,
lib/scorpion/rails/active_record.rb,
lib/scorpion/rails/active_record/model.rb,
lib/scorpion/dependency/class_dependency.rb,
lib/scorpion/rack/missing_scorpion_error.rb,
lib/scorpion/dependency/module_dependency.rb,
lib/scorpion/rails/active_record/relation.rb,
lib/scorpion/dependency/builder_dependency.rb,
lib/scorpion/dependency/argument_dependency.rb,
lib/scorpion/dependency/captured_dependency.rb,
lib/scorpion/rails/active_record/association.rb

Defined Under Namespace

Modules: Method, Object, Rack, Rails, Rspec, Stinger Classes: ArityMismatch, Attribute, AttributeSet, BuilderRequiredError, ChainHunter, ContractMismatchError, Dependency, DependencyMap, Error, Hunt, Hunter, Nest, UnsuccessfulHunt

Constant Summary collapse

VERSION_NUMBER =
"1.0.10".freeze
VERSION_SUFFIX =
"".freeze
VERSION =
"#{ VERSION_NUMBER }#{ VERSION_SUFFIX }".freeze

Convenience Methods collapse

Convenience Methods collapse

Instance Method Summary collapse

Instance Attribute Details

#instanceScorpion

Returns main scorpion for the app.

Returns:

  • (Scorpion)

    main scorpion for the app.



111
112
113
114
# File 'lib/scorpion.rb', line 111

def self.instance
  @instance_referenced = true
  @instance
end

#loggerLogger

Returns logger for the Scorpion framework to use.

Returns:

  • (Logger)

    logger for the Scorpion framework to use.



93
94
95
# File 'lib/scorpion.rb', line 93

def logger
  @logger || Scorpion.logger
end

Class Method Details

.fetch(dependencies, &block) ⇒ Object

Hunt for dependency from the primary Scorpion #instance.

See Also:



139
140
141
# File 'lib/scorpion.rb', line 139

def self.fetch( dependencies, &block )
  instance.fetch dependencies, &block
end

.instanceScorpion

Returns main scorpion for the app.

Returns:

  • (Scorpion)

    main scorpion for the app.



111
112
113
114
# File 'lib/scorpion.rb', line 111

def self.instance
  @instance_referenced = true
  @instance
end

.instance=(scorpion) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/scorpion.rb', line 118

def self.instance=( scorpion )
  if @instance_referenced
    logger.warn "Replacing the global Scorpion.instance will not update any Scorpion::Nest instances created with the original scorpion." if warn_global_replace # rubocop:disable Metrics/LineLength
    @instance_referenced = false
  end
  @instance = scorpion
end

.loggerLogger

Returns logger for the Scorpion framework to use.

Returns:

  • (Logger)

    logger for the Scorpion framework to use.



145
146
147
# File 'lib/scorpion.rb', line 145

def self.logger
  @logger ||= defined?( ::Rails ) ? ::Rails.logger : Logger.new( STDOUT )
end

.logger=(value) ⇒ Object



149
150
151
# File 'lib/scorpion.rb', line 149

def self.logger=( value )
  @logger = value
end

.prepare(reset = false, &block) ⇒ Object

Prepare the #instance for hunting.

Parameters:

  • reset (Boolean) (defaults to: false)

    true to free all existing resource and initialize a new scorpion.



132
133
134
135
# File 'lib/scorpion.rb', line 132

def self.prepare( reset = false, &block )
  @instance.reset if reset
  instance.prepare &block
end

Instance Method Details

#build_nestScorpion::Nest

Returns a nest that uses this scorpion as the mother.

Returns:



87
88
89
# File 'lib/scorpion.rb', line 87

def build_nest
  Scorpion::Nest.new( self )
end

#destroyObject

Free up any captured dependency and release any long-held resources.



78
79
80
# File 'lib/scorpion.rb', line 78

def destroy
  reset
end

#execute(hunt) ⇒ Object

Execute the ‘hunt` returning the desired dependency.

Parameters:

  • hunt (Hunt)

    to execute.

Returns:

  • (Object)

    an object that satisfies the hunt contract.



66
67
68
# File 'lib/scorpion.rb', line 66

def execute( hunt )
  fail "Not implemented"
end

#fetch(contract, *arguments, &block) ⇒ Object

Hunts for an object that satisfies the requested ‘contract`.

Parameters:

  • contract (Class, Module, Symbol)

    describing the desired behavior of the dependency.

Returns:

  • (Object)

    an object that satisfies the contract.

Raises:



26
27
28
29
# File 'lib/scorpion.rb', line 26

def fetch( contract, *arguments, &block )
  hunt = Hunt.new( self, contract, *arguments, &block )
  execute hunt
end

#inject(target) ⇒ target

Inject the #target with all non-lazy dependencies.

Parameters:

Returns:

  • (target)


47
48
49
50
51
52
# File 'lib/scorpion.rb', line 47

def inject( target )
  hunt = Scorpion::Hunt.new self, nil
  hunt.inject target

  target
end

#new(object_class, *arguments, &block) ⇒ Scorpion::Object

Explicitly spawn an instance of #object_class and inject it’s dependencies.

Parameters:

  • args (Array<Object>)

    to pass to the constructor.

  • block (#call)

    to pass to the constructor.

Returns:



58
59
60
61
# File 'lib/scorpion.rb', line 58

def new( object_class, *arguments, &block )
  hunt = Hunt.new( self, object_class, *arguments, &block )
  Scorpion::Dependency::ClassDependency.new( object_class ).fetch( hunt )
end

#replicate(&block) ⇒ Scorpion

Creates a new Scorpion copying the current configuration any any currently captured dependency.

Returns:

  • (Scorpion)

    the replicated scorpion.



73
74
75
# File 'lib/scorpion.rb', line 73

def replicate( &block )
  fail "Not implemented"
end

#resetObject

Reset the hunting map and clear all dependencies.



83
84
# File 'lib/scorpion.rb', line 83

def reset
end

#spawn(hunt, object_class, *arguments, &block) ⇒ Scorpion::Object

Creates a new object and feeds it it’s dependencies.

Parameters:

  • object_class (Class)

    a class that includes Object.

  • args (Array<Object>)

    to pass to the constructor.

  • block (#call)

    to pass to the constructor.

Returns:



36
37
38
39
40
41
42
# File 'lib/scorpion.rb', line 36

def spawn( hunt, object_class, *arguments, &block )
  if object_class < Scorpion::Object
    object_class.spawn hunt, *arguments, &block
  else
    object_class.new *arguments, &block
  end
end