rapidash 0.0.2 → 0.0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1ce1818f4254102ef82a678267950073b326c929
4
+ data.tar.gz: 3d34ef35a0d0880eb8cd7b271ecfb334626082f3
5
+ SHA512:
6
+ metadata.gz: 1bb35f3c4f249141ae9bfe3568d6378cb164e41cfecce8bdc1c6a67338a0938bd46e7c096fc72a0f848bdf3eca4f8dcf9c5034232f45f9304ce970c5ac5b3543
7
+ data.tar.gz: 23be2377818a96d182531e424aff5cad7a7b2df8248a0d7ae4a404a6bb59fd31a97202eb6bb9ea8f1c853238b980f39ab51d33ef5664f83047294d58fd150252
data/lib/rapidash/base.rb CHANGED
@@ -19,6 +19,23 @@ module Rapidash
19
19
  @url += "/#{@id}" if @id
20
20
  end
21
21
 
22
+ def create!(params)
23
+ self.options[:method] = :post
24
+ self.options[:body] = params.to_json
25
+ call!
26
+ end
27
+
28
+ def update!(params)
29
+ self.options[:method] = :put
30
+ self.options[:body] = params.to_json
31
+ call!
32
+ end
33
+
34
+ def delete!
35
+ self.options[:method] = :delete
36
+ call!
37
+ end
38
+
22
39
 
23
40
  def call!
24
41
  self.options ||= {}
@@ -14,5 +14,13 @@ module Rapidash
14
14
  def post(url, options = {})
15
15
  request(:post, url, options)
16
16
  end
17
+
18
+ def put(url, options = {})
19
+ request(:put, url, options)
20
+ end
21
+
22
+ def delete(url, options = {})
23
+ request(:delete, url, options)
24
+ end
17
25
  end
18
26
  end
@@ -3,7 +3,7 @@ require 'faraday'
3
3
  module Rapidash
4
4
  module HTTPClient
5
5
 
6
- attr_accessor :site
6
+ attr_accessor :site, :extension
7
7
  attr_writer :connection
8
8
 
9
9
  def site=(value)
@@ -16,6 +16,7 @@ module Rapidash
16
16
  end
17
17
 
18
18
  def request(verb, url, options = {})
19
+ url = "#{url}.#{extension}" if extension
19
20
  url = connection.build_url(url, options[:params]).to_s
20
21
  response = connection.run_request(verb, url, options[:body], options[:header])
21
22
 
@@ -4,7 +4,7 @@ require 'hashie'
4
4
  module Rapidash
5
5
  module OAuthClient
6
6
 
7
- attr_accessor :secret, :uid, :access_token, :site
7
+ attr_accessor :secret, :uid, :access_token, :site, :extension
8
8
 
9
9
  def initialize(options)
10
10
  [:uid, :secret, :site].each do |key|
@@ -18,6 +18,7 @@ module Rapidash
18
18
  end
19
19
 
20
20
  def request(verb, url, options = {})
21
+ url = "#{url}.#{extension}" if extension
21
22
  response = oauth_access_token.send(verb.to_sym, "#{site}/#{url}", options)
22
23
  body = JSON.parse(response.body)
23
24
  if body.kind_of?(Hash)
@@ -7,6 +7,7 @@ module Rapidash
7
7
 
8
8
  class << self
9
9
  def new(response)
10
+ return nil unless response.body
10
11
  type = response.headers["content-type"]
11
12
  if type.include?("application/json")
12
13
  body = JSON.parse(response.body)
@@ -1,3 +1,3 @@
1
1
  module Rapidash
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -30,7 +30,46 @@ describe Rapidash::Base do
30
30
 
31
31
  let(:client) { mock }
32
32
  let(:headers) { {"content-type" => "application/json"} }
33
- let (:subject) { BaseTester.new(client) }
33
+ let(:subject) { BaseTester.new(client) }
34
+
35
+ let(:post) {
36
+ {
37
+ :post => {
38
+ :title => "A test post"
39
+ }
40
+ }
41
+ }
42
+
43
+ describe ".create!" do
44
+ it "should set the method to post and set the body" do
45
+ subject.should_receive(:call!)
46
+ subject.create!(post)
47
+ subject.instance_variable_get(:@options).should eql({
48
+ :method => :post,
49
+ :body => post.to_json
50
+ })
51
+ end
52
+ end
53
+
54
+ describe ".update!" do
55
+ it "should set the method to put and set the body" do
56
+ subject.should_receive(:call!)
57
+ subject.update!(post)
58
+ subject.instance_variable_get(:@options).should eql({
59
+ :method => :put,
60
+ :body => post.to_json
61
+ })
62
+ end
63
+ end
64
+
65
+ describe ".delete!" do
66
+ it "should set the method to delete" do
67
+ subject.should_receive(:call!)
68
+ subject.delete!
69
+ subject.instance_variable_get(:@options).should eql({:method => :delete})
70
+ end
71
+
72
+ end
34
73
 
