History

Make Docs:Requester#request accept an array of URLs

Thibaut committed 12 years ago

Commit c6be9b61 parent 562a4c72 files · +70 −35Browse files

Unified · Split

2 files
  1. lib/docs/core/requester.rb +14 −7
  2. test/lib/docs/core/requester_test.rb +56 −28
lib/docs/core/requester.rb+14−7
@@ -4,10 +4,10 @@ module Docs · 3 unmodified lines
44 class Requester < Typhoeus::Hydra
55 attr_reader :request_options
66
7− def self.run(url, options = {}, &block)
7+ def self.run(urls, options = {}, &block)
88 requester = new(options)
99 requester.on_response(&block) if block
10− requester.request(url)
10+ requester.request(urls)
1111 requester.run
1212 requester
1313 end
@@ -18,11 +18,11 @@ module Docs · 4 unmodified lines
1818 super
1919 end
2020
21− def request(url, options = {}, &block)
22− request = Request.new(url, request_options.merge(options))
23− request.on_complete(&block) if block
24− queue(request)
25− request
21+ def request(urls, options = {}, &block)
22+ requests = [urls].flatten.map do |url|
23+ build_and_queue_request(url, options, &block)
24+ end
25+ requests.length == 1 ? requests.first : requests
2626 end
2727
2828 def queue(request)
@@ -38,6 +38,13 @@ module Docs · 9 unmodified lines
3838
3939 private
4040
41+ def build_and_queue_request(url, options, &block)
42+ request = Request.new(url, request_options.merge(options))
43+ request.on_complete(&block) if block
44+ queue(request)
45+ request
46+ end
47+
4148 def handle_response(response)
4249 on_response.each do |callback|
4350 result = callback.call(response)
test/lib/docs/core/requester_test.rb+56−28
@@ -10,12 +10,16 @@ class DocsRequesterTest < MiniTest::Spec · 9 unmodified lines
1010 Docs::Requester.new(options)
1111 end
1212
13+ let :url do
14+ 'http://example.com'
15+ end
16+
1317 let :options do
1418 Hash.new
1519 end
1620
17− let :url do
18− 'http://example.com'
21+ let :block do
22+ Proc.new {}
1923 end
2024
2125 after do
@@ -36,37 +40,62 @@ class DocsRequesterTest < MiniTest::Spec · 14 unmodified lines
3640 end
3741
3842 describe "#request" do
39− it "returns a request" do
40− assert_instance_of Docs::Request, requester.request(url)
41− end
42−
43− describe "the request" do
44− it "is queued" do
45− request = requester.request(url)
46− assert_includes requester.queued_requests, request
43+ context "with a url" do
44+ it "returns a request" do
45+ assert_instance_of Docs::Request, requester.request(url)
4746 end
4847
49− it "has the given url" do
50− request = requester.request(url)
51− assert_equal url, request.base_url
48+ describe "the request" do
49+ it "is queued" do
50+ request = requester.request(url)
51+ assert_includes requester.queued_requests, request
52+ end
53+
54+ it "has the given url" do
55+ request = requester.request(url)
56+ assert_equal url, request.base_url
57+ end
58+
59+ it "has the default :request_options" do
60+ options[:request_options] = { params: 'test' }
61+ request = requester.request(url)
62+ assert_equal 'test', request.options[:params]
63+ end
64+
65+ it "has the given options" do
66+ options[:request_options] = { params: '' }
67+ request = requester.request(url, params: 'test')
68+ assert_equal 'test', request.options[:params]
69+ end
70+
71+ it "has the given block as an on_complete callback" do
72+ request = requester.request(url, &block)
73+ assert_includes request.on_complete, block
74+ end
5275 end
76+ end
5377
54− it "has the default :request_options" do
55− options[:request_options] = { params: 'test' }
56− request = requester.request(url)
57− assert_equal 'test', request.options[:params]
78+ context "with an array of urls" do
79+ let :urls do
80+ ['one', 'two']
5881 end
5982
60− it "has the given options" do
61− options[:request_options] = { params: '' }
62− request = requester.request(url, params: 'test')
63− assert_equal 'test', request.options[:params]
83+ it "returns an array of requests" do
84+ result = requester.request(urls, { params: 'test' }, &block)
85+ assert_instance_of Array, result
86+ assert_equal urls.length, result.length
87+ assert result.all? { |obj| obj.instance_of? Docs::Request }
88+ urls.each_with_index do |url, i|
89+ assert_equal url, result[i].base_url
90+ assert_equal 'test', result[i].options[:params]
91+ assert_includes result[i].on_complete, block
92+ end
6493 end
6594
66− it "has the given block as an on_complete callback" do
67− block = Proc.new {}
68− request = requester.request(url, &block)
69− assert_includes request.on_complete, block
95+ it "queues the requests in the given order" do
96+ queue = []
97+ stub(requester).queue { |request| queue << request }
98+ assert_equal urls, requester.request(urls).map(&:base_url)
7099 end
71100 end
72101 end
@@ -77,9 +106,8 @@ class DocsRequesterTest < MiniTest::Spec · 4 unmodified lines
77106 end
78107
79108 it "stores a callback" do
80− proc = Proc.new {}
81− requester.on_response(&proc)
82− assert_includes requester.on_response, proc
109+ requester.on_response(&block)
110+ assert_includes requester.on_response, block
83111 end
84112 end
85113