typhoeus 0.5.0.alpha → 0.5.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,7 +20,6 @@ Major Changes:
20
20
  for a description.
21
21
  * The following classes were deleted because they do not seemed to be uesed at all. If that
22
22
  turns out to be wrong, they will be restored: `Typhoeus::Filter`, `Typhoeus::Remote`, `Typhoeus::RemoteMethod`, `Typhoeus::RemoteProxyObject`
23
- * `Typhoeus::Easy` and `Typhoeus::Multi` are now `Ethon::Easy` and `Ethon::Multi`
24
23
 
25
24
  * Request shortcuts: `Typhoeus.get("www.google.de")`
26
25
  * Global configuration:
@@ -33,17 +32,6 @@ end
33
32
  * No more Response#headers_hash, instead response#header returning the last
34
33
  header and response#redirections returning the responses with headers
35
34
  generated through redirections
36
- * Instead of defining the same callbacks on every request, you can define global callbacks:
37
-
38
- ```ruby
39
- Typhoeus.on_complete { p "yay" }
40
- ```
41
-
42
- * The stubbing interface changed slightly. You now have the same syntax as for requests:
43
-
44
- ```ruby
45
- Typhoeus.stub(url, options).and_return(response)
46
- ```
47
35
 
48
36
  Enhancements:
49
37
 
data/Gemfile CHANGED
@@ -1,19 +1,3 @@
1
1
  source :rubygems
2
- gemspec
3
-
4
- gem "rake"
5
-
6
- group :development, :test do
7
- gem "rspec", "~> 2.11"
8
2
 
9
- gem "sinatra", "~> 1.3"
10
- gem "json"
11
-
12
- if RUBY_PLATFORM == "java"
13
- gem "spoon"
14
- end
15
-
16
- unless ENV["CI"]
17
- gem "guard-rspec", "~> 0.7"
18
- end
19
- end
3
+ gemspec
@@ -2,11 +2,9 @@ require 'digest/sha2'
2
2
  require 'ethon'
3
3
 
4
4
  require 'typhoeus/config'
5
- require 'typhoeus/errors'
6
- require 'typhoeus/expectation'
7
- require 'typhoeus/hydra'
8
5
  require 'typhoeus/request'
9
6
  require 'typhoeus/response'
7
+ require 'typhoeus/hydra'
10
8
  require 'typhoeus/version'
11
9
 
12
10
  # Typhoeus is a http client library based on Ethon which
@@ -26,7 +24,6 @@ module Typhoeus
26
24
  extend self
27
25
  extend Hydras::EasyPool
28
26
  extend Requests::Actions
29
- extend Requests::Callbacks::Types
30
27
 
31
28
  # The default typhoeus user agent.
32
29
  USER_AGENT = "Typhoeus - https://github.com/typhoeus/typhoeus"
@@ -42,32 +39,4 @@ module Typhoeus
42
39
  def configure
43
40
  yield Config
44
41
  end
45
-
46
- # Stub out specific request.
47
- #
48
- # @example Stub.
49
- # Typhoeus.stub("www.example.com").and_return(Typhoeus::Response.new)
50
- #
51
- # @param [ String ] url The url to stub out.
52
- # @param [ Hash ] options The options to stub out.
53
- #
54
- # @return [ Expection ] The expection.
55
- def stub(url, options = {})
56
- expectation = Expectation.all.find{ |e| e.url == url && e.options == options }
57
- return expectation if expectation
58
-
59
- Expectation.new(url, options).tap do |new_expectation|
60
- Expectation.all << new_expectation
61
- end
62
- end
63
-
64
- # Execute given block as if block connection is turned off.
65
- #
66
- # @param [ Block ] block The block to execute.
67
- def with_connection
68
- old = Config.block_connection
69
- Config.block_connection = false
70
- yield if block_given?
71
- Config.block_connection = old
72
- end
73
42
  end
@@ -2,13 +2,10 @@ module Typhoeus
2
2
 
