hippie 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82c5deb0ce5f8c497fade22b08b618fe56079c34
4
- data.tar.gz: 44c5511dab804cc882a7a2d5597dc34a1bbd0093
3
+ metadata.gz: 26fcf855feebd6241785015a3171ff6a2c1d3d3d
4
+ data.tar.gz: d93ced984c7eaf59f8806c2c393ed673f438e0e2
5
5
  SHA512:
6
- metadata.gz: 37ee47fe5c1ce78a799a0473aea5eebe81a31c617262508aa0361ab8da3bf870ca5a2d4af4bce1d40381f993547f0cdae98c392301a6f14384344e00d156ead9
7
- data.tar.gz: 49f8d631d06da861ffb83b8374bcb5e2561fa46970452dc7dcb62f87d4719a171829711c3bffed7ea9bdb4229afcb967b05fbe9b4925340703352d446366c9db
6
+ metadata.gz: 2f985d283e1e55552b262de5f0cb16ad9e35c851fcdba049f197619d4e36d990ba1a5872b102b1f7c903afbb0877ea706c630ebc7170f5436cf30a1fefe23409
7
+ data.tar.gz: f0e1e7bf89aa8568bb96ed15de29233e0f993bcad952d808710cf3f68353ac370de2da50a72fc6b966052f557a179ed4071fc330cdf79b1d867bea9fd5a39b38
data/README.md CHANGED
@@ -1,4 +1,10 @@
1
- # Hippie: Simple HTTP wrapper for Net::HTTP
1
+ # Hippie
2
+ ### _Simple HTTP client for ruby_
3
+ ---
4
+
5
+ ## Installation
6
+
7
+ $ gem install hippie
2
8
 
3
9
  ## Usage
4
10
  Here's an example of a GET request:
@@ -6,36 +12,50 @@ Here's an example of a GET request:
6
12
  ```ruby
7
13
  require 'hippie'
8
14
 
9
- response = Hippie.get("http://example.com")
15
+ response = Hippie.get('http://example.com')
16
+ response.class #=> Hippie::Response
10
17
 
11
- # Now you have these methods available
12
18
  response.status #=> Number with the status code
13
19
  response.headers #=> Hash with the response headers
14
20
  response.body #=> String with the response body
15
- response.error? #=> true / false
16
- response.valid? #=> true / false
21
+ response.json #=> String with the response body parsed to json
22
+
23
+ response.information? #=> 1xx response
24
+ response.success? #=> 2xx response
25
+ response.redirection? #=> 3xx response
26
+ response.client_error? #=> 4xx response
27
+ response.server_error? #=> 5xx response
28
+ response.error? #=> 4xx or 5xx
17
29
  ```
18
30
 
19
31
  You can also pass parameters with a query string:
20
32
 
21
33
  ```ruby
22
- # GET http://example.com?foo=bar
23
- Hippie.get("http://example.com", params: { foo: "bar" })
34
+ Hippie.get('http://example.com', params: { foo: 'bar' })
24
35
  ```
25
36
 
26
- If you want to send data with a POST request, you can add a `data`
27
- option with the value.
37
+ If you want to send data with a POST request, you can add a `data` option with the value.
28
38
 
29
39
  ```ruby
30
- Hippie.post("http://example.com", data: "hello world")
40
+ Hippie.post('http://example.com', data: 'hello world')
31
41
  ```
32
42
 
33
43
  For Basic Authentication, you can provide the option `auth`, which
34
44
  should contain an array with the username and password:
35
45
 
36
46
  ```ruby
37
- Hippie.get("http://example.com", auth: ["username", "password"])
47
+ Hippie.get('http://example.com', auth: ['username', 'password'])
38
48
  ```
39
49
 
