rpx_now 0.5.10 → 0.5.11

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -23,7 +23,7 @@ Usage
23
23
  Install
24
24
  =======
25
25
  - As Rails plugin: `script/plugin install git://github.com/grosser/rpx_now.git `
26
- - As gem: `sudo gem install grosser-rpx_now --source http://gems.github.com/`
26
+ - As gem: `sudo gem install rpx_now`
27
27
 
28
28
  Examples
29
29
  ========
@@ -40,10 +40,13 @@ View
40
40
  Environment
41
41
  -----------
42
42
  Rails::Initializer.run do |config|
43
- config.gem "grosser-rpx_now", :lib => "rpx_now", :source => "http://gems.github.com/"
43
+ config.gem "rpx_now"
44
44
  ...
45
+
46
+ config.after_initialize do # so rake gems:install works
47
+ RPXNow.api_key = "YOU RPX API KEY"
48
+ end
45
49
  end
46
- RPXNow.api_key = "YOU RPX API KEY"
47
50
 
48
51
  Controller
49
52
  ----------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.10
1
+ 0.5.11
data/lib/rpx_now.rb CHANGED
@@ -1,4 +1,8 @@
1
+ require 'net/http'
2
+ require 'net/https'
1
3
  require 'json'
4
+
5
+ require 'rpx_now/request'
2
6
  require 'rpx_now/contacts_collection'
3
7
  require 'rpx_now/user_integration'
4
8
  require 'rpx_now/user_proxy'
@@ -6,15 +10,14 @@ require 'rpx_now/user_proxy'
6
10
  module RPXNow
7
11
  extend self
8
12
 
9
- HOST = 'rpxnow.com'
10
- SSL_CERT = File.join(File.dirname(__FILE__), '..', 'certs', 'ssl_cert.pem')
11
-
12
13
  attr_accessor :api_key
13
14
  attr_accessor :api_version
14
15
  self.api_version = 2
15
16
 
16
- # retrieve the users data, or return nil when nothing could be read/token was invalid
17
- # or data was not found
17
+ # retrieve the users data
18
+ # - cleaned Hash
19
+ # - complete/unclean response when block was given user_data{|response| ...; return hash }
20
+ # - nil when token was invalid / data was not found
18
21
  def user_data(token, *args)
19
22
  api_key, version, options = extract_key_version_and_options!(args)
20
23
  options = {:token=>token,:apiKey=>api_key}.merge options
@@ -25,7 +28,7 @@ module RPXNow
25
28
  return nil if $!.to_s=~/Data not found/
26
29
  raise
27
30
  end
28
- if block_given? then yield(data) else read_user_data_from_response(data) end
31
+ if block_given? then yield(data) else parse_user_data(data) end
29
32
  end
30
33
 
31
34
  # set the users status
@@ -80,7 +83,7 @@ module RPXNow
80
83
  def embed_code(subdomain,url,options={})
81
84
  options = {:width => '400', :height => '240', :language => 'en'}.merge(options)
82
85
  <<EOF
83
- <iframe src="https://#{subdomain}.#{HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
86
+ <iframe src="https://#{subdomain}.#{Request::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
84
87
  scrolling="no" frameBorder="no" style="width:#{options[:width]}px;height:#{options[:height]}px;">
85
88
  </iframe>
86
89
  EOF
@@ -96,18 +99,29 @@ EOF
96
99
 
97
100
  private
98
101
 
102
+ def self.parse_user_data(response)
103
+ user_data = response['profile']
104
+ data = {}
105
+ data[:identifier] = user_data['identifier']
106
+ data[:email] = user_data['verifiedEmail'] || user_data['email']
107
+ data[:username] = user_data['preferredUsername'] || data[:email].to_s.sub(/@.*/,'')
108
+ data[:name] = user_data['displayName'] || data[:username]
109
+ data[:id] = user_data['primaryKey'] unless user_data['primaryKey'].to_s.empty?
110
+ data
111
+ end
112
+
99
113
  def unobtrusive_popup_code(text, subdomain, url, options={})
