simple-flickr 0.1.2 → 0.1.3

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/Rakefile CHANGED
@@ -8,7 +8,7 @@ task :default => :spec
8
8
 
9
9
  spec = Gem::Specification.new do |s|
10
10
  s.name = 'simple-flickr'
11
- s.version = '0.1.2'
11
+ s.version = '0.1.3'
12
12
  s.summary = "A wrapper for Flickrs REST API"
13
13
  s.description = "A wrapper for Flickrs REST API."
14
14
 
data/lib/simple-flickr.rb CHANGED
@@ -55,3 +55,4 @@ require 'simple-flickr/person'
55
55
  require 'simple-flickr/photos'
56
56
  require 'simple-flickr/photo'
57
57
  require 'simple-flickr/photo_set'
58
+ require 'simple-flickr/group'
@@ -0,0 +1,29 @@
1
+ module Flickr
2
+
3
+ # Represents a Flickr Group
4
+ #
5
+ # You can find the Flickr::Group by the NSID
6
+ class Group
7
+ include Proxy
8
+
9
+ def initialize( xml, client ) # :nodoc:
10
+ super( xml, client )
11
+
12
+ @attributes['id'] = xml['nsid'] || xml['id']
13
+ @attributes['name'] ||= xml.search('name').text
14
+ @attributes['description'] ||= xml.search('description').text
15
+ @attributes['members'] = xml.search('members').text.to_i
16
+ end
17
+
18
+ def self.find_by_id( nsid, client )
19
+ return nil unless nsid.is_a? String
20
+ xml = client.request( 'groups.getInfo', :group_id => nsid )
21
+
22
+ new( xml.at('group'), client )
23
+ end
24
+
25
+ def photos( options = {} )
26
+ Photo.api_query( 'photos.search', @client, :group_id => id )
27
+ end
28
+ end
29
+ end
@@ -32,6 +32,11 @@ module Flickr
32
32
  Photo.api_query( 'people.getPublicPhotos', @client, options.merge(:user_id => id) )
33
33
  end
34
34
 
35
+ def groups
36
+ xml = @client.request( 'people.getPublicGroups', :user_id => id )
37
+ return xml.search('group').collect { |g| Flickr::Group.new(g, @client) }
38
+ end
39
+
35
40
  # Return the persons photosets.
36
41
  #
37
42
  # === Returns
@@ -17,8 +17,13 @@ module Flickr
17
17
  super( xml, client )
18
18
  @attributes['title'] ||= xml.search('title').text
19
19
  @attributes['description'] = xml.search('description').text
20
- @attributes['uploaded_at'] = Time.at((@attributes.delete('dateuploaded') or @attributes.delete('dateupload')).to_i)
20
+ @attributes['uploaded_at'] = Time.at((@attributes.delete('dateuploaded') or @attributes.delete('dateupload')).to_i).utc
21
21
  @attributes['owner'] ||= xml.at('owner').attributes['nsid'] if xml.at('owner')
22
+ @attributes['taken_at'] = begin
23
+ Time.parse("#{@attributes.delete('datetaken')} UTC") if @attributes.include?('datetaken')
24
+ rescue ArgumentError
25
+ nil
26
+ end
22
27
  end
23
28
 
24
29
  # Get the person associated with this photo
@@ -38,7 +38,7 @@ module Flickr
38
38
 
39
39
  # This maps method calls to attributes.
40
40
  def method_missing( method, *args ) # :nodoc:
41
- return @attributes[method.to_s] if @attributes[method.to_s]
41
+ return @attributes[method.to_s] if @attributes.include?(method.to_s)
42
42
  super
43
43
  end
44
44
 
data/spec/client_spec.rb CHANGED
@@ -14,8 +14,8 @@ describe Flickr::Client do
14
14
  @flickr.should_receive( :open ).with( Flickr::Client::REST_ENDPOINT + '?api_key=my-api-key&method=flickr.favorites.getList&per_page=4&user_id=123456789N00' ).and_return( VALID_FLICKR_RESPONSE )
15
15
  @flickr.request( 'favorites.getList', :user_id => '123456789N00', :per_page => 4 )
16
16
  end
17
-
18
- [Errno::ETIMEDOUT,Timeout::Error.new(nil), OpenURI::HTTPError.new(nil,nil), Errno::ECONNRESET, SocketError, Errno::ECONNREFUSED].each do |e|
17
+
18
+ [Errno::ETIMEDOUT, Timeout::Error, OpenURI::HTTPError.new(nil,nil), Errno::ECONNRESET, SocketError, Errno::ECONNREFUSED].each do |e|
19
19
  it "should raise an appropriate error if open-uri raises #{e}" do
20
20
  @flickr.should_receive( :open ).and_raise( e )
21
21
  proc { @flickr.request( 'test.echo' ) }.should raise_error( Flickr::RequestError )
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe Flickr::Group do
4
+ before( :each ) do
5
+ @client = mock( 'Flickr::Client' )
6
+ @xml = Hpricot.parse( '<group id="34427465497@N01" iconserver="1" lang="en-us" ispoolmoderated="0"><name>GNEverybody</name><description>The group for GNE players</description><members>69</members><privacy>3</privacy><throttle count="10" mode="month" remaining="3"/></group>' )
7
+ @group = Flickr::Group.new( @xml.at('group'), @client )
8
+ end
9
+
10
+ it 'should include proxy' do
11
+ Flickr::Group.included_modules.include?( Flickr::Proxy ).should == true
12
+ end
13
+
14
+ it 'should use the passed in client' do
15
+ @group.instance_variable_get( :'@client' ).should == @client
16
+ end
17
+
18
+ it 'should return photos in the group' do
19
+ photos = mock('photos')
20
+ Flickr::Photo.should_receive( :api_query ).with( 'photos.search', @client, :group_id => '34427465497@N01' ).and_return( photos )
21
+ @group.photos.should == photos
22
+ end
23
+
24
+ it 'it should find the group by the id' do
25
+ @client.should_receive( :request ).with( 'groups.getInfo', :group_id => '34427465497@N01' ).and_return( @xml )
26
+ group = Flickr::Group.find_by_id( '34427465497@N01', @client )
27
+ group.id.should == '34427465497@N01'
28
+ group.name.should == 'GNEverybody'
29
+ group.should be_instance_of( Flickr::Group )
30
+ end
31
+
32
+ it 'should return nil if something invalid is passed in (non string)' do
33
+ Flickr::Group.find_by_id(nil, @client).should == nil
34
+ end
35
+ end
data/spec/person_spec.rb CHANGED
@@ -82,6 +82,16 @@ describe Flickr::Person do
82
82
  Flickr::Photo.should_receive( :api_query ).with( 'people.getPublicPhotos', @client, :user_id => '12037949754@N01', :per_page => 2 ).and_return( photos )
83
83
  @person.photos( :per_page => 2).should == photos
84
84
  end
85
+
86
+ it 'should return the users public groups' do
87
+ group_xml = Hpricot.parse( '<rsp stat="ok"><group nsid="34427469792@N01" name="FlickrCentral" admin="0" eighteenplus="0" /></rsp>' )
88
+ @client.should_receive( :request ).with( 'people.getPublicGroups', :user_id => '12037949754@N01' ).and_return( group_xml )
89
+ groups = @person.groups
90
+ groups[0].should be_kind_of(Flickr::Group)
91
+ groups[0].id.should == '34427469792@N01'
92
+ groups[0].name.should == 'FlickrCentral'
93
+ end
94
+
85
95
 
86
96
  it 'should return the users favorites' do
87
97
  photos = mock( 'photos' )
data/spec/photo_spec.rb CHANGED
@@ -59,6 +59,26 @@ describe Flickr::Photo do
59
59
 
60
60
  @client.should_receive( :request ).with( 'person.listPhotos', :foo => 'bar' ).and_return( photosets_xml )
61
61
  Flickr::Photos.should_receive( :new ).with( photosets_xml.at('photoset'), @client )
