rpx_now 0.5.11 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 0.6.0
2
+ -----
3
+ * removed optional api key as parameter: RPXNow.user_data(token, api_key, options) --> RPXNow.user_data(token, options), you may use :apiKey=>... instead
4
+
1
5
  0.5.9
2
6
  -----
3
7
  * Switched from Get to Post requests
data/README.markdown CHANGED
@@ -109,7 +109,8 @@ Author
109
109
  - [Amunds](http://github.com/Amunds)
110
110
  - [DBA](http://github.com/DBA)
111
111
  - [dbalatero](http://github.com/dbalatero)
112
- - [jackdempsey](http://jackndempsey.blogspot.com/)
112
+ - [jackdempsey](http://jackndempsey.blogspot.com)
113
+ - [Patrick Reagan (reagent)](http://sneaq.net)
113
114
 
114
115
  [Michael Grosser](http://pragmatig.wordpress.com)
115
116
  grosser.michael@gmail.com
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.11
1
+ 0.6.1
data/lib/rpx_now.rb CHANGED
@@ -14,79 +14,63 @@ module RPXNow
14
14
  attr_accessor :api_version
15
15
  self.api_version = 2
16
16
 
17
+ VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
18
+
17
19
  # retrieve the users data
18
20
  # - cleaned Hash
19
21
  # - complete/unclean response when block was given user_data{|response| ...; return hash }
20
22
  # - nil when token was invalid / data was not found
21
- def user_data(token, *args)
22
- api_key, version, options = extract_key_version_and_options!(args)
23
- options = {:token=>token,:apiKey=>api_key}.merge options
24
-
23
+ def user_data(token, options={})
25
24
  begin
26
- data = secure_json_post("/api/v#{version}/auth_info", options)
25
+ data = Request.post("auth_info", options.merge(:token => token))
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/
29
29
  raise
30
30
  end
31
- if block_given? then yield(data) else parse_user_data(data) end
32
31
  end
33
32
 
34
33
  # set the users status
35
- def set_status(identifier, status, *args)
36
- api_key, version, options = extract_key_version_and_options!(args)
37
- options = {:identifier => identifier, :status => status, :apiKey => api_key}.merge options
38
-
39
- begin
40
- data = secure_json_post("/api/v#{version}/set_status", options)
41
- rescue ServerError
42
- return nil if $!.to_s=~/Data not found/
43
- raise
44
- end
34
+ def set_status(identifier, status, options={})
35
+ options = options.merge(:identifier => identifier, :status => status)
36
+ data = Request.post("set_status", options)
37
+ rescue ServerError
38
+ return nil if $!.to_s=~/Data not found/
39
+ raise
45
40
  end
46
41
 
47
42
  # maps an identifier to an primary-key (e.g. user.id)
48
- def map(identifier, primary_key, *args)
49
- api_key, version, options = extract_key_version_and_options!(args)
50
- options = {:identifier=>identifier,:primaryKey=>primary_key,:apiKey=>api_key}.merge options
51
- secure_json_post("/api/v#{version}/map", options)
43
+ def map(identifier, primary_key, options={})
44
+ Request.post("map", options.merge(:identifier => identifier, :primaryKey => primary_key))
52
45
  end
53
46
 
54
47
  # un-maps an identifier to an primary-key (e.g. user.id)
55
- def unmap(identifier, primary_key, *args)
56
- api_key, version, options = extract_key_version_and_options!(args)
57
- options = {:identifier=>identifier,:primaryKey=>primary_key,:apiKey=>api_key}.merge options
58
- secure_json_post("/api/v#{version}/unmap", options)
48
+ def unmap(identifier, primary_key, options={})
49
+ Request.post("unmap", options.merge(:identifier => identifier, :primaryKey => primary_key))
59
50
  end
60
51
 
61
52
  # returns an array of identifiers which are mapped to one of your primary-keys (e.g. user.id)
62
- def mappings(primary_key, *args)
63
- api_key, version, options = extract_key_version_and_options!(args)
64
- options = {:primaryKey=>primary_key,:apiKey=>api_key}.merge options
65
- data = secure_json_post("/api/v#{version}/mappings", options)
66
- data['identifiers']
53
+ def mappings(primary_key, options={})
54
+ Request.post("mappings", options.merge(:primaryKey => primary_key))['identifiers']
67
55
  end
68
56
 
69
- def all_mappings(*args)
70
- api_key, version, options = extract_key_version_and_options!(args)
71
- data = secure_json_post("/api/v#{version}/all_mappings", {:apiKey => api_key}.merge(options))
72
- data['mappings']
57
+ def all_mappings(options={})
58
+ Request.post("all_mappings", options)['mappings']
73
59
  end
74
60
 
75
- def contacts(identifier, *args)
76
- api_key, version, options = extract_key_version_and_options!(args)
77
- options = {:apiKey => api_key, :identifier=> identifier}.merge(options)
78
- data = secure_json_post("/api/v#{version}/get_contacts", options)
61
+ def contacts(identifier, options={})
62
+ data = Request.post("get_contacts", options.merge(:identifier => identifier))
79
63
  RPXNow::ContactsCollection.new(data['response'])
80
64
  end
81
65
  alias get_contacts contacts
82
66
 
83
67
  def embed_code(subdomain,url,options={})
84
68
  options = {:width => '400', :height => '240', :language => 'en'}.merge(options)
85
- <<EOF
86
- <iframe src="https://#{subdomain}.#{Request::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
87
- scrolling="no" frameBorder="no" style="width:#{options[:width]}px;height:#{options[:height]}px;">
88
- </iframe>
89
- EOF
69
+ <<-EOF
70
+ <iframe src="https://#{subdomain}.#{Request::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
71
+ scrolling="no" frameBorder="no" style="width:#{options[:width]}px;height:#{options[:height]}px;">
72
+ </iframe>
73
+ EOF
90
74
  end
91
75
 
92
76
  def popup_code(text, subdomain, url, options = {})
@@ -97,6 +81,10 @@ EOF
97
81
  end
98
82
  end
99
83
 
84
+ def extract_version!(options)
85
+ options.delete(:api_version) || api_version
86
+ end
87
+
100
88
  private
101
89
 
102
90
  def self.parse_user_data(response)
@@ -117,49 +105,21 @@ EOF
117
105
 
118
106
  def obtrusive_popup_code(text, subdomain, url, options = {})
119
107
  version = extract_version! options
120
- <<EOF
121
- <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}">
122
- #{text}
123
- </a>
124
- <script src="https://#{Request::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
125
- <script type="text/javascript">
126
- //<![CDATA[
127
- RPXNOW.token_url = "#{url}";
128
-
129
- RPXNOW.realm = "#{subdomain}";
130
- RPXNOW.overlay = true;
131
- RPXNOW.language_preference = '#{options[:language]||'en'}';
132
- //]]>
133
- </script>
134
- EOF
135
- end
136
-
137
- def extract_key_version_and_options!(args)
138
- key, options = extract_key_and_options(args)
139
- version = extract_version! options
140
- [key, version, options]
141
- end
142
-
143
- # [API_KEY,{options}] or
144
- # [{options}] or
145
- # []
146
- def extract_key_and_options(args)
147
- if args.length == 2
148
- [args[0],args[1]]
149
- elsif args.length==1
150
- if args[0].is_a? Hash then [@api_key,args[0]] else [args[0],{}] end
151
- else
152
- raise "NO Api Key found!" unless @api_key
153
- [@api_key,{}]
154
- end
155
- end
156
-
157
- def extract_version!(options)
158
- options.delete(:api_version) || api_version
159
- end
160
-
161
- def secure_json_post(path, data)
162
- Request.post(path, data)
108
+ <<-EOF
109
+ <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Request::HOST}/openid/v#{version}/signin?token_url=#{url}">
110
+ #{text}
111
+ </a>
112
+ <script src="https://#{Request::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
113
+ <script type="text/javascript">
114
+ //<![CDATA[
115
+ RPXNOW.token_url = "#{url}";
116
+
117
+ RPXNOW.realm = "#{subdomain}";
118
+ RPXNOW.overlay = true;
119
+ RPXNOW.language_preference = '#{options[:language]||'en'}';
120
+ //]]>
121
+ </script>
122
+ EOF
163
123
  end
164
124
 
165
125
  class ServerError < RuntimeError; end #backwards compatibility / catch all
@@ -1,4 +1,5 @@
1
1
  module RPXNow
2
+ # Makes returned contacts feel like a array
2
3
  class ContactsCollection < Array
3
4
  def initialize(list)
4
5
  @raw = list
@@ -3,8 +3,11 @@ module RPXNow
3
3
  HOST = 'rpxnow.com'
4
4
  SSL_CERT = File.join(File.dirname(__FILE__), '..', '..', 'certs', 'ssl_cert.pem')
5
5
 
6
- def self.post(path, data)
7
- parse_response(request(path,data))
6
+ def self.post(method, data)
7
+ version = RPXNow.extract_version! data
8
+ path = "/api/v#{version}/#{method}"
9
+ response = request(path, {:apiKey => RPXNow.api_key}.merge(data))
10
+ parse_response(response)
8
11
  end
9
12
 
10
13
  private
Binary file
data/rpx_now.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rpx_now}
8
- s.version = "0.5.11"
8
+ s.version = "0.6.1"
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"]
data/spec/rpx_now_spec.rb CHANGED
@@ -1,6 +1,11 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
3
  describe RPXNow do
4
+ def fake_response(replace={})
5
+ body = {'stat' => 'ok'}.merge(replace)
6
+ mock({:code => "200", :body => body.to_json})
7
+ end
8
+
4
9
  describe :api_key= do
5
10
  it "stores the api key, so i do not have to supply everytime" do
6
11
  RPXNow.api_key='XX'
@@ -79,14 +84,19 @@ describe RPXNow do
79
84
 
80
85
  describe :user_data do
81
86
  before do
82
- @response_body = %Q({"profile":{"verifiedEmail":"grosser.michael@googlemail.com","displayName":"Michael Grosser","preferredUsername":"grosser.michael","identifier":"https:\/\/www.google.com\/accounts\/o8\/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM","email":"grosser.michael@gmail.com"},"stat":"ok"})
87
+ @response_body = {
88
+ "profile" => {
89
+ "verifiedEmail" => "grosser.michael@googlemail.com",
90
+ "displayName" => "Michael Grosser",
91
+ "preferredUsername" => "grosser.michael",
92
+ "identifier" => "https:\/\/www.google.com\/accounts\/o8\/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM",
93
+ "email" => "grosser.michael@gmail.com"
94
+ }
95
+ }
96
+ @response = fake_response(@response_body)
83
97
  @fake_user_data = {'profile'=>{}}
84
98
  end
85
99
 
86
- def fake_response
87
- mock(:code=>"200",:body=>@response_body)
88
- end
89
-
90
100
  it "raises ApiError when used with an invalid token" do
91
101
  lambda{
92
102
  RPXNow.user_data('xxxx')
@@ -104,69 +114,58 @@ describe RPXNow do
104
114
  :identifier => 'https://www.google.com/accounts/o8/id?id=AItOawmaOlyYezg_WfbgP_qjaUyHjmqZD9qNIVM',
105
115
  :username => 'grosser.michael',
106
116
  }
107
- RPXNow::Request.should_receive(:request).and_return fake_response
117
+ RPXNow::Request.should_receive(:request).and_return @response
108
118
  RPXNow.user_data('').should == expected
109
119
  end
110
120
 
111
121
  it "adds a :id when primaryKey was returned" do
112
- @response_body.sub!(%Q("verifiedEmail"), %Q("primaryKey":"2","verifiedEmail"))
113
- RPXNow::Request.should_receive(:request).and_return fake_response
122
+ @response_body['profile']['primaryKey'] = "2"
123
+ response = fake_response(@response_body)
124
+ RPXNow::Request.should_receive(:request).and_return response
114
125
  RPXNow.user_data('')[:id].should == '2'
115
126
  end
116
127
 
117
128
  it "handles primaryKeys that are not numeric" do
118
- @response_body.sub!(%Q("verifiedEmail"), %Q("primaryKey":"dbalatero","verifiedEmail"))
119
- RPXNow::Request.should_receive(:request).and_return fake_response
129
+ @response_body['profile']['primaryKey'] = "dbalatero"
130
+ response = fake_response(@response_body)
131
+ RPXNow::Request.should_receive(:request).and_return response
120
132
  RPXNow.user_data('')[:id].should == 'dbalatero'
121
133
  end
122
134
 
123
135
  it "hands JSON response to supplied block" do
124
- RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
136
+ RPXNow::Request.should_receive(:request).and_return @response
125
137
  response = nil
126
138
  RPXNow.user_data(''){|data| response = data}
127
- response.should == {"x" => "1", "stat" => "ok"}
139
+ response.delete('stat') # dunno why it happens, but is not important...
140
+ response.should == @response_body
128
141
  end
129
142
 
130
143
  it "returns what the supplied block returned" do
131
- RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"x":"1","stat":"ok"}))
144
+ RPXNow::Request.should_receive(:request).and_return @response
132
145
  RPXNow.user_data(''){|data| "x"}.should == 'x'
133
146
  end
134
147
 
135
148
  it "can send additional parameters" do
136
149
  RPXNow::Request.should_receive(:request).with{|url,data|
137
150
  data[:extended].should == 'true'
138
- }.and_return fake_response
151
+ }.and_return @response
139
152
  RPXNow.user_data('',:extended=>'true')
140
153
  end
141
154
 
142
- it "works with api key as 2nd parameter (backwards compatibility)" do
143
- RPXNow.should_receive(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :token=>'id').and_return @fake_user_data
144
- RPXNow.user_data('id', 'THE KEY')
145
- RPXNow.api_key.should == API_KEY
155
+ 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
157
+ RPXNow.user_data('id', :extended=>'abc', :api_version=>123)
158
+ RPXNow.api_version.should == API_VERSION
146
159
  end
147
160
 
148
- it "works with api key as 2nd parameter and options (backwards compatibility)" do
149
- RPXNow.should_receive(:secure_json_post).with('/api/v2/auth_info', :apiKey=>'THE KEY', :extended=>'abc', :token=>'id' ).and_return @fake_user_data
150
- RPXNow.user_data('id', 'THE KEY', :extended=>'abc')
161
+ 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
163
+ RPXNow.user_data('id', :extended=>'abc', :apiKey=>'THE KEY')
151
164
  RPXNow.api_key.should == API_KEY
152
165
  end
153
-
154
- it "works with api version as option (backwards compatibility)" do
155
- RPXNow.should_receive(:secure_json_post).with('/api/v123/auth_info', :apiKey=>API_KEY, :token=>'id', :extended=>'abc').and_return @fake_user_data
156
- RPXNow.user_data('id', :extended=>'abc', :api_version=>123)
157
- RPXNow.api_version.should == API_VERSION
158
- end
159
166
  end
160
167
 
161
168
  describe :set_status do
162
- before do
163
- @response_body = %Q({ "stat": "ok" })
164
- end
165
-
166
- def fake_response
167
- mock(:code=>"200",:body=>@response_body)
168
- end
169
-
170
169
  it "parses JSON response to result hash" do
171
170
  RPXNow::Request.should_receive(:request).and_return fake_response
172
171
  RPXNow.set_status('identifier', 'Chillen...').should == {'stat' => 'ok'}
@@ -185,34 +184,35 @@ describe RPXNow do
185
184
 
186
185
  describe :contacts do
187
186
  it "finds all contacts" do
188
- response = JSON.parse(File.read('spec/fixtures/get_contacts_response.json'))
189
- RPXNow.should_receive(:secure_json_post).with('/api/v2/get_contacts',:identifier=>'xx', :apiKey=>API_KEY).and_return response
187
+ 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
190
189
  RPXNow.contacts('xx').size.should == 5
191
190
  end
192
191
  end
193
192
 
194
193
  describe :mappings do
195
194
  it "parses JSON response to unmap data" do
196
- RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok", "identifiers": ["http://test.myopenid.com/"]}))
197
- RPXNow.mappings(1, "x").should == ["http://test.myopenid.com/"]
195
+
196
+ RPXNow::Request.should_receive(:request).and_return fake_response("identifiers" => ["http://test.myopenid.com/"])
197
+ RPXNow.mappings(1).should == ["http://test.myopenid.com/"]
198
198
  end
