commonthread-flickr_fu 0.2.2 → 0.3.0

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.
Files changed (53) hide show
  1. data/.gitignore +13 -0
  2. data/Rakefile +40 -8
  3. data/VERSION.yml +4 -0
  4. data/flickr_fu.gemspec +114 -33
  5. data/lib/flickr/base.rb +49 -22
  6. data/lib/flickr/contact.rb +16 -0
  7. data/lib/flickr/contacts.rb +55 -0
  8. data/lib/flickr/geo.rb +42 -0
  9. data/lib/flickr/location.rb +15 -0
  10. data/lib/flickr/photo.rb +23 -0
  11. data/lib/flickr/photos.rb +6 -1
  12. data/lib/flickr/photoset.rb +36 -0
  13. data/lib/flickr/photosets.rb +36 -0
  14. data/lib/flickr/urls.rb +44 -0
  15. data/lib/flickr_fu.rb +23 -1
  16. data/spec/fixtures/flickr/contacts/get_list-fail-99.xml +4 -0
  17. data/spec/fixtures/flickr/contacts/get_public_list-0.xml +7 -0
  18. data/spec/fixtures/flickr/photos/geo/get_location-0.xml +11 -0
  19. data/spec/fixtures/flickr/photos/geo/get_location-fail-2.xml +4 -0
  20. data/spec/fixtures/flickr/photos/get_info-0.xml +41 -0
  21. data/spec/fixtures/flickr/photos/get_info-1.xml +19 -0
  22. data/spec/fixtures/flickr/photos/get_sizes-0.xml +10 -0
  23. data/spec/fixtures/flickr/photos/get_sizes-1.xml +8 -0
  24. data/spec/fixtures/flickr/photos/licenses/get_info.xml +12 -0
  25. data/spec/fixtures/flickr/photosets/get_list-0.xml +13 -0
  26. data/spec/fixtures/flickr/photosets/get_photos-0.xml +7 -0
  27. data/spec/fixtures/flickr/test/echo-0.xml +5 -0
  28. data/spec/fixtures/flickr/test/null-fail-99.xml +4 -0
  29. data/spec/fixtures/flickr/urls/get_group-0.xml +4 -0
  30. data/spec/fixtures/flickr/urls/get_group-fail-1.xml +4 -0
  31. data/spec/fixtures/flickr/urls/get_user_photos-0.xml +4 -0
  32. data/spec/fixtures/flickr/urls/get_user_photos-fail-1.xml +4 -0
  33. data/spec/fixtures/flickr/urls/get_user_photos-fail-2.xml +4 -0
  34. data/spec/fixtures/flickr/urls/get_user_profile-0.xml +4 -0
  35. data/spec/fixtures/flickr/urls/get_user_profile-fail-1.xml +4 -0
  36. data/spec/fixtures/flickr/urls/get_user_profile-fail-2.xml +4 -0
  37. data/spec/fixtures/flickr/urls/lookup_group-0.xml +6 -0
  38. data/spec/fixtures/flickr/urls/lookup_group-fail-1.xml +4 -0
  39. data/spec/fixtures/flickr/urls/lookup_user-0.xml +6 -0
  40. data/spec/fixtures/flickr/videos/get_info-0.xml +31 -0
  41. data/spec/fixtures/flickr/videos/get_sizes-0.xml +13 -0
  42. data/spec/flickr/base_spec.rb +97 -0
  43. data/spec/flickr/contacts_spec.rb +47 -0
  44. data/spec/flickr/errors_spec.rb +21 -0
  45. data/spec/flickr/geo_spec.rb +20 -0
  46. data/spec/flickr/photo_spec.rb +123 -0
  47. data/spec/flickr/photos_spec.rb +50 -0
  48. data/spec/flickr/photosets_spec.rb +49 -0
  49. data/spec/flickr/test_spec.rb +34 -0
  50. data/spec/flickr/urls_spec.rb +99 -0
  51. data/spec/spec.opts +4 -0
  52. data/spec/spec_helper.rb +20 -0
  53. metadata +65 -7