3
3
  # The Typhoeus configuration used to set global
4
4
  # options. Available options:
5
- # * block_connection: only stubbed requests are
6
- # allowed, raises NoStub error when trying to
7
- # do a real request.
8
- # * verbose: show curls debug out
9
- # * memoize: memoize GET requests.
5
+ # * verbose
6
+ # * memoize.
10
7
  module Config
11
8
  extend self
12
- attr_accessor :block_connection, :memoize, :verbose
9
+ attr_accessor :verbose, :memoize
13
10
  end
14
11
  end
@@ -1,25 +1,20 @@
1
- require 'typhoeus/hydras/block_connection'
2
1
  require 'typhoeus/hydras/easy_factory'
3
2
  require 'typhoeus/hydras/easy_pool'
4
3
  require 'typhoeus/hydras/memoizable'
5
4
  require 'typhoeus/hydras/queueable'
6
5
  require 'typhoeus/hydras/runnable'
7
- require 'typhoeus/hydras/stubbable'
8
6
 
9
7
  module Typhoeus
10
8
 
11
9
  # Hydra manages making parallel HTTP requests. This
12
- # is achieved by using libcurls multi interface:
13
- # http://curl.haxx.se/libcurl/c/libcurl-multi.html
14
- # The benefits are that you don't have to worry running
10
+ # is archived by using libcurls multi interface. The
11
+ # benefits are that you don't have to worry running
15
12
  # the requests by yourself.
16
13
  class Hydra
17
14
  include Hydras::EasyPool
18
15
  include Hydras::Queueable
19
16
  include Hydras::Runnable
20
17
  include Hydras::Memoizable
21
- include Hydras::BlockConnection
22
- include Hydras::Stubbable
23
18
 
24
19
  attr_reader :max_concurrency, :multi
25
20
 
@@ -59,7 +59,7 @@ module Typhoeus
59
59
  request.response = Response.new(easy.to_hash)
60
60
  hydra.release_easy(easy)
61
61
  hydra.queue(hydra.queued_requests.shift) unless hydra.queued_requests.empty?
62
- request.execute_callbacks
62
+ request.complete
63
63
  end
64
64
  end
65
65
  end
@@ -4,7 +4,7 @@ module Typhoeus
4
4
  # This module handles the GET request memoization
5
5
  # on the hydra side. Memoization needs to be turned
6
6
  # on:
7
- # Typhoeus.configure do |config|
7
+ # Typhoeus.configre do |config|
8
8
  # config.memoize = true
9
9
  # end
10
10
  module Memoizable
@@ -33,13 +33,13 @@ module Typhoeus
33
33
  def queue(request)
34
34
  if request.memoizable? && memory.has_key?(request)
35
35
  request.instance_variable_set(:@response, memory[request])
36
- request.execute_callbacks
36
+ request.complete
37
37
  else
38
38
  super
39
39
  end
40
40
  end
41
41
 
42
- # Overrides run to make sure the memory is cleared after
42
+ # Overrides run to clear the memory is cleared after
43
43
  # each run.
44
44
  #
45
45
  # @example Run hydra.
@@ -1,27 +1,22 @@
1
- require 'typhoeus/requests/actions'
2
- require 'typhoeus/requests/block_connection'
3
1
  require 'typhoeus/requests/callbacks'
4
- require 'typhoeus/requests/marshal'
5
- require 'typhoeus/requests/memoizable'
2
+ require 'typhoeus/requests/actions'
6
3
  require 'typhoeus/requests/operations'
4
+ require 'typhoeus/requests/marshal'
7
5
  require 'typhoeus/requests/responseable'
8
- require 'typhoeus/requests/stubbable'
6
+ require 'typhoeus/requests/memoizable'
9
7
 
10
8
  module Typhoeus
11
9
 
12
10
  # This class represents a request.
13
11
  class Request