199
199
  end
200
200
 
201
201
  describe :map do
202
202
  it "adds a mapping" do
203
- RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok"}))
204
- RPXNow.map('http://test.myopenid.com',1, API_KEY)
203
+ RPXNow::Request.should_receive(:request).and_return fake_response
204
+ RPXNow.map('http://test.myopenid.com',1)
205
205
  end
206
206
  end
207
207
 
208
208
  describe :unmap do
209
209
  it "unmaps a indentifier" do
210
- RPXNow::Request.should_receive(:request).and_return mock(:code=>'200',:body=>%Q({"stat":"ok"}))
211
- RPXNow.unmap('http://test.myopenid.com', 1, "x")
210
+ RPXNow::Request.should_receive(:request).and_return fake_response
211
+ RPXNow.unmap('http://test.myopenid.com', 1)
212
212
  end
213
213
 
214
214
  it "can be called with a specific version" do
215
- RPXNow.should_receive(:secure_json_post).with{|a,b|a == "/api/v300/unmap"}
215
+ RPXNow::Request.should_receive(:request).with{|a,b|a == "/api/v300/unmap"}.and_return fake_response
216
216
  RPXNow.unmap('http://test.myopenid.com', 1, :api_key=>'xxx', :api_version=>300)
217
217
  end
218
218
  end
@@ -253,4 +253,8 @@ describe RPXNow do
253
253
  RPXNow.all_mappings.sort.should == [["1", ["http://test.myopenid.com"]], ["2", ["http://test-2.myopenid.com"]]]
254
254
  end
255
255
  end
256
+
257
+ it "has a VERSION" do
258
+ RPXNow::VERSION.should =~ /^\d+\.\d+\.\d+$/
259
+ end
256
260
  end
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.11
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser