rpx_now 0.6.1 → 0.6.4

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.
@@ -0,0 +1,5 @@
1
+ Manifest
2
+ pkg
3
+ .*.swp
4
+ .*.swo
5
+ *.autotest
@@ -111,6 +111,7 @@ Author
111
111
  - [dbalatero](http://github.com/dbalatero)
112
112
  - [jackdempsey](http://jackndempsey.blogspot.com)
113
113
  - [Patrick Reagan (reagent)](http://sneaq.net)
114
+ - [Joris Trooster (trooster)](http://www.interstroom.nl)
114
115
 
115
116
  [Michael Grosser](http://pragmatig.wordpress.com)
116
117
  grosser.michael@gmail.com
data/Rakefile CHANGED
@@ -18,8 +18,7 @@ begin
18
18
  gem.email = "grosser.michael@gmail.com"
19
19
  gem.homepage = "http://github.com/grosser/#{project_name}"
20
20
  gem.authors = ["Michael Grosser"]
21
- gem.add_dependency ['activesupport']
22
- gem.files = ['**/*']
21
+ gem.add_dependency ['json']
23
22
  gem.rubyforge_project = 'rpx-now'
24
23
  end
25
24
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.6.4
@@ -2,7 +2,7 @@ require 'net/http'
2
2
  require 'net/https'
3
3
  require 'json'
4
4
 
5
- require 'rpx_now/request'
5
+ require 'rpx_now/api'
6
6
  require 'rpx_now/contacts_collection'
7
7
  require 'rpx_now/user_integration'
8
8
  require 'rpx_now/user_proxy'
@@ -22,7 +22,7 @@ module RPXNow
22
22
  # - nil when token was invalid / data was not found
23
23
  def user_data(token, options={})
24
24
  begin
25
- data = Request.post("auth_info", options.merge(:token => token))
25
+ data = Api.call("auth_info", options.merge(:token => token))
26
26
  if block_given? then yield(data) else parse_user_data(data) end
27
27
  rescue ServerError
28
28
  return nil if $!.to_s=~/Data not found/
@@ -33,7 +33,7 @@ module RPXNow
33
33
  # set the users status
34
34
  def set_status(identifier, status, options={})
35
35
  options = options.merge(:identifier => identifier, :status => status)
36
- data = Request.post("set_status", options)
36
+ data = Api.call("set_status", options)
37
37
  rescue ServerError
38
38
  return nil if $!.to_s=~/Data not found/
39
39
  raise
@@ -41,25 +41,25 @@ module RPXNow
41
41
 
42
42
  # maps an identifier to an primary-key (e.g. user.id)
43
43
  def map(identifier, primary_key, options={})
44
- Request.post("map", options.merge(:identifier => identifier, :primaryKey => primary_key))
44
+ Api.call("map", options.merge(:identifier => identifier, :primaryKey => primary_key))
45
45
  end
46
46
 
47
47
  # un-maps an identifier to an primary-key (e.g. user.id)
48
48
  def unmap(identifier, primary_key, options={})
49
- Request.post("unmap", options.merge(:identifier => identifier, :primaryKey => primary_key))
49
+ Api.call("unmap", options.merge(:identifier => identifier, :primaryKey => primary_key))
50
50
  end
51
51
 
52
52
  # returns an array of identifiers which are mapped to one of your primary-keys (e.g. user.id)
53
53
  def mappings(primary_key, options={})
54
- Request.post("mappings", options.merge(:primaryKey => primary_key))['identifiers']
54
+ Api.call("mappings", options.merge(:primaryKey => primary_key))['identifiers']
55
55
  end
56
56
 
57
57
  def all_mappings(options={})
58
- Request.post("all_mappings", options)['mappings']
58
+ Api.call("all_mappings", options)['mappings']
59
59
  end
60
60
 
61
61
  def contacts(identifier, options={})
62
- data = Request.post("get_contacts", options.merge(:identifier => identifier))
62
+ data = Api.call("get_contacts", options.merge(:identifier => identifier))
63
63
  RPXNow::ContactsCollection.new(data['response'])
64
64
  end
65
65
  alias get_contacts contacts
@@ -67,13 +67,15 @@ module RPXNow
67
67
  def embed_code(subdomain,url,options={})
68
68
  options = {:width => '400', :height => '240', :language => 'en'}.merge(options)
69
69
  <<-EOF
70
- <iframe src="https://#{subdomain}.#{Request::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
70
+ <iframe src="https://#{subdomain}.#{Api::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
71
71
  scrolling="no" frameBorder="no" style="width:#{options[:width]}px;height:#{options[:height]}px;">
72
72
  </iframe>
73
73
  EOF
74
74
  end
75
75
 
76
76
  def popup_code(text, subdomain, url, options = {})
77
+ options = options.dup
78
+ options[:language] ||= 'en'
77
79
  if options[:unobtrusive]
78
80
  unobtrusive_popup_code(text, subdomain, url, options)
79
81
  else
@@ -100,23 +102,23 @@ module RPXNow
100
102
 
101
103
  def unobtrusive_popup_code(text, subdomain, url, options={})
102
104
  version = extract_version! options
103
- "<a class=\"rpxnow\" href=\"https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}\">#{text}</a>"
105
+ %Q(<a class="rpxnow" href="https://#{subdomain}.#{Api::HOST}/openid/v#{version}/signin?token_url=#{url}&language_preference=#{options[:language]}">#{text}</a>)
104
106
  end
105
107
 
106
108
  def obtrusive_popup_code(text, subdomain, url, options = {})
107
109
  version = extract_version! options
108
110
  <<-EOF
109
- <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}">
111
+ <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Api::HOST}/openid/v#{version}/signin?token_url=#{url}">
110
112
  #{text}
111
113
  </a>
112
- <script src="https://#{Request::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
114
+ <script src="https://#{Api::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
113
115
  <script type="text/javascript">
114
116
  //<![CDATA[
115
117
  RPXNOW.token_url = "#{url}";
116
118
 
117
119
  RPXNOW.realm = "#{subdomain}";
118
120
  RPXNOW.overlay = true;
119
- RPXNOW.language_preference = '#{options[:language]||'en'}';
121
+ RPXNOW.language_preference = '#{options[:language]}';
120
122
  //]]>
121
123
  </script>
122
124
  EOF
@@ -1,9 +1,13 @@
1
1
  module RPXNow
2
- class Request
2
+ # low-level interaction with rpxnow.com api
3
+ # - send requests
4
+ # - parse response
5
+ # - handle server errors
6
+ class Api
3
7
  HOST = 'rpxnow.com'
4
8
  SSL_CERT = File.join(File.dirname(__FILE__), '..', '..', 'certs', 'ssl_cert.pem')
5
9
 
6
- def self.post(method, data)
10
+ def self.call(method, data)
7
11
  version = RPXNow.extract_version! data
8
12
  path = "/api/v#{version}/#{method}"
9
13
  response = request(path, {:apiKey => RPXNow.api_key}.merge(data))
@@ -13,18 +17,29 @@ module RPXNow
13
17
  private
14
18
 
15
19
  def self.request(path, data)
20
+ client.request(request_object(path, data))
21
+ end
22
+
23
+ def self.request_object(path, data)
16
24
  request = Net::HTTP::Post.new(path)
17
- 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
18
- make_request(request)
25
+ request.form_data = stringify_keys(data)
26
+ request
27
+ end
28
+
29
+ # symbol keys -> string keys
30
+ # because of ruby 1.9.x bug in Net::HTTP
31
+ # http://redmine.ruby-lang.org/issues/show/1351
32
+ def self.stringify_keys(hash)
33
+ hash.map{|k,v| [k.to_s,v]}
19
34
  end
20
35
 
21
- def self.make_request(request)
22
- http = Net::HTTP.new(HOST, 443)
23
- http.use_ssl = true
24
- http.ca_file = SSL_CERT
25
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
26
- http.verify_depth = 5
27
- http.request(request)
36
+ def self.client
37
+ client = Net::HTTP.new(HOST, 443)
38
+ client.use_ssl = true
39
+ client.ca_file = SSL_CERT
40
+ client.verify_mode = OpenSSL::SSL::VERIFY_PEER
41
+ client.verify_depth = 5
42
+ client
28
43
  end
29
44
 
30
45
  def self.parse_response(response)
@@ -5,17 +5,18 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rpx_now}
8
- s.version = "0.6.1"
8
+ s.version = "0.6.4"
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-07}
12
+ s.date = %q{2009-10-09}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.markdown"
16
16
  ]
17
17
  s.files = [
18
- "CHANGELOG",
18
+ ".gitignore",
19
+ "CHANGELOG",
19
20
  "MIGRATION",
20
21
  "README.markdown",
21
22
  "Rakefile",
@@ -23,17 +24,16 @@ Gem::Specification.new do |s|
23
24
  "certs/ssl_cert.pem",
24
25
  "init.rb",
25
26
  "lib/rpx_now.rb",
27
+ "lib/rpx_now/api.rb",
26
28
  "lib/rpx_now/contacts_collection.rb",
27
- "lib/rpx_now/request.rb",
28
29
  "lib/rpx_now/user_integration.rb",
29
30
  "lib/rpx_now/user_proxy.rb",
30
- "pkg/rpx_now-0.5.10.gem",
31
- "pkg/rpx_now-0.5.11.gem",
32
31
  "rdoc/README.rdoc",
33
32
  "rpx_now.gemspec",
34
33
  "spec/fixtures/get_contacts_response.json",
34
+ "spec/integration/mapping_spec.rb",
35
+ "spec/rpx_now/api_spec.rb",
35
36
  "spec/rpx_now/contacts_collection_spec.rb",
36
- "spec/rpx_now/request_spec.rb",
37
37
  "spec/rpx_now/user_proxy_spec.rb",
38
38
  "spec/rpx_now_spec.rb",
39
39
  "spec/spec_helper.rb"
@@ -48,8 +48,9 @@ Gem::Specification.new do |s|
48
48
  "spec/rpx_now_spec.rb",
49
49
  "spec/rpx_now/contacts_collection_spec.rb",
50
50
  "spec/rpx_now/user_proxy_spec.rb",
51
- "spec/rpx_now/request_spec.rb",
52
- "spec/spec_helper.rb"
51
+ "spec/rpx_now/api_spec.rb",
52
+ "spec/spec_helper.rb",
53
+ "spec/integration/mapping_spec.rb"
53
54
  ]
54
55
 
55
56
  if s.respond_to? :specification_version then
@@ -57,11 +58,11 @@ Gem::Specification.new do |s|
57
58
  s.specification_version = 3
58
59
 
59
60
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
60
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
61
+ s.add_runtime_dependency(%q<json>, [">= 0"])
61
62
  else
62
- s.add_dependency(%q<activesupport>, [">= 0"])
63
+ s.add_dependency(%q<json>, [">= 0"])
63
64
  end
64
65
  else
65
- s.add_dependency(%q<activesupport>, [">= 0"])
66
+ s.add_dependency(%q<json>, [">= 0"])
66
67
  end
67
68
  end
@@ -0,0 +1,40 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe RPXNow do
4
+ describe :mapping_integration do
5
+ before do
6
+ @k1 = 'http://test.myopenid.com'
7
+ RPXNow.unmap(@k1, 1)
8
+ @k2 = 'http://test-2.myopenid.com'
9
+ RPXNow.unmap(@k2, 1)
10
+ end
11
+
12
+ it "has no mappings when nothing was mapped" do
13
+ RPXNow.mappings(1).should == []
14
+ end
15
+
16
+ it "unmaps mapped keys" do
17
+ RPXNow.map(@k2, 1)
18
+ RPXNow.unmap(@k2, 1)
19
+ RPXNow.mappings(1).should == []
20
+ end
21
+
22
+ it "maps keys to a primary key and then retrieves them" do
23
+ RPXNow.map(@k1, 1)
24
+ RPXNow.map(@k2, 1)
25
+ RPXNow.mappings(1).sort.should == [@k2,@k1]
26
+ end
27
+
28
+ it "does not add duplicate mappings" do
29
+ RPXNow.map(@k1, 1)
30
+ RPXNow.map(@k1, 1)
31
+ RPXNow.mappings(1).should == [@k1]
32
+ end
33
+
34
+ it "finds all mappings" do
35
+ RPXNow.map(@k1, 1)
36
+ RPXNow.map(@k2, 2)
37
+ RPXNow.all_mappings.sort.should == [["1", ["http://test.myopenid.com"]], ["2", ["http://test-2.myopenid.com"]]]
38
+ end
39
+ end
40
+ end
@@ -1,41 +1,50 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
- describe RPXNow::Request do
3
+ describe RPXNow::Api do
4
4
  describe 'ssl cert' do
5
5
  it "has an absolute path" do
6
- RPXNow::Request::SSL_CERT[0..0].should == '/' #start with '/'
6
+ RPXNow::Api::SSL_CERT[0..0].should == '/' #start with '/'
7
7
  end
8
8
 
9
9
  it "exists" do
10
- File.read(RPXNow::Request::SSL_CERT).to_s.should_not be_empty
10
+ File.read(RPXNow::Api::SSL_CERT).to_s.should_not be_empty
11
11
  end
12
12
  end
13
13
 
14
14
  describe :parse_response do
15
15
  it "parses json when status is ok" do
16
16
  response = mock(:code=>'200', :body=>%Q({"stat":"ok","data":"xx"}))
17
- RPXNow::Request.send(:parse_response, response)['data'].should == "xx"
17
+ RPXNow::Api.send(:parse_response, response)['data'].should == "xx"
18
18
  end
19
19
 
20
20
  it "raises when there is a communication error" do
21
21
  response = stub(:code=>'200', :body=>%Q({"err":"wtf","stat":"ok"}))
22
22
  lambda{
23
- RPXNow::Request.send(:parse_response,response)
23
+ RPXNow::Api.send(:parse_response,response)
24
24
  }.should raise_error(RPXNow::ApiError)
25
25
  end
26
26
 
27
27
  it "raises when service has downtime" do
28
28
  response = stub(:code=>'200', :body=>%Q({"err":{"code":-1},"stat":"ok"}))
29
29
  lambda{
30
- RPXNow::Request.send(:parse_response,response)
30
+ RPXNow::Api.send(:parse_response,response)
31
31
  }.should raise_error(RPXNow::ServiceUnavailableError)
32
32
  end
33
33
 
34
34
  it "raises when service is down" do
35
35
  response = stub(:code=>'400',:body=>%Q({"stat":"err"}))
36
36
  lambda{
37
- RPXNow::Request.send(:parse_response,response)
37
+ RPXNow::Api.send(:parse_response,response)
38
38
  }.should raise_error(RPXNow::ServiceUnavailableError)
39
39
  end
40
40
  end
41
+
42
+ describe :request_object do
43
+ it "converts symbols to string keys" do
44
+ mock = ''
45
+ mock.should_receive(:form_data=).with([['symbol', 'value']])
46
+ Net::HTTP::Post.should_receive(:new).and_return(mock)
47
+ RPXNow::Api.send(:request_object, 'something', :symbol=>'value')
48
+ end
49
+ end
41
50
  end
@@ -9,23 +9,24 @@ class User
9
9
  end
10
10
 
11
11
  describe RPXNow::UserProxy do
12
- before do
13
- RPXNow.unmap('http://test.myopenid.com', 5)
12
+ before { @user = User.new }
13
+
14
+ it "has a proxy" do
15
+ @user.rpx.class.should == RPXNow::UserProxy
14
16
  end
15
17
 
16
18
  it "has identifiers" do
17
- RPXNow.map('http://test.myopenid.com', 5)
18
- User.new.rpx.identifiers.should == ['http://test.myopenid.com']
19
+ RPXNow.should_receive(:mappings).with(@user.id).and_return(['identifiers'])
20
+ @user.rpx.identifiers.should == ['identifiers']
19
21
  end
20
22
 
21
23
  it "can map" do
22
- User.new.rpx.map('http://test.myopenid.com')
23
- User.new.rpx.identifiers.should == ['http://test.myopenid.com']
24
+ RPXNow.should_receive(:map).with('identifier', @user.id)
25
+ @user.rpx.map('identifier')
24
26
  end
25
27
 
26
28
  it "can unmap" do
27
- RPXNow.map('http://test.myopenid.com', 5)
28
- User.new.rpx.unmap('http://test.myopenid.com')
29
- User.new.rpx.identifiers.should == []
29
+ RPXNow.should_receive(:unmap).with('identifier', @user.id)
30
+ @user.rpx.unmap('identifier')
30
31
  end
31
32
  end
@@ -7,17 +7,63 @@ describe RPXNow do
7
7
  end
8
8
 
9
9
  describe :api_key= do
10
- it "stores the api key, so i do not have to supply everytime" do
10
+ before do
11
11
  RPXNow.api_key='XX'
12
- RPXNow::Request.should_receive(:request).with{|x,data|data[:apiKey]=='XX'}.and_return mock(:code=>'200', :body=>%Q({"stat":"ok"}))
12
+ end
13
+
14
+ it "is stored" do
15
+ RPXNow.api_key.should == 'XX'
16
+ end
17
+
18
+ it "stores the api key, so i do not have to supply everytime" do
19
+ RPXNow::Api.should_receive(:request).
20
+ with(anything, hash_including(:apiKey => 'XX')).
21
+ and_return fake_response
13
22
  RPXNow.mappings(1)
14
23
  end
24
+
25
+ it "is not overwritten when overwriting for a single request" do
26
+ RPXNow::Api.should_receive(:request).
27
+ with(anything, hash_including(:apiKey => 'YY')).
28
+ and_return fake_response
29
+ RPXNow.mappings(1, :apiKey => 'YY')
30
+ RPXNow.api_key.should == 'XX'
31
+ end
15
32
  end
16
33
 
17
34
  describe :api_version= do
18
- it "can be set to a api_version globally" do
19
- RPXNow.api_version = 5
20
- RPXNow.popup_code('x','y','z').should =~ %r(/openid/v5/signin)
35
+ it "is 2 by default" do
36
+ RPXNow.api_version.should == 2
37
+ end
38
+
39
+ it "is stored" do
40
+ RPXNow.api_version='XX'
41
+ RPXNow.api_version.should == 'XX'
42
+ end
43
+
44
+ it "used for every request" do
45
+ RPXNow.api_version='XX'
46
+ RPXNow::Api.should_receive(:request).
47
+ with('/api/vXX/mappings', anything).
48
+ and_return fake_response
49
+ RPXNow.mappings(1)
50
+ end
51
+
52
+ it "is not overwritten when overwriting for a single request" do
53
+ RPXNow.api_version='XX'
54
+ RPXNow::Api.should_receive(:request).
55
+ with('/api/vYY/mappings', anything).
56
+ and_return fake_response
57
+ RPXNow.mappings(1, :api_version => 'YY')
58
+ RPXNow.api_version.should == 'XX'
59
+ end
60
+
61
+ it "is not passed in data for request" do
62
+ RPXNow.api_version='XX'
63
+ RPXNow::Api.should_receive(:request).
64
+ with(anything, hash_not_including(:api_version => 'YY')).
65
+ and_return fake_response
66
+ RPXNow.mappings(1, :api_version => 'YY')
21
67
  end
22
68
  end
23
69
 
@@ -59,12 +105,29 @@ describe RPXNow do
59
105
  it "defaults to obtrusive output" do
60
106
  RPXNow.popup_code('sign on', 'subdomain', 'http://fake.domain.com/').should =~ /script src=/
61
107
  end
62
-
63
- it "can build an unobtrusive widget with specific version" do
64
- expected = %Q(<a class="rpxnow" href="https://subdomain.rpxnow.com/openid/v300/signin?token_url=http://fake.domain.com/">sign on</a>)
65
- RPXNow.popup_code('sign on', 'subdomain', 'http://fake.domain.com/', { :unobtrusive => true, :api_version => 300 }).should == expected
108
+
109
+ it "does not change supplied options" do
110
+ options = {:xxx => 1}
111
+ RPXNow.popup_code('a','b','c', options)
112
+ options.should == {:xxx => 1}
66
113
  end
67
-
114
+
115
+ describe 'unobstrusive' do
116
+ it "can build an unobtrusive widget" do
117
+ expected = %Q(<a class="rpxnow" href="https://subdomain.rpxnow.com/openid/v2/signin?token_url=http://fake.domain.com/&language_preference=en">sign on</a>)
118
+ actual = RPXNow.popup_code('sign on', 'subdomain', 'http://fake.domain.com/', :unobtrusive => true)
119
+ expected.should == actual
120
+ end
121
+
122
+ it "can change api version" do
123
+ RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :api_version => 'XX').should include("openid/vXX/signin?")
124
+ end
125
+
126
+ it "can change language" do
127
+ RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :language => 'XX').should include("&language_preference=XX")
128
+ end
129
+ end
130
+
68
131
  it "allows to specify the version of the widget" do