35
74
  describe ".call!" do
36
75
  it "should call get on the client" do
@@ -28,4 +28,21 @@ describe Rapidash::Client do
28
28
  end
29
29
  end
30
30
 
31
+ describe ".put" do
32
+ it "should call request" do
33
+ subject.should_receive(:request).with(:put, "foo", {})
34
+ subject.put("foo")
35
+ end
36
+ end
37
+
38
+
39
+ describe ".delete" do
40
+ it "should call request" do
41
+ subject.should_receive(:request).with(:delete, "foo", {})
42
+ subject.delete("foo")
43
+ end
44
+ end
45
+
46
+
47
+
31
48
  end
@@ -40,6 +40,12 @@ describe Rapidash::HTTPClient do
40
40
  Rapidash::Response.should_receive(:new).and_return("response")
41
41
  end
42
42
 
43
+ it "should add an extension if one is set" do
44
+ subject.extension = :json
45
+ subject.connection.should_receive(:run_request).with(:get, "http://example.com/foo.json", nil, nil).and_return(valid_response)
46
+ subject.request(:get, "foo")
47
+ end
48
+
43
49
  it "should return a response object" do
44
50
  subject.connection.should_receive(:run_request).with(:get, "http://example.com/foo", nil, nil).and_return(valid_response)
45
51
  response = subject.request(:get, "foo")
@@ -57,9 +57,16 @@ describe Rapidash::OAuthClient do
57
57
  let(:response) { OpenStruct.new(:body => body) }
58
58
 
59
59
  before(:each) do
60
+ subject.extension = :json
60
61
  subject.stub(:oauth_access_token).and_return(request)
61
62
  request.stub(:get).and_return(response)
62
63
  end
64
+
65
+ it "should add an extension to the url if one is set" do
66
+ request.should_receive(:get).with("http://example.com/me.json", anything)
67
+ subject.request(:get, "me")
68
+ end
69
+
63
70
  it "should return a Hashie::Mash" do
64
71
  subject.request(:get, "me").class.should eql(Hashie::Mash)
65
72
  end
@@ -27,7 +27,14 @@ def invalid_response
27
27
  OpenStruct.new({
28
28
  :headers => {
29
29
  "content-type" => "application/xml"
30
- }
30
+ },
31
+ :body => "<xml>something</xml>"
32
+ })
33
+ end
34
+
35
+ def nil_response
36
+ OpenStruct.new({
37
+ :body => nil
31
38
  })
32
39
  end
33
40
 
@@ -45,6 +52,11 @@ describe Rapidash::Response do
45
52
  response[1].baz.should eql("bra")
46
53
  end
47
54
 
55
+ it "should return nil if the response has no body" do
56
+ response = Rapidash::Response.new(nil_response)
57
+ response.should eql(nil)
58
+ end
59
+
48
60
 
49
61
  it "should raise an error on a non-json response" do
50
62
  expect {
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rapidash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Gary 'Gazler' Rennie
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-08 00:00:00.000000000 Z
11
+ date: 2013-03-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,23 +27,20 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,23 +55,20 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: json
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: faraday
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: oauth2
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: hashie
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ~>
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ~>
124
109
  - !ruby/object:Gem::Version
@@ -164,33 +149,26 @@ files:
164
149
  homepage: ''
165
150
  licenses:
166
151
  - MIT
152
+ metadata: {}
167
153
  post_install_message:
168
154
  rdoc_options: []
169
155
  require_paths:
170
156
  - lib
171
157
  required_ruby_version: !ruby/object:Gem::Requirement
172
- none: false
173
158
  requirements:
174
- - - ! '>='
159
+ - - '>='
175
160
  - !ruby/object:Gem::Version
176
161
  version: '0'
177
- segments:
178
- - 0
179
- hash: -4317292123252369380
180
162
  required_rubygems_version: !ruby/object:Gem::Requirement
181
- none: false
182
163
  requirements:
183
- - - ! '>='
164
+ - - '>='
184
165
  - !ruby/object:Gem::Version
185
166
  version: '0'
186
- segments:
187
- - 0
188
- hash: -4317292123252369380
189
167
  requirements: []
190
168
  rubyforge_project:
191
- rubygems_version: 1.8.24
169
+ rubygems_version: 2.0.2
192
170
  signing_key:
193
- specification_version: 3
171
+ specification_version: 4
194
172
  summary: An opinionated core for creating clients for RESTful APIs quickly
195
173
  test_files:
196
174
  - spec/rapidash/base_spec.rb