rapidash 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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