Class: Typhoeus::Hydra
- Inherits:
-
Object
show all
- Extended by:
- Callbacks
- Includes:
- ConnectOptions, Stubbing
- Defined in:
- lib/typhoeus/hydra.rb,
lib/typhoeus/hydra/stubbing.rb,
lib/typhoeus/hydra/callbacks.rb,
lib/typhoeus/hydra/connect_options.rb
Defined Under Namespace
Modules: Callbacks, ConnectOptions, Stubbing
Classes: NetConnectNotAllowedError
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Callbacks
after_request_before_on_complete, clear_global_hooks, extended, run_global_hooks_for
Methods included from Stubbing
included
#clear_stubs, extended, #find_stub_from_request, #stub
included
Constructor Details
#initialize(options = {}) ⇒ Hydra
Returns a new instance of Hydra.
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/typhoeus/hydra.rb', line 11
def initialize(options = {})
@memoize_requests = true
@multi = Multi.new
@easy_pool = []
initial_pool_size = options[:initial_pool_size] || 10
@max_concurrency = options[:max_concurrency] || 200
initial_pool_size.times { @easy_pool << Easy.new }
@memoized_requests = {}
@retrieved_from_cache = {}
@queued_requests = []
@running_requests = 0
self.stubs = []
@active_stubs = []
end
|
Class Method Details
.hydra ⇒ Object
27
28
29
|
# File 'lib/typhoeus/hydra.rb', line 27
def self.hydra
@hydra ||= new
end
|
.hydra=(val) ⇒ Object
31
32
33
|
# File 'lib/typhoeus/hydra.rb', line 31
def self.hydra=(val)
@hydra = val
end
|
Instance Method Details
#cache_getter(&block) ⇒ Object
93
94
95
|
# File 'lib/typhoeus/hydra.rb', line 93
def cache_getter(&block)
@cache_getter = block
end
|
#cache_setter(&block) ⇒ Object
97
98
99
|
# File 'lib/typhoeus/hydra.rb', line 97
def cache_setter(&block)
@cache_setter = block
end
|
#clear_cache_callbacks ⇒ Object
35
36
37
38
|
# File 'lib/typhoeus/hydra.rb', line 35
def clear_cache_callbacks
@cache_setter = nil
@cache_getter = nil
end
|
#disable_memoization ⇒ Object
89
90
91
|
# File 'lib/typhoeus/hydra.rb', line 89
def disable_memoization
@memoize_requests = false
end
|
#fire_and_forget ⇒ Object
40
41
42
43
|
# File 'lib/typhoeus/hydra.rb', line 40
def fire_and_forget
@queued_requests.each {|r| queue(r, false)}
@multi.fire_and_forget
end
|
#on_complete(&block) ⇒ Object
101
102
103
|
# File 'lib/typhoeus/hydra.rb', line 101
def on_complete(&block)
@on_complete = block
end
|
#on_complete=(proc) ⇒ Object
105
106
107
|
# File 'lib/typhoeus/hydra.rb', line 105
def on_complete=(proc)
@on_complete = proc
end
|
#queue(request, obey_concurrency_limit = true) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/typhoeus/hydra.rb', line 45
def queue(request, obey_concurrency_limit = true)
return if assign_to_stub(request)
check_allow_net_connect!(request)
if @running_requests >= @max_concurrency && obey_concurrency_limit
@queued_requests << request
else
if request.method == :get
if @memoize_requests && @memoized_requests.has_key?(request.url)
if response = @retrieved_from_cache[request.url]
request.response = response
request.call_handlers
else
@memoized_requests[request.url] << request
end
else
@memoized_requests[request.url] = [] if @memoize_requests
get_from_cache_or_queue(request)
end
else
get_from_cache_or_queue(request)
end
end
end
|
#run ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/typhoeus/hydra.rb', line 73
def run
while !@active_stubs.empty?
m = @active_stubs.first
while request = m.requests.shift
response = m.response
response.request = request
handle_request(request, response)
end
@active_stubs.delete(m)
end
@multi.perform
@memoized_requests = {}
@retrieved_from_cache = {}
end
|