zephyr 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -8,5 +8,5 @@ group :development do
8
8
  gem "bundler", "~> 1.0.0"
9
9
  gem "jeweler", "~> 1.6.4"
10
10
  gem "shoulda", "~> 2.11.3"
11
- end
12
-
11
+ gem "mocha", "~> 0.12.0", :require => false
12
+ end
data/Gemfile.lock CHANGED
@@ -6,7 +6,10 @@ GEM
6
6
  bundler (~> 1.0)
7
7
  git (>= 1.2.5)
8
8
  rake
9
+ metaclass (0.0.1)
9
10
  mime-types (1.16)
11
+ mocha (0.12.0)
12
+ metaclass (~> 0.0.1)
10
13
  rake (0.9.2)
11
14
  shoulda (2.11.3)
12
15
  typhoeus (0.2.4)
@@ -20,6 +23,7 @@ PLATFORMS
20
23
  DEPENDENCIES
21
24
  bundler (~> 1.0.0)
22
25
  jeweler (~> 1.6.4)
26
+ mocha (~> 0.12.0)
23
27
  shoulda (~> 2.11.3)
24
28
  typhoeus (>= 0.2.4)
25
29
  yajl-ruby
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.3
1
+ 1.1.5
@@ -0,0 +1,16 @@
1
+ module Typhoeus
2
+ module Utils
3
+ def escape(s)
4
+ Zephyr.percent_encode(s, s.bytesize)
5
+ end
6
+ module_function :escape
7
+ end
8
+ end
9
+
10
+ module Typhoeus
11
+ class Request
12
+ def params_string
13
+ Zephyr.build_query_string(params)
14
+ end
15
+ end
16
+ end
data/lib/zephyr.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'logger'
2
2
  require 'net/http'
3
3
  require 'typhoeus'
4
+ require 'ext/typhoeus_ext'
4
5
  require 'yajl'
5
6
 
6
7
  # Stolen with a fair bit of modification from the riak-client gem, which is
@@ -58,7 +59,7 @@ class Zephyr
58
59
 
59
60
  class << self
60
61
  @debug_mode = false
61
-
62
+
62
63
  def logger
63
64
  @@logger
64
65
  end
@@ -74,6 +75,30 @@ class Zephyr
74
75
  def debug_mode=(mode)
75
76
  @debug_mode = mode
76
77
  end
78
+
79
+ def percent_encode(value)
80
+ typhoeus_easy.send(:easy_escape, value.to_s, value.to_s.bytesize)
81
+ end
82
+
83
+ def build_query_string(params)
84
+ params.map do |k, v|
85
+ if v.kind_of? Array
86
+ build_query_string(v.map { |x| [k, x] })
87
+ else
88
+ "#{percent_encode(k)}=#{percent_encode(v)}"
89
+ end
90
+ end.sort.join '&'
91
+ end
92
+
93
+ private
94
+
95
+ # NOTE: This is here only because it provides a binding to
96
+ # Curb's 'easy_escape' function, which does what we want.
97
+ # Don't use it to perform requests. Ever.
98
+ #
99
+ def typhoeus_easy
100
+ @_typhoeus_easy ||= Typhoeus::Easy.new.freeze
101
+ end
77
102
  end
78
103
 
79
104
  @@logger = Logger.new(STDOUT)
@@ -218,20 +243,6 @@ class Zephyr
218
243
  Typheous::Hydra.hydra.cleanup
219
244
  end
220
245
 
221
- def percent_encode(value)
222
- typhoeus_easy.send(:easy_escape, value.to_s, value.to_s.bytesize)
223
- end
224
-
225
- private
226
-
227
- # NOTE: This is here only because it provides a binding to
228
- # Curb's 'easy_escape' function, which does what we want.
229
- # Don't use it to perform requests. Ever.
230
- #
231
- def typhoeus_easy
232
- @_typhoeus_easy ||= Typhoeus::Easy.new.freeze
233
- end
234
-
235
246
  def verify_path_and_entity!(path_components, entity)
236
247
  begin
237
248
  verify_path!(path_components)
@@ -280,7 +291,7 @@ class Zephyr
280
291
  http_end = Time.now.to_f
281
292
 
282
293
  Zephyr.logger.info "[zephyr:#{$$}:#{Time.now.to_f}] \"%s %s\" %s %0.4f" % [
283
- method.to_s.upcase, uri(path_components).to_s, response.code, (http_end - http_start)
294
+ method.to_s.upcase, response.request.url, response.code, (http_end - http_start)
284
295
  ]
285
296
 
286
297
  # be consistent with what came before
@@ -298,7 +309,7 @@ class Zephyr
298
309
  result
299
310
  else
