objectiveflickr 0.9.1 → 0.9.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/History.txt CHANGED
@@ -0,0 +1,46 @@
1
+ 2006-12-27 (0.9.2):
2
+ * Added support for Flickr's new "farm" part newly found in its photo URLs
3
+
4
+ * Your code needs no change, everything will just work, including
5
+ those photo URL/div id helpers, but on the other hand...
6
+
7
+ * Deprecated methods in FlickrInvocation:
8
+
9
+ * photo_url(params)
10
+ * photo_div_id(params, prefix='photo')
11
+ * photo_url_from_div_id(uid)
12
+ * photo_info_from_div_id(uid)
13
+
14
+ Those are methods that should never go into an invocation object.
15
+ Instead they belong to a helper, so:
16
+
17
+ * Created a FlickrPhoto module
18
+
19
+ FlickrPhoto.url_from_hash(params)
20
+ FlickrPhoto.unique_id_from_hash(params, prefix)
21
+ FlickrPhoto.url_from_unique_id(uid)
22
+ FlickrPhoto.hash_from_unique_id(uid)
23
+
24
+ Those helper functions now take place of their deprecated
25
+ predecessors.
26
+
27
+ * Before :server_id and :server were both accepted hash key
28
+ for the "param" in those helper functions, now only :server
29
+ is accepted. This is in accordance with Flickr's own
30
+ naming convention.
31
+
32
+ * You no longer need to set :auth=>true if you already supply
33
+ an :auth_token parameter when you make Flickr method calls.
34
+ Since :auth_token always implies that the call must be
35
+ authenticated, ObjectiveFlickr is happy to save a few strokes
36
+ for you. :)
37
+
38
+
39
+ 2006-12-12 (0.9.1):
40
+ Added default_* methods into FlickrInvocation
41
+ Removed History.txt
42
+
43
+
44
+ 2006-12-10 (0.9.0):
45
+ Initial release.
46
+
data/Manifest.txt CHANGED
@@ -6,6 +6,7 @@ setup.rb
6
6
  lib/objectiveflickr.rb
7
7
  lib/objectiveflickr/version.rb
8
8
  lib/objectiveflickr/flickr_invocation.rb
9
+ lib/objectiveflickr/flickr_photo.rb
9
10
  lib/objectiveflickr/flickr_response.rb
10
11
  test/test_helper.rb
11
12
  test/objectiveflickr_test.rb
@@ -7,16 +7,16 @@
7
7
  # Copyright:: Copyright (c) 2006 Lukhnos D. Liu
8
8
  # License:: Distributed under the New BSD License
9
9
 
10
- # This class plays the major role of the package. Named "FlickrInvocation"
11
- # to allude to the making of an RPC call.
12
-
13
10
  require 'rubygems'
14
11
  require 'net/http'
15
12
  require 'jcode'
16
13
  require 'digest/md5'
14
+
17
15
  $KCODE = 'UTF8'
18
16
 
19
- # FlickrInvocation
17
+ # This class plays the major role of the package. Named "FlickrInvocation"
18
+ # to allude to the making of an RPC call.
19
+
20
20
  class FlickrInvocation
21
21
  @@default_api_key = ''
22
22
  @@default_shared_secret = ''
@@ -25,7 +25,6 @@ class FlickrInvocation
25
25
  SHARED_SECRET = ''
26
26
  AUTH_ENDPOINT = 'http://flickr.com/services/auth/'
27
27
  REST_ENDPOINT = 'http://api.flickr.com/services/rest/'
28
- PHOTOURL_BASE = 'http://static.flickr.com/'
29
28
 
30
29
  # Initializes the instance with the api_key (required) and an
31
30
  # optional shared_secret (required only if you need to make
@@ -42,6 +41,10 @@ class FlickrInvocation
42
41
  # if you want the method call to be signed (required when you
43
42
  # make authenticaed calls, e.g. flickr.auth.getFrob or
44
43
  # any method call that requires an auth token)
44
+ #
45
+ # NOTE: If you supply :auth_token in the params hash, your API
46
+ # call will automatically be signed, and the call will be
47
+ # treated by Flickr as an authenticated call
45
48
  def call(method, params=nil)
