avatar 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,11 +1,8 @@
1
1
  #ignore all .diff files
2
2
  /*.diff
3
3
 
4
- #ignore coverage reports
4
+ #ignore generated files:
5
5
  /coverage
6
-
7
- #ignore logs
6
+ /doc
8
7
  /log/*.log
9
-
10
- #ignore packaged local gem:
11
8
  /pkg
@@ -1,3 +1,13 @@
1
+ == 0.0.2 2008-03-24
2
+ * 1 major fix:
3
+ * SourceChain duplicates options before passing to elements
4
+
5
+ * 1 minor fix:
6
+ * forced GravatarSource to coerce rating and size to proper values
7
+
8
+ * 1 minor enhancement:
9
+ * broke out URL generation in GravatarSource to allow overriding
10
+
1
11
  == 0.0.1 2008-03-24
2
12
 
3
13
  * 1 major enhancement:
@@ -3,6 +3,15 @@ require 'avatar/source/static_url_source'
3
3
  require 'avatar/source/nil_source'
4
4
  require 'digest/md5'
5
5
 
6
+ unless Object.method_defined?(:returning)
7
+ Object.class_eval do
8
+ def returning(value)
9
+ yield(value)
10
+ value
11
+ end
12
+ end
13
+ end
14
+
6
15
  module Avatar # :nodoc:
7
16
  module Source # :nodoc:
8
17
  # NOTE: since Gravatar always returns a URL (never a 404), instances of this
@@ -23,7 +32,14 @@ module Avatar # :nodoc:
23
32
  'http://www.gravatar.com/avatar/'
24
33
  end
25
34
 
26
- # :nodoc:
35
+ # ['G', 'PG', 'R', 'X']
36
+ def self.allowed_ratings
37
+ ['G', 'PG', 'R', 'X']
38
+ end
39
+
40
+ # Arguments:
41
+ # * +default_source+: a Source to generate defaults to be passed to Gravatar; optional; default: nil (a NilSource).
42
+ # * +default_field+: the field within each +person+ passed to <code>avatar_url_for</code> in which to look for an email address
27
43
  def initialize(default_source = nil, default_field = :email)
28
44
  self.default_source = default_source #not @default_source = ... b/c want to use the setter function below
29
45
  @default_field = default_field
@@ -38,17 +54,30 @@ module Avatar # :nodoc:
38
54
  # * <code>:rating or :r</code> - the maximum rating; one of ['G', 'PG', 'R', 'X']
39
55
  def avatar_url_for(person, options = {})
40
56
  return nil if person.nil?
41
- options[:default] ||= default_avatar_url_for(person, options)
42
- field = options[:field] || default_field
57
+ field = options.delete(:field) || default_field
43
58
  raise ArgumentError.new('No field specified; either specify a default field or pass in a value for :field (probably :email)') unless field
44
- url = self.class.base_url
45
- url << Digest::MD5::hexdigest(person.send(field)).strip
46
- [:size, :s, :rating, :r, :default].each do |x|
47
- next unless options[x]
48
- url << (url.include?('?') ? '&' : '?')
49
- url << "#{x}=#{options[x]}"
59
+
60
+ options = parse_options(person, options)
61
+ returning(self.class.base_url) do |url|
62
+ url << Digest::MD5::hexdigest(person.send(field)).strip
63
+ options.each do |k, v|
64
+ next if v.nil?
65
+ url << (url.include?('?') ? '&' : '?')
66
+ url << "#{k}=#{v}"
67
+ end
68
+ end
69
+ end
70
+
71
+ def parse_options(person, options)
72
+ returning({}) do |result|
73
+ result[:default] = options[:default] || default_avatar_url_for(person, options)
74
+
75
+ size = options[:size] || options[:s]
76
+ result[:size] = size if size.to_s =~ /^\d*/
77
+
78
+ rating = options[:rating] || options[:r]
79
+ result[:rating] = rating.upcase if rating and self.class.allowed_ratings.include?(rating.to_s)
50
80
  end