62
- Flickr::Photo.api_query( 'person.listPhotos', @client, :foo => 'bar')
62
+ Flickr::Photo.api_query( 'person.listPhotos', @client, :foo => 'bar')
63
+ end
64
+
65
+ it 'should parse dates' do
66
+ xml = Hpricot.parse( '<photos page="2" pages="89" perpage="10" total="881"><photo id="2636" owner="47058503995@N01" farm="1" secret="a123456" server="2" title="test_04" ispublic="1" isfriend="0" isfamily="0" datetaken="2006-04-15 00:00:00" dateupload="1191939237" /></photos>' )
67
+
68
+ photo = Flickr::Photo.new( xml.at('photo'), @client )
69
+
70
+ photo.taken_at.should == Time.parse("2006-04-15 00:00:00 UTC")
71
+ photo.taken_at.should be_utc
72
+
73
+ photo.uploaded_at.should == Time.parse("2007-10-09 14:13:57 UTC")
74
+ photo.uploaded_at.should be_utc
75
+ end
76
+
77
+ it 'should ignore parsing errors on date taken' do
78
+ xml = Hpricot.parse( '<photos page="2" pages="89" perpage="10" total="881"><photo id="2636" owner="47058503995@N01" farm="1" secret="a123456" server="2" title="test_04" ispublic="1" isfriend="0" isfamily="0" datetaken="2006-04-00 00:00:00" dateupload="1191939237" /></photos>' )
79
+
80
+ photo = Flickr::Photo.new( xml.at('photo'), @client )
81
+
82
+ photo.taken_at.should be_nil
63
83
  end
64
84
  end
data/spec/proxy_spec.rb CHANGED
@@ -5,13 +5,12 @@ class Flickr::ProxyTest
5
5
  end
6
6
 
7
7
  describe Flickr::ProxyTest do
8
+ before( :each ) do
9
+ @client = mock( 'Flickr::Client' )
10
+ @xml = Hpricot.parse( '<doc><proxytest id="2636" var1="test" foo="bar" /></doc>' ).at( 'proxytest' )
11
+ end
8
12
 
9
13
  describe 'when dealing with attributes' do
10
- before( :each ) do
11
- @client = mock( 'Flickr::Client' )
12
- @xml = Hpricot.parse( '<doc><proxytest id="2636" var1="test" foo="bar" /></doc>' ).at( 'proxytest' )
13
- end
14
-
15
14
  it 'should set the attributes' do
16
15
  proxy = Flickr::ProxyTest.new( @xml, @client )
17
16
  proxy.id.should == "2636"
@@ -45,4 +44,4 @@ describe Flickr::ProxyTest do
45
44
  Flickr::ProxyTest.api_query( 'proxytest.getList', @client ).should == [test1,test2]
46
45
  end
47
46
  end
48
- end
47
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-flickr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 3
9
+ version: 0.1.3
5
10
  platform: ruby
6
11
  authors:
7
12
  - Jerrett Taylor
@@ -9,19 +14,23 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-05-10 00:00:00 -07:00
17
+ date: 2010-06-14 00:00:00 -07:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: hpricot
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 8
30
+ - 0
23
31
  version: 0.8.0
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  description: A wrapper for Flickrs REST API.
26
35
  email: jerrett@gmail.com
27
36
  executables: []
@@ -34,6 +43,7 @@ files:
34
43
  - README
35
44
  - Rakefile
36
45
  - spec/client_spec.rb
46
+ - spec/group_spec.rb
37
47
  - spec/person_spec.rb
38
48
  - spec/photo_set_spec.rb
39
49
  - spec/photo_spec.rb
@@ -42,6 +52,7 @@ files:
42
52
  - spec/spec.opts
43
53
  - spec/spec_helper.rb
44
54
  - lib/simple-flickr/client.rb
55
+ - lib/simple-flickr/group.rb
45
56
  - lib/simple-flickr/person.rb
46
57
  - lib/simple-flickr/photo.rb
47
58
  - lib/simple-flickr/photo_set.rb
@@ -61,18 +72,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
72
  requirements:
62
73
  - - ">="
63
74
  - !ruby/object:Gem::Version
75
+ segments:
76
+ - 1
77
+ - 8
78
+ - 6
64
79
  version: 1.8.6
65
- version:
66
80
  required_rubygems_version: !ruby/object:Gem::Requirement
67
81
  requirements:
68
82
  - - ">="
69
83
  - !ruby/object:Gem::Version
84
+ segments:
85
+ - 0
70
86
  version: "0"
71
- version:
72
87
  requirements: []
73
88
 
74
89
  rubyforge_project:
75
- rubygems_version: 1.3.5
90
+ rubygems_version: 1.3.6
76
91
  signing_key:
77
92
  specification_version: 3
78
93
  summary: A wrapper for Flickrs REST API