14
- extend Requests::Actions
15
- include Requests::Callbacks::Types
16
12
  include Requests::Callbacks
17
13
  include Requests::Marshal
18
14
  include Requests::Operations
15
+ extend Requests::Actions
19
16
  include Requests::Responseable
20
17
  include Requests::Memoizable
21
- include Requests::BlockConnection
22
- include Requests::Stubbable
23
18
 
24
- attr_accessor :options, :url, :hydra, :original_options
19
+ attr_accessor :options, :url, :hydra
25
20
 
26
21
  # Create a new request.
27
22
  #
@@ -34,10 +29,14 @@ module Typhoeus
34
29
  # #return [ Request ] The new request.
35
30
  def initialize(url, options = {})
36
31
  @url = url
37
- @original_options = options
38
32
  @options = options.dup
39
33
 
40
- set_defaults
34
+ if @options[:headers]
35
+ @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT}.merge(options[:headers])
36
+ else
37
+ @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT}
38
+ end
39
+ @options[:verbose] = Typhoeus::Config.verbose unless @options[:verbose]
41
40
  end
42
41
 
43
42
  # Returns wether other is equal to self.
@@ -65,8 +64,8 @@ module Typhoeus
65
64
 
66
65
  # Checks if two hashes are equal or not, discarding first-level hash order
67
66
  #
68
- # @param [ Hash ] left
69
- # @param [ Hash ] right hash to check for equality
67
+ # @param [ Hash ] hash
68
+ # @param [ Hash ] other hash to check for equality
70
69
  #
71
70
  # @return [ Boolean ] Returns true if hashes have same values for same keys and same length,
72
71
  # even if the keys are given in a different order.
@@ -78,14 +77,5 @@ module Typhoeus
78
77
  end
79
78
  end
80
79
 
81
- # Sets default header and verbose when turned on.
82
- def set_defaults
83
- if @options[:headers]
84
- @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT}.merge(options[:headers])
85
- else
86
- @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT}
87
- end
88
- @options[:verbose] = Typhoeus::Config.verbose if @options[:verbose].nil? && !Typhoeus::Config.verbose.nil?
89
- end
90
80
  end
91
81
  end
@@ -5,96 +5,12 @@ module Typhoeus
5
5
  # http methods. Like
6
6
  # Typhoeus.get("www.example.com")
7
7
  module Actions
8
-
9
- # Make a get request.
10
- #
11
- # @example Make get request.
12
- # Typhoeus.get("www.example.com")
13
- #
14
- # @param [ String ] url The url to request.
15
- # @param [ options ] options The options.
16
- #
17
- # @return [ Response ] The response.
18
- def get(url, options = {})
19
- Request.run(url, options.merge(:method => :get))
20
- end
21
-
22
- # Make a post request.
23
- #
24
- # @example Make post request.
25
- # Typhoeus.post("www.example.com")
26
- #
27
- # @param [ String ] url The url to request.
28
- # @param [ options ] options The options.
29
- #
30
- # @return [ Response ] The response.
31
- def post(url, options = {})
32
- Request.run(url, options.merge(:method => :post))
33
- end
34
-
35
- # Make a put request.
36
- #
37
- # @example Make put request.
38
- # Typhoeus.put("www.example.com")
39
- #
40
- # @param [ String ] url The url to request.
41
- # @param [ options ] options The options.
42
- #
43
- # @return [ Response ] The response.
44
- def put(url, options = {})
45
- Request.run(url, options.merge(:method => :put))
46
- end
47
-
48
- # Make a delete request.
49
- #
50
- # @example Make delete request.
51
- # Typhoeus.delete("www.example.com")
52
- #
53
- # @param [ String ] url The url to request.
54
- # @param [ options ] options The options.
55
- #
56
- # @return [ Response ] The response.
57
- def delete(url, options = {})
58
- Request.run(url, options.merge(:method => :delete))
59
- end
60
-
61
- # Make a head request.
62
- #
63
- # @example Make head request.
64
- # Typhoeus.head("www.example.com")
65
- #
66
- # @param [ String ] url The url to request.
67
- # @param [ options ] options The options.
68
- #
69
- # @return [ Response ] The response.
70
- def head(url, options = {})
71
- Request.run(url, options.merge(:method => :head))
72
- end
73
-
74
- # Make a patch request.
75
- #
76
- # @example Make patch request.
77
- # Typhoeus.patch("www.example.com")
78
- #
79
- # @param [ String ] url The url to request.
80
- # @param [ options ] options The options.
81
- #
82
- # @return [ Response ] The response.
83
- def patch(url, options = {})
84
- Request.run(url, options.merge(:method => :patch))
85
- end
86
-
87
- # Make a options request.
88
- #
89
- # @example Make options request.
90
- # Typhoeus.options("www.example.com")
91
- #
92
- # @param [ String ] url The url to request.
93
- # @param [ options ] options The options.
94
- #
95
- # @return [ Response ] The response.
96
- def options(url, options = {})
97
- Request.run(url, options.merge(:method => :options))
8
+ [:get, :post, :put, :delete, :head, :patch, :options].each do |name|
9
+ define_method(name) do |*args|
10
+ url = args[0]
11
+ options = args.fetch(1, {})
12
+ Request.run(url, options.merge(:method => name))
13
+ end
98
14
  end