46
49
  url = method_url(method, params)
47
50
  rsp = FlickrResponse.new Net::HTTP.get(URI.parse(url))
@@ -62,31 +65,24 @@ class FlickrInvocation
62
65
  url = "#{AUTH_ENDPOINT}?api_key=#{@api_key}&perms=#{permission}&api_sig=#{sig}"
63
66
  end
64
67
 
65
- # This utility method returns the URL of a Flickr photo using
66
- # the keys :server_id, :id, :secret, :size and :type
68
+ # DEPRECATED--Use FlickrPhoto.url_from_hash(params)
67
69
  def photo_url(params)
68
- photo_url_form(photo_params(params))
70
+ FlickrPhoto.url_from_hash(params)
69
71
  end
70
-
71
- # This utility method combines the Flickr photo keys (from which
72
- # one gets the real URL of a photo) into a photo id that you can
73
- # use in a div
72
+
73
+ # DEPRECATED--Use FlickrPhoto.unique_id_from_hash(params, prefix)
74
74
  def photo_div_id(params, prefix='photo')
75
- p = photo_params(params)
76
- [prefix, p[:server_id], p[:id], p[:secret], p[:size], p[:type]].join("-")
75
+ FlickrPhoto.unique_id_from_hash(params, prefix)
77
76
  end
78
-
79
- # This utility method breaks apart the photo id into Flickr photo
80
- # keys and returns the photo URL
81
- def photo_url_from_div_id(params)
82
- photo_url(photo_info_from_div_id(params))
77
+
78
+ # DEPRECATED--Use FlickrPhoto.url_from_unique_id(uid)
79
+ def photo_url_from_div_id(uid)
80
+ FlickrPhoto.url_from_unique_id(uid)
83
81
  end
84
82
 
85
- # This utility method breaks apart the photo id into Flickr photo
86
- # keys and returns a hash of the photo information
87
- def photo_info_from_div_id(params)
88
- p = params.split("-")
89
- { :server_id=>p[1], :id=>p[2], :secret=>p[3], :size=>p[4], :type=>p[5] }
83
+ # DEPRECATED--Use FlickrPhoto.hash_from_unique_id(uid)
84
+ def photo_info_from_div_id(uid)
85
+ FlickrPhoto.hash_from_unique_id(uid)
90
86
  end
91
87
 
92
88
  # set the default API key
@@ -98,7 +94,8 @@ class FlickrInvocation
98
94
  def self.default_shared_secret(s)
99
95
  @@default_shared_secret=s
100
96
  end
101
-
97
+
98
+ # set the default options, e.g. :raise_exception_on_error=>true
102
99
  def self.default_options(o)
103
100
  @@default_options = o
104
101
  end
@@ -111,7 +108,7 @@ class FlickrInvocation
111
108
  p[:nojsoncallback] = 1
112
109
 
113
110
  url = "#{REST_ENDPOINT}?api_key=#{@api_key}&method=#{method}"
114
- if p[:auth] || p["auth"]
111
+ if p[:auth] || p["auth"] || p[:auth_token] || p["auth_token"]
115
112
  p.delete(:auth)
116
113
  p.delete("auth")
117
114
  sigp = p
@@ -124,36 +121,13 @@ class FlickrInvocation
124
121
  url
125
122
  end
126
123
 
127
- private
128
- def photo_url_form(p)
129
- url = "#{PHOTOURL_BASE}#{p[:server_id]}/#{p[:id]}_#{p[:secret]}"
130
- if p[:size].length > 0
131
- url += "_#{p[:size]}"
132
- end
133
-
134
- url += ".#{p[:type]}"
135
- end
136
-
137
- private
138
- def photo_params(params)
139
- {
140
- :server_id => params[:server] || params["server"] || params[:server_id] || params["server_id"] || "",
141
- :id => params[:id] || params["id"] || "",
142
- :secret => params[:secret] || params["secret"] || "",
143
- :size => params[:size] || params["size"] || "",
144
- :type => params[:type] || params["type"] || "jpg"
145
- }
146
- end
147
-
148
124
  private
149
125
  def api_sig(params)
150
126
  sigstr = @shared_secret