69
132
  RPXNow.popup_code('x','y','z', :api_version => 300).should =~ %r(/openid/v300/signin)
70
133
  end
@@ -114,26 +177,26 @@ describe RPXNow do
114
177
  :identifier => 'https://www.google.com/accounts/o8/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM',
115
178
  :username => 'grosser.michael',
116
179
  }
117
- RPXNow::Request.should_receive(:request).and_return @response
180
+ RPXNow::Api.should_receive(:request).and_return @response
118
181
  RPXNow.user_data('').should == expected
119
182
  end
120
183
 
121
184
  it "adds a :id when primaryKey was returned" do
122
185
  @response_body['profile']['primaryKey'] = "2"
123
186
  response = fake_response(@response_body)
124
- RPXNow::Request.should_receive(:request).and_return response
187
+ RPXNow::Api.should_receive(:request).and_return response
125
188
  RPXNow.user_data('')[:id].should == '2'
126
189
  end
127
190
 
128
191
  it "handles primaryKeys that are not numeric" do
129
192
  @response_body['profile']['primaryKey'] = "dbalatero"
130
193
  response = fake_response(@response_body)
131
- RPXNow::Request.should_receive(:request).and_return response
194
+ RPXNow::Api.should_receive(:request).and_return response
132
195
  RPXNow.user_data('')[:id].should == 'dbalatero'
