reagent-fleakr 0.2.0 → 0.2.1

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
@@ -19,6 +19,7 @@ spec = Gem::Specification.new do |s|
19
19
  # s.executables = ['fleakr']
20
20
 
21
21
  s.add_dependency('hpricot', '~> 0.6.0')
22
+ s.add_dependency('activesupport', '~> 2.2.0')
22
23
  end
23
24
 
24
25
  Rake::GemPackageTask.new(spec) do |pkg|
data/lib/fleakr/group.rb CHANGED
@@ -6,10 +6,7 @@ module Fleakr
6
6
  flickr_attribute :id, :attribute => 'nsid'
7
7
  flickr_attribute :name, :attribute => 'name'
8
8
 
9
- def self.find_all_by_user_id(user_id)
10
- response = Request.with_response!('people.getPublicGroups', :user_id => user_id)
11
- (response.body/'rsp/groups/group').map {|g| Group.new(g) }
12
- end
9
+ find_all :by_user_id, :call => 'people.getPublicGroups', :path => 'groups/group'
13
10
 
14
11
  end
15
12
  end
data/lib/fleakr/object.rb CHANGED
@@ -12,6 +12,43 @@ module Fleakr
12
12
  class_eval "attr_reader :#{name}"
13
13
  end
14
14
 