300
311
  failed_request = FailedRequest.new(:method => method,
301
- :uri => uri(path_components),
312
+ :uri => response.request.url,
302
313
  :expected_code => expect,
303
314
  :timeout => timeout,
304
315
  :response => response)
data/test/helper.rb CHANGED
@@ -8,8 +8,8 @@ rescue Bundler::BundlerError => e
8
8
  exit e.status_code
9
9
  end
10
10
  require 'test/unit'
11
+ require 'mocha'
11
12
  require 'shoulda'
12
- require 'typhoeus'
13
13
 
14
14
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
15
  $LOAD_PATH.unshift(File.dirname(__FILE__))
data/test/test_zephyr.rb CHANGED
@@ -11,59 +11,56 @@ class TestZephyr < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  context "query string parameters" do
14
- should "be sorted" do
15
- zephyr = Zephyr.new
14
+ should "be sorted" do
16
15
  duples = ('a'..'z').zip('A'..'Z') # [ [ 'a', 'A' ], [ 'b', 'B' ], ... ]
17
16
  expected = duples.map { |l,u| '%s=%s' % [ l, u ] }.sort.join('&')
18
17
 
19
- assert_equal expected, zephyr.build_query_string(Hash[duples.shuffle])
18
+ assert_equal expected, Zephyr.build_query_string(Hash[duples.shuffle])
20
19
  end
21
20
 
22
21
  should "be constructed for arrays" do
23
22
  zephyr = Zephyr.new
24
- assert_equal 'a=1&a=2', zephyr.build_query_string(:a => [ 2, 1 ])
23
+ assert_equal 'a=1&a=2', Zephyr.build_query_string(:a => [ 2, 1 ])
25
24
  end
26
25
  end
27
26
 
28
27
  context "percent encoding" do
29
28
  should "be correct" do
30
- zephyr = Zephyr.new
31
-
32
29
  # RFC 3986 Reserved Characters
33
- assert_equal '%21', zephyr.percent_encode('!')
34
- assert_equal '%2A', zephyr.percent_encode('*')
35
- assert_equal '%27', zephyr.percent_encode("'")
36
- assert_equal '%28', zephyr.percent_encode('(')
37
- assert_equal '%29', zephyr.percent_encode(')')
38
- assert_equal '%3B', zephyr.percent_encode(';')
39
- assert_equal '%3A', zephyr.percent_encode(':')
40
- assert_equal '%40', zephyr.percent_encode('@')
41
- assert_equal '%26', zephyr.percent_encode('&')
42
- assert_equal '%3D', zephyr.percent_encode('=')
43
- assert_equal '%2B', zephyr.percent_encode('+')
44
- assert_equal '%24', zephyr.percent_encode('$')
45
- assert_equal '%2C', zephyr.percent_encode(',')
46
- assert_equal '%2F', zephyr.percent_encode('/')
47
- assert_equal '%3F', zephyr.percent_encode('?')
48
- assert_equal '%23', zephyr.percent_encode('#')
49
- assert_equal '%5B', zephyr.percent_encode('[')
50
- assert_equal '%5D', zephyr.percent_encode(']')
30
+ assert_equal '%21', Zephyr.percent_encode('!')
31
+ assert_equal '%2A', Zephyr.percent_encode('*')
32
+ assert_equal '%27', Zephyr.percent_encode("'")
33
+ assert_equal '%28', Zephyr.percent_encode('(')
34
+ assert_equal '%29', Zephyr.percent_encode(')')
35
+ assert_equal '%3B', Zephyr.percent_encode(';')
36
+ assert_equal '%3A', Zephyr.percent_encode(':')
37
+ assert_equal '%40', Zephyr.percent_encode('@')
38
+ assert_equal '%26', Zephyr.percent_encode('&')
39
+ assert_equal '%3D', Zephyr.percent_encode('=')
40
+ assert_equal '%2B', Zephyr.percent_encode('+')
41
+ assert_equal '%24', Zephyr.percent_encode('$')
42
+ assert_equal '%2C', Zephyr.percent_encode(',')
43
+ assert_equal '%2F', Zephyr.percent_encode('/')
44
+ assert_equal '%3F', Zephyr.percent_encode('?')
45
+ assert_equal '%23', Zephyr.percent_encode('#')
46
+ assert_equal '%5B', Zephyr.percent_encode('[')
47
+ assert_equal '%5D', Zephyr.percent_encode(']')
51
48
 
52
49
  # Common Percent Encodings
