http_magic 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,7 +1,9 @@
1
1
  *.gem
2
2
  *.rbc
3
+ *.swp
3
4
  .bundle
4
5
  .config
6
+ .rvmrc
5
7
  coverage
6
8
  InstalledFiles
7
9
  lib/bundler/man
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- http_magic (0.1.0)
4
+ http_magic (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -26,7 +26,7 @@ GEM
26
26
  pry-debugger (0.2.2)
27
27
  debugger (~> 1.3)
28
28
  pry (~> 0.9.10)
29
- rake (10.1.1)
29
+ rake (0.9.6)
30
30
  safe_yaml (0.9.7)
31
31
  slop (3.4.7)
32
32
  webmock (1.16.1)
@@ -38,8 +38,8 @@ PLATFORMS
38
38
 
39
39
  DEPENDENCIES
40
40
  http_magic!
41
- minitest (~> 4.7.0)
42
- pry
43
- pry-debugger
44
- rake
45
- webmock (~> 1.16.0)
41
+ minitest (~> 4.7)
42
+ pry (~> 0)
43
+ pry-debugger (~> 0)
44
+ rake (~> 0)
45
+ webmock (~> 1.16)
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'http_magic'
4
- s.version = '0.1.1'
4
+ s.version = '0.1.2'
5
5
  s.licenses = ['MIT']
6
6
  s.summary = 'Provides a more Object Oriented interface to RESTful apis.'
7
7
 
@@ -137,6 +137,26 @@ module HttpMagic
137
137
  self
138
138
  end
139
139
 
140
+ # Deletes a resource from the URI.
141
+ #
142
+ # Assuming an api where each resource is namespaced with 'api/v1' and where
143
+ # the url http://www.example.com/api/v1/foo/99 references a specific
144
+ # resource.
145
+ #
146
+ # == Example
147
+ #
148
+ # class ExampleApi < HttpMagic::Api
149
+ # url 'www.example.com'
150
+ # namespace 'api/v1'
151
+ # end
152
+ #
153
+ # ExampleApi.foo[99].delete
154
+ # => ""
155
+ def delete
156
+ request = Request.new(@uri, headers: @headers)
157
+ request.delete
158
+ end
159
+
140
160
  # Gets a resource from the URI and returns it based on its content type.
141
161
  # JSON content will be parsed and returned as equivalent Ruby objects. All
142
162
  # other content types will be returned as text.
@@ -205,6 +225,41 @@ module HttpMagic
205
225
  request.post
206
226
  end
207
227
 
228
+ # PUT's a resource to the URI and returns the result based on its content
229
+ # type. JSON content will be parsed and returned as equivalent Ruby objects.
230
+ # All other content types will be returned as text.
231
+ #
232
+ # Assuming an api where each resource is namespaced with 'api/v1' and where
233
+ # a GET to the url http://www.example.com/api/v1/foo/99 responds with the
234
+ # following.
235
+ #
236
+ # Header:
237
+ #
238
+ # Content-Type: application/json
239
+ #
240
+ # Body:
241
+ #
242
+ # {
243
+ # "name": "Foo"
244
+ # }
245
+ #
246
+ # == Example
247
+ #
248
+ # class ExampleApi < HttpMagic::Api
249
+ # url 'www.example.com'
250
+ # namespace 'api/v1'
251
+ # end
252
+ #
253
+ # ExampleApi.foo[99].put(name: 'Changed Foo')
254
+ # => { "name" => "Changed Foo" }
255
+ def put(data = {})
256
+ request = Request.new(@uri,
257
+ headers: @headers,
258
+ data: data,
259
+ )
260
+ request.put
261
+ end
262
+
208
263
  # Instance scoped method_missing that accumulates the URN parts used in
209
264
  # forming the URI. It returns a reference to the current instance so that
210
265
  # method and [] based parts can be chained together to from the URN. In the
@@ -23,8 +23,24 @@ module HttpMagic
23
23
  }
24
24
  end
25
25
 
26
+ # Makes a DELETE request to the url provided by the Uri object and returns
27
+ # the response parsed according to the content type specified in the
28
+ # repsonse.
29
+ #
30
+ # == Example
31
+ #
32
+ # uri_object = HttpMagic::Uri.new('http://example.com')
33
+ #
34
+ # request = Request.new(uri_object)
35
+ #
36
+ # request.delete
37
+ # => { 'name' => 'Foo Bar' }
38
+ def delete
39
+ parse_response http.delete(@uri.urn, @options[:headers])
40
+ end
41
+
26
42
  # Makes a GET request to the url provided by the Uri object and returns the
