orthrus 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ 0.0.3
2
+ -----
3
+ * Typhoeus::Hydra compatibility added
4
+
5
+ 0.0.2
6
+ -----
7
+ * Improved default option handling
8
+
9
+ 0.0.1
10
+ -----
11
+ * Extracted remote method defining out of Typhoeus
12
+ * Reestablished compatibility with currenct Typhoeus request interface
13
+ * Added test to cover whole functionaliy
@@ -21,7 +21,10 @@ easy interface to work with.
21
21
 
22
22
  ## Usage
23
23
 
24
- *Simple: OpenLibrary Example*
24
+ In general, Orthrus will accept all options that Typhoeus does. Here are some
25
+ examples how to use it:
26
+
27
+ ### Simple Example: OpenLibrary
25
28
 
26
29
  require 'rubygems'
27
30
  require 'typhoeus'
@@ -29,15 +32,15 @@ easy interface to work with.
29
32
 
30
33
  class OpenLibrary
31
34
  include Orthrus
32
- remote_defaults :base_uri => "http://openlibrary.org/api"
35
+ remote_defaults :base_uri => "http://openlibrary.org/api", :format => "json"
33
36
 
34
37
  define_remote_method :book, :path => '/books'
35
38
  end
36
39
 
37
- book = OpenLibrary.book(:params => {:bibkeys => "ISBN:0451526538", :format => "json"})
40
+ book = OpenLibrary.book(:params => {:bibkeys => "ISBN:0451526538"})
38
41
  puts book.inspect # Typhoeus::Response
39
42
 
40
- *Advanced: Twitter Example with JSON handling and path interpolation*
43
+ ### Advanced: Twitter Example with JSON handling and path interpolation
41
44
 
42
45
  require 'rubygems'
43
46
  require 'typhoeus'
@@ -48,7 +51,8 @@ easy interface to work with.
48
51
  include Orthrus
49
52
  remote_defaults :on_success => lambda { |response| JSON.parse(response.body) },
50
53
  :on_failure => lambda { |response| puts "error code: #{response.code}"; {} },
51
- :base_uri => "http://api.twitter.com"
54
+ :base_uri => "http://api.twitter.com",
55
+ :version => 1
52
56
 
53
57
  define_remote_method :search, :path => "/:version/search.json"
54
58
  define_remote_method :trends, :path => "/:version/trends/:time_frame.json"
@@ -57,19 +61,45 @@ easy interface to work with.
57
61
  end
58
62
 
59
63
  # Get all tweets mentioning pluto
60
- tweets = Twitter.search(:version => 1, :params => {:q => "pluto"})
64
+ tweets = Twitter.search(:params => {:q => "pluto"})
61
65
 
62
66
  # Get all current trends
63
- trends = Twitter.trends(:version => 1, :time_frame => :current)
67
+ trends = Twitter.trends(:time_frame => :current)
64
68
 
65
69
  # Submit a tweet. Authentication skipped in example.
66
- Twitter.tweet(:version => 1, :params => {:status => "I #love #planets! :)"})
70
+ Twitter.tweet(:params => {:status => "I #love #planets! :)"})
71
+
72
+
73
+ ### Hydra
74
+
75
+ To use Typhoeus' hydra to perform multiple request parallel, you can set the `return_request` option
76
+ in `remote_defaults`, `define_remote_method` or even on per request basis to `true`.
77
+ Orthrus will return the crafted Typhoeus::Request, including the success and error handling.
78
+
79
+ require 'rubygems'
80
+ require 'typhoeus'
81
+ require 'orthrus'
82
+
83
+ class WeatherInformation
84
+ include Orthrus
85
+ remote_defaults :base_uri => "http://wackyweather.test",
86
+ :return_request => true
87
+
88
+ define_remote_method :city, :path => "/city/:name"
89
+ end
90
+
91
+ hydra = Typhoeus::Hydra.new
92
+ hydra.queue new_york = WeatherInformation.city(:name => "new_york")
93
+ hydra.queue berlin = WeatherInformation.city(:name => "berlin")
94
+ hydra.run
95
+
96
+ puts berlin.handled_response
97
+
98
+ For more information about the hydra feature, visit: http://github.com/dbalatero/typhoeus
67
99
 
68
100
  ## TODO
69
101
 
70
102
  - no cache handling yet.
71
- - make requests hydra-compatible
72
- - set default parameters
73
103
 
74
104
  ## Author
75
105
 
@@ -18,12 +18,17 @@ module Orthrus
18
18
  # @param [Hash] args for interpolation and request options
19
19
  # @return [Response, Object] the Typhoeus::Response or the result of the on_complete block
20
20
  def run(args = {})
21
- url = base_uri + interpolated_path(args)
22
- request = Typhoeus::Request.new(url, @options.smart_merge(args))
21
+ options = @options.smart_merge(args)
22
+ url = base_uri + interpolated_path(options)
23
+ request = Typhoeus::Request.new(url, options)
23
24
  handle_response(request)
24
- Typhoeus::Hydra.hydra.queue request
25
- Typhoeus::Hydra.hydra.run
26
- request.handled_response
25
+ if options[:return_request]
26
+ request
27
+ else
28
+ Typhoeus::Hydra.hydra.queue request
29
+ Typhoeus::Hydra.hydra.run
30
+ request.handled_response
31
+ end
27
32
  end
28
33
 
29
34
  # Interpolate parts of the path marked through color
@@ -1,3 +1,3 @@
1
1
  module Orthrus
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -38,10 +38,10 @@ class TestDefineRemoteMethod < Test::Unit::TestCase
38
38
 
39
39
  def test_remote_method_with_success_handler
40
40
  remote_method = Orthrus::RemoteMethod.new(
41
- :base_uri => "http://astronomical.test",
42
- :path => "/planets/:identifier",
41
+ :base_uri => "http://astronomical.test",
42
+ :path => "/planets/:identifier",
43
43
  :on_success => lambda { |response| JSON.parse(response.body) },
44
- :method => :get
44
+ :method => :get
45
45
  )
46
46
  response = remote_method.run(:identifier => :mars)
47
47
  assert_equal '3.9335 g/cm3', response['mars']['density']
@@ -68,4 +68,13 @@ class TestDefineRemoteMethod < Test::Unit::TestCase
68
68
  response = remote_method.run(:body => '{"planet":"naboo"}')
69
69
  assert_equal "Creating planets is not your business!", response.body
70
70
  end
71
+
72
+ def test_remote_method_returns_request
73
+ remote_method = Orthrus::RemoteMethod.new(
74
+ :base_uri => "http://astronomical.test",
75
+ :path => "/planets",
76
+ :return_request => true
77
+ )
78
+ assert_instance_of Typhoeus::Request, remote_method.run
79
+ end
71
80
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthrus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Johannes Opper
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-18 00:00:00 +02:00
18
+ date: 2011-06-20 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -74,6 +74,7 @@ extra_rdoc_files: []
74
74
 
75
75
  files:
76
76
  - .gitignore
77
+ - CHANGELOG.markdown
77
78
  - Gemfile
78
79
  - LICENSE
79
80
  - README.markdown