151
- params.keys.sort { |x, y| x.to_s <=> y.to_s }.each { |k|
127
+ params.keys.sort { |x, y| x.to_s <=> y.to_s }.each do |k|
152
128
  sigstr += k.to_s
153
129
  sigstr += params[k].to_s
154
- }
155
- md5str = Digest::MD5.hexdigest(sigstr)
156
- # print "sigstr=#{sigstr}, md5str=#{md5str}\n"
157
- md5str
130
+ end
131
+ Digest::MD5.hexdigest(sigstr)
158
132
  end
159
133
  end
@@ -0,0 +1,75 @@
1
+ # objectiveflickr is a minimalistic Flickr API library that uses REST-style calls
2
+ # and receives JSON response blocks, resulting in very concise code. Named so in
3
+ # order to echo another Flickr library of mine, under the same name, developed
4
+ # for Objective-C.
5
+ #
6
+ # Author:: Lukhnos D. Liu (mailto:lukhnos@gmail.com)
7
+ # Copyright:: Copyright (c) 2006 Lukhnos D. Liu
8
+ # License:: Distributed under the New BSD License
9
+
10
+ # This helper module provides a set of utility methods for Flickr photos.
11
+ # Methods such as unique_id_from_hash and url_from_unique_id are
12
+ # helpful when you try to move the photo id data to and fro your web
13
+ # apps.
14
+
15
+ module FlickrPhoto
16
+ @photo_url_base = 'static.flickr.com'
17
+
18
+ # Set the default photo base URL, without the http:// part
19
+ def self.default_photo_url_base(b)
20
+ @photo_url_base = b
21
+ end
22
+
23
+ # This utility method returns the URL of a Flickr photo using
24
+ # the keys :farm, :server, :id, :secret, :size and :type
25
+ def self.url_from_hash(params)
26
+ self.url_from_normalized_hash(self.normalize_parameter(params))
27
+ end
28
+
29
+ # This utility method combines the Flickr photo keys (from which
30
+ # one gets the real URL of a photo) into a photo id that you can
31
+ # use in a div
32
+ def self.unique_id_from_hash(params, prefix='photo')
33
+ p = self.normalize_parameter(params)
34
+ [prefix, p[:server], p[:id], p[:secret], p[:farm], p[:size], p[:type]].join("-")
35
+ end
36
+
37
+ # This utility method breaks apart the photo id into Flickr photo
38
+ # keys and returns the photo URL
39
+ def self.url_from_unique_id(uid)
40
+ self.url_from_normalized_hash(self.hash_from_unique_id(uid))
41
+ end
42
+
43
+ # This utility method breaks apart the photo id into Flickr photo
44
+ # keys and returns a hash of the photo information
45
+ #
46
+ # NOTE: No sanitation check here
47
+ def self.hash_from_unique_id(uid)
48
+ p = uid.split("-")
49
+ {
50
+ :server=>p[1], :id=>p[2], :secret=>p[3],
51
+ :farm=>p[4], :size=>p[5], :type=>p[6]
52
+ }
53
+ end
54
+
55
+ private
56
+ def self.url_from_normalized_hash(p)
57
+ urlbase = (p[:farm] && p[:farm].to_s.length > 0) ? "http://farm#{p[:farm]}." : "http://"
58
+ url = "#{urlbase}#{@photo_url_base}/#{p[:server]}/#{p[:id]}_#{p[:secret]}"
59
+ url += "_#{p[:size]}" if p[:size].length > 0
60
+ url += ".#{p[:type]}"
61
+ end
62
+
63
+ private
64
+ def self.normalize_parameter(params)
65
+ {
66
+ :farm => (params[:farm] || params["farm"] || "").to_s,
67
+ :server => (params[:server] || params["server"] || "").to_s,
68
+ :id => (params[:id] || params["id"] || "").to_s,
69
+ :secret => (params[:secret] || params["secret"] || "").to_s,
70
+ :size => (params[:size] || params["size"] || "").to_s,
71
+ :type => (params[:type] || params["type"] || "jpg").to_s
72
+ }
73
+ end
74
+ end
75
+
@@ -7,16 +7,16 @@
7
7
  # Copyright:: Copyright (c) 2006 Lukhnos D. Liu