40
- # Disclaimer
50
+ ## Available methods
51
+ - GET
52
+ - POST
53
+ - PUT
54
+ - DELETE
55
+ - HEAD
56
+ - OPTIONS
57
+ - PATCH
58
+ - TRACE
59
+
60
+ ### Disclaimer
41
61
  This is a fork of the awesome 'requests' gem from cyx (https://github.com/cyx/requests)
data/hippie.gemspec CHANGED
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'hippie'
3
- s.version = '0.5.0'
3
+ s.version = '0.6.0'
4
4
  s.summary = 'Simple HTTP'
5
- s.description = 'Simple wrapper for Net::HTTP'
5
+ s.description = 'Simple HTTP client for Ruby'
6
6
  s.author = 'Martin Manelli'
7
7
  s.email = 'manelli.ml@gmail.com'
8
8
  s.homepage = 'http://github.com/manelli/hippie'
@@ -12,12 +12,12 @@ Gem::Specification.new do |s|
12
12
  s.files = Dir[
13
13
  'LICENSE',
14
14
  'README.md',
15
- 'makefile',
16
15
  'lib/hippie.rb',
17
16
  'lib/cacert.pem',
17
+ 'lib/hippie/response.rb',
18
18
  'tests/hippie_test.rb',
19
19
  'hippie.gemspec'
20
20
  ]
21
21
 
22
- s.add_development_dependency 'cutest', '~> 1.2', '>= 1.2.0'
22
+ s.add_development_dependency 'minitest', '>= 2.5', '< 5.0'
23
23
  end
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ require 'json'
4
+
5
+ module Hippie
6
+ class Response
7
+ attr_reader :status, :headers, :body
8
+
9
+ def initialize(status, headers, body)
10
+ @status = status.to_i
11
+ @headers = headers
12
+ @body = body.to_s
13
+ end
14
+
15
+ def json
16
+ JSON.parse(@body)
17
+ end
18
+
19
+ def information?
20
+ @status.between?(100, 199)
21
+ end
22
+
23
+ def success?
24
+ @status.between?(200, 299)
25
+ end
26
+
27
+ def redirection?
28
+ @status.between?(300, 399)
29
+ end
30
+
31
+ def client_error?
32
+ @status.between?(400, 499)
33
+ end
34
+
35
+ def server_error?
36
+ @status.between?(500, 599)
37
+ end
38
+
39
+ def error?
40
+ !success?
41
+ end
42
+ end
43
+ end
data/lib/hippie.rb CHANGED
@@ -1,36 +1,13 @@
1
- require 'uri'
1
+ # encoding: utf-8
2
+
2
3
  require 'net/http'
3
4
  require 'openssl'
4
- require 'json'
5
+ require_relative 'hippie/response'
5
6
 
6
7
  module Hippie
7
- class Response
8
- attr_reader :status, :headers, :body
9
-
10
- def initialize(status, headers, body)
11
- @status = status.to_i
12
- @headers = headers
13
- @body = body || ''
14
- end
15
-
16
- def json
17
- JSON.parse(@body)
18
- end
19
-
20
- def encoding
21
- @body.encoding
22
- end
23
-
24
- def valid?
25
- @status.between?(200, 299)
26
- end
27
-
28
- def error?
29
- !valid?
30
- end
31
- end
32
-
33
- CA_FILE = ENV.fetch('REQUESTS_CA_FILE') { File.expand_path('../cacert.pem', __FILE__) }
8
+ CA_FILE = ENV.fetch('REQUESTS_CA_FILE') {
9
+ File.expand_path('../cacert.pem', __FILE__)
10
+ }
34
11
 
35
12
  def self.get(url, **kwargs)
36
13
  request('GET', url, **kwargs)
@@ -67,10 +44,12 @@ module Hippie
67
44
  private
68
45
 
69
46
  def self.request(method, url, headers: {}, data: nil, params: nil, auth: nil)
70
- fail "No HTTP(S) scheme in: #{url}" unless url =~ /^https?:\/\//i
71
-
72
47
  uri = URI.parse(URI.encode(url))
73
48
 
49
+ unless ['http', 'https'].include? uri.scheme
50
+ fail URI::InvalidURIError, "No HTTP(S) scheme in: #{url}"
51
+ end
52
+
74
53
  uri.query = URI.encode_www_form(params) if params
75
54
  body = process_params(headers: headers, data: data) if data
76
55
  basic_auth(headers, *auth) if auth
@@ -83,7 +62,7 @@ module Hippie
83
62
  end
84
63
  end
85
64
 
86
- Response.new(response.code, response.to_hash, response.body)
65
+ Hippie::Response.new(response.code, response.to_hash, response.body)
87
66
  end
88
67
 
89
68
  def self.opts(uri)
data/tests/hippie_test.rb CHANGED
@@ -1,90 +1,81 @@
1
- require 'hippie'
1
+ # encoding: utf-8
2
2
 
3
- test 'GET' do
4
- r = Hippie.get('http://httpbin.org/get', params: { foo: 'bar' })
3
+ require 'minitest/autorun'
4
+ require_relative '../lib/hippie'
5
5
 
6
- assert_equal 200, r.status
7
- assert_equal ['application/json'], r.headers['content-type']
8
- assert_equal 'UTF-8', r.encoding.to_s
6
+ class TestHippie < Minitest::Test
7
+ def test_get
8
+ r = Hippie.get('http://httpbin.org/get', params: { foo: 'bar' })
9
9
 
10
- assert(r.json['args'] && r.json['args']['foo'] == 'bar')
11
- end
12
- puts 'GET'
13
-
14
- test 'POST' do
15
- r = Hippie.post('http://httpbin.org/post', data: { "plan" => "test" })
16
-
17
- assert_equal 200, r.status
18
- assert_equal ['application/json'], r.headers['content-type']
19
- assert_equal 'UTF-8', r.encoding.to_s
10
+ assert_equal true, r.success?
11
+ assert_equal ['application/json'], r.headers['content-type']
12
+ assert(r.json['args'] && r.json['args']['foo'] == 'bar')
13
+ end
20
14
 
21
- assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
22
- end
23
- puts 'POST'
24
-
25
- test 'PUT' do
26
- r = Hippie.put('http://httpbin.org/put', data: { 'plan' => 'test' })
15
+ def test_post
16
+ r = Hippie.post('http://httpbin.org/post', data: { 'plan' => 'test' })
27
17
 
28
- assert_equal 200, r.status
29
- assert_equal ['application/json'], r.headers['content-type']
30
- assert_equal 'UTF-8', r.encoding.to_s
18
+ assert_equal true, r.success?
19
+ assert_equal ['application/json'], r.headers['content-type']
20
+ assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
21
+ end
31
22
 
32
- assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
33
- end
34
- puts 'PUT'
23
+ def test_put
24
+ r = Hippie.put('http://httpbin.org/put', data: { 'plan' => 'test' })
35
25
 
36
- test 'DELETE' do
37
- r = Hippie.delete('http://httpbin.org/delete', data: { 'plan' => 'test' })
26
+ assert_equal true, r.success?
27
+ assert_equal ['application/json'], r.headers['content-type']
28
+ assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
29
+ end
38
30
 
39
- assert_equal 200, r.status
40
- assert_equal ['application/json'], r.headers['content-type']
41
- assert_equal 'UTF-8', r.encoding.to_s
31
+ def test_delete
32
+ r = Hippie.delete('http://httpbin.org/delete', data: { 'plan' => 'test' })
42
33
 
43
- assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
44
- end
45
- puts 'DELETE'
34
+ assert_equal true, r.success?
35
+ assert_equal ['application/json'], r.headers['content-type']
36
+ assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
37
+ end
46
38
 
47
- test 'HEAD' do
48
- r = Hippie.head('http://httpbin.org/headers')
39
+ def test_head
40
+ r = Hippie.head('http://httpbin.org/headers')
49
41
 
50
- assert_equal 200, r.status
51
- assert_equal ['application/json'], r.headers['content-type']
52
- assert_equal 'UTF-8', r.encoding.to_s
53
- end
54
- puts 'HEAD'
42
+ assert_equal true, r.success?
43
+ assert_equal ['application/json'], r.headers['content-type']
44
+ end
55
45
 
56
- test 'OPTIONS' do
57
- # TODO
58
- end
59
- puts 'OPTIONS'
46
+ def test_options
47
+ # TODO
48
+ end
60
49
 
61
- test 'PATCH' do
62
- r = Hippie.patch('http://httpbin.org/patch', data: { 'plan' => 'test' })
50
+ def test_patch
51
+ r = Hippie.patch('http://httpbin.org/patch', data: { 'plan' => 'test' })
63
52
 
64
- assert_equal 200, r.status
65
- assert_equal ['application/json'], r.headers['content-type']
66
- assert_equal 'UTF-8', r.encoding.to_s
53
+ assert_equal true, r.success?
54
+ assert_equal ['application/json'], r.headers['content-type']
55
+ assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
56
+ end
67
57
 
68
- assert(r.json['form'] && r.json['form'] == { 'plan' => 'test' })
69
- end
70
- puts 'PATCH'
58
+ def test_trace
59
+ # TODO
60
+ end
71
61
 
72
- test 'TRACE' do
73
- # TODO
74
- end
75
- puts 'TRACE'
62
+ def test_basic_auth
63
+ r = Hippie.get('http://httpbin.org/basic-auth/u/p', auth: ['u', 'p'])
76
64
 
77
- test 'Basic Auth' do
78
- r = Hippie.get('http://httpbin.org/basic-auth/u/p', auth: ['u', 'p'])
65
+ assert_equal true, r.success?
66
+ assert_equal true, r.json['authenticated']
67
+ assert_equal 'u', r.json['user']
68
+ end
79
69
 
80
- assert_equal r.json['authenticated'], true
81
- assert_equal r.json['user'], 'u'
82
- end
83
- puts 'Basic Auth'
70
+ def test_ssl
71
+ r = Hippie.get('https://httpbin.org/get')
84
72
 
85
- test 'SSL' do
86
- response = Hippie.get('https://httpbin.org/get')
73
+ assert_equal true, r.success?
74
+ end
87
75
 
88
- assert_equal 200, response.status
76
+ def test_raises_invalid_uri
77
+ assert_raises(URI::InvalidURIError) {
78
+ Hippie.get('www.httpbin.org/get')
79
+ }
80
+ end
89
81
  end
90
- puts 'SSL'
metadata CHANGED
@@ -1,36 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hippie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Manelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-29 00:00:00.000000000 Z
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: cutest
14
+ name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.2'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 1.2.0
19
+ version: '2.5'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '1.2'
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
- version: 1.2.0
33
- description: Simple wrapper for Net::HTTP
29
+ version: '2.5'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ description: Simple HTTP client for Ruby
34
34
  email: manelli.ml@gmail.com
35
35
  executables: []
36
36
  extensions: []
@@ -41,7 +41,7 @@ files:
41
41
  - hippie.gemspec
42
42
  - lib/cacert.pem
43
43
  - lib/hippie.rb
44
- - makefile
44
+ - lib/hippie/response.rb
45
45
  - tests/hippie_test.rb
46
46
  homepage: http://github.com/manelli/hippie
47
47
  licenses:
data/makefile DELETED
@@ -1,2 +0,0 @@
1
- test:
2
- RUBYLIB=./lib cutest tests/*_test.rb