Class: RestCore::Builder
- Inherits:
-
Object
show all
- Includes:
- RestCore
- Defined in:
- lib/rest-core/builder.rb
Constant Summary
Constants included
from RestCore
ASYNC, CLIENT, DRY, FAIL, HIJACK, LOG, PROMISE, REQUEST_HEADERS, REQUEST_METHOD, REQUEST_PATH, REQUEST_PAYLOAD, REQUEST_QUERY, REQUEST_URI, RESPONSE_BODY, RESPONSE_HEADERS, RESPONSE_KEY, RESPONSE_SOCKET, RESPONSE_STATUS, Simple, TIMER, Universal, VERSION
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from RestCore
eagerload, id
Constructor Details
#initialize(&block) ⇒ Builder
Returns a new instance of Builder.
19
20
21
22
23
|
# File 'lib/rest-core/builder.rb', line 19
def initialize &block
@engine = nil
@middles ||= []
instance_eval(&block) if block_given?
end
|
Instance Attribute Details
#default_engine ⇒ Object
27
28
29
|
# File 'lib/rest-core/builder.rb', line 27
def default_engine
@default_engine ||= self.class.default_engine
end
|
#middles ⇒ Object
Returns the value of attribute middles.
25
26
27
|
# File 'lib/rest-core/builder.rb', line 25
def middles
@middles
end
|
Instance Method Details
#members ⇒ Object
39
40
41
42
43
|
# File 'lib/rest-core/builder.rb', line 39
def members
middles.map{ |(middle, _, _)|
middle.members if middle.respond_to?(:members)
}.flatten.compact
end
|
#run(engine) ⇒ Object
35
36
37
|
# File 'lib/rest-core/builder.rb', line 35
def run engine
@engine = engine
end
|
#to_app(engine = @engine || default_engine) ⇒ Object
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/rest-core/builder.rb', line 45
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
|
#to_client(*attrs) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/rest-core/builder.rb', line 56
def to_client *attrs
fields = members + attrs
struct = build_struct(fields)
client = Class.new(struct)
client.const_set('Struct', struct)
class_methods = build_class_methods
client.const_set('ClassMethods', class_methods)
client.singleton_class.send(:include, class_methods)
client.send(:include, Client)
client.builder = self
client.pool_size = 0 client.pool_idle_time = 60 client.event_source_class = EventSource
client.promises = []
client.mutex = Mutex.new
client
end
|
#use(middle, *args, &block) ⇒ Object
31
32
33
|
# File 'lib/rest-core/builder.rb', line 31
def use middle, *args, &block
middles << [middle, args, block]
end
|