Module: RestCore::Wrapper
Defined Under Namespace
Modules: DefaultEngine
Constant Summary
Constants included
from RestCore
ASYNC, CLIENT, DRY, FAIL, HIJACK, LOG, PROMISE, REQUEST_HEADERS, REQUEST_METHOD, REQUEST_PATH, REQUEST_PAYLOAD, REQUEST_QUERY, RESPONSE_BODY, RESPONSE_HEADERS, RESPONSE_SOCKET, RESPONSE_STATUS, Simple, TIMER, Universal, VERSION
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from RestCore
eagerload, id
Instance Attribute Details
#default_engine ⇒ Object
22
23
24
|
# File 'lib/rest-core/wrapper.rb', line 22
def default_engine
@default_engine ||= self.class.default_engine
end
|
#middles ⇒ Object
Returns the value of attribute middles.
20
21
22
|
# File 'lib/rest-core/wrapper.rb', line 20
def middles
@middles
end
|
#wrapped ⇒ Object
Returns the value of attribute wrapped.
20
21
22
|
# File 'lib/rest-core/wrapper.rb', line 20
def wrapped
@wrapped
end
|
Class Method Details
.included(mod) ⇒ Object
13
14
15
16
17
18
|
# File 'lib/rest-core/wrapper.rb', line 13
def self.included mod
mod.send(:extend, DefaultEngine)
class << mod
attr_writer :default_engine
end
end
|
.partial_deep_copy(obj) ⇒ Object
64
65
66
67
68
69
70
71
|
# File 'lib/rest-core/wrapper.rb', line 64
def partial_deep_copy obj
case obj
when Array; obj.map{ |o| partial_deep_copy(o) }
when Hash ; obj.inject({}){ |r, (k, v)| r[k] = partial_deep_copy(v); r }
when Numeric, Symbol, TrueClass, FalseClass, NilClass; obj
else begin obj.dup; rescue TypeError; obj; end
end
end
|
Instance Method Details
#initialize(&block) ⇒ Object
26
27
28
29
30
31
|
# File 'lib/rest-core/wrapper.rb', line 26
def initialize &block
@engine = nil
@middles ||= []
instance_eval(&block) if block_given?
@wrapped ||= to_app
end
|
#members ⇒ Object
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/rest-core/wrapper.rb', line 41
def members
middles.map{ |(middle, args, block)|
if middle.public_method_defined?(:wrapped)
middle.members + middle.new(Dry.new, *args, &block).members
else
middle.members
end if middle.respond_to?(:members)
}.flatten.compact
end
|
#run(engine) ⇒ Object
37
38
39
|
# File 'lib/rest-core/wrapper.rb', line 37
def run engine
@engine = engine
end
|
#to_app(engine = @engine || default_engine) ⇒ Object
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/rest-core/wrapper.rb', line 52
def to_app engine=@engine || default_engine
middles.reverse.inject(engine.new){ |app, (middle, args, block)|
begin
middle.new(app, *partial_deep_copy(args), &block)
rescue ArgumentError => e
raise ArgumentError.new("#{middle}: #{e}")
end
}
end
|
#use(middle, *args, &block) ⇒ Object
33
34
35
|
# File 'lib/rest-core/wrapper.rb', line 33
def use middle, *args, &block
middles << [middle, args, block]
end
|