@@ -0,0 +1,13 @@
1
+ rdoc
2
+ .DS_Store
3
+ *.gem
4
+ demo*
5
+ *~
6
+ *.sw*
7
+ .specification
8
+ nbproject/
9
+ doc/rspec_report.html
10
+ doc/rspec_profile.txt
11
+ spec/spec.local.opts
12
+ coverage/
13
+ pkg/
data/Rakefile CHANGED
@@ -1,10 +1,35 @@
1
1
  require 'rake'
2
2
  require 'rake/rdoctask'
3
-
4
- desc 'Generate documentation for the contact_info plugin.'
3
+
4
+ # Gem building
5
+ begin
6
+ begin
7
+ require 'jeweler'
8
+ rescue LoadError
9
+ require 'rubygems'
10
+ require 'jeweler'
11
+ end
12
+ Jeweler::Tasks.new do |s|
13
+ s.name = "flickr_fu"
14
+ s.summary = "Provides a ruby interface to flickr via the REST api"
15
+ s.email = "ben@commonthread.com"
16
+ s.homepage = "http://github.com/commonthread/flickr_fu"
17
+ s.description = "Provides a ruby interface to flickr via the REST api"
18
+ s.authors = ["Ben Wyrosdick", "Maciej Bilas"]
19
+ s.rdoc_options = ["--main", "README"]
20
+ s.extra_rdoc_files = ["README"]
21
+ s.add_dependency("mime-types", ["> 0.0.0"])
22
+ s.add_dependency("xml-magic", ["> 0.0.0"])
23
+ s.files.exclude("spec/spec.local.opts")
24
+ end
25
+ rescue LoadError
26
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
27
+ end
28
+
29
+ desc 'Generate documentation for flickr_fu.'
5
30
  Rake::RDocTask.new(:rdoc) do |rdoc|
6
31
  rdoc.rdoc_dir = 'rdoc'
7
- rdoc.title = 'ruby-flickr'
32
+ rdoc.title = 'flickr_fu'
8
33
  rdoc.options << '--line-numbers' << '--inline-source'
9
34
  rdoc.rdoc_files.include('README')
10
35
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -29,13 +54,20 @@ end
29
54
 
30
55
  task :default => :spec
31
56
 
32
- desc "Run the specs under spec/models"
33
- Spec::Rake::SpecTask.new do |t|
57
+ spec_common = Proc.new do |t|
34
58
  t.spec_opts = ['--options', "spec/spec.opts"]
59
+ t.spec_opts << ['--options', "spec/spec.local.opts" ] if File.exist?(File.dirname(__FILE__) + "/spec/spec.local.opts")
35
60
  t.spec_files = FileList['spec/**/*_spec.rb']
36
61
  end
37
62
 
38
- desc "Run rcov"
39
- task :rcov do
40
- system "rcov spec/**/*.rb -x /var/lib -x spec/"
63
+ desc "Run the specs under spec/models"
64
+ Spec::Rake::SpecTask.new do |t|
65
+ spec_common.call(t)
66
+ end
67
+
68
+ desc "Analyze code coverage with tests"
69
+ Spec::Rake::SpecTask.new("rcov") do |t|
70
+ spec_common.call(t)
71
+ t.rcov = true
72
+ t.rcov_opts = ["-x", "/var/lib", "-x", "spec/", "-T"]
41
73
  end
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 3
4
+ :patch: 0
@@ -1,36 +1,117 @@
1
+ # -*- encoding: utf-8 -*-
2
+
1
3
  Gem::Specification.new do |s|