53
- assert_equal '%3C', zephyr.percent_encode('<')
54
- assert_equal '%3E', zephyr.percent_encode('>')
55
- assert_equal '%22', zephyr.percent_encode('"')
56
- assert_equal '%7B', zephyr.percent_encode('{')
57
- assert_equal '%7D', zephyr.percent_encode('}')
58
- assert_equal '%7C', zephyr.percent_encode('|')
59
- assert_equal '%5C', zephyr.percent_encode('\\')
60
- assert_equal '%60', zephyr.percent_encode('`')
61
- assert_equal '%5E', zephyr.percent_encode('^')
62
- assert_equal '%25', zephyr.percent_encode('%')
63
- assert_equal '%20', zephyr.percent_encode(' ')
50
+ assert_equal '%3C', Zephyr.percent_encode('<')
51
+ assert_equal '%3E', Zephyr.percent_encode('>')
52
+ assert_equal '%22', Zephyr.percent_encode('"')
53
+ assert_equal '%7B', Zephyr.percent_encode('{')
54
+ assert_equal '%7D', Zephyr.percent_encode('}')
55
+ assert_equal '%7C', Zephyr.percent_encode('|')
56
+ assert_equal '%5C', Zephyr.percent_encode('\\')
57
+ assert_equal '%60', Zephyr.percent_encode('`')
58
+ assert_equal '%5E', Zephyr.percent_encode('^')
59
+ assert_equal '%25', Zephyr.percent_encode('%')
60
+ assert_equal '%20', Zephyr.percent_encode(' ')
64
61
 
65
62
  # Should test for \n as %0A or %0D or %0D%0A
66
- assert_contains ['%0A', '%0D', '%0D%0A'], zephyr.percent_encode("\n")
63
+ assert_contains ['%0A', '%0D', '%0D%0A'], Zephyr.percent_encode("\n")
67
64
 
68
65
  # Should figure out why the will not be percent encoded by libcurl
69
66
  #assert_equal '%2E', zephyr.percent_encode('.')
@@ -72,7 +69,21 @@ class TestZephyr < Test::Unit::TestCase
72
69
  #assert_equal '%7E', zephyr.percent_encode('~')
73
70
 
74
71
  # Fancy
75
- assert_equal '%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8', zephyr.percent_encode('まつもと')
72
+ assert_equal '%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8', Zephyr.percent_encode('まつもと')
73
+ end
74
+ end
75
+
76
+ context "using Typhoeus extensions" do
77
+ should "use Zephyr for escaping" do
78
+ z = Zephyr.new("http://www.google.com")
79
+ Zephyr.expects(:percent_encode).times(4)
80
+ z.get(200, 1000, [{:query => ["test string", "again"]}])
81
+ end
82
+
83
+ should "use Zephyr for building query string" do
84
+ z = Zephyr.new("http://www.google.com")
85
+ Zephyr.expects(:build_query_string).times(1)
86
+ z.get(200, 1000, [{:query => ["test string", "again"]}])
76
87
  end
77
88
  end
78
89
  end
data/zephyr.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "zephyr"
8
- s.version = "1.1.3"
8
+ s.version = "1.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Knopp"]
12
- s.date = "2012-07-05"
12
+ s.date = "2012-07-06"
13
13
  s.description = "Simple HTTP client using Typheous, derived from the Riak client"
14
14
  s.email = "matt.knopp@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "lib/zephyr.rb",
28
28
  "lib/zephyr/failed_request.rb",
29
+ "lib/ext/typhoeus_ext.rb",
29
30
  "test/helper.rb",
30
31
  "test/test_zephyr.rb",
31
32
  "zephyr.gemspec"
@@ -45,6 +46,7 @@ Gem::Specification.new do |s|
45
46
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
46
47
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
47
48
  s.add_development_dependency(%q<shoulda>, ["~> 2.11.3"])
49
+ s.add_development_dependency(%q<mocha>, ["~> 0.12.0"])
48
50
  else
49
51
  s.add_dependency(%q<typhoeus>, [">= 0.2.4"])
50
52
  s.add_dependency(%q<yajl-ruby>, [">= 0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zephyr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-05 00:00:00.000000000 Z
12
+ date: 2012-07-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: typhoeus
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 2.11.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: mocha
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.12.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.12.0
94
110
  description: Simple HTTP client using Typheous, derived from the Riak client
95
111
  email: matt.knopp@gmail.com
96
112
  executables: []
@@ -108,6 +124,7 @@ files:
108
124
  - VERSION
109
125
  - lib/zephyr.rb
110
126
  - lib/zephyr/failed_request.rb
127
+ - lib/ext/typhoeus_ext.rb
111
128
  - test/helper.rb
112
129
  - test/test_zephyr.rb
113
130
  - zephyr.gemspec
@@ -132,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
149
  version: '0'
133
150
  requirements: []
134
151
  rubyforge_project:
135
- rubygems_version: 1.8.23
152
+ rubygems_version: 1.8.24
136
153
  signing_key:
137
154
  specification_version: 3
138
155
  summary: Simple HTTP client using Typheous, derived from the Riak client