27
- # resulting JSON data as a Ruby hash.
43
+ # response parsed according to the content type specified in the repsonse.
28
44
  #
29
45
  # == Example
30
46
  #
@@ -35,12 +51,13 @@ module HttpMagic
35
51
  # request.get
36
52
  # => { 'name' => 'Foo Bar' }
37
53
  def get
38
- send_request :get
54
+ parse_response http.request_get(@uri.urn, @options[:headers])
39
55
  end
40
56
 
41
57
  # Makes a POST request to the url provided by the Uri object and returns the
42
- # resulting JSON data as a Ruby hash. If data was provided as an optional
43
- # initialization parameter, then that is also POSTed.
58
+ # response parsed according to the content type specified in the repsonse.
59
+ # If data was provided as an optional initialization parameter, then that is
60
+ # also POSTed.
44
61
  #
45
62
  # == Example
46
63
  #
@@ -51,10 +68,38 @@ module HttpMagic
51
68
  # request.post
52
69
  def post
53
70
  if !@data.empty?
54
- @options[:headers].merge!( 'content-type' => 'application/json' )
71
+ @options[:headers].merge!( 'Content-Type' => 'application/json' )
72
+ end
73
+
74
+ parse_response http.request_post(
75
+ @uri.urn,
76
+ @data.to_json,
77
+ @options[:headers]
78
+ )
79
+ end
80
+
81
+ # Makes a PUT request to the url provided by the Uri object and returns the
82
+ # response parsed according to the content type specified in the repsonse.
83
+ # If data was provided as an optional initialization parameter, then that is
84
+ # also PUTed.
85
+ #
86
+ # == Example
87
+ #
88
+ # uri_object = HttpMagic::Uri.new('http://example.com')
89
+ #
90
+ # request = Request.new(uri_object, data: { name: 'New Foo' })
91
+ #
92
+ # request.put
93
+ def put
94
+ if !@data.empty?
95
+ @options[:headers].merge!( 'Content-Type' => 'application/json' )
55
96
  end
56
97
 
57
- send_request :post
98
+ parse_response http.request_put(
99
+ @uri.urn,
100
+ @data.to_json,
101
+ @options[:headers]
102
+ )
58
103
  end
59
104
 
60
105
  private
@@ -66,13 +111,12 @@ module HttpMagic
66
111
  @http
67
112
  end
68
113
 
69
- def send_request(method)
70
- response = http.send_request(method, @uri.urn, @data.to_json, @options[:headers])
114
+ def parse_response(response)
71
115
  if response && response.is_a?(Net::HTTPSuccess)
72
- if response.content_type == 'application/json'
116
+ if response.body && response.content_type == 'application/json'
73
117
  JSON.parse(response.body)
74
118
  else
75
- response.body
119
+ response.body.to_s
76
120
  end
77
121
  else
78
122
  nil
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+ require 'http_magic'
3
+
4
+ class HttpMagicTest < HttpMagic::Api
5
+ end
6
+
7
+ describe 'HttpMagic#delete' do
8
+ before do
9
+ @url = HttpMagicTest.url 'www.example.com'
10
+ HttpMagicTest.namespace nil
11
+ HttpMagicTest.headers nil
12
+ end
13
+
14
+ it 'should send DELETE request' do
15
+ stub_delete = stub_request(:delete, "https://#{@url}")
16
+
17
+ HttpMagicTest.delete
18
+ assert_requested stub_delete
19
+ end
20
+
21
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+ require 'http_magic'
3
+
4
+ class HttpMagicTest < HttpMagic::Api
5
+ end
6
+
7
+ describe 'HttpMagic#put' do
8
+ before do
9
+ @url = HttpMagicTest.url 'www.example.com'
10
+ HttpMagicTest.namespace nil
11
+ HttpMagicTest.headers nil
12
+ end
13
+
14
+ it 'should send PUT request' do
15
+ stub_put = stub_request(:put, "https://#{@url}")
16
+
17
+ HttpMagicTest.put
18
+ assert_requested stub_put
19
+ end
20
+
21
+ it 'should send data with PUT request' do
22
+ expected_data = {
23
+ apple: 'sauce',
24
+ banana: 'bread'
25
+ }
26
+ stub_put = stub_request(:put, "https://#{@url}/foo").with(
27
+ body: expected_data
28
+ )
29
+
30
+ HttpMagicTest.foo.put(expected_data)
31
+
32
+ assert_requested stub_put
33
+ end
34
+ end
@@ -32,6 +32,16 @@ describe 'HttpMagic::Request' do
32
32
  assert_equal content, request.get