99
15
  end
100
16
  end
@@ -9,7 +9,7 @@ module Typhoeus
9
9
  #
10
10
  # request.on_complete { p 1 }
11
11
  # request.on_complete { p 2 }
12
- # request.execute_callbacks
12
+ # request.complete
13
13
  # #=> 1
14
14
  # #=> 2
15
15
  #
@@ -18,64 +18,30 @@ module Typhoeus
18
18
  # request.on_complete { p 1 }
19
19
  # request.on_complete { p 2 }
20
20
  # request.on_complete.clear
21
- # request.execute_callbacks
21
+ # request.on_complete
22
22
  # #=> []
23
23
  module Callbacks
24
24
 
25
- module Types
26
- # Set on_complete callback.
27
- #
28
- # @example Set on_complete.
29
- # request.on_complete { p "yay" }
30
- #
31
- # @param [ Block ] block The block to execute.
32
- def on_complete(&block)
33
- @on_complete ||= []
34
- @on_complete << block if block_given?
35
- @on_complete
36
- end
37
-
38
- # Set on_success callback.
39
- #
40
- # @example Set on_success.
41
- # request.on_success { p "yay" }
42
- #
43
- # @param [ Block ] block The block to execute.
44
- def on_success(&block)
45
- @on_success ||= []
46
- @on_success << block if block_given?
47
- @on_success
48
- end
49
-
50
- # Set on_failure callback.
51
- #
52
- # @example Set on_failure.
53
- # request.on_failure { p "yay" }
54
- #
55
- # @param [ Block ] block The block to execute.
56
- def on_failure(&block)
57
- @on_failure ||= []
58
- @on_failure << block if block_given?
59
- @on_failure
60
- end
25
+ # Set on_complete callback.
26
+ #
27
+ # @example Set on_complete.
28
+ # request.on_complete { p "yay" }
29
+ #
30
+ # @param [ Block ] block The block to execute.
31
+ def on_complete(&block)
32
+ @on_complete ||= []
33
+ @on_complete << block if block_given?
34
+ @on_complete
61
35
  end
62
36
 
63
- # Execute nessecary callback and yields response. This
64
- # include in every case on_complete, on_success if
65
- # successful and on_failure if not.
37
+ # Execute on_complete callbacks.
66
38
  #
67
- # @example Execute callbacks.
68
- # request.execute_callbacks
69
- def execute_callbacks
70
- callbacks = Typhoeus.on_complete + on_complete
71
-
72
- if response && response.success?
73
- callbacks += Typhoeus.on_success + on_success
74
- elsif response
75
- callbacks += Typhoeus.on_failure + on_failure
39
+ # @example Execute on_completes.
40
+ # request.complete
41
+ def complete
42
+ if defined?(@on_complete)
43
+ @on_complete.map{ |callback| callback.call(self) }
76
44
  end
