Class: RestBuilder::Engine

Inherits:
Object
  • Object
show all
Includes:
Middleware
Defined in:
lib/rest-builder/engine.rb

Direct Known Subclasses

HttpClient

Constant Summary

Constants included from Middleware

Middleware::METHODS_WITH_PAYLOAD, Middleware::UNRESERVED

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Middleware

contain_binary?, #contain_binary?, #error_callback, escape, #escape, #fail, #give_promise, has_payload?, #has_payload?, included, #log, #merge_hash, merge_hash, percent_encode, #percent_encode, #request_uri, request_uri, #run, #string_keys, string_keys

Class Method Details

.membersObject



8
# File 'lib/rest-builder/engine.rb', line 8

def self.members; [:config_engine]; end

Instance Method Details

#call(env, &k) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rest-builder/engine.rb', line 11

def call env, &k
  promise = Promise.new(env[TIMER])
  req     = env.merge(REQUEST_URI => request_uri(env), PROMISE => promise)

  promise.then do |result|
    case result
    when Exception
      req.merge(FAIL => env[FAIL] + [result])
    else
      req.merge(result)
    end
  end.then(&k)

  pool_size = env[CLIENT].class.pool_size
  if pool_size < 0
    promise.call{ request(req) }
  elsif pool_size == 0
    promise.defer{ request(req) }
  else
    promise.defer(env[CLIENT].class.thread_pool){ request(req) }
  end

  req.merge(promise.future_response)
end