100
114
  version = extract_version! options
101
- "<a class=\"rpxnow\" href=\"https://#{subdomain}.#{HOST}/openid/v#{version}/signin?token_url=#{url}\">#{text}</a>"
115
+ "<a class=\"rpxnow\" href=\"https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}\">#{text}</a>"
102
116
  end
103
117
 
104
118
  def obtrusive_popup_code(text, subdomain, url, options = {})
105
119
  version = extract_version! options
106
120
  <<EOF
107
- <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{HOST}/openid/v#{version}/signin?token_url=#{url}">
121
+ <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}">
108
122
  #{text}
109
123
  </a>
110
- <script src="https://#{HOST}/openid/v#{version}/widget" type="text/javascript"></script>
124
+ <script src="https://#{Request::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
111
125
  <script type="text/javascript">
112
126
  //<![CDATA[
113
127
  RPXNOW.token_url = "#{url}";
@@ -144,52 +158,8 @@ EOF
144
158
  options.delete(:api_version) || api_version
145
159
  end
146
160
 
147
- def read_user_data_from_response(response)
148
- user_data = response['profile']
149
- data = {}
150
- data[:identifier] = user_data['identifier']
151
- data[:email] = user_data['verifiedEmail'] || user_data['email']
152
- data[:username] = user_data['preferredUsername'] || data[:email].to_s.sub(/@.*/,'')
153
- data[:name] = user_data['displayName'] || data[:username]
154
- data[:id] = user_data['primaryKey'] unless user_data['primaryKey'].to_s.empty?
155
- data
156
- end
157
-
158
161
  def secure_json_post(path, data)
159
- parse_response(post(path,data))
160
- end
161
-
162
- def post(path, data)
163
- require 'net/http'
164
- require 'net/https'
165
- request = Net::HTTP::Post.new(path)
166
- request.form_data = data.map{|k,v| [k.to_s,v]}#symbol keys -> string because of ruby 1.9.x bug http://redmine.ruby-lang.org/issues/show/1351
167
- make_request(request)
168
- end
169
-
170
- def make_request(request)
171
- http = Net::HTTP.new(HOST, 443)
172
- http.use_ssl = true
173
- http.ca_file = SSL_CERT
174
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
175
- http.verify_depth = 5
176
- http.request(request)
177
- end
178
-
179
- def parse_response(response)
180
- if response.code.to_i >= 400
181
- raise ServiceUnavailableError, "The RPX service is temporarily unavailable. (4XX)"
182
- else
183
- result = JSON.parse(response.body)
184
- return result unless result['err']
185
-
186
- code = result['err']['code']
187
- if code == -1
188
- raise ServiceUnavailableError, "The RPX service is temporarily unavailable."
189
- else
190
- raise ApiError, "Got error: #{result['err']['msg']} (code: #{code}), HTTP status: #{response.code}"
191
- end
192
- end
162
+ Request.post(path, data)
193
163
  end
194
164
 
195
165
  class ServerError < RuntimeError; end #backwards compatibility / catch all