77
-
78
- callbacks.map{ |callback| callback.call(self.response) }
79
45
  end
80
46
  end
81
47
  end
@@ -4,7 +4,7 @@ module Typhoeus
4
4
  # This module handles the GET request memoization
5
5
  # on the request side. Memoization needs to be turned
6
6
  # on:
7
- # Typhoeus.configure do |config|
7
+ # Typhoeus.configre do |config|
8
8
  # config.memoize = true
9
9
  # end
10
10
  module Memoizable
@@ -42,9 +42,8 @@ module Typhoeus
42
42
  easy.prepare
43
43
  easy.perform
44
44
  @response = Response.new(easy.to_hash)
45
- @response.request = self
46
45
  Typhoeus.release_easy(easy)
47
- execute_callbacks
46
+ complete
48
47
  @response
49
48
  end
50
49
  end
@@ -1,17 +1,17 @@
1
- require 'typhoeus/responses/header'
2
- require 'typhoeus/responses/informations'
3
1
  require 'typhoeus/responses/legacy'
2
+ require 'typhoeus/responses/informations'
4
3
  require 'typhoeus/responses/status'
4
+ require 'typhoeus/responses/header'
5
5
 
6
6
  module Typhoeus
7
7
 
8
8
  # This class respresents the response.
9
9
  class Response
10
+ include Responses::Status
10
11
  include Responses::Informations
11
12
  include Responses::Legacy
12
- include Responses::Status
13
13
 
14
- attr_accessor :request, :options, :mock
14
+ attr_accessor :request, :options
15
15
 
16
16
  # Create a new response.
17
17
  #
@@ -23,7 +23,6 @@ module Typhoeus
23
23
  # @return [ Response ] The new response.
24
24
  def initialize(options = {})
25
25
  @options = options
26
- @header = options[:header]
27
26
  end
28
27
  end
29
28
  end
@@ -22,7 +22,7 @@ module Typhoeus
22
22
  #
23
23
  # @return [ Header ] The response header.
24
24
  def header
25
- return nil if response_header.nil? && @header.nil?
25
+ return nil unless response_header
26
26
  @header ||= Responses::Header.new(response_header.split("\r\n\r\n").last)
27
27
  end
28
28
 
@@ -13,13 +13,12 @@ module Typhoeus
13
13
  :time => :total_time,
14
14
  :app_connect_time => :appconnect_time,
15
15
  :start_transfer_time => :starttransfer_time,
16
- :name_lookup_time => :namelookup_time,
17
- :headers_hash => :header
16
+ :name_lookup_time => :namelookup_time
18
17
  }
19
18
 
20
19
  MAPPING.each do |old, new|
21
20
  define_method(old) do
22
- options[new] || options[old]
21
+ options[new]
23
22
  end
24
23
  end
25
24
  end
@@ -13,7 +13,6 @@ module Typhoeus
13
13
  # @return [ String ] The message.
14
14
  def status_message
15
15
  return @status_message if defined?(@status_message) && @status_message
16
- return options[:status_message] unless options[:status_message].nil?
17
16
 
18
17
  # HTTP servers can choose not to include the explanation to HTTP codes. The RFC
19
18
  # states this (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4):
@@ -46,7 +45,7 @@ module Typhoeus
46
45
  #
47
46
  # @return [ Boolean ] Return true if successful, false else.
48
47
  def success?
49
- return_code == :ok && response_code >= 200 && response_code < 300
48
+ (200..299).include?(response_code)
50
49
  end
51
50
 
52
51
  # Return wether the response is modified.
@@ -56,7 +55,7 @@ module Typhoeus
56
55
  #
57
56
  # @return [ Boolean ] Return true if modified, false else.
58
57
  def modified?
59
- return_code == :ok && response_code != 304
58
+ response_code != 304
60
59
  end
61
60
 
62
61
  # Return wether the response is timed out.
@@ -1,5 +1,5 @@
1
1
  module Typhoeus
2
2
 
3
3
  # The current Typhoeus version.
4
- VERSION = '0.5.0.alpha'
4
+ VERSION = '0.5.0.pre'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typhoeus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.alpha
4
+ version: 0.5.0.pre
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-08-16 00:00:00.000000000 Z
14
+ date: 2012-07-04 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: ethon
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.4.2
23
+ version: 0.3.0
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -28,7 +28,119 @@ dependencies:
28
28
  requirements:
29
29
  - - ~>
30
30
  - !ruby/object:Gem::Version
31
- version: 0.4.2
31
+ version: 0.3.0
32
+ - !ruby/object:Gem::Dependency
33
+ name: sinatra
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '1.3'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ - !ruby/object:Gem::Dependency
49
+ name: json
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.7'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: '1.7'
64
+ - !ruby/object:Gem::Dependency
65
+ name: rake
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ version: '0.9'
72
+ type: :development
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: '0.9'
80
+ - !ruby/object:Gem::Dependency
81
+ name: mocha
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 0.11.4
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: 0.11.4
96
+ - !ruby/object:Gem::Dependency
97
+ name: rspec
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '2.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '2.10'
112
+ - !ruby/object:Gem::Dependency
113
+ name: guard-rspec
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ~>
118
+ - !ruby/object:Gem::Version
119
+ version: 1.1.0
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ~>
126
+ - !ruby/object:Gem::Version
127
+ version: 1.1.0
128
+ - !ruby/object:Gem::Dependency
129
+ name: simplecov
130
+ requirement: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ~>
134
+ - !ruby/object:Gem::Version
135
+ version: 0.5.3
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ~>
142
+ - !ruby/object:Gem::Version
143
+ version: 0.5.3
32
144
  description: Like a modern code version of the mythical beast with 100 serpent heads,
33
145
  Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.
34
146
  email:
@@ -38,27 +150,19 @@ extensions: []
38
150
  extra_rdoc_files: []
39
151
  files:
40
152
  - lib/typhoeus/config.rb
41
- - lib/typhoeus/errors/no_stub.rb
42
- - lib/typhoeus/errors/typhoeus_error.rb
43
- - lib/typhoeus/errors.rb
44
- - lib/typhoeus/expectation.rb
45
153
  - lib/typhoeus/hydra.rb
46
- - lib/typhoeus/hydras/block_connection.rb
47
154
  - lib/typhoeus/hydras/easy_factory.rb
48
155
  - lib/typhoeus/hydras/easy_pool.rb
49
156
  - lib/typhoeus/hydras/memoizable.rb
50
157
  - lib/typhoeus/hydras/queueable.rb
51
158
  - lib/typhoeus/hydras/runnable.rb
52
- - lib/typhoeus/hydras/stubbable.rb
53
159
  - lib/typhoeus/request.rb
54
160
  - lib/typhoeus/requests/actions.rb
55
- - lib/typhoeus/requests/block_connection.rb
56
161
  - lib/typhoeus/requests/callbacks.rb
57
162
  - lib/typhoeus/requests/marshal.rb
58
163
  - lib/typhoeus/requests/memoizable.rb
59
164
  - lib/typhoeus/requests/operations.rb
60
165
  - lib/typhoeus/requests/responseable.rb
61
- - lib/typhoeus/requests/stubbable.rb
62
166
  - lib/typhoeus/response.rb
63
167
  - lib/typhoeus/responses/header.rb
64
168
  - lib/typhoeus/responses/informations.rb
@@ -85,7 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
189
  version: '0'
86
190
  segments:
87
191
  - 0
88
- hash: 835980537043066263
192
+ hash: -87429564240378902
89
193
  required_rubygems_version: !ruby/object:Gem::Requirement