8
8
  # License:: Distributed under the New BSD License
9
9
 
10
- # This class encapusulates Flickr's JSON response block. Error code
11
- # and error messsage are read from the response block. This class
12
- # is intended to be simple and minimalistic, since the data body
13
- # can be extracted very easily.
14
-
15
10
  require 'rubygems'
16
11
  require 'json'
17
12
  require 'jcode'
18
13
  $KCODE = 'UTF8'
19
14
 
15
+ # This class encapusulates Flickr's JSON response block. Error code
16
+ # and error messsage are read from the response block. This class
17
+ # is intended to be simple and minimalistic, since the data body
18
+ # can be extracted very easily.
19
+
20
20
  class FlickrResponse
21
21
  attr_reader :data
22
22
 
@@ -2,7 +2,7 @@ module ObjectiveFlickr #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 9
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,4 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'yaml'
2
3
 
3
4
  class ObjectiveFlickrTest < Test::Unit::TestCase
4
5
 
@@ -38,4 +39,39 @@ class ObjectiveFlickrTest < Test::Unit::TestCase
38
39
  assert(e.message.error?, "response should be an error")
39
40
  assert_equal(e.message.error_message, "Invalid API Key (Key not found)", "error message should be 'invalid API key'")
40
41
  end
42
+
43
+ def test_deprecated_photo_helpers
44
+ f = FlickrInvocation.new
45
+ params = {:server=>1234, :id=>5678, :secret=>90, :farm=>321}
46
+ assert_equal(f.photo_url(params), "http://farm321.static.flickr.com/1234/5678_90.jpg", "URL helper failed")
47
+ uid = f.photo_div_id(params)
48
+ assert_equal(uid, "photo-1234-5678-90-321--jpg", "UID failed")
49
+ end
50
+
51
+ def test_photo_helpers
52
+ params = {:server=>"1234", :id=>"5678", :secret=>"90" }
53
+
54
+ assert_equal(FlickrPhoto.url_from_hash(params), "http://static.flickr.com/1234/5678_90.jpg", "URL helper failed")
55
+ params[:farm] = "321"
56
+ assert_equal(FlickrPhoto.url_from_hash(params), "http://farm321.static.flickr.com/1234/5678_90.jpg", "URL helper failed")
57
+ params[:farm] = nil
58
+
59
+ uid = FlickrPhoto.unique_id_from_hash(params, 'blah')
60
+ assert_equal(uid, "blah-1234-5678-90---jpg", "UID failed")
61
+
62
+ params[:farm] = "321"
63
+ params[:size] = 'b'
64
+ uid = FlickrPhoto.unique_id_from_hash(params, 'blah')
65
+ assert_equal(uid, "blah-1234-5678-90-321-b-jpg", "UID failed")
66
+
67
+
68
+ assert_equal(FlickrPhoto.url_from_unique_id(uid), "http://farm321.static.flickr.com/1234/5678_90_b.jpg", "URL helper failed")
69
+
70
+ params[:type] = 'jpg'
71
+ h = FlickrPhoto.hash_from_unique_id(uid)
72
+ assert_equal(h, params, "hash_from_unique_id failed")
73
+
74
+ end
75
+
76
+
41
77
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: objectiveflickr
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.1
7
- date: 2006-12-12 00:00:00 -05:00
6
+ version: 0.9.2
7
+ date: 2006-12-27 00:00:00 +08:00
8
8
  summary: objectiveflickr is a minimalistic Flickr API library that uses REST-style calls and receives JSON response blocks, resulting in very concise code. Named so in order to echo another Flickr library of mine, under the same name, developed for Objective-C.
9
9
  require_paths:
10
10
  - lib
@@ -37,6 +37,7 @@ files:
37
37
  - lib/objectiveflickr.rb
38
38
  - lib/objectiveflickr/version.rb
39
39
  - lib/objectiveflickr/flickr_invocation.rb
40
+ - lib/objectiveflickr/flickr_photo.rb
40
41
  - lib/objectiveflickr/flickr_response.rb
41
42
  - test/test_helper.rb
42
43
  - test/objectiveflickr_test.rb