33
33
  end
34
34
 
35
+ it 'should be able to delete a resource' do
36
+ stub_request = stub_request(:delete, "https://#{@domain}").
37
+ to_return(status: 204)
38
+
39
+ request = HttpMagic::Request.new(@uri)
40
+ request.delete
41
+
42
+ assert_requested stub_request
43
+ end
44
+
35
45
  it 'should be able to post data as hash' do
36
46
  expected_data = {
37
47
  apple: 'crispy',
@@ -39,7 +49,7 @@ describe 'HttpMagic::Request' do
39
49
  }
40
50
  stub_request = stub_request(:post, "https://#{@domain}").with(
41
51
  body: expected_data.to_json,
42
- headers: { 'content-type' => 'application/json' }
52
+ headers: { 'Content-Type' => 'application/json' }
43
53
  )
44
54
 
45
55
  request = HttpMagic::Request.new(@uri, data: expected_data)
@@ -48,6 +58,22 @@ describe 'HttpMagic::Request' do
48
58
  assert_requested stub_request
49
59
  end
50
60
 
61
+ it 'should be able to put data as hash' do
62
+ expected_data = {
63
+ apple: 'crispy',
64
+ banana: 'soft'
65
+ }
66
+ stub_request = stub_request(:put, "https://#{@domain}").with(
67
+ body: expected_data.to_json,
68
+ headers: { 'Content-Type' => 'application/json' }
69
+ )
70
+
71
+ request = HttpMagic::Request.new(@uri, data: expected_data)
72
+ request.put
73
+
74
+ assert_requested stub_request
75
+ end
76
+
51
77
  it 'should set correct headers' do
52
78
  stub_request = stub_request(:get, "https://#{@domain}").
53
79
  with(headers: { 'X-AuthToken' => 'test_token' })
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_magic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - GradesFirst
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-01-17 00:00:00.000000000 Z
12
+ date: 2014-03-10 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rake
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: minitest
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: webmock
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: pry
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: pry-debugger
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ~>
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ~>
81
92
  - !ruby/object:Gem::Version
@@ -97,8 +108,10 @@ files:
97
108
  - lib/http_magic/api.rb
98
109
  - lib/http_magic/request.rb
99
110
  - lib/http_magic/uri.rb
111
+ - test/api/delete_test.rb
100
112
  - test/api/get_test.rb
101
113
  - test/api/post_test.rb
114
+ - test/api/put_test.rb
102
115
  - test/fixtures/projects.json
103
116
  - test/request_test.rb
104
117
  - test/test_helper.rb
@@ -106,25 +119,26 @@ files:
106
119
  homepage: https://github.com/Thoughtwright-LLC/httpmagic
107
120
  licenses:
108
121
  - MIT
109
- metadata: {}
110
122
  post_install_message:
111
123
  rdoc_options: []
112
124
  require_paths:
113
125
  - lib
114
126
  required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
115
128
  requirements:
116
- - - '>='
129
+ - - ! '>='
117
130
  - !ruby/object:Gem::Version
118
131
  version: '0'
119
132
  required_rubygems_version: !ruby/object:Gem::Requirement
133
+ none: false
120
134
  requirements:
121
- - - '>='
135
+ - - ! '>='
122
136
  - !ruby/object:Gem::Version
123
137
  version: '0'
124
138
  requirements: []
125
139
  rubyforge_project:
126
- rubygems_version: 2.2.1
140
+ rubygems_version: 1.8.24
127
141
  signing_key:
128
- specification_version: 4
142
+ specification_version: 3
129
143
  summary: Provides a more Object Oriented interface to RESTful apis.
130
144
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ae2f80540b2ebc639265dd8a2b4afffa39b72f27
4
- data.tar.gz: 38ed7512bca5927a8961ce9279e85b61521902ad
5
- SHA512:
6
- metadata.gz: 0b9c6a898d4172ef774bc79e46a8b714d137270a0022bb3cf09f97d68b6b02e180d151b4d736bd9884b9e010cf8755b9e39c054a9ac95d82584b4f6b1fe4ae84
7
- data.tar.gz: 53da0b3b6cdf245d2afcaefd1e0f8c3ab3a4e6522d3e344a1585cf14364a55c774d7ee4492e861bf4f4bb4c62d34b3a8c1d7dae6cc235e80ef2750329b3e9a99