90
194
  none: false
91
195
  requirements:
@@ -94,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
198
  version: 1.3.6
95
199
  requirements: []
96
200
  rubyforge_project: ! '[none]'
97
- rubygems_version: 1.8.23
201
+ rubygems_version: 1.8.24
98
202
  signing_key:
99
203
  specification_version: 3
100
204
  summary: Parallel HTTP library on top of libcurl multi.
@@ -1,9 +0,0 @@
1
- require 'typhoeus/errors/typhoeus_error'
2
- require 'typhoeus/errors/no_stub'
3
-
4
- module Typhoeus
5
-
6
- # This namespace contains all errors raised by typhoeus.
7
- module Errors
8
- end
9
- end
@@ -1,12 +0,0 @@
1
- module Typhoeus
2
- module Errors
3
-
4
- # Raises when block connection is turned on
5
- # and making a real request.
6
- class NoStub < TyphoeusError
7
- def initialize(request)
8
- super("The connection is blocked and no stub defined.")
9
- end
10
- end
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- module Typhoeus
2
- module Errors
3
-
4
- # Default typhoeus error class for all custom errors.
5
- class TyphoeusError < StandardError
6
- end
7
- end
8
- end
@@ -1,126 +0,0 @@
1
- module Typhoeus
2
-
3
- # This class represents an expectation. It is part
4
- # of the stubbing mechanism. An expectation contains
5
- # an url and options, like a request. They were compared
6
- # to the request url and options in order to evaluate
7
- # wether they match. If thats the case, the attached
8
- # responses were returned one by one.
9
- class Expectation
10
- attr_reader :url, :options
11
-
12
- class << self
13
-
14
- # Returns all expectations.
15
- #
16
- # @example Return expectations.
17
- # Typhoeus::Expectation.all
18
- #
19
- # @return [ Array ] The expectations.
20
- def all
21
- @expectations ||= []
22
- end
23
-
24
- # Clears expectations.
25
- #
26
- # @example Clear expectations.
27
- # Typhoeus:;Expectation.clear
28
- def clear
29
- all.clear
30
- end
31
-
32
- # Returns expecation matching the provided
33
- # request.
34
- #
35
- # @example Find expectation.
36
- # Typhoeus::Expectation.find_by(request)
37
- #
38
- # @return [ Expectation ] The matching expectation.
39
- def find_by(request)
40
- all.find do |expectation|
41
- expectation.matches?(request)
42
- end
43
- end
44
- end
45
-
46
- # Creates an expactation.
47
- #
48
- # @example Create expactation.
49
- # Typhoeus::Expectation.new(url)
50
- #
51
- # @return [ Expectation ] The created expactation.
52
- def initialize(url, options = {})
53
- @url = url
54
- @options = options
55
- @response_counter = 0
56
- end
57
-
58
- # Specify what should be returned,
59
- # when this expactation is hit.
60
- #
61
- # @example Add response.
62
- # expectation.and_return(response)
63
- def and_return(response)
64
- responses << response
65
- end
66
-
67
- # Checks wether this expectation matches
68
- # the provided request.
69
- #
70
- # @example Check if request matches.
71
- # expectation.matches? request
72
- #
73
- # @param [ Request ] The request to check.
74
- #
75
- # @return [ Boolean ] True when matches, else false.
76
- def matches?(request)
77
- url_match?(request.url) &&
78
- (options ? options.all?{ |k,v| request.original_options[k] == v } : true)
79
- end
80
-
81
- # Return canned responses.
82
- #
83
- # @example Return responses.
84
- # expectation.responses
85
- #
86
- # @return [ Array ] The responses.
87
- def responses
88
- @responses ||= []
89
- end
90
-
91
- # Return the response. When there are
92
- # multiple responses, they were returned one
93
- # by one.
94
- #
95
- # @example Return response.
96
- # expectation.response
97
- #
98
- # @return [ Response ] The response.
99
- def response
100
- response = responses.fetch(@response_counter, responses.last)
101
- @response_counter += 1
102
- response
103
- end
104
-
105
- private
106
-
107
- # Check wether the url matches the request url.
108
- # The url can be a string, regex or nil. String and
109
- # regexp were checked, nil is always true. Else false.
110
- #
111
- # Nil serves as a placeholder in case you want to match
112
- # all urls.
113
- def url_match?(request_url)
114
- case url
115
- when String
116
- url == request_url
117
- when Regexp
118
- !!request_url.match(url)
119
- when nil
120
- true
121
- else
122
- false
123
- end
124
- end
125
- end
126
- end
@@ -1,33 +0,0 @@
1
- module Typhoeus
2
- module Hydras
3
-
4
- # This module handles the blocked connection request mode on
5
- # the hydra side, where only stubbed requests
6
- # are allowed.
7
- # Connection blocking needs to be turned on:
8
- # Typhoeus.configure do |config|
9
- # config.block_connection = true
10
- # end
11
- #
12
- # When trying to do real requests a NoStub error
13
- # is raised.
14
- module BlockConnection
15
-
16
- # Overrides queue in order to check before if block connection
17
- # is turned on. If thats the case a NoStub error is
18
- # raised.
19
- #
20
- # @example Queue the request.
21
- # hydra.queue(request)
22
- #
23
- # @param [ Request ] request The request to enqueue.
24
- def queue(request)
25
- if Typhoeus::Config.block_connection
26
- raise Typhoeus::Errors::NoStub.new(request)
27
- else
28
- super
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,27 +0,0 @@
1
- module Typhoeus
2
- module Hydras
3
-
4
- # This module handles stubbing on the hydra side.
5
- # It plays well with the block_connection configuration,
6
- # which raises when you make a request which is not stubbed.
7
- module Stubbable
8
-
9
- # Override queue in order to check for matching expecations.
10
- # When an expecation is found, super is not called. Instead a
11
- # canned response is assigned to the request.
12
- #
13
- # @example Queue the request.
14
- # hydra.queue(request)
15
- def queue(request)
16
- if expectation = Expectation.find_by(request)
17
- request.response = expectation.response
18
- request.response.mock = true
19
- request.execute_callbacks
20
- request.response
21
- else
22
- super
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,31 +0,0 @@
1
- module Typhoeus
2
- module Requests
3
-
4
- # This module handles the blocked connection request mode on
5
- # the request side, where only stubbed requests
6
- # are allowed.
7
- # Connection blocking needs to be turned on:
8
- # Typhoeus.configure do |config|
9
- # config.block_connection = true
10
- # end
11
- #
12
- # When trying to do real requests a NoStub error
13
- # is raised.
14
- module BlockConnection
15
-
16
- # Overrides run in order to check before if block connection
17
- # is turned on. If thats the case a NoStub error is
18
- # raised.
19
- #
20
- # @example Run request.
21
- # request.run
22
- def run
23
- if Typhoeus::Config.block_connection
24
- raise Typhoeus::Errors::NoStub.new(self)
25
- else
26
- super
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,29 +0,0 @@
1
- module Typhoeus
2
- module Requests
3
-
4
- # This module handles stubbing on the request side.
5
- # It plays well with the block_connection configuration,
6
- # which raises when you make a request which is not stubbed.
7
- module Stubbable
8
-
9
- # Override run in order to check for matching expecations.
10
- # When an expecation is found, super is not called. Instead a
11
- # canned response is assigned to the request.
12
- #
13
- # @example Run the request.
14
- # request.run
15
- #
16
- # @return [ Response ] The response.
17
- def run
18
- if expectation = Expectation.find_by(self)
19
- @response = expectation.response
20
- @response.mock = true
21
- execute_callbacks
22
- @response
23
- else
24
- super
25
- end
26
- end
27
- end
28
- end
29
- end