rightsignature 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,12 +8,12 @@ gem install rightsignature
8
8
  ```
9
9
  or in your Gemfile
10
10
  ```
11
- gem 'rightsignature', '~> 0.1.6'
11
+ gem 'rightsignature', '~> 0.1.7'
12
12
  ```
13
13
 
14
14
  Setup
15
15
  -----
16
- After getting an API key from RightSignature, you can use the Secure Token or generate an Access Token with the OAuth key and secret using RightSignature::load_configuration.
16
+ After getting an API key from RightSignature, you can use the Secure Token or generate an Access Token with the OAuth key and secret using RightSignature::load_configuration. Below are examples on how to use the gem as yourself.
17
17
 
18
18
  #####Using Token authentication
19
19
  ```
@@ -31,8 +31,36 @@ RightSignature::load_configuration(
31
31
  ```
32
32
  Note: if the both OAuth credentials and api_token are set, the default action is to use Token Authentication.
33
33
 
34
+ #####Getting Access Token
35
+ Make sure you have a server that is can recieve the parameters from RightSignature and the callback is setup correctly in the RightSignature API settings (https://rightsignature.com/oauth_clients).
36
+ ```
37
+ request_token = RightSignature::OauthConnection.new_request_token
38
+ ```
39
+
40
+ Now Visit the url generated from
41
+ ```
42
+ RightSignature::OauthConnection.request_token.authorize_url
43
+ ```
44
+ and log into the site.
45
+
46
+ After approving the application, you will be redirected to the callback url that is in the RightSignature API settings (https://rightsignature.com/oauth_clients). The OAuth verifier should be in the params "oauth_verifier". Put the verifier in:
47
+ ```
48
+ RightSignature::OauthConnection.generate_access_token(params[:oauth_verifer])
49
+ ```
50
+
51
+ Now, you should have your Connection setup. You can save the access token and access token secret for later use and skip the previous steps.
52
+ ```
53
+ RightSignature::OauthConnection.access_token.token
54
+ RightSignature::OauthConnection.access_token.secret
55
+ ```
56
+ Will give you the Access Token's token and secret.
57
+
58
+ You can also load the Access Token and Secret by calling
59
+ ```
60
+ RightSignature::OauthConnection.set_access_token(token, secret)
61
+ ```
34
62
 
35
- After loading the configuration, you can use wrappers in RightSignature::Document or RightSignature::Template to call the API. Or use RightSignature::Connection for a more custom call.
63
+ After loading the configuration, you can use wrappers in RightSignature::Document, RightSignature::Template, or RightSignature::Account to call the API. Or use RightSignature::Connection for a more custom call.
36
64
 
37
65
  Documents
38
66
  ---------
@@ -393,4 +421,3 @@ $:.push File.expand_path("../lib", __FILE__); require "rightsignature"; RightSig
393
421
  TODO:
394
422
  -----
395
423
  * Parse error message from response body on unsuccessful requests
396
- * Have a way for to generate an OAuth Access Token from RightSignature
@@ -2,7 +2,10 @@ module RightSignature
2
2
  class OauthConnection
3
3
 
4
4
  class << self
5
+ attr_reader :request_token
6
+
5
7
  def oauth_consumer
8
+ check_credentials unless RightSignature::configuration[:consumer_key] && RightSignature::configuration[:consumer_secret]
6
9
  @oauth_consumer ||= OAuth::Consumer.new(
7
10
  RightSignature::configuration[:consumer_key],
8
11
  RightSignature::configuration[:consumer_secret],
@@ -18,7 +21,28 @@ module RightSignature
18
21
  end
19
22
 
20
23
  def access_token
21
- @access_token ||= OAuth::AccessToken.new(oauth_consumer, RightSignature::configuration[:access_token], RightSignature::configuration[:access_secret])
24
+ check_credentials
25
+ @access_token = OAuth::AccessToken.new(oauth_consumer, RightSignature::configuration[:access_token], RightSignature::configuration[:access_secret])
26
+ end
27
+
28
+ def access_token
29
+ check_credentials
30
+ @access_token ||= OAuth::AccessToken.new(oauth_consumer, RightSignature::configuration[:access_token], RightSignature::configuration[:access_secret])
31
+ end
32
+
33
+ def set_access_token(access_token, access_secret)
34
+ RightSignature::configuration[:access_token] = access_token
35
+ RightSignature::configuration[:access_secret] = access_secret
36
+ @access_token = OAuth::AccessToken.new(oauth_consumer, RightSignature::configuration[:access_token], RightSignature::configuration[:access_secret])
37
+ end
38
+
39
+ def new_request_token
40
+ @request_token = RightSignature::OauthConnection.oauth_consumer.get_request_token
41
+ end
42
+
43
+ def generate_access_token(oauth_verifier)
44
+ raise "Please set request token with new_request_token" unless @request_token
45
+ @access_token = @request_token.get_access_token(:oauth_verifier => oauth_verifier)
22
46
  end
23
47
 
24
48
  def request(method, *options)
@@ -28,6 +52,11 @@ module RightSignature
28
52
 
29
53
  self.access_token.__send__(method, *options)
30
54
  end
55
+
56
+ private
57
+ def check_credentials
58
+ raise "Please set load_configuration with #{RightSignature::oauth_keys.join(', ')}" unless RightSignature::has_oauth_credentials?
59
+ end
31
60
  end
32
61
 
33
62
  end
@@ -6,6 +6,8 @@ module RightSignature
6
6
 
7
7
  class <<self
8
8
  def request(method, url, options)
9
+ raise "Please set load_configuration with #{RightSignature::api_token_keys.join(', ')}" unless RightSignature::has_api_token?
10
+
9
11
  options[:headers] ||= {}
10
12
  options[:headers]['api-token'] = RightSignature::configuration[:api_token]
11
13
  options[:headers]["Accept"] ||= "*/*"
@@ -8,7 +8,30 @@ module RightSignature
8
8
  RightSignature::OauthConnection.oauth_consumer.site
9
9
  end
10
10
  end
11
-
11
+
12
+ def put(url, body={}, headers={})
13
+ if RightSignature::has_api_token?
14
+ options = {}
15
+ options[:headers] = headers
16
+ options[:body] = XmlFu.xml(body)
17
+
18
+ parse_response(RightSignature::TokenConnection.request(:put, url, options))
19
+ else
20
+ parse_response(RightSignature::OauthConnection.request(:put, url, XmlFu.xml(body), headers))
21
+ end
22
+ end
23
+
24
+ def delete(url, headers={})
25
+ if RightSignature::has_api_token?
26
+ options = {}
27
+ options[:headers] = headers
28
+
29
+ parse_response(RightSignature::TokenConnection.request(:delete, url, options))
30
+ else
31
+ parse_response(RightSignature::OauthConnection.request(:delete, url, headers))
32
+ end
33
+ end
34
+
12
35
  def get(url, params={}, headers={})
13
36
  RightSignature::check_credentials
14
37
 
@@ -16,13 +39,12 @@ module RightSignature
16
39
  options = {}
17
40
  options[:headers] = headers
18
41
  options[:query] = params
19
- RightSignature::TokenConnection.request(:get, url, options).parsed_response
42
+ parse_response(RightSignature::TokenConnection.request(:get, url, options))
20
43
  else
21
44
  unless params.empty?
22
45
  url = "#{url}?#{params.sort.map{|param| URI.escape("#{param[0]}=#{param[1]}")}.join('&')}"
23
46
  end
24
- res = RightSignature::OauthConnection.request(:get, url, headers)
25
- MultiXml.parse(res.body)
47
+ parse_response(RightSignature::OauthConnection.request(:get, url, headers))
26
48
  end
27
49
  end
28
50
 
@@ -33,26 +55,30 @@ module RightSignature
33
55
  options = {}
34
56
  options[:headers] = headers
35
57
  options[:body] = XmlFu.xml(body)
36
- res = RightSignature::TokenConnection.request(:post, url, options)
37
-
38
- unless res.success?
39
- puts res.body
40
- raise RightSignature::ResponseError.new(res)
58
+ parse_response(RightSignature::TokenConnection.request(:post, url, options))
59
+ else
60
+ parse_response(RightSignature::OauthConnection.request(:post, url, XmlFu.xml(body), headers))
61
+ end
62
+ end
63
+
64
+ def parse_response(response)
65
+ if response.is_a? Net::HTTPResponse
66
+ unless response.is_a? Net::HTTPSuccess
67
+ puts response.body
68
+ raise RightSignature::ResponseError.new(response)
41
69
  end
42
70
 
43
- res.parsed_response
71
+ MultiXml.parse(response.body)
44
72
  else
45
- res = RightSignature::OauthConnection.request(:post, url, XmlFu.xml(body), headers)
46
-
47
- unless res.is_a? Net::HTTPSuccess
48
- puts res.body
49
- raise RightSignature::ResponseError.new(res)
73
+ unless response.success?
74
+ puts response.body
75
+ raise RightSignature::ResponseError.new(response)
50
76
  end
51
-
52
- MultiXml.parse(res.body)
77
+
78
+ response.parsed_response
53
79
  end
54
80
  end
81
+
55
82
  end
56
-
57
83
  end
58
84
  end
@@ -1,3 +1,3 @@
1
1
  module RightSignature
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -51,7 +51,6 @@ module RightSignature
51
51
  return true
52
52
  end
53
53
 
54
- private
55
54
  def oauth_keys
56
55
  [:consumer_key, :consumer_secret, :access_token, :access_secret].freeze
57
56
  end
@@ -1,6 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RightSignature::TokenConnection do
4
+ it "should raise error if no configuration is set" do
5
+ RightSignature::configuration = {}
6
+ lambda{RightSignature::TokenConnection.request(:get, "path", {:query => {:search => 'hey there'}})}.should raise_error(Exception, "Please set load_configuration with api_token")
7
+ end
8
+
4
9
  it "should create 'api-token' to headers with :api_token credentials, accept of '*/*', and content-type of xml with given method" do
5
10
  RightSignature::TokenConnection.should_receive(:get).with("path", {:query => {:search => 'hey there'}, :headers => {"api-token" => "APITOKEN", "Accept" => "*/*", "content-type" => "application/xml"}}).and_return(stub("HTTPartyResponse", :parsed_response => nil))
6
11
  RightSignature::TokenConnection.request(:get, "path", {:query => {:search => 'hey there'}})
@@ -1,23 +1,29 @@
1
1
  require File.dirname(__FILE__) + '/../lib/rightsignature'
2
2
 
3
3
  describe RightSignature::Connection do
4
+ before do
5
+ @net_http_response = Net::HTTPOK.new('1.1', 200, 'OK')
6
+ @net_http_response.stub(:body => '')
7
+ @httparty_response = stub("HTTPartyResponse", :parsed_response => nil, :body => '', :success? => true)
8
+ end
9
+
4
10
  describe "GET" do
5
11
  describe "connection method" do
6
- it "should default to RightSignature::OauthConnection if no api_token was specified" do
12
+ it "should default to RightSignature::57 if no api_token was specified" do
7
13
  RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
8
- RightSignature::OauthConnection.should_receive(:request).and_return(stub('Response', :body => ''))
14
+ RightSignature::OauthConnection.should_receive(:request).and_return(@net_http_response)
9
15
  RightSignature::Connection.get("/path")
10
16
  end
11
17
 
12
18
  it "should use RightSignature::TokenConnection if api_token was specified" do
13
19
  RightSignature::configuration = {:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
14
- RightSignature::TokenConnection.should_receive(:request).and_return(stub('Response', :parsed_response => {}))
20
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
15
21
  RightSignature::Connection.get("/path")
16
22
  end
17
23
 
18
24
  it "should use RightSignature::TokenConnection if only api_token was specified" do
19
25
  RightSignature::configuration = {:api_token => "APITOKEN"}
20
- RightSignature::TokenConnection.should_receive(:request).and_return(stub('Response', :parsed_response => {}))
26
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
21
27
  RightSignature::Connection.get("/path")
22
28
  end
23
29
  end
@@ -30,13 +36,16 @@ describe RightSignature::Connection do
30
36
  describe "using OauthConnection" do
31
37
  it "should append params into path alphabetically and URI escaped" do
32
38
  RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
33
- RightSignature::OauthConnection.should_receive(:request).with(:get, "/path?page=1&q=search%20me", {}).and_return(stub('Response', :body => '<document><subject>My Subject</subject></document>'))
39
+ @net_http_response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
40
+ RightSignature::OauthConnection.should_receive(:request).with(:get, "/path?page=1&q=search%20me", {}).and_return(@net_http_response)
34
41
  RightSignature::Connection.get("/path", {:q => 'search me', :page => 1})
35
42
  end
36
43
 
37
44
  it "should return converted response body from XML to hash" do
38
45
  RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
39
- RightSignature::OauthConnection.stub(:request).and_return(stub('Response', :body => '<document><subject>My Subject</subject></document>'))
46
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
47
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
48
+ RightSignature::OauthConnection.should_receive(:request).with(:get, "/path?page=1&q=search%20me", {}).and_return(response)
40
49
  RightSignature::Connection.get("/path", {:q => 'search me', :page => 1}).should == {'document' => {'subject' => "My Subject"}}
41
50
  end
42
51
  end
@@ -44,13 +53,14 @@ describe RightSignature::Connection do
44
53
  describe "using TokenConnection" do
45
54
  it "should append params and header into query option and header option" do
46
55
  RightSignature::configuration = {:api_token => 'token'}
47
- RightSignature::TokenConnection.should_receive(:request).with(:get, "/path", {:query => {:q => 'search me', :page => 1}, :headers => {"User-Agent" => "me"}}).and_return(stub('Response', :parsed_response => {}))
56
+ RightSignature::TokenConnection.should_receive(:request).with(:get, "/path", {:query => {:q => 'search me', :page => 1}, :headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
48
57
  RightSignature::Connection.get("/path", {:q => 'search me', :page => 1}, {"User-Agent" => "me"})
49
58
  end
50
59
 
51
60
  it "should return converted parsed_response from response" do
52
61
  RightSignature::configuration = {:api_token => 'token'}
53
- RightSignature::TokenConnection.stub(:request).and_return(stub('Response', :parsed_response => {'document' => {'subject' => "My Subject"}}))
62
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
63
+ RightSignature::TokenConnection.stub(:request).and_return(@httparty_response)
54
64
  RightSignature::Connection.get("/path", {:q => 'search me', :page => 1}).should == {'document' => {'subject' => "My Subject"}}
55
65
  end
56
66
  end
@@ -59,9 +69,6 @@ describe RightSignature::Connection do
59
69
  describe "POST" do
60
70
  describe "connection method" do
61
71
  before do
62
- @net_http_response = Net::HTTPOK.new('1.1', 200, 'OK')
63
- @net_http_response.stub(:body =>"{}", :body => '')
64
- @httparty_response = stub("HTTPartyResponse", :parsed_response => nil, :body => '', :success? => true)
65
72
  RightSignature::TokenConnection.stub(:request => @net_http_response)
66
73
  RightSignature::OauthConnection.stub(:request => @httparty_response)
67
74
  end
@@ -89,7 +96,126 @@ describe RightSignature::Connection do
89
96
  lambda{RightSignature::Connection.post("/path")}.should raise_error
90
97
  end
91
98
  end
99
+
92
100
 
101
+ describe "DELETE" do
102
+ describe "connection method" do
103
+ it "should default to RightSignature::57 if no api_token was specified" do
104
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
105
+ RightSignature::OauthConnection.should_receive(:request).and_return(@net_http_response)
106
+ RightSignature::Connection.delete("/path")
107
+ end
108
+
109
+ it "should use RightSignature::TokenConnection if api_token was specified" do
110
+ RightSignature::configuration = {:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
111
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
112
+ RightSignature::Connection.delete("/path")
113
+ end
114
+
115
+ it "should use RightSignature::TokenConnection if only api_token was specified" do
116
+ RightSignature::configuration = {:api_token => "APITOKEN"}
117
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
118
+ RightSignature::Connection.delete("/path")
119
+ end
120
+ end
121
+
122
+ it "should raise error if no configuration is set" do
123
+ RightSignature::configuration = nil
124
+ lambda{RightSignature::Connection.delete("/path")}.should raise_error
125
+ end
126
+
127
+ describe "using OauthConnection" do
128
+ it "should return converted response body from XML to hash" do
129
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
130
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
131
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
132
+ RightSignature::OauthConnection.should_receive(:request).with(:delete, "/path", {}).and_return(response)
133
+ RightSignature::Connection.delete("/path").should == {'document' => {'subject' => "My Subject"}}
134
+ end
135
+
136
+ it "should pass headers" do
137
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
138
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
139
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
140
+ RightSignature::OauthConnection.should_receive(:request).with(:delete, "/path", {"User-Agent" => "custom"}).and_return(response)
141
+ RightSignature::Connection.delete("/path", {"User-Agent" => "custom"}).should == {'document' => {'subject' => "My Subject"}}
142
+ end
143
+ end
144
+
145
+ describe "using TokenConnection" do
146
+ it "should append headers into headers option" do
147
+ RightSignature::configuration = {:api_token => 'token'}
148
+ RightSignature::TokenConnection.should_receive(:request).with(:delete, "/path", {:headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
149
+ RightSignature::Connection.delete("/path", {"User-Agent" => "me"})
150
+ end
151
+
152
+ it "should return converted parsed_response from response" do
153
+ RightSignature::configuration = {:api_token => 'token'}
154
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
155
+ RightSignature::TokenConnection.stub(:request).and_return(@httparty_response)
156
+ RightSignature::Connection.delete("/path").should == {'document' => {'subject' => "My Subject"}}
157
+ end
158
+ end
159
+ end
160
+
161
+ describe "PUT" do
162
+ describe "connection method" do
163
+ it "should default to RightSignature::57 if no api_token was specified" do
164
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
165
+ RightSignature::OauthConnection.should_receive(:request).and_return(@net_http_response)
166
+ RightSignature::Connection.get("/path")
167
+ end
168
+
169
+ it "should use RightSignature::TokenConnection if api_token was specified" do
170
+ RightSignature::configuration = {:api_token => "APITOKEN", :consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
171
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
172
+ RightSignature::Connection.put("/path")
173
+ end
174
+
175
+ it "should use RightSignature::TokenConnection if only api_token was specified" do
176
+ RightSignature::configuration = {:api_token => "APITOKEN"}
177
+ RightSignature::TokenConnection.should_receive(:request).and_return(@httparty_response)
178
+ RightSignature::Connection.put("/path")
179
+ end
180
+ end
181
+
182
+ it "should raise error if no configuration is set" do
183
+ RightSignature::configuration = nil
184
+ lambda{RightSignature::Connection.put("/path")}.should raise_error
185
+ end
186
+
187
+ describe "using OauthConnection" do
188
+ it "should convert body into XML" do
189
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
190
+ @net_http_response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
191
+ RightSignature::OauthConnection.should_receive(:request).with(:put, "/path", "<document><something>else</something><page>1</page></document>", {}).and_return(@net_http_response)
192
+ RightSignature::Connection.put("/path", {:document => {:something => "else", :page => 1}})
193
+ end
194
+
195
+ it "should return converted response body from XML to hash" do
196
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
197
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
198
+ response.stub(:body).and_return('<document><subject>My Subject</subject></document>')
199
+ RightSignature::OauthConnection.should_receive(:request).with(:put, "/path", "<document><something>else</something><page>1</page></document>", {}).and_return(response)
200
+ RightSignature::Connection.put("/path", {:document => {:something => "else", :page => 1}}).should == {'document' => {'subject' => "My Subject"}}
201
+ end
202
+ end
203
+
204
+ describe "using TokenConnection" do
205
+ it "should append params and header into query option and header option" do
206
+ RightSignature::configuration = {:api_token => 'token'}
207
+ RightSignature::TokenConnection.should_receive(:request).with(:put, "/path", {:body => "<document><something>else</something><page>1</page></document>", :headers => {"User-Agent" => "me"}}).and_return(@httparty_response)
208
+ RightSignature::Connection.put("/path", {:document => {:something => "else", :page => 1}}, {"User-Agent" => "me"})
209
+ end
210
+
211
+ it "should return converted parsed_response from response" do
212
+ RightSignature::configuration = {:api_token => 'token'}
213
+ @httparty_response.should_receive(:parsed_response).and_return({'document' => {'subject' => "My Subject"}})
214
+ RightSignature::TokenConnection.stub(:request).and_return(@httparty_response)
215
+ RightSignature::Connection.put("/path", {:document => {:something => "else", :page => 1}}).should == {'document' => {'subject' => "My Subject"}}
216
+ end
217
+ end
218
+ end
93
219
 
94
220
  end
95
221
  end
@@ -6,8 +6,19 @@ describe RightSignature::OauthConnection do
6
6
  @access_token_mock = mock(OAuth::AccessToken)
7
7
  end
8
8
 
9
- describe "access_token" do
10
- it "should create OAuth access token with credentials" do
9
+ describe "oauth_consumer" do
10
+ after do
11
+ # Reset caching of oauth_consumer
12
+ RightSignature::OauthConnection.instance_variable_set("@oauth_consumer", nil)
13
+ end
14
+
15
+ it "should raise error if no configuration is set" do
16
+ RightSignature::configuration = {}
17
+ lambda{RightSignature::OauthConnection.oauth_consumer}.should raise_error(Exception, "Please set load_configuration with consumer_key, consumer_secret, access_token, access_secret")
18
+ end
19
+
20
+ it "should return consumer if consumer_key and consumer_secret is set" do
21
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098"}
11
22
  OAuth::Consumer.should_receive(:new).with(
12
23
  "Consumer123",
13
24
  "Secret098",
@@ -19,13 +30,79 @@ describe RightSignature::OauthConnection do
19
30
  :access_token_path =>'/oauth/access_token',
20
31
  :request_token_path=>'/oauth/request_token'
21
32
  }).and_return(@consumer_mock)
33
+ RightSignature::OauthConnection.oauth_consumer.should == @consumer_mock
34
+ end
35
+ end
36
+
37
+ describe "access_token" do
38
+ after do
39
+ # Reset caching of oauth_consumer
40
+ RightSignature::OauthConnection.instance_variable_set("@access_token", nil)
41
+ RightSignature::OauthConnection.instance_variable_set("@oauth_consumer", nil)
42
+ end
43
+
44
+ it "should raise error if access_token is not set" do
45
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_secret => "Secret098"}
46
+ lambda{RightSignature::OauthConnection.access_token}.should raise_error(Exception, "Please set load_configuration with consumer_key, consumer_secret, access_token, access_secret")
47
+ end
48
+
49
+ it "should raise error if access_secret is not set" do
50
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098"}
51
+ lambda{RightSignature::OauthConnection.access_token}.should raise_error(Exception, "Please set load_configuration with consumer_key, consumer_secret, access_token, access_secret")
52
+ end
53
+
54
+ it "should create OAuth access token with credentials" do
55
+ RightSignature::configuration = {:consumer_key => "Consumer123", :consumer_secret => "Secret098", :access_token => "AccessToken098", :access_secret => "AccessSecret123"}
56
+ OAuth::Consumer.should_receive(:new).and_return(@consumer_mock)
22
57
  OAuth::AccessToken.should_receive(:new).with(@consumer_mock, 'AccessToken098', 'AccessSecret123')
23
58
 
24
59
  RightSignature::OauthConnection.access_token
25
60
  end
61
+
62
+ describe "set_access_token" do
63
+ it "should create new access_token with given token and secret" do
64
+ OAuth::Consumer.stub(:new).and_return(@consumer_mock)
65
+ OAuth::AccessToken.should_receive(:new).with(@consumer_mock, "newAToken", "newASecret").and_return(@access_token_mock)
66
+
67
+ RightSignature::OauthConnection.set_access_token("newAToken","newASecret")
68
+ RightSignature::OauthConnection.access_token.should == @access_token_mock
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "new_request_token" do
74
+ it "should generate new RequestToken from consumer" do
75
+ request_mock = mock(OAuth::RequestToken)
76
+ OAuth::Consumer.stub(:new).and_return(@consumer_mock)
77
+ @consumer_mock.should_receive(:get_request_token).and_return(request_mock)
78
+ RightSignature::OauthConnection.new_request_token
79
+ RightSignature::OauthConnection.request_token.should == request_mock
80
+ end
81
+ end
82
+
83
+ describe "generate_access_token" do
84
+ it "should raise error if there is no request_token" do
85
+ # Reset request_token cache"
86
+ RightSignature::OauthConnection.instance_variable_set("@request_token", nil)
87
+ lambda{RightSignature::OauthConnection.generate_access_token("verifi123")}.should raise_error(Exception, "Please set request token with new_request_token")
88
+ end
89
+
90
+ it "should get access token from request token with given verifier" do
91
+ request_token_mock = mock(OAuth::RequestToken)
92
+ request_token_mock.should_receive(:get_access_token).with({:oauth_verifier => "verifi123"}).and_return(@access_token_mock)
93
+ RightSignature::OauthConnection.instance_variable_set("@request_token", request_token_mock)
94
+
95
+ RightSignature::OauthConnection.generate_access_token("verifi123")
96
+ RightSignature::OauthConnection.access_token.should == @access_token_mock
97
+ end
26
98
  end
27
99
 
28
100
  describe "request" do
101
+ it "should raise error if no configuration is set" do
102
+ RightSignature::configuration = {}
103
+ lambda{RightSignature::OauthConnection.request(:get, "path", {"User-Agent" => 'My own'})}.should raise_error(Exception, "Please set load_configuration with consumer_key, consumer_secret, access_token, access_secret")
104
+ end
105
+
29
106
  it "should create GET request with access token and path with custom headers as 3rd argument" do
30
107
  @access_token_mock.should_receive(:get).with('path', {"User-Agent" => 'My own', "Accept"=>"*/*", "content-type"=>"application/xml"})
31
108
  RightSignature::OauthConnection.stub(:access_token).and_return(@access_token_mock)
@@ -301,10 +301,10 @@ describe RightSignature::Template do
301
301
  ]
302
302
  }}).and_return(@sent_document_response)
303
303
  RightSignature::Connection.should_receive(:get).with("/api/documents/ABCDEFGH123/signer_links.xml", {}).and_return({"document" => {
304
- "signer_links" => [
305
- {"signer_link" => {"name" => "John Bellingham", "role" => "signer_A", "signer_token" => "slkfj2"}},
306
- {"signer_link" => {"name" => "Tim Else", "role" => "signer_B", "signer_token" => "asfd1"}}
307
- ]
304
+ "signer_links" => {"signer_link" => [
305
+ {"name" => "John Bellingham", "role" => "signer_A", "signer_token" => "slkfj2"},
306
+ {"name" => "Tim Else", "role" => "signer_B", "signer_token" => "asfd1"}
307
+ ]}
308
308
  }})
309
309
 
310
310
 
@@ -331,10 +331,10 @@ describe RightSignature::Template do
331
331
  ]
332
332
  }}).and_return(@sent_document_response)
333
333
  RightSignature::Connection.should_receive(:get).with("/api/documents/ABCDEFGH123/signer_links.xml", {}).and_return({"document" => {
334
- "signer_links" => [
335
- {"signer_link" => {"name" => "John Bellingham", "email" => "dontchange@example.com", "role" => "signer_A", "signer_token" => "slkfj2"}},
336
- {"signer_link" => {"name" => "Tim Else", "role" => "signer_B", "signer_token" => "asfd1"}}
337
- ]
334
+ "signer_links" => {"signer_link" => [
335
+ {"name" => "John Bellingham", "email" => "dontchange@example.com", "role" => "signer_A", "signer_token" => "slkfj2"},
336
+ {"name" => "Tim Else", "role" => "signer_B", "signer_token" => "asfd1"}
337
+ ]}
338
338
  }})
339
339
 
340
340
  results = RightSignature::Template.send_as_embedded_signers("TGUID", [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rightsignature
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-09-26 00:00:00.000000000 Z
14
+ date: 2012-09-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler