fleakr 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +31 -0
- data/Rakefile +20 -5
- data/lib/fleakr.rb +21 -0
- data/lib/fleakr/objects/contact.rb +11 -3
- data/lib/fleakr/objects/photo.rb +2 -0
- data/lib/fleakr/version.rb +1 -1
- data/test/fixtures/contacts.getList.xml +7 -0
- data/test/unit/fleakr/objects/contact_test.rb +33 -10
- data/test/unit/fleakr/objects/photo_test.rb +13 -12
- data/test/unit/fleakr_test.rb +15 -0
- metadata +11 -20
data/README.rdoc
CHANGED
@@ -89,7 +89,28 @@ When accessing a set, you can also grab all the photos that are in that set:
|
|
89
89
|
=> #<Fleakr::Objects::Photo:0x1140108 ... >
|
90
90
|
>> user.sets.first.photos.first.title
|
91
91
|
=> "Untitled1"
|
92
|
+
|
93
|
+
=== Contacts
|
94
|
+
|
95
|
+
Besides pulling back a given user's public contacts list, you can also retrieve the list of
|
96
|
+
contacts for the currently authenticated user (see below about authentication). For example,
|
97
|
+
you can retrieve all contacts:
|
98
|
+
|
99
|
+
>> Fleakr.contacts
|
100
|
+
=> [#<Fleakr::Objects::Contact:0x111ff84 @username="bryan.ray" ...>]
|
101
|
+
|
102
|
+
Or just the contacts marked as 'family':
|
103
|
+
|
104
|
+
>> Fleakr.contacts(:family)
|
105
|
+
=> [#<Fleakr::Objects::Contact:0x12db42c @username="Grandbob" ...>]
|
106
|
+
|
107
|
+
Or a specific page of contacts marked as 'friends':
|
92
108
|
|
109
|
+
>> Fleakr.contacts(:friends, :page => 3, :per_page => 5)
|
110
|
+
=> [#<Fleakr::Objects::Contact:0x12a6c54 @username="Louise and BCG" ...>]
|
111
|
+
|
112
|
+
See the documentation for Fleakr.contacts for what options are available.
|
113
|
+
|
93
114
|
=== Photos
|
94
115
|
|
95
116
|
Each photo object contains metadata about a collection of images, each representing different
|
@@ -306,6 +327,16 @@ just the requests you need to tune the log level:
|
|
306
327
|
Even if something doesn't go wrong, this is a good way to get a sense for when you're making
|
307
328
|
API requests.
|
308
329
|
|
330
|
+
== Contributors
|
331
|
+
|
332
|
+
While Fleakr started as a labor of love for me, I'm glad that others have been interested
|
333
|
+
in this project enough to contribute their ideas and code:
|
334
|
+
|
335
|
+
* {John Guenin}[http://github.com/johng]
|
336
|
+
* {Thomas Olausson}[http://github.com/latompa]
|
337
|
+
|
338
|
+
Thanks!
|
339
|
+
|
309
340
|
== Roadmap / TODO
|
310
341
|
|
311
342
|
=== 0.4.x
|
data/Rakefile
CHANGED
@@ -4,8 +4,6 @@ require 'rake/testtask'
|
|
4
4
|
|
5
5
|
require 'lib/fleakr/version'
|
6
6
|
|
7
|
-
task :default => :test
|
8
|
-
|
9
7
|
spec = Gem::Specification.new do |s|
|
10
8
|
s.name = 'fleakr'
|
11
9
|
s.version = Fleakr::Version.to_s
|
@@ -18,9 +16,9 @@ spec = Gem::Specification.new do |s|
|
|
18
16
|
s.homepage = 'http://sneaq.net'
|
19
17
|
s.files = %w(README.rdoc Rakefile) + Dir.glob("{lib,test}/**/*")
|
20
18
|
|
21
|
-
s.add_dependency('hpricot', '
|
22
|
-
s.add_dependency('activesupport', '
|
23
|
-
s.add_dependency('loggable', '
|
19
|
+
s.add_dependency('hpricot', '>= 0.6.164')
|
20
|
+
s.add_dependency('activesupport', '>= 2.0')
|
21
|
+
s.add_dependency('loggable', '>= 0.2.0')
|
24
22
|
end
|
25
23
|
|
26
24
|
Rake::GemPackageTask.new(spec) do |pkg|
|
@@ -33,6 +31,23 @@ Rake::TestTask.new do |t|
|
|
33
31
|
t.verbose = true
|
34
32
|
end
|
35
33
|
|
34
|
+
begin
|
35
|
+
require 'rcov/rcovtask'
|
36
|
+
|
37
|
+
Rcov::RcovTask.new(:coverage) do |t|
|
38
|
+
t.libs = ['test']
|
39
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
40
|
+
t.verbose = true
|
41
|
+
t.rcov_opts = ['--text-report', "-x #{Gem.path}", '-x /Library/Ruby', '-x /usr/lib/ruby']
|
42
|
+
end
|
43
|
+
|
44
|
+
task :default => :coverage
|
45
|
+
|
46
|
+
rescue LoadError
|
47
|
+
warn "\n**** Install rcov (sudo gem install relevance-rcov) to get coverage stats ****\n"
|
48
|
+
task :default => :test
|
49
|
+
end
|
50
|
+
|
36
51
|
desc 'Generate the gemspec to serve this Gem from Github'
|
37
52
|
task :github do
|
38
53
|
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
data/lib/fleakr.rb
CHANGED
@@ -130,6 +130,27 @@ module Fleakr
|
|
130
130
|
def self.upload(glob, options = {})
|
131
131
|
Dir[glob].map {|file| Fleakr::Objects::Photo.upload(file, options) }
|
132
132
|
end
|
133
|
+
|
134
|
+
# Get all contacts for the currently authenticated user. The provided contact type can be
|
135
|
+
# one of the following:
|
136
|
+
#
|
137
|
+
# [:friends] Only contacts who are friends (and not family)
|
138
|
+
# [:family] Only contacts who are family (and not friends)
|
139
|
+
# [:both] Only contacts who are both friends and family
|
140
|
+
# [:neither] Only contacts who are neither friends nor family
|
141
|
+
#
|
142
|
+
# Additional parameters supported are:
|
143
|
+
#
|
144
|
+
# [:page] The page of results to return
|
145
|
+
# [:per_page] The number of contacts to retrieve per page
|
146
|
+
#
|
147
|
+
def self.contacts(contact_type = nil, additional_options = {})
|
148
|
+
options = {}
|
149
|
+
options.merge!(:filter => contact_type) unless contact_type.nil?
|
150
|
+
options.merge!(additional_options)
|
151
|
+
|
152
|
+
Fleakr::Objects::Contact.find_all(options)
|
153
|
+
end
|
133
154
|
|
134
155
|
# Get the authentication token needed for authenticated requests. Will either use
|
135
156
|
# a valid auth_token (if available) or a mini-token to generate the auth_token.
|
@@ -5,18 +5,26 @@ module Fleakr
|
|
5
5
|
include Fleakr::Support::Object
|
6
6
|
|
7
7
|
flickr_attribute :id, :from => '@nsid'
|
8
|
-
flickr_attribute :username
|
8
|
+
flickr_attribute :username, :location
|
9
|
+
flickr_attribute :name, :from => '@realname'
|
9
10
|
flickr_attribute :icon_server, :from => '@iconserver'
|
10
11
|
flickr_attribute :icon_farm, :from => '@iconfarm'
|
11
12
|
|
12
13
|
# Retrieve a list of contacts for the specified user ID and return an initialized
|
13
|
-
# collection of
|
14
|
+
# collection of User objects
|
14
15
|
def self.find_all_by_user_id(user_id)
|
15
16
|
response = Fleakr::Api::MethodRequest.with_response!('contacts.getPublicList', :user_id => user_id)
|
16
17
|
(response.body/'contacts/contact').map {|c| Contact.new(c).to_user }
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
# Retrieve a list of contacts for the currently authenticated user
|
21
|
+
def self.find_all(params = {})
|
22
|
+
response = Fleakr::Api::MethodRequest.with_response!('contacts.getList', params)
|
23
|
+
(response.body/'contacts/contact').map {|c| Contact.new(c) }
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO: deprecate in favor of shared behavior as a module
|
27
|
+
def to_user # :nodoc:
|
20
28
|
user = User.new
|
21
29
|
self.class.attributes.each do |attribute|
|
22
30
|
attribute_name = attribute.name
|
data/lib/fleakr/objects/photo.rb
CHANGED
@@ -12,6 +12,7 @@ module Fleakr
|
|
12
12
|
# [title] The title of this photo
|
13
13
|
# [description] The description of this photo
|
14
14
|
# [secret] This photo's secret (used for sharing photo without permissions checking)
|
15
|
+
# [original_secret] This photo's original secret
|
15
16
|
# [comment_count] Count of the comments attached to this photo
|
16
17
|
# [url] This photo's page on Flickr
|
17
18
|
# [square] The tiny square representation of this photo
|
@@ -46,6 +47,7 @@ module Fleakr
|
|
46
47
|
flickr_attribute :owner_id, :from => ['@owner', 'owner@nsid']
|
47
48
|
flickr_attribute :updated, :from => '@lastupdate'
|
48
49
|
flickr_attribute :comment_count, :from => 'comments'
|
50
|
+
flickr_attribute :original_secret, :from => '@originalsecret'
|
49
51
|
|
50
52
|
# TODO:
|
51
53
|
# * visibility
|
data/lib/fleakr/version.rb
CHANGED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<contacts page="1" pages="1" per_page="1000" perpage="1000" total="17">
|
4
|
+
<contact nsid="9302864@N42" username="blinky" iconserver="2263" iconfarm="3" ignored="0" realname="Mr Blinky" location="Middletown"/>
|
5
|
+
<contact nsid="63204625@N20" username="inky" iconserver="53" iconfarm="1" ignored="0" />
|
6
|
+
</contacts>
|
7
|
+
</rsp>
|
@@ -6,26 +6,34 @@ module Fleakr::Objects
|
|
6
6
|
context "The Contact class" do
|
7
7
|
|
8
8
|
should "return a list of users for a specified user's contacts" do
|
9
|
-
|
10
|
-
|
11
|
-
user_2 = stub()
|
12
|
-
|
9
|
+
user_1, user_2 = stub(), stub()
|
10
|
+
|
13
11
|
contact_1, contact_2 = [stub(:to_user => user_1), stub(:to_user => user_2)]
|
14
|
-
|
12
|
+
|
15
13
|
response = mock_request_cycle :for => 'contacts.getPublicList', :with => {:user_id => '1'}
|
16
|
-
|
14
|
+
|
17
15
|
contact_1_doc, contact_2_doc = (response.body/'rsp/contacts/contact').to_a
|
18
|
-
|
16
|
+
|
19
17
|
Contact.stubs(:new).with(contact_1_doc).returns(contact_1)
|
20
18
|
Contact.stubs(:new).with(contact_2_doc).returns(contact_2)
|
21
|
-
|
19
|
+
|
22
20
|
Contact.find_all_by_user_id('1').should == [user_1, user_2]
|
23
21
|
end
|
24
22
|
|
23
|
+
should "return a list of users for an authenticated user" do
|
24
|
+
response = mock_request_cycle :for => 'contacts.getList', :with => {}
|
25
|
+
contact_1, contact_2 = [stub("contact"), stub('contact')]
|
26
|
+
contact_1_doc, contact_2_doc = (response.body/'rsp/contacts/contact').to_a
|
27
|
+
|
28
|
+
Contact.stubs(:new).with(contact_1_doc).returns(@contact_1)
|
29
|
+
Contact.stubs(:new).with(contact_2_doc).returns(@contact_2)
|
30
|
+
Contact.find_all.should == [@user_1, @user_2]
|
31
|
+
end
|
32
|
+
|
25
33
|
end
|
26
34
|
|
27
35
|
context "An instance of the Contact class" do
|
28
|
-
context "when populating from an XML document" do
|
36
|
+
context "when populating from an XML document with public contacts" do
|
29
37
|
setup do
|
30
38
|
@object = Contact.new(Hpricot.XML(read_fixture('contacts.getPublicList')).at('contacts/contact'))
|
31
39
|
end
|
@@ -36,6 +44,21 @@ module Fleakr::Objects
|
|
36
44
|
should_have_a_value_for :icon_farm => '3'
|
37
45
|
|
38
46
|
end
|
47
|
+
|
48
|
+
context "when populating from an XML document with authenticated user's contacts" do
|
49
|
+
setup do
|
50
|
+
@object = Contact.new(Hpricot.XML(read_fixture('contacts.getList')).at('contacts/contact'))
|
51
|
+
end
|
52
|
+
|
53
|
+
should_have_a_value_for :id => '9302864@N42'
|
54
|
+
should_have_a_value_for :username => 'blinky'
|
55
|
+
should_have_a_value_for :icon_server => '2263'
|
56
|
+
should_have_a_value_for :icon_farm => '3'
|
57
|
+
should_have_a_value_for :name => 'Mr Blinky'
|
58
|
+
should_have_a_value_for :location => 'Middletown'
|
59
|
+
|
60
|
+
end
|
61
|
+
|
39
62
|
|
40
63
|
context "in general" do
|
41
64
|
|
@@ -45,7 +68,7 @@ module Fleakr::Objects
|
|
45
68
|
|
46
69
|
User.stubs(:new).returns(user)
|
47
70
|
|
48
|
-
[:id, :username, :icon_server, :icon_farm].each do |method|
|
71
|
+
[:id, :username, :icon_server, :icon_farm, :name, :location].each do |method|
|
49
72
|
contact.stubs(method).with().returns(method.to_s)
|
50
73
|
user.expects("#{method}=".to_sym).with(method.to_s)
|
51
74
|
end
|
@@ -90,18 +90,19 @@ module Fleakr::Objects
|
|
90
90
|
|
91
91
|
end
|
92
92
|
|
93
|
-
should_have_a_value_for :id
|
94
|
-
should_have_a_value_for :title
|
95
|
-
should_have_a_value_for :description
|
96
|
-
should_have_a_value_for :farm_id
|
97
|
-
should_have_a_value_for :server_id
|
98
|
-
should_have_a_value_for :owner_id
|
99
|
-
should_have_a_value_for :secret
|
100
|
-
should_have_a_value_for :
|
101
|
-
should_have_a_value_for :
|
102
|
-
should_have_a_value_for :
|
103
|
-
should_have_a_value_for :
|
104
|
-
should_have_a_value_for :
|
93
|
+
should_have_a_value_for :id => '1'
|
94
|
+
should_have_a_value_for :title => 'Tree'
|
95
|
+
should_have_a_value_for :description => 'A Tree'
|
96
|
+
should_have_a_value_for :farm_id => '4'
|
97
|
+
should_have_a_value_for :server_id => '3085'
|
98
|
+
should_have_a_value_for :owner_id => '31066442@N69'
|
99
|
+
should_have_a_value_for :secret => 'secret'
|
100
|
+
should_have_a_value_for :original_secret => 'sekrit'
|
101
|
+
should_have_a_value_for :posted => '1230274722'
|
102
|
+
should_have_a_value_for :taken => '2008-12-25 18:26:55'
|
103
|
+
should_have_a_value_for :updated => '1230276652'
|
104
|
+
should_have_a_value_for :comment_count => '0'
|
105
|
+
should_have_a_value_for :url => 'http://www.flickr.com/photos/yes/1'
|
105
106
|
|
106
107
|
end
|
107
108
|
|
data/test/unit/fleakr_test.rb
CHANGED
@@ -29,6 +29,21 @@ class FleakrTest < Test::Unit::TestCase
|
|
29
29
|
Fleakr.user(email).should == user
|
30
30
|
end
|
31
31
|
|
32
|
+
should "find all contacts for the authenticated user" do
|
33
|
+
Fleakr::Objects::Contact.expects(:find_all).with({}).returns('contacts')
|
34
|
+
Fleakr.contacts.should == 'contacts'
|
35
|
+
end
|
36
|
+
|
37
|
+
should "allow filtering when finding contacts for the authenticated user" do
|
38
|
+
Fleakr::Objects::Contact.expects(:find_all).with(:filter => :friends).returns('contacts')
|
39
|
+
Fleakr.contacts(:friends).should == 'contacts'
|
40
|
+
end
|
41
|
+
|
42
|
+
should "allow passing of additional parameters when finding contacts for the authenticated user" do
|
43
|
+
Fleakr::Objects::Contact.expects(:find_all).with(:filter => :friends, :page => 1).returns('contacts')
|
44
|
+
Fleakr.contacts(:friends, :page => 1).should == 'contacts'
|
45
|
+
end
|
46
|
+
|
32
47
|
should "be able to perform text searches" do
|
33
48
|
photos = [stub()]
|
34
49
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fleakr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Reagan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-21 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -18,9 +18,9 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.
|
23
|
+
version: 0.6.164
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: "2.0"
|
34
34
|
version:
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
version_requirement:
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 0.2.0
|
44
44
|
version:
|
@@ -53,8 +53,6 @@ extra_rdoc_files:
|
|
53
53
|
files:
|
54
54
|
- README.rdoc
|
55
55
|
- Rakefile
|
56
|
-
- lib/fleakr
|
57
|
-
- lib/fleakr/api
|
58
56
|
- lib/fleakr/api/file_parameter.rb
|
59
57
|
- lib/fleakr/api/method_request.rb
|
60
58
|
- lib/fleakr/api/option.rb
|
@@ -64,12 +62,10 @@ files:
|
|
64
62
|
- lib/fleakr/api/upload_request.rb
|
65
63
|
- lib/fleakr/api/value_parameter.rb
|
66
64
|
- lib/fleakr/api.rb
|
67
|
-
- lib/fleakr/core_ext
|
68
65
|
- lib/fleakr/core_ext/false_class.rb
|
69
66
|
- lib/fleakr/core_ext/hash.rb
|
70
67
|
- lib/fleakr/core_ext/true_class.rb
|
71
68
|
- lib/fleakr/core_ext.rb
|
72
|
-
- lib/fleakr/objects
|
73
69
|
- lib/fleakr/objects/authentication_token.rb
|
74
70
|
- lib/fleakr/objects/comment.rb
|
75
71
|
- lib/fleakr/objects/contact.rb
|
@@ -83,16 +79,15 @@ files:
|
|
83
79
|
- lib/fleakr/objects/tag.rb
|
84
80
|
- lib/fleakr/objects/user.rb
|
85
81
|
- lib/fleakr/objects.rb
|
86
|
-
- lib/fleakr/support
|
87
82
|
- lib/fleakr/support/attribute.rb
|
88
83
|
- lib/fleakr/support/object.rb
|
89
84
|
- lib/fleakr/support.rb
|
90
85
|
- lib/fleakr/version.rb
|
91
86
|
- lib/fleakr.rb
|
92
|
-
- test/fixtures
|
93
87
|
- test/fixtures/auth.checkToken.xml
|
94
88
|
- test/fixtures/auth.getFullToken.xml
|
95
89
|
- test/fixtures/auth.getToken.xml
|
90
|
+
- test/fixtures/contacts.getList.xml
|
96
91
|
- test/fixtures/contacts.getPublicList.xml
|
97
92
|
- test/fixtures/groups.pools.getPhotos.xml
|
98
93
|
- test/fixtures/people.findByEmail.xml
|
@@ -112,9 +107,6 @@ files:
|
|
112
107
|
- test/fixtures/tags.getListUser.xml
|
113
108
|
- test/fixtures/tags.getRelated.xml
|
114
109
|
- test/test_helper.rb
|
115
|
-
- test/unit
|
116
|
-
- test/unit/fleakr
|
117
|
-
- test/unit/fleakr/api
|
118
110
|
- test/unit/fleakr/api/file_parameter_test.rb
|
119
111
|
- test/unit/fleakr/api/method_request_test.rb
|
120
112
|
- test/unit/fleakr/api/option_test.rb
|
@@ -123,11 +115,9 @@ files:
|
|
123
115
|
- test/unit/fleakr/api/response_test.rb
|
124
116
|
- test/unit/fleakr/api/upload_request_test.rb
|
125
117
|
- test/unit/fleakr/api/value_parameter_test.rb
|
126
|
-
- test/unit/fleakr/core_ext
|
127
118
|
- test/unit/fleakr/core_ext/false_class_test.rb
|
128
119
|
- test/unit/fleakr/core_ext/hash_test.rb
|
129
120
|
- test/unit/fleakr/core_ext/true_class_test.rb
|
130
|
-
- test/unit/fleakr/objects
|
131
121
|
- test/unit/fleakr/objects/authentication_token_test.rb
|
132
122
|
- test/unit/fleakr/objects/comment_test.rb
|
133
123
|
- test/unit/fleakr/objects/contact_test.rb
|
@@ -140,12 +130,13 @@ files:
|
|
140
130
|
- test/unit/fleakr/objects/set_test.rb
|
141
131
|
- test/unit/fleakr/objects/tag_test.rb
|
142
132
|
- test/unit/fleakr/objects/user_test.rb
|
143
|
-
- test/unit/fleakr/support
|
144
133
|
- test/unit/fleakr/support/attribute_test.rb
|
145
134
|
- test/unit/fleakr/support/object_test.rb
|
146
135
|
- test/unit/fleakr_test.rb
|
147
136
|
has_rdoc: true
|
148
137
|
homepage: http://sneaq.net
|
138
|
+
licenses: []
|
139
|
+
|
149
140
|
post_install_message:
|
150
141
|
rdoc_options:
|
151
142
|
- --main
|
@@ -167,9 +158,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
158
|
requirements: []
|
168
159
|
|
169
160
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.3.
|
161
|
+
rubygems_version: 1.3.4
|
171
162
|
signing_key:
|
172
|
-
specification_version:
|
163
|
+
specification_version: 3
|
173
164
|
summary: A small, yet powerful, gem to interface with Flickr photostreams
|
174
165
|
test_files: []
|
175
166
|
|