@@ -0,0 +1,43 @@
1
+ module RPXNow
2
+ class Request
3
+ HOST = 'rpxnow.com'
4
+ SSL_CERT = File.join(File.dirname(__FILE__), '..', '..', 'certs', 'ssl_cert.pem')
5
+
6
+ def self.post(path, data)
7
+ parse_response(request(path,data))
8
+ end
9
+
10
+ private
11
+
12
+ def self.request(path, data)
13
+ request = Net::HTTP::Post.new(path)
14
+ request.form_data = data.map{|k,v| [k.to_s,v]}#symbol keys -> string because of ruby 1.9.x bug http://redmine.ruby-lang.org/issues/show/1351
15
+ make_request(request)
16
+ end
17
+
18
+ def self.make_request(request)
19
+ http = Net::HTTP.new(HOST, 443)
20
+ http.use_ssl = true
21
+ http.ca_file = SSL_CERT
22
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
23
+ http.verify_depth = 5
24
+ http.request(request)
25
+ end
26
+
27
+ def self.parse_response(response)
28
+ if response.code.to_i >= 400
29
+ raise ServiceUnavailableError, "The RPX service is temporarily unavailable. (4XX)"
30
+ else
31
+ result = JSON.parse(response.body)
32
+ return result unless result['err']
33
+
34
+ code = result['err']['code']
35
+ if code == -1
36
+ raise ServiceUnavailableError, "The RPX service is temporarily unavailable."
37
+ else
38
+ raise ApiError, "Got error: #{result['err']['msg']} (code: #{code}), HTTP status: #{response.code}"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
Binary file
Binary file
data/rdoc/README.rdoc ADDED
@@ -0,0 +1 @@
1
+ documentation is at http://github.com/grosser/rpx_now
data/rpx_now.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rpx_now}
8
- s.version = "0.5.10"
8
+ s.version = "0.5.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2009-10-06}
12
+ s.date = %q{2009-10-07}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.markdown"
@@ -24,12 +24,16 @@ Gem::Specification.new do |s|
24
24
  "init.rb",
25
25
  "lib/rpx_now.rb",
26
26
  "lib/rpx_now/contacts_collection.rb",
27
+ "lib/rpx_now/request.rb",
27
28
  "lib/rpx_now/user_integration.rb",
28
29
  "lib/rpx_now/user_proxy.rb",
29
30
  "pkg/rpx_now-0.5.10.gem",
31
+ "pkg/rpx_now-0.5.11.gem",
32
+ "rdoc/README.rdoc",
30
33
  "rpx_now.gemspec",
31
34
  "spec/fixtures/get_contacts_response.json",
32
35
  "spec/rpx_now/contacts_collection_spec.rb",
36
+ "spec/rpx_now/request_spec.rb",
33
37
  "spec/rpx_now/user_proxy_spec.rb",
34
38
  "spec/rpx_now_spec.rb",
35
39
  "spec/spec_helper.rb"
@@ -44,6 +48,7 @@ Gem::Specification.new do |s|
44
48
  "spec/rpx_now_spec.rb",
45
49
  "spec/rpx_now/contacts_collection_spec.rb",
46
50
  "spec/rpx_now/user_proxy_spec.rb",
51
+ "spec/rpx_now/request_spec.rb",
47
52
  "spec/spec_helper.rb"
48
53
  ]
49
54
 
@@ -1,4 +1,4 @@
1
- require File.expand_path("../spec_helper", File.dirname(__FILE__))
1
+ require 'spec/spec_helper'
2
2
 
3
3
  describe RPXNow::ContactsCollection do
4
4
  before do
@@ -0,0 +1,41 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe RPXNow::Request do
4
+ describe 'ssl cert' do
5
+ it "has an absolute path" do
6
+ RPXNow::Request::SSL_CERT[0..0].should == '/' #start with '/'
7
+ end
8
+
9
+ it "exists" do
10
+ File.read(RPXNow::Request::SSL_CERT).to_s.should_not be_empty
11
+ end
12
+ end
13
+
14
+ describe :parse_response do
15
+ it "parses json when status is ok" do
16
+ response = mock(:code=>'200', :body=>%Q({"stat":"ok","data":"xx"}))
17
+ RPXNow::Request.send(:parse_response, response)['data'].should == "xx"
18
+ end
19
+
20
+ it "raises when there is a communication error" do
21
+ response = stub(:code=>'200', :body=>%Q({"err":"wtf","stat":"ok"}))
22
+ lambda{
23
+ RPXNow::Request.send(:parse_response,response)
24
+ }.should raise_error(RPXNow::ApiError)
25
+ end
26
+
27
+ it "raises when service has downtime" do
28
+ response = stub(:code=>'200', :body=>%Q({"err":{"code":-1},"stat":"ok"}))
29
+ lambda{
30
+ RPXNow::Request.send(:parse_response,response)
31
+ }.should raise_error(RPXNow::ServiceUnavailableError)
32
+ end
33
+
34
+ it "raises when service is down" do
35
+ response = stub(:code=>'400',:body=>%Q({"stat":"err"}))
36
+ lambda{
37
+ RPXNow::Request.send(:parse_response,response)
38
+ }.should raise_error(RPXNow::ServiceUnavailableError)
39
+ end
40
+ end
41
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../spec_helper", File.dirname(__FILE__))
1
+ require 'spec/spec_helper'
2
2
 
3
3
  class User
4
4
  include RPXNow::UserIntegration
data/spec/rpx_now_spec.rb CHANGED
@@ -1,10 +1,10 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require 'spec/spec_helper'
2
2
 
3
3
  describe RPXNow do
4
4
  describe :api_key= do
5
5
  it "stores the api key, so i do not have to supply everytime" do
6
6
  RPXNow.api_key='XX'
7
- RPXNow.expects(:post).with{|x,data|data[:apiKey]=='XX'}.returns mock(:code=>'200', :body=>%Q({"stat":"ok"}))
7
+ RPXNow::Request.should_receive(:request).with{|x,data|data[:apiKey]=='XX'}.and_return mock(:code=>'200', :body=>%Q({"stat":"ok"}))
8
8
  RPXNow.mappings(1)
9
9
  end
10
10
  end
@@ -98,55 +98,61 @@ describe RPXNow do
98
98
  end
99
99
 
100
100
  it "parses JSON response to user data" do
101
- RPXNow.expects(:post).returns fake_response
102
- RPXNow.user_data('').should == {:name=>'Michael Grosser',:email=>'grosser.michael@googlemail.com',:identifier=>"https://www.google.com/accounts/o8/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM", :username => 'grosser.michael'}
101
+ expected = {
102
+ :name => 'Michael Grosser',
103
+ :email => 'grosser.michael@googlemail.com',
104
+ :identifier => 'https://www.google.com/accounts/o8/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM',
105
+ :username => 'grosser.michael',
106
+ }
107
+ RPXNow::Request.should_receive(:request).and_return fake_response
108
+ RPXNow.user_data('').should == expected
103
109
  end
104
110
 
105
111
  it "adds a :id when primaryKey was returned" do
106
112
  @response_body.sub!(%Q("verifiedEmail"), %Q("primaryKey":"2","verifiedEmail"))
107
- RPXNow.expects(:post).returns fake_response
113
+ RPXNow::Request.should_receive(:request).and_return fake_response
108
114
  RPXNow.user_data('')[:id].should == '2'
109
115
  end
110
116
 
111
117
  it "handles primaryKeys that are not numeric" do
112
118
  @response_body.sub!(%Q("verifiedEmail"), %Q("primaryKey":"dbalatero","verifiedEmail"))
113
- RPXNow.expects(:post).returns fake_response
119
+ RPXNow::Request.should_receive(:request).and_return fake_response
114
120
  RPXNow.user_data('')[:id].should == 'dbalatero'
115
121
  end
116
122
 
117
123
  it "hands JSON response to supplied block" do
118
- RPXNow.expects(:post).returns mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
124
+ RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
119
125
  response = nil
120
126
  RPXNow.user_data(''){|data| response = data}
121
127
  response.should == {"x" => "1", "stat" => "ok"}
122
128
  end
123
129
 
124
130
  it "returns what the supplied block returned" do
125
- RPXNow.expects(:post).returns mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
131
+ RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
126
132
  RPXNow.user_data(''){|data| "x"}.should == 'x'
127
133
  end
128
134
 
129
135
  it "can send additional parameters" do
130
- RPXNow.expects(:post).with{|url,data|
136
+ RPXNow::Request.should_receive(:request).with{|url,data|
131
137
  data[:extended].should == 'true'
132
- }.returns fake_response
138
+ }.and_return fake_response
133
139
  RPXNow.user_data('',:extended=>'true')
134
140
  end
135
141
 
136
142
  it "works with api key as 2nd parameter (backwards compatibility)" do
137
- RPXNow.expects(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :token=>'id').returns @fake_user_data
143
+ RPXNow.should_receive(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :token=>'id').and_return @fake_user_data
138
144
  RPXNow.user_data('id', 'THE KEY')
139
145
  RPXNow.api_key.should == API_KEY
140
146
  end
141
147
 
142
148
  it "works with api key as 2nd parameter and options (backwards compatibility)" do
143
- RPXNow.expects(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :extended=>'abc', :token=>'id' ).returns @fake_user_data
149
+ RPXNow.should_receive(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :extended=>'abc', :token=>'id' ).and_return @fake_user_data
144
150
  RPXNow.user_data('id', 'THE KEY', :extended=>'abc')
145
151
  RPXNow.api_key.should == API_KEY
146
152
  end
147
153
 
148
154
  it "works with api version as option (backwards compatibility)" do
149
- RPXNow.expects(:secure_json_post).with('/api/v123/auth_info', :apiKey=>API_KEY, :token=>'id', :extended=>'abc').returns @fake_user_data
155
+ RPXNow.should_receive(:secure_json_post).with('/api/v123/auth_info', :apiKey=>API_KEY, :token=>'id', :extended=>'abc').and_return @fake_user_data
150
156
  RPXNow.user_data('id', :extended=>'abc', :api_version=>123)
151
157
  RPXNow.api_version.should == API_VERSION
152
158
  end
@@ -162,79 +168,51 @@ describe RPXNow do
162
168
  end
163
169
 
164
170
  it "parses JSON response to result hash" do
165
- RPXNow.expects(:post).returns fake_response
171
+ RPXNow::Request.should_receive(:request).and_return fake_response
166
172
  RPXNow.set_status('identifier', 'Chillen...').should == {'stat' => 'ok'}
167
173
  end
168
174
  end
169
175
 
170
176
  describe :read_user_data_from_response do
171
177
  it "reads secondary names" do
172
- RPXNow.send(:read_user_data_from_response,{'profile'=>{'preferredUsername'=>'1'}})[:name].should == '1'
178
+ RPXNow.send(:parse_user_data,{'profile'=>{'preferredUsername'=>'1'}})[:name].should == '1'
173
179
  end
174
180
 
175
181
  it "parses email when no name is found" do
176
- RPXNow.send(:read_user_data_from_response,{'profile'=>{'email'=>'1@xxx.com'}})[:name].should == '1'
182
+ RPXNow.send(:parse_user_data,{'profile'=>{'email'=>'1@xxx.com'}})[:name].should == '1'
177
183
  end
178
184
  end
179
185
 
180
186
  describe :contacts do
181
187
  it "finds all contacts" do
182
188
  response = JSON.parse(File.read('spec/fixtures/get_contacts_response.json'))
183
- RPXNow.expects(:secure_json_post).with('/api/v2/get_contacts',:identifier=>'xx', :apiKey=>API_KEY).returns response
189
+ RPXNow.should_receive(:secure_json_post).with('/api/v2/get_contacts',:identifier=>'xx', :apiKey=>API_KEY).and_return response
184
190
  RPXNow.contacts('xx').size.should == 5
185
191
  end
186
192
  end
187
193
 
188
- describe :parse_response do
189
- it "parses json when status is ok" do
190
- response = mock(:code=>'200', :body=>%Q({"stat":"ok","data":"xx"}))
191
- RPXNow.send(:parse_response, response)['data'].should == "xx"
192
- end
193
-
194
- it "raises when there is a communication error" do
195
- response = stub(:code=>'200', :body=>%Q({"err":"wtf","stat":"ok"}))
196
- lambda{
197
- RPXNow.send(:parse_response,response)
198
- }.should raise_error(RPXNow::ApiError)
199
- end
200
-
201
- it "raises when service has downtime" do
202
- response = stub(:code=>'200', :body=>%Q({"err":{"code":-1},"stat":"ok"}))
203
- lambda{
204
- RPXNow.send(:parse_response,response)
205
- }.should raise_error(RPXNow::ServiceUnavailableError)
206
- end
207
-
208
- it "raises when service is down" do
209
- response = stub(:code=>'400',:body=>%Q({"stat":"err"}))
210
- lambda{
211
- RPXNow.send(:parse_response,response)
212
- }.should raise_error(RPXNow::ServiceUnavailableError)
213
- end
214
- end
215
-
216
194
  describe :mappings do