2
- s.name = "flickr_fu"
3
- s.version = "0.2.2"
4
- s.date = "2008-12-30"
5
- s.summary = "Provides a ruby interface to flickr via the REST api"
6
- s.email = "ben@commonthread.com"
7
- s.homepage = "http://github.com/commonthread/flickr_fu"
8
- s.description = "Provides a ruby interface to flickr via the REST api"
9
- s.has_rdoc = true
10
- s.authors = ["Ben Wyrosdick"]
11
- s.files = ["README",
12
- "LICENSE",
13
- "Rakefile",
14
- "flickr_fu.gemspec",
15
- "lib/flickr/auth.rb",
16
- "lib/flickr/base.rb",
17
- "lib/flickr/comment.rb",
18
- "lib/flickr/errors.rb",
19
- "lib/flickr/license.rb",
20
- "lib/flickr/note.rb",
21
- "lib/flickr/people.rb",
22
- "lib/flickr/person.rb",
23
- "lib/flickr/photo.rb",
24
- "lib/flickr/photo_response.rb",
25
- "lib/flickr/photos.rb",
26
- "lib/flickr/size.rb",
27
- "lib/flickr/status.rb",
28
- "lib/flickr/test.rb",
29
- "lib/flickr/token.rb",
30
- "lib/flickr/uploader.rb",
31
- "lib/flickr_fu.rb"]
4
+ s.name = %q{flickr_fu}
5
+ s.version = "0.3.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Ben Wyrosdick", "Maciej Bilas"]
9
+ s.date = %q{2009-05-19}
10
+ s.description = %q{Provides a ruby interface to flickr via the REST api}
11
+ s.email = %q{ben@commonthread.com}
12
+ s.extra_rdoc_files = [
13
+ "README"
14
+ ]
15
+ s.files = [
16
+ ".gitignore",
17
+ "LICENSE",
18
+ "README",
19
+ "Rakefile",
20
+ "VERSION.yml",
21
+ "flickr_fu.gemspec",
22
+ "lib/flickr/auth.rb",
23
+ "lib/flickr/base.rb",
24
+ "lib/flickr/comment.rb",
25
+ "lib/flickr/contact.rb",
26
+ "lib/flickr/contacts.rb",
27
+ "lib/flickr/errors.rb",
28
+ "lib/flickr/geo.rb",
29
+ "lib/flickr/license.rb",
30
+ "lib/flickr/location.rb",
31
+ "lib/flickr/note.rb",
32
+ "lib/flickr/people.rb",
33
+ "lib/flickr/person.rb",
34
+ "lib/flickr/photo.rb",
35
+ "lib/flickr/photo_response.rb",
36
+ "lib/flickr/photos.rb",
37
+ "lib/flickr/photoset.rb",
38
+ "lib/flickr/photosets.rb",
39
+ "lib/flickr/size.rb",
40
+ "lib/flickr/status.rb",
41
+ "lib/flickr/test.rb",
42
+ "lib/flickr/token.rb",
43
+ "lib/flickr/uploader.rb",
44
+ "lib/flickr/urls.rb",
45
+ "lib/flickr_fu.rb",
46
+ "spec/fixtures/flickr/contacts/get_list-fail-99.xml",
47
+ "spec/fixtures/flickr/contacts/get_public_list-0.xml",
48
+ "spec/fixtures/flickr/photos/geo/get_location-0.xml",
49
+ "spec/fixtures/flickr/photos/geo/get_location-fail-2.xml",
50
+ "spec/fixtures/flickr/photos/get_info-0.xml",
51
+ "spec/fixtures/flickr/photos/get_info-1.xml",
52
+ "spec/fixtures/flickr/photos/get_sizes-0.xml",
53
+ "spec/fixtures/flickr/photos/get_sizes-1.xml",
54
+ "spec/fixtures/flickr/photos/licenses/get_info.xml",
55
+ "spec/fixtures/flickr/photosets/get_list-0.xml",
56
+ "spec/fixtures/flickr/photosets/get_photos-0.xml",
57
+ "spec/fixtures/flickr/test/echo-0.xml",
58
+ "spec/fixtures/flickr/test/null-fail-99.xml",
59
+ "spec/fixtures/flickr/urls/get_group-0.xml",
60
+ "spec/fixtures/flickr/urls/get_group-fail-1.xml",
61
+ "spec/fixtures/flickr/urls/get_user_photos-0.xml",
62
+ "spec/fixtures/flickr/urls/get_user_photos-fail-1.xml",
63
+ "spec/fixtures/flickr/urls/get_user_photos-fail-2.xml",
64
+ "spec/fixtures/flickr/urls/get_user_profile-0.xml",
65
+ "spec/fixtures/flickr/urls/get_user_profile-fail-1.xml",
66
+ "spec/fixtures/flickr/urls/get_user_profile-fail-2.xml",
67
+ "spec/fixtures/flickr/urls/lookup_group-0.xml",
68
+ "spec/fixtures/flickr/urls/lookup_group-fail-1.xml",
69
+ "spec/fixtures/flickr/urls/lookup_user-0.xml",
70
+ "spec/fixtures/flickr/videos/get_info-0.xml",
71
+ "spec/fixtures/flickr/videos/get_sizes-0.xml",
72
+ "spec/flickr/base_spec.rb",
73
+ "spec/flickr/contacts_spec.rb",
74
+ "spec/flickr/errors_spec.rb",
75
+ "spec/flickr/geo_spec.rb",
76
+ "spec/flickr/photo_spec.rb",
77
+ "spec/flickr/photos_spec.rb",
78
+ "spec/flickr/photosets_spec.rb",
79
+ "spec/flickr/test_spec.rb",
80
+ "spec/flickr/urls_spec.rb",
81
+ "spec/spec.opts",
82
+ "spec/spec_helper.rb"
83
+ ]
84
+ s.homepage = %q{http://github.com/commonthread/flickr_fu}
32
85
  s.rdoc_options = ["--main", "README"]
33
- s.extra_rdoc_files = ["README"]
34
- s.add_dependency("mime-types", ["> 0.0.0"])
35
- s.add_dependency("xml-magic", ["> 0.0.0"])
86
+ s.require_paths = ["lib"]
87
+ s.rubygems_version = %q{1.3.3}
88
+ s.summary = %q{Provides a ruby interface to flickr via the REST api}
89
+ s.test_files = [
90
+ "spec/spec_helper.rb",
91
+ "spec/flickr/test_spec.rb",
92
+ "spec/flickr/geo_spec.rb",
93
+ "spec/flickr/contacts_spec.rb",
94
+ "spec/flickr/urls_spec.rb",
95
+ "spec/flickr/errors_spec.rb",
96
+ "spec/flickr/base_spec.rb",
97
+ "spec/flickr/photo_spec.rb",
98
+ "spec/flickr/photosets_spec.rb",
99
+ "spec/flickr/photos_spec.rb"
100
+ ]
101
+
102
+ if s.respond_to? :specification_version then
103
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
104
+ s.specification_version = 3
105
+
106
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
107
+ s.add_runtime_dependency(%q<mime-types>, ["> 0.0.0"])
108
+ s.add_runtime_dependency(%q<xml-magic>, ["> 0.0.0"])
109
+ else
110
+ s.add_dependency(%q<mime-types>, ["> 0.0.0"])
111
+ s.add_dependency(%q<xml-magic>, ["> 0.0.0"])
112
+ end
113
+ else
114
+ s.add_dependency(%q<mime-types>, ["> 0.0.0"])
115
+ s.add_dependency(%q<xml-magic>, ["> 0.0.0"])
116
+ end
36
117
  end
@@ -22,31 +22,49 @@ module Flickr
22
22
  # Flickr::Auth::Token object
23
23
  #
24
24
  # or:
25
+ #
25
26
  # * config_file (Required)
26
27
  # yaml file to load configuration from
27
- # * token_cache (Optional)
28
- # location of the token cache file. This will override the setting in the config file
29
- #
28
+ # * options (Optional)
29
+ # hash containing any of the two options
30
+ # * token_cache
31
+ # location of the token cache file. This will override the setting in the config file
32
+ # * environment
33
+ # section in the config file that flickr_fu should look for the API key and secret
34
+ # Useful when using with Rails
35
+ #
30
36
  # Config Example (yaml file)
31
37
  # ---
32
- # key: YOUR_API_KEY
33
- # secret: YOUR_API_SECRET
34
- # token_cache: token.yml
35
- #
36
- def initialize(config_hash_or_file, token_cache = nil)
37
- if config_hash_or_file.is_a? Hash
38
- @api_key = config_hash_or_file[:key]
39
- @api_secret = config_hash_or_file[:secret]
40
- @token = config_hash_or_file[:token]
41
- raise 'config_hash must contain api key and secret' unless @api_key and @api_secret
42
- else
43
- config = YAML.load_file(config_hash_or_file)
44
-
45
- @api_key = config['key']
46
- @api_secret = config['secret']
47
- @token_cache = token_cache || config['token_cache']
48
- raise 'flickr config file must contain an api key and secret' unless @api_key and @api_secret
38
+ # key: YOUR_API_KEY
39
+ # secret: YOUR_API_SECRET
40
+ # token_cache: token.yml
41
+ #
42
+ # Example config file with two environments:
43
+ # ---
44
+ # development:
45
+ # key: YOUR_DEVELOPMENT_API_KEY
46
+ # secret: YOUR_DEVELOPMENT_API_SECRET
47
+ # production:
48
+ # key: YOUR_PRODUCTION_API_KEY
49
+ # secret: YOUR_PRODUCTION_API_SECRET
50
+ def initialize(config_param, options_param = {})
51
+ if options_param.is_a? String
52
+ options = {:token_cache => options_param}
53
+ else
54
+ options = options_param
55
+ end
56
+ if config_param.is_a? String
57
+ config = YAML.load_file(config_param)
58
+ config = config[options[:environment]] if options.has_key? :environment
59
+ else
60
+ config = config_param
49
61
  end
62
+ @api_key = config[:key] || config["key"]
63
+ @api_secret = config[:secret] || config["secret"]
64
+ @token_cache = options[:token_cache] || config["token_cache"]
65
+ @token = config[:token] || options[:token]
66
+ raise 'config file must contain an api key and secret' unless @api_key and @api_secret
67
+ raise 'you cannot specify both the token and token_cache' if @token and @token_cache
50
68
  end
51
69
 
52
70
  # sends a request to the flickr REST api
@@ -75,7 +93,7 @@ module Flickr
75
93
  if xm[:stat] == 'ok'
76
94
  xm
77
95
  else
78
- raise Flickr::Errors.error_for(xm.err[:code], xm.err[:msg])
96
+ raise Flickr::Errors.error_for(xm.err[:code].to_i, xm.err[:msg])
79
97
  end
80
98
  end
81
99
 
@@ -99,6 +117,9 @@ module Flickr
99
117
  # creates and/or returns the Flickr::Photos object
100
118
  def photos() @photos ||= Flickr::Photos.new(self) end
101
119
 
120
+ # creates and/or returns the Flickr::Photos object
121
+ def photosets() @photosets ||= Flickr::Photosets.new(self) end
122
+
102
123
  # creates and/or returns the Flickr::People object
103
124
  def people() @people ||= Flickr::People.new(self) end
104
125
 
@@ -107,7 +128,13 @@ module Flickr
107
128
 
108
129
  # creates and/or returns the Flickr::Uploader object
109
130
  def uploader() @uploader ||= Flickr::Uploader.new(self) end
110
-
131
+
132
+ # creates and/or returns the Flickr::Contacts object
133
+ def contacts() @contacts ||= Flickr::Contacts.new(self) end
134
+
135
+ # creates and/or returns the Flickr::Urls object
136
+ def urls() @urls ||= Flickr::Urls.new(self) end
137
+
111
138
  protected
112
139
 
113
140
  # For easier testing. You can mock this method with a XML file you're expecting to receive
@@ -0,0 +1,16 @@
1
+ # wrapping class to hold a flickr contact
2
+ #
3
+ class Flickr::Contacts::Contact
4
+ attr_accessor :nsid, :friend, :family, :iconfarm, :iconserver, :location, :username, :ignored, :realname, :path_alias
5
+
6
+ # create a new instance of a flickr note.
7
+ #
8
+ # Params
9
+ # * attributes (Required)
10
+ # a hash of attributes used to set the initial values of the contact object
11
+ def initialize(attributes)
12
+ attributes.each do |k,v|
13
+ send("#{k}=", v)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,55 @@
1
+ class Flickr::Contacts < Flickr::Base
2
+ def initialize(flickr)
3
+ @flickr = flickr
4
+ end
5
+
6
+ # Get a user's public contact list.
7
+ #
8
+ # Params
9
+ # * id (Required)
10
+ # the nsid of the user to get information for
11
+ #
12
+ def get_public_list(id, options={})
13
+ options.merge!({:user_id => id})
14
+ rsp = @flickr.send_request('flickr.contacts.getPublicList', options)
15
+ collect_contacts(rsp)
16
+ end
17
+
18
+
19
+ # Get the authorized user's contact list.
20
+ #
21
+ def get_list(options={})
22
+ rsp = @flickr.send_request('flickr.contacts.getList', options)
23
+ collect_contacts(rsp)
24
+ end
25
+
26
+
27
+ protected
28
+ def collect_contacts(rsp)
29
+ contacts = []
30
+ return contacts unless rsp
31
+ if rsp.contacts.contact
32
+ rsp.contacts.contact.each do |contact|
33
+ attributes = create_attributes(contact)
34
+ contacts << Contact.new(attributes)
35
+ end
36
+ end
37
+ return contacts
38
+ end
39
+
40
+ def create_attributes(contact)
41
+ {
42
+ :nsid => contact[:nsid],
43
+ :path_alias => contact[:path_alias],
44
+ :username => contact[:username],
45
+ :iconfarm => contact[:iconfarm],
46
+ :iconserver => contact[:iconserver],
47
+ :ignored => contact[:ignored],
48
+ :friend => contact[:friend],
49
+ :family => contact[:family],
50
+ :realname => contact[:realname],
51
+ :location => contact[:location]
52
+ }
53
+ end
54
+
55
+ end
@@ -0,0 +1,42 @@
1
+ class Flickr::Photos::Geo < Flickr::Base
2
+
3
+ def initialize(flickr)
4
+ @flickr = flickr
5
+ end
6
+
7
+ # Get the geo data (latitude and longitude and the accuracy level) of a photo.
8
+ #
9
+ # Params
10
+ # * photo_id (Required)
11
+ #
12
+ # Returns Flickr::Photos::Location object containing photo location
13
+ # or nil if photo is not geotagged.
14
+ def get_location(photo_id)
15
+ # begin
16
+ rsp = @flickr.send_request('flickr.photos.geo.getLocation', {:photo_id => photo_id})
17
+ Flickr::Photos::Location.new(:latitude => rsp.photo.location[:latitude].to_f,
18
+ :longitude => rsp.photo.location[:longitude].to_f, :accuracy => rsp.photo.location[:accuracy].to_i)
19
+ end
20
+
21
+ # Sets the geo data(latitude and longitude and the accuracy level) of a photo.
22
+ #
23
+ # Params
24
+ # * photo_id (Required)
25
+ # * latittude (Requried)
26
+ # * longitude (Required)
27
+ # * accuracy (Optional)
28
+ #
29
+ # Returns true if successful, raises an error otherwise.
30
+ def set_location(photo_id, lat, lon, accuracy = nil)
31
+ request_options = {:photo_id => photo_id, :lat => lat, :lon => lon}
32
+ request_options[:accuracy] = accuracy if !accuracy.nil?
33
+ @flickr.send_request('flickr.photos.geo.setLocation', request_options, :post)
34
+ true
35
+ end
36
+
37
+ def remove_location(photo_id)
38
+ request_options = {:photo_id => photo_id}
39
+ @flickr.send_request('flickr.photos.geo.removeLocation', request_options, :post)
40
+ true
41
+ end
42
+ end