pingfm 2.1.0 → 2.1.2
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.
- data/Gemfile.lock +1 -1
- data/lib/pingfm.rb +1 -1
- data/lib/pingfm/client.rb +48 -5
- data/lib/pingfm/config.rb +2 -0
- data/spec/pingfm/client_spec.rb +34 -0
- data/spec/spec_helper.rb +39 -1
- metadata +5 -5
data/Gemfile.lock
CHANGED
data/lib/pingfm.rb
CHANGED
data/lib/pingfm/client.rb
CHANGED
@@ -2,6 +2,7 @@ require 'net/http'
|
|
2
2
|
require 'rexml/document' # TODO: Rewrite this to use something faster (Nokogiri, possibly).
|
3
3
|
|
4
4
|
module Pingfm
|
5
|
+
# TODO: The status_ok and status_fail methods need a little thought.
|
5
6
|
class Client
|
6
7
|
|
7
8
|
# The registered API key for the Ping.fm Ruby library client.
|
@@ -22,7 +23,7 @@ module Pingfm
|
|
22
23
|
#
|
23
24
|
# Optional arguments:
|
24
25
|
# [limit] Limit the results returned; default is 25.
|
25
|
-
# [order]
|
26
|
+
# [order] Which direction to order the returned results by date; default is 'DESC'.
|
26
27
|
#
|
27
28
|
# If successful returns:
|
28
29
|
# {'status' => 'OK', 'messages' => [{'id' => 'messageid', 'method' => 'messsagemethod', 'rfc' => 'date', 'unix' => 'date', 'title' => 'messagetitle', 'body' => 'messagebody', 'services' => [{'id' => 'serviceid', 'name' => 'servicename'}, ...]}, ...]}
|
@@ -62,6 +63,37 @@ module Pingfm
|
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
66
|
+
# Returns the last +limit+ number of links the user has shortened and posted through Ping.fm.
|
67
|
+
#
|
68
|
+
# Optional arguments:
|
69
|
+
# [limit] Limit the results returned; default is 25.
|
70
|
+
# [order] The sort order of the results; default is 'DESC'.
|
71
|
+
#
|
72
|
+
# If successful returns:
|
73
|
+
# {'status' => 'OK', 'links' => [{ 'short' => 'http://ping.fm/}, ...]}
|
74
|
+
def links(limit = 25, order = 'DESC')
|
75
|
+
response = get_response('user.links', 'limit' => limit, 'order' => order)
|
76
|
+
if response.elements['rsp'].attributes['status'] == 'OK'
|
77
|
+
links = []
|
78
|
+
response.elements.each('rsp/links/link') do |link|
|
79
|
+
links << {
|
80
|
+
'date' => link.elements['date'].attributes['rfc'],
|
81
|
+
'short' => link.elements['short'].text,
|
82
|
+
'long' => link.elements['long'].text,
|
83
|
+
}
|
84
|
+
end
|
85
|
+
status_ok('links' => links)
|
86
|
+
else
|
87
|
+
status_fail(response)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def url_create
|
92
|
+
end
|
93
|
+
|
94
|
+
def url_resolve
|
95
|
+
end
|
96
|
+
|
65
97
|
# Posts a message to the user's Ping.fm services.
|
66
98
|
#
|
67
99
|
# Arguments:
|
@@ -99,7 +131,7 @@ module Pingfm
|
|
99
131
|
def services
|
100
132
|
response = get_response('user.services')
|
101
133
|
if response.elements['rsp'].attributes['status'] == 'OK'
|
102
|
-
services = status_ok
|
134
|
+
services = status_ok
|
103
135
|
services['services'] = []
|
104
136
|
response.elements.each('rsp/services/service') do |service|
|
105
137
|
services['services'].push({'id' => service.attributes['id'],
|
@@ -188,6 +220,17 @@ module Pingfm
|
|
188
220
|
end
|
189
221
|
end
|
190
222
|
|
223
|
+
# Returns the full user app key from the provided <tt>mobile_key</tt>.
|
224
|
+
def user_key(mobile_key)
|
225
|
+
response = get_response('user.key', 'mobile_key' => mobile_key)
|
226
|
+
if response.elements['rsp'].attributes['status'] == 'OK'
|
227
|
+
app_key = response.elements['rsp'].elements['key'].text
|
228
|
+
status_ok('app_key' => app_key)
|
229
|
+
else
|
230
|
+
status_fail(response)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
191
234
|
# Validates the API key and user APP key.
|
192
235
|
#
|
193
236
|
# If successful returns:
|
@@ -221,13 +264,13 @@ module Pingfm
|
|
221
264
|
end
|
222
265
|
|
223
266
|
# Successful response.
|
224
|
-
def status_ok
|
225
|
-
return {'status' => 'OK'}
|
267
|
+
def status_ok(info = {})
|
268
|
+
return {'status' => 'OK'}.merge(info)
|
226
269
|
end
|
227
270
|
|
228
271
|
# Failed response.
|
229
272
|
def status_fail(response)
|
230
|
-
if response.elements.include?
|
273
|
+
if response.elements.include?('rsp/message')
|
231
274
|
message = response.elements['rsp/message'].text
|
232
275
|
else
|
233
276
|
message = "Unknown error from Ping.fm."
|
data/lib/pingfm/config.rb
CHANGED
data/spec/pingfm/client_spec.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
# TODO: These specs kinda suck.
|
4
|
+
|
3
5
|
describe Pingfm::Client do
|
4
6
|
it 'should have an API_URL' do
|
5
7
|
Pingfm::Client::API_URL.should_not be_nil
|
@@ -158,6 +160,38 @@ describe Pingfm::Client, "with expected results" do
|
|
158
160
|
result['status'].should eql('OK')
|
159
161
|
end
|
160
162
|
|
163
|
+
it "should get the user app key from the mobile_key" do
|
164
|
+
init_user_key_response
|
165
|
+
|
166
|
+
uri = URI.parse "#{Pingfm::Client::API_URL}/#{@service_type}"
|
167
|
+
@params.merge!('mobile_key' => @mobile_key)
|
168
|
+
|
169
|
+
http_resp = mock('response')
|
170
|
+
http_resp.should_receive(:body).and_return(@response)
|
171
|
+
Net::HTTP.should_receive(:post_form).with(uri, @params).and_return(http_resp)
|
172
|
+
|
173
|
+
result = @client.user_key(@mobile_key)
|
174
|
+
result.should_not be_empty
|
175
|
+
result['status'].should_not be_nil
|
176
|
+
result['app_key'].should == @app_key
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should get the user's links" do
|
180
|
+
init_user_links_response
|
181
|
+
|
182
|
+
uri = URI.parse "#{Pingfm::Client::API_URL}/#{@service_type}"
|
183
|
+
@params.merge!('limit' => 25, 'order' => 'DESC')
|
184
|
+
|
185
|
+
http_resp = mock('response')
|
186
|
+
http_resp.should_receive(:body).and_return(@response)
|
187
|
+
Net::HTTP.should_receive(:post_form).with(uri, @params).and_return(http_resp)
|
188
|
+
|
189
|
+
result = @client.links
|
190
|
+
result.should_not be_empty
|
191
|
+
result['status'].should_not be_nil
|
192
|
+
result['links'].should_not be_empty
|
193
|
+
end
|
194
|
+
|
161
195
|
end
|
162
196
|
|
163
197
|
describe Pingfm::Client, "with error messages" do
|
data/spec/spec_helper.rb
CHANGED
@@ -54,6 +54,7 @@ EOXML
|
|
54
54
|
def init_system_services_response
|
55
55
|
@service_type = 'system.services'
|
56
56
|
@response = <<EOXML
|
57
|
+
<?xml version="1.0"?>
|
57
58
|
<rsp status="OK">
|
58
59
|
<transaction>12345</transaction>
|
59
60
|
<method>system.services</method>
|
@@ -99,7 +100,7 @@ EOXML
|
|
99
100
|
def init_latest_response
|
100
101
|
@service_type = 'user.latest'
|
101
102
|
@response = <<EOXML
|
102
|
-
|
103
|
+
<?xml version="1.0"?>
|
103
104
|
<rsp status="OK">
|
104
105
|
<transaction>12345</transaction>
|
105
106
|
<method>user.latest</method>
|
@@ -136,6 +137,43 @@ EOXML
|
|
136
137
|
</message>
|
137
138
|
</messages>
|
138
139
|
</rsp>
|
140
|
+
EOXML
|
141
|
+
end
|
142
|
+
|
143
|
+
def init_user_links_response
|
144
|
+
@service_type = 'user.links'
|
145
|
+
@response = <<EOXML
|
146
|
+
<?xml version="1.0"?>
|
147
|
+
<rsp status="OK">
|
148
|
+
<transaction>12345</transaction>
|
149
|
+
<method>user.links</method>
|
150
|
+
<links>
|
151
|
+
<link>
|
152
|
+
<date rfc="Mon, 14 Sep 2009 01:53:12 -0500" unix="1252911192" />
|
153
|
+
<short>http://ping.fm/1souk</short>
|
154
|
+
<long>http://www.techcrunch.com/2009/09/13/intuit-to-acquire-former-techcrunch50-winner-mint-for-170-million/</long>
|
155
|
+
</link>
|
156
|
+
<link>
|
157
|
+
<date rfc="Mon, 14 Sep 2009 00:26:10 -0500" unix="1252905970" />
|
158
|
+
<short>http://ping.fm/U5azR</short>
|
159
|
+
<long>http://www.wired.com/wiredscience/2009/09/gallery_dinoauction/</long>
|
160
|
+
</link>
|
161
|
+
</links>
|
162
|
+
</rsp>
|
163
|
+
EOXML
|
164
|
+
end
|
165
|
+
|
166
|
+
def init_user_key_response
|
167
|
+
@service_type = 'user.key'
|
168
|
+
@app_key = 'USER_APP_KEY'
|
169
|
+
@mobile_key = 'MOBILE_KEY'
|
170
|
+
@response = <<EOXML
|
171
|
+
<?xml version="1.0"?>
|
172
|
+
<rsp status="OK">
|
173
|
+
<transaction>12345</transaction>
|
174
|
+
<method>user.key</method>
|
175
|
+
<key>#{@app_key}</key>
|
176
|
+
</rsp>
|
139
177
|
EOXML
|
140
178
|
end
|
141
179
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pingfm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,7 +15,7 @@ date: 2011-06-12 00:00:00.000000000Z
|
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: slop
|
18
|
-
requirement: &
|
18
|
+
requirement: &76732520 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *76732520
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
|
-
requirement: &
|
29
|
+
requirement: &76731170 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
version: 2.6.0
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *76731170
|
38
38
|
description: Ping.fm (http://ping.fm) is a simple service that makes updating your
|
39
39
|
social networks a snap, and this it's Ruby library.
|
40
40
|
email:
|