217
195
  it "parses JSON response to unmap data" do
218
- RPXNow.expects(:post).returns mock(:code=>'200',:body=>%Q({"stat":"ok", "identifiers": ["http://test.myopenid.com/"]}))
196
+ RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok", "identifiers": ["http://test.myopenid.com/"]}))
219
197
  RPXNow.mappings(1, "x").should == ["http://test.myopenid.com/"]
220
198
  end
221
199
  end
222
200
 
223
201
  describe :map do
224
202
  it "adds a mapping" do
225
- RPXNow.expects(:post).returns mock(:code=>'200',:body=>%Q({"stat":"ok"}))
203
+ RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok"}))
226
204
  RPXNow.map('http://test.myopenid.com',1, API_KEY)
227
205
  end
228
206
  end
229
207
 
230
208
  describe :unmap do
231
209
  it "unmaps a indentifier" do
232
- RPXNow.expects(:post).returns mock(:code=>'200',:body=>%Q({"stat":"ok"}))
210
+ RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok"}))
233
211
  RPXNow.unmap('http://test.myopenid.com', 1, "x")
234
212
  end
235
213
 
236
214
  it "can be called with a specific version" do
237
- RPXNow.expects(:secure_json_post).with{|a,b|a == "/api/v300/unmap"}
215
+ RPXNow.should_receive(:secure_json_post).with{|a,b|a == "/api/v300/unmap"}
238
216
  RPXNow.unmap('http://test.myopenid.com', 1, :api_key=>'xxx', :api_version=>300)
239
217
  end
240
218
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # ---- requirements
2
2
  require 'rubygems'
3
3
  require 'spec'
4
- require 'mocha'
5
4
 
6
5
  $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
7
6
 
@@ -12,7 +11,6 @@ API_VERSION = RPXNow.api_version
12
11
 
13
12
  # ---- rspec
14
13
  Spec::Runner.configure do |config|
15
- config.mock_with :mocha
16
14
  config.before :each do
17
15
  RPXNow.api_key = API_KEY
18
16
  RPXNow.api_version = API_VERSION
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpx_now
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.10
4
+ version: 0.5.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-06 00:00:00 +02:00
12
+ date: 2009-10-07 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,12 +40,16 @@ files:
40
40
  - init.rb
41
41
  - lib/rpx_now.rb
42
42
  - lib/rpx_now/contacts_collection.rb
43
+ - lib/rpx_now/request.rb
43
44
  - lib/rpx_now/user_integration.rb
44
45
  - lib/rpx_now/user_proxy.rb
45
46
  - pkg/rpx_now-0.5.10.gem
47
+ - pkg/rpx_now-0.5.11.gem
48
+ - rdoc/README.rdoc
46
49
  - rpx_now.gemspec
47
50
  - spec/fixtures/get_contacts_response.json
48
51
  - spec/rpx_now/contacts_collection_spec.rb
52
+ - spec/rpx_now/request_spec.rb
49
53
  - spec/rpx_now/user_proxy_spec.rb
50
54
  - spec/rpx_now_spec.rb
51
55
  - spec/spec_helper.rb
@@ -81,4 +85,5 @@ test_files:
81
85
  - spec/rpx_now_spec.rb
82
86
  - spec/rpx_now/contacts_collection_spec.rb
83
87
  - spec/rpx_now/user_proxy_spec.rb
88
+ - spec/rpx_now/request_spec.rb
84
89
  - spec/spec_helper.rb