15
+ def has_many(*attributes)
16
+ options = attributes.extract_options!
17
+ class_name = self.name
18
+
19
+ attributes.each do |attribute|
20
+ target = attribute.to_s.classify
21
+ finder_attribute = options[:using].nil? ? "#{class_name.demodulize.underscore}_id": options[:using]
22
+ class_eval <<-CODE
23
+ def #{attribute}
24
+ @#{attribute} ||= #{target}.send("find_all_by_#{finder_attribute}".to_sym, self.id)
25
+ end
26
+ CODE
27
+ end
28
+ end
29
+
30
+ def find_all(condition, options)
31
+ attribute = options[:using].nil? ? condition.to_s.sub(/^by_/, '') : options[:using]
32
+
33
+ class_eval <<-CODE
34
+ def self.find_all_#{condition}(value)
35
+ response = Request.with_response!('#{options[:call]}', :#{attribute} => value)
36
+ (response.body/'rsp/#{options[:path]}').map {|e| #{self.name}.new(e) }
37
+ end
38
+ CODE
39
+ end
40
+
41
+ def find_one(condition, options)
42
+ attribute = options[:using].nil? ? condition.to_s.sub(/^by_/, '') : options[:using]
43
+
44
+ class_eval <<-CODE
45
+ def self.find_#{condition}(value)
46
+ response = Request.with_response!('#{options[:call]}', :#{attribute} => value)
47
+ #{self.name}.new(response.body)
48
+ end
49
+ CODE
50
+ end
51
+
15
52
  end
16
53
 
17
54
  module InstanceMethods
data/lib/fleakr/photo.rb CHANGED
@@ -9,15 +9,8 @@ module Fleakr
9
9
  flickr_attribute :server_id, :attribute => 'server'
10
10
  flickr_attribute :secret, :attribute => 'secret'
11
11
 
12
- def self.find_all_by_photoset_id(photoset_id)
13
- response = Request.with_response!('photosets.getPhotos', :photoset_id => photoset_id)
14
- (response.body/'rsp/photoset/photo').map {|p| Photo.new(p) }
15
- end
16
-
17
- def self.find_all_by_user_id(user_id)
18
- response = Request.with_response!('people.getPublicPhotos', :user_id => user_id)
19
- (response.body/'rsp/photos/photo').map {|p| Photo.new(p) }
20
- end
12
+ find_all :by_photoset_id, :call => 'photosets.getPhotos', :path => 'photoset/photo'
13
+ find_all :by_user_id, :call => 'people.getPublicPhotos', :path => 'photos/photo'
21
14
 
22
15
  def base_url
23
16
  "http://farm#{self.farm_id}.static.flickr.com/#{self.server_id}/#{self.id}_#{self.secret}"
data/lib/fleakr/search.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  module Fleakr
2
2
  class Search
3
3
 
4
- attr_reader :tags
5
-
6
4
  def initialize(text = nil, search_options = {})
7
5
  @text = text
8
6
  @search_options = search_options
data/lib/fleakr/set.rb CHANGED
@@ -2,19 +2,14 @@ module Fleakr
2
2
  class Set
3
3
 
4
4
  include Fleakr::Object
5
+
6
+ has_many :photos, :using => :photoset_id
5
7
 
6
8
  flickr_attribute :id, :attribute => 'id'
7
9
  flickr_attribute :title
8
10
  flickr_attribute :description
9
11
 
10
- def self.find_all_by_user_id(user_id)
11
- response = Request.with_response!('photosets.getList', :user_id => user_id)
12
- (response.body/'rsp/photosets/photoset').map {|s| Set.new(s) }
13
- end
14
-
15
- def photos
16
- @photos ||= Photo.find_all_by_photoset_id(self.id)
17
- end
12
+ find_all :by_user_id, :call => 'photosets.getList', :path => 'photosets/photoset'
18
13
 
19
14
  def save_to(path, size)
20
15
  target = "#{path}/#{self.title}"
data/lib/fleakr/user.rb CHANGED
@@ -10,21 +10,11 @@ module Fleakr
10
10
  flickr_attribute :photos_count, :xpath => 'rsp/person/photos/count'
11
11
  flickr_attribute :icon_server, :xpath => 'rsp/person', :attribute => 'iconserver'
12
12
  flickr_attribute :icon_farm, :xpath => 'rsp/person', :attribute => 'iconfarm'
13
-
14
- def icon_farm_with_load
15
- retrieve_additional_information
16
- icon_farm_without_load
17
- end
18
-
19
- def self.find_by_username(username)
20
- response = Request.with_response!('people.findByUsername', :username => username)
21
- User.new(response.body)
22
- end
23
-
24
- def self.find_by_email(email)
25
- response = Request.with_response!('people.findByEmail', :find_email => email)
26
- User.new(response.body)
27
- end
13
+
14
+ has_many :sets, :groups, :photos
15
+
16
+ find_one :by_username, :call => 'people.findByUsername'
17
+ find_one :by_email, :using => :find_email, :call => 'people.findByEmail'
28
18
 
29
19
  def load_info
30
20
  response = Request.with_response!('people.getInfo', :user_id => self.id)
@@ -39,17 +29,5 @@ module Fleakr
39
29
  end
40
30
  end
41
31
 
42
- def sets
43
- @set ||= Set.find_all_by_user_id(self.id)
44
- end
45
-
46
- def groups
47
- @groups ||= Group.find_all_by_user_id(self.id)
48
- end
49
-
50
- def photos
51
- @photos ||= Photo.find_all_by_user_id(self.id)
52
- end
53
-
54
32
  end
55
33
  end
@@ -3,7 +3,7 @@ module Fleakr
3
3
 
4
4
  MAJOR = 0
5
5
  MINOR = 2
6
- TINY = 0
6
+ TINY = 1
7
7
 
8
8
  def self.to_s
9
9
  [MAJOR, MINOR, TINY].join('.')
data/lib/fleakr.rb CHANGED
@@ -4,6 +4,7 @@ require 'uri'
4
4
  require 'cgi'
5
5
  require 'net/http'
6
6
  require 'hpricot'
7
+ require 'activesupport'
7
8
 
8
9
  require 'fleakr/object'
9
10
  require 'fleakr/attribute'
@@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../test_helper'
3
3
  module Fleakr
4
4
  class SetTest < Test::Unit::TestCase
5
5
 
6
+ should_have_many :photos, :using => 'photoset_id'
7
+
6
8
  describe "The Set class" do
7
9
 
8
10
  should_find_all :sets, :by => :user_id, :call => 'photosets.getList', :path => 'rsp/photosets/photoset'
@@ -22,26 +24,6 @@ module Fleakr
22
24
 
23
25
  end
24
26
 
25
- context "when accessing its list of photos" do
26
- before do
27
- @set = Set.new
28
- @set.stubs(:id).with().returns('1')
29
- end
30
-
31
- it "should retrieve a list of photos" do
32
- photos = [stub()]
33
-
34
- Photo.expects(:find_all_by_photoset_id).with('1').returns(photos)
35
-
36
- @set.photos.should == photos
37
- end
38
-
39
- it "should memoize the list of photos retrieved" do
40
- Photo.expects(:find_all_by_photoset_id).once.returns([])
41
- 2.times { @set.photos }
42
- end
43
- end
44
-
45
27
  context "when saving the set" do
46
28
  before do
47
29
  @tmp_dir = create_temp_directory
@@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../test_helper'
3
3
  module Fleakr
4
4
  class UserTest < Test::Unit::TestCase
5
5
 
6
+ should_have_many :photos, :groups, :sets
7
+
6
8
  describe "The User class" do
7
9
 
8
10
  should_find_one :user, :by => :username, :call => 'people.findByUsername', :path => 'rsp/user'
@@ -28,50 +30,7 @@ module Fleakr
28
30
 
29
31
  context "in general" do
30
32
 
31
- before do
32
- @user = User.new
33
- end
34
-
35
- it "should be able to retrieve the user's associated sets" do
36
- sets = [stub()]
37
- @user.stubs(:id).with().returns('1')
38
-
39
- Set.expects(:find_all_by_user_id).with('1').returns(sets)
40
-
41
- @user.sets.should == sets
42
- end
43
-
44
- it "should memoize the results returned for this user's sets" do
45
- Set.expects(:find_all_by_user_id).once.returns([])
46
- 2.times { @user.sets }
47
- end
48
-
49
- it "should be able to retrieve the user's associated groups" do
50
- groups = [stub()]
51
- @user.stubs(:id).with().returns('1')
52
-
53
- Group.expects(:find_all_by_user_id).with('1').returns(groups)
54
-
55
- @user.groups.should == groups
56
- end
57
-
58
- it "should memoize the results returned for this user's group" do
59
- Group.expects(:find_all_by_user_id).once.returns([])
60
- 2.times { @user.groups }
61
- end
62
-
63
- it "should be able to retrieve the user's photos" do
64
- photos = [stub()]
65
- @user.stubs(:id).with().returns('1')
66
-
67
- Photo.expects(:find_all_by_user_id).with('1').returns(photos)
68
- @user.photos.should == photos
69
- end
70
-
71
- it "should memoize the results returned for this user's photos" do
72
- Photo.expects(:find_all_by_user_id).once.returns([])
73
- 2.times { @user.photos }
74
- end
33
+ before { @user = User.new }
75
34
 
76
35
  it "should be able to retrieve additional information about the current user" do
77
36
  response = mock_request_cycle :for => 'people.getInfo', :with => {:user_id => @user.id}
data/test/test_helper.rb CHANGED
@@ -4,7 +4,6 @@ require 'rubygems'
4
4
  require 'matchy'
5
5
  require 'context'
6
6
  require 'mocha'
7
- require 'activesupport'
8
7
 
9
8
  require File.dirname(__FILE__) + '/../lib/fleakr'
10
9
 
@@ -16,6 +15,35 @@ class Test::Unit::TestCase
16
15
  end
17
16
  end
18
17
 
18
+ def self.should_have_many(*attributes)
19
+ class_name = self.name.demodulize.sub(/Test$/, '')
20
+ this_klass = "Fleakr::#{class_name}".constantize
21
+
22
+ options = attributes.extract_options!
23
+ finder_attribute = options[:using].nil? ? "#{class_name.downcase}_id" : options[:using]
24
+
25
+ attributes.each do |attribute|
26
+ target_klass = "Fleakr::#{attribute.to_s.singularize.classify}".constantize
27
+
28
+ it "should be able to retrieve the #{class_name.downcase}'s #{attribute}" do
29
+ results = [stub()]
30
+ object = this_klass.new
31
+ object.stubs(:id).with().returns('1')
32
+
33
+ target_klass.expects("find_all_by_#{finder_attribute}".to_sym).with('1').returns(results)
34
+ object.send(attribute).should == results
35
+ end
36
+
37
+ it "should memoize the results for the #{class_name.downcase}'s #{attribute}" do
38
+ object = this_klass.new
39
+
40
+ target_klass.expects("find_all_by_#{finder_attribute}".to_sym).once.returns([])
41
+ 2.times { object.send(attribute) }
42
+ end
43
+
44
+ end
45
+ end
46
+
19
47
  def self.should_find_one(thing, options)
20
48
  class_name = thing.to_s.singularize.camelcase
21
49
  klass = "Fleakr::#{class_name}".constantize
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reagent-fleakr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.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: 2008-12-03 00:00:00 -08:00
12
+ date: 2008-12-04 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -21,6 +21,15 @@ dependencies:
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.6.0
23
23
  version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: activesupport
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: 2.2.0
32
+ version:
24
33
  description:
25
34
  email: reaganpr@gmail.com
26
35
  executables: []