Class: Async::Service::Environment::Builder

Inherits:
BasicObject
Defined in:
lib/async/service/environment.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(facet = ::Module.new) ⇒ Builder

Returns a new instance of Builder.



32
33
34
# File 'lib/async/service/environment.rb', line 32

def initialize(facet = ::Module.new)
  @facet = facet
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, argument = nil, &block) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/async/service/environment.rb', line 46

def method_missing(name, argument = nil, &block)
  if block
    @facet.define_method(name, &block)
  else
    @facet.define_method(name){argument}
  end
end

Class Method Details

.for(*facets, **values, &block) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/async/service/environment.rb', line 10

def self.for(*facets, **values, &block)
  top = ::Module.new
  
  builder = self.new(top)
  
  facets.each do |facet|
    builder.include(facet)
  end
  
  values.each do |key, value|
    if value.is_a?(::Proc)
      builder.method_missing(key, &value)
    else
      builder.method_missing(key, value)
    end
  end
  
  builder.instance_exec(&block) if block_given?
  
  return top
end

Instance Method Details

#include(target) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/async/service/environment.rb', line 36

def include(target)
  if target.class == ::Module
    @facet.include(target)
  elsif target.respond_to?(:included)
    target.included(@facet)
  else
    ::Kernel.raise ::ArgumentError, "Cannot include #{target.inspect} into #{@facet.inspect}!"
  end
end