133
196
  end
134
197
 
135
198
  it "hands JSON response to supplied block" do
136
- RPXNow::Request.should_receive(:request).and_return @response
199
+ RPXNow::Api.should_receive(:request).and_return @response
137
200
  response = nil
138
201
  RPXNow.user_data(''){|data| response = data}
139
202
  response.delete('stat') # dunno why it happens, but is not important...
@@ -141,34 +204,42 @@ describe RPXNow do
141
204
  end
142
205
 
143
206
  it "returns what the supplied block returned" do
144
- RPXNow::Request.should_receive(:request).and_return @response
207
+ RPXNow::Api.should_receive(:request).and_return @response
145
208
  RPXNow.user_data(''){|data| "x"}.should == 'x'
146
209
  end
147
210
 
148
211
  it "can send additional parameters" do
149
- RPXNow::Request.should_receive(:request).with{|url,data|
150
- data[:extended].should == 'true'
151
- }.and_return @response
212
+ RPXNow::Api.should_receive(:request).
213
+ with(anything, hash_including(:extended => 'true')).
214
+ and_return @response
152
215
  RPXNow.user_data('',:extended=>'true')
153
216
  end
154
217
 
218
+ # these 2 tests are kind of duplicates of the api_version/key tests,
219
+ # but i want to be extra-sure user_data works
155
220
  it "works with api version as option" do