51
- url
52
81
  end
53
82
 
54
83
  # Set the default source for all people.
@@ -37,10 +37,11 @@ module Avatar # :nodoc:
37
37
  end
38
38
 
39
39
  # Iterate through the chain and return the first URL returned.
40
- # Any error raised will propagate.
40
+ # Any error raised will propagate. Duplicates +options+ before
41
+ # passing so each Source receives the same arguments.
41
42
  def avatar_url_for(person, options = {})
42
43
  @chain.each do |source|
43
- result = source.avatar_url_for(person, options)
44
+ result = source.avatar_url_for(person, options.dup)
44
45
  return result unless result.nil?
45
46
  end
46
47
  return nil
@@ -2,7 +2,7 @@ module Avatar #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -47,12 +47,12 @@ class TestGravatarSource < Test::Unit::TestCase
47
47
 
48
48
  def test_size
49
49
  assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=70", @source.avatar_url_for(@gary, :size => 70)
50
- assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?s=62", @source.avatar_url_for(@gary, :s => 62)
50
+ assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=62", @source.avatar_url_for(@gary, :s => 62)
51
51
  end
52
52
 
53
53
  def test_rating
54
54
  assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?rating=R", @source.avatar_url_for(@gary, :rating => 'R')
55
- assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?r=PG", @source.avatar_url_for(@gary, :r => 'PG')
55
+ assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?rating=PG", @source.avatar_url_for(@gary, :r => 'PG')
56
56
  end
57
57
 
58
58
  end
@@ -33,7 +33,7 @@
33
33
  <h1>Avatar</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/avatar"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/avatar" class="numbers">0.0.1</a>
36
+ <a href="http://rubyforge.org/projects/avatar" class="numbers">0.0.2</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;Avatar&#8217;</h1>
39
39
 
@@ -76,7 +76,7 @@ end</p>
76
76
  <p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
77
77
 
78
78
 
79
- <p>The trunk repository is <code>svn://rubyforge.org/var/svn/avatar/trunk</code> for anonymous access.</p>
79
+ <p>The project is hosted on <a href="http://github.com/gcnovus/avatar/tree/master">GitHub</a></p>
80
80
 
81
81
 
82
82
  <h2>License</h2>
@@ -88,9 +88,9 @@ end</p>
88
88
  <h2>Contact</h2>
89
89
 
90
90
 
91
- <p>Comments are welcome. Send an email to <a href="mailto:FIXME"><span class="caps">FIXME</span> full name</a> email via the <a href="http://groups.google.com/group/avatar">forum</a></p>
91
+ <p>Comments are welcome. Put them on the <a href="http://groups.google.com/group/ruby-avatar">forum</a></p>
92
92
  <p class="coda">
93
- <a href="FIXME email">FIXME full name</a>, 25th March 2008<br>
93
+ <a href="FIXME email">FIXME full name</a>, 26th March 2008<br>
94
94
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
95
95
  </p>
96
96
  </div>
@@ -32,7 +32,7 @@ h2. How to submit patches
32
32
 
33
33
  Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
34
34
 
35
- The trunk repository is <code>svn://rubyforge.org/var/svn/avatar/trunk</code> for anonymous access.
35
+ The project is hosted on "GitHub":http://github.com/gcnovus/avatar/tree/master
36
36
 
37
37
  h2. License
38
38
 
@@ -40,5 +40,5 @@ This code is free to use under the terms of the MIT license.
40
40
 
41
41
  h2. Contact
42
42
 
43
- Comments are welcome. Send an email to "FIXME full name":mailto:FIXME email via the "forum":http://groups.google.com/group/avatar
43
+ Comments are welcome. Put them on the "forum":http://groups.google.com/group/ruby-avatar
44
44
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avatar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Rosen
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-03-25 00:00:00 -04:00
12
+ date: 2008-03-26 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15