156
- RPXNow::Request.should_receive(:request).with('/api/v123/auth_info', :apiKey=>API_KEY, :token=>'id', :extended=>'abc').and_return @response
221
+ RPXNow::Api.should_receive(:request).
222
+ with('/api/v123/auth_info', anything).
223
+ and_return @response
157
224
  RPXNow.user_data('id', :extended=>'abc', :api_version=>123)
158
225
  RPXNow.api_version.should == API_VERSION
159
226
  end
160
227
 
161
228
  it "works with apiKey as option" do
162
- RPXNow::Request.should_receive(:request).with('/api/v2/auth_info', :apiKey=>'THE KEY', :token=>'id', :extended=>'abc').and_return @response
229
+ RPXNow::Api.should_receive(:request).
230
+ with('/api/v2/auth_info', hash_including(:apiKey=>'THE KEY')).
231
+ and_return @response
163
232
  RPXNow.user_data('id', :extended=>'abc', :apiKey=>'THE KEY')
164
233
  RPXNow.api_key.should == API_KEY
165
234
  end
166
235
  end
167
236
 
168
237
  describe :set_status do
169
- it "parses JSON response to result hash" do
170
- RPXNow::Request.should_receive(:request).and_return fake_response
171
- RPXNow.set_status('identifier', 'Chillen...').should == {'stat' => 'ok'}
238
+ it "sets the status" do
239
+ RPXNow::Api.should_receive(:request).
240
+ with("/api/v2/set_status", :identifier=>"identifier", :status=>"Chillen...", :apiKey=>API_KEY).
241
+ and_return fake_response
242
+ RPXNow.set_status('identifier', 'Chillen...')
172
243
  end
173
244
  end
174
245
 
@@ -185,73 +256,38 @@ describe RPXNow do
185
256
  describe :contacts do
186
257
  it "finds all contacts" do
187
258
  response = fake_response(JSON.parse(File.read('spec/fixtures/get_contacts_response.json')))
188
- RPXNow::Request.should_receive(:request).with('/api/v2/get_contacts',:identifier=>'xx', :apiKey=>API_KEY).and_return response
259
+ RPXNow::Api.should_receive(:request).
260
+ with('/api/v2/get_contacts',:identifier=>'xx', :apiKey=>API_KEY).
261
+ and_return response
189
262
  RPXNow.contacts('xx').size.should == 5
190
263
  end
191
264
  end
192
265
 
193
266
  describe :mappings do
194
- it "parses JSON response to unmap data" do
195
-
196
- RPXNow::Request.should_receive(:request).and_return fake_response("identifiers" => ["http://test.myopenid.com/"])
267
+ it "shows all mappings" do
268
+ RPXNow::Api.should_receive(:request).
269
+ with("/api/v2/mappings", :apiKey=>API_KEY, :primaryKey=>1).
270
+ and_return fake_response("identifiers" => ["http://test.myopenid.com/"])
197
271
  RPXNow.mappings(1).should == ["http://test.myopenid.com/"]
198
272
  end
199
273
  end
200
274
 
201
275
  describe :map do
202
- it "adds a mapping" do
203
- RPXNow::Request.should_receive(:request).and_return fake_response
276
+ it "maps a identifier" do
277
+ RPXNow::Api.should_receive(:request).
278
+ with("/api/v2/map", :apiKey=>API_KEY, :primaryKey=>1, :identifier=>"http://test.myopenid.com").
279
+ and_return fake_response
204
280
  RPXNow.map('http://test.myopenid.com',1)
205
281
  end
206
282
  end
207
283
 
208
284
  describe :unmap do
209
285
  it "unmaps a indentifier" do
210
- RPXNow::Request.should_receive(:request).and_return fake_response
286
+ RPXNow::Api.should_receive(:request).
287
+ with("/api/v2/unmap", :apiKey=>API_KEY, :primaryKey=>1, :identifier=>"http://test.myopenid.com").
288
+ and_return fake_response
211
289
  RPXNow.unmap('http://test.myopenid.com', 1)
212
290
  end
213
-
214
- it "can be called with a specific version" do
215
- RPXNow::Request.should_receive(:request).with{|a,b|a == "/api/v300/unmap"}.and_return fake_response
216
- RPXNow.unmap('http://test.myopenid.com', 1, :api_key=>'xxx', :api_version=>300)
217
- end
218
- end
219
-
220
- describe :mapping_integration do
221
- before do
222
- @k1 = 'http://test.myopenid.com'
223
- RPXNow.unmap(@k1, 1)
224
- @k2 = 'http://test-2.myopenid.com'
225
- RPXNow.unmap(@k2, 1)
226
- end
227
-
228
- it "has no mappings when nothing was mapped" do
229
- RPXNow.mappings(1).should == []
230
- end
231
-
232
- it "unmaps mapped keys" do
233
- RPXNow.map(@k2, 1)
234
- RPXNow.unmap(@k2, 1)
235
- RPXNow.mappings(1).should == []
236
- end
237
-
238
- it "maps keys to a primary key and then retrieves them" do
239
- RPXNow.map(@k1, 1)
240
- RPXNow.map(@k2, 1)
241
- RPXNow.mappings(1).sort.should == [@k2,@k1]
242
- end
243
-
244
- it "does not add duplicate mappings" do
245
- RPXNow.map(@k1, 1)
246
- RPXNow.map(@k1, 1)
247
- RPXNow.mappings(1).should == [@k1]
248
- end
249
-
250
- it "finds all mappings" do
251
- RPXNow.map(@k1, 1)
252
- RPXNow.map(@k2, 2)
253
- RPXNow.all_mappings.sort.should == [["1", ["http://test.myopenid.com"]], ["2", ["http://test-2.myopenid.com"]]]
254
- end
255
291
  end
256
292
 
257
293
  it "has a VERSION" do
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.6.1
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-07 00:00:00 +02:00
12
+ date: 2009-10-09 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: activesupport
16
+ name: json
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,6 +31,7 @@ extensions: []
31
31
  extra_rdoc_files:
32
32
  - README.markdown
33
33
  files:
34
+ - .gitignore
34
35
  - CHANGELOG
35
36
  - MIGRATION
36
37
  - README.markdown
@@ -39,17 +40,16 @@ files:
39
40
  - certs/ssl_cert.pem
40
41
  - init.rb
41
42
  - lib/rpx_now.rb
43
+ - lib/rpx_now/api.rb
42
44
  - lib/rpx_now/contacts_collection.rb
43
- - lib/rpx_now/request.rb
44
45
  - lib/rpx_now/user_integration.rb
45
46
  - lib/rpx_now/user_proxy.rb
46
- - pkg/rpx_now-0.5.10.gem
47
- - pkg/rpx_now-0.5.11.gem
48
47
  - rdoc/README.rdoc
49
48
  - rpx_now.gemspec
50
49
  - spec/fixtures/get_contacts_response.json
50
+ - spec/integration/mapping_spec.rb
51
+ - spec/rpx_now/api_spec.rb
51
52
  - spec/rpx_now/contacts_collection_spec.rb
52
- - spec/rpx_now/request_spec.rb
53
53
  - spec/rpx_now/user_proxy_spec.rb
54
54
  - spec/rpx_now_spec.rb
55
55
  - spec/spec_helper.rb
@@ -85,5 +85,6 @@ test_files:
85
85
  - spec/rpx_now_spec.rb
86
86
  - spec/rpx_now/contacts_collection_spec.rb
87
87
  - spec/rpx_now/user_proxy_spec.rb
88
- - spec/rpx_now/request_spec.rb
88
+ - spec/rpx_now/api_spec.rb
89
89
  - spec/spec_helper.rb
90
+ - spec/integration/mapping_spec.rb
Binary file
Binary file