avatar 0.0.2 → 0.0.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/History.txt +9 -0
- data/lib/avatar/source/abstract_source.rb +9 -0
- data/lib/avatar/source/file_column_source.rb +7 -3
- data/lib/avatar/source/gravatar_source.rb +15 -17
- data/lib/avatar/source/string_substitution_source.rb +2 -2
- data/lib/avatar/version.rb +1 -1
- data/test/test_file_column_source.rb +6 -0
- data/test/test_gravatar_source.rb +4 -2
- data/website/index.html +11 -8
- data/website/index.txt +6 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 0.0.3 2008-03-27
|
2
|
+
* 2 minor fixes:
|
3
|
+
* GravatarSource now takes parameter :gravatar_field instead of :field for compatibility with other sources
|
4
|
+
* FileColumnSource now takes parameter :file_column_field instead of :field for compatibility with other sources
|
5
|
+
|
6
|
+
* 2 minor enhancements:
|
7
|
+
* broke out options parsing in FileColumnSource to allow overriding
|
8
|
+
* added :gravatar_xxx versions to allowed options for GravatarSource
|
9
|
+
|
1
10
|
== 0.0.2 2008-03-24
|
2
11
|
* 1 major fix:
|
3
12
|
* SourceChain duplicates options before passing to elements
|
@@ -16,20 +16,24 @@ module Avatar # :nodoc:
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# Returns nil if person is nil; otherwise, returns the (possibly nil) result of
|
19
|
-
# <code>url_for_image_column</code>, passing in all of +options+ except :
|
19
|
+
# <code>url_for_image_column</code>, passing in all of +options+ except :file_column_field.
|
20
20
|
# Options:
|
21
|
-
# * <code>:
|
21
|
+
# * <code>:file_column_field</code> - the image file column within +person+; by default, :avatar
|
22
22
|
# * <code>:file_column_version</code> - one of the versions of the file_column; no default
|
23
23
|
# If :file_column_version is not specified, all other options are passed to
|
24
24
|
# <code>url_for_image_column</code> as +options+ (see FileColumnHelper)
|
25
25
|
def avatar_url_for(person, options = {})
|
26
26
|
return nil if person.nil?
|
27
|
-
|
27
|
+
options = parse_options(person, options)
|
28
|
+
field = options.delete(:file_column_field) || default_field
|
28
29
|
return nil if field.nil? || person.send(field).nil?
|
29
30
|
options = options[:file_column_version] || options
|
30
31
|
url_for_image_column(person, field, options)
|
31
32
|
end
|
32
33
|
|
34
|
+
def parse_options(person, options)
|
35
|
+
options
|
36
|
+
end
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
@@ -3,15 +3,6 @@ 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
|
-
|
15
6
|
module Avatar # :nodoc:
|
16
7
|
module Source # :nodoc:
|
17
8
|
# NOTE: since Gravatar always returns a URL (never a 404), instances of this
|
@@ -48,16 +39,16 @@ module Avatar # :nodoc:
|
|
48
39
|
|
49
40
|
# Generates a Gravatar URL. Returns nil if person is nil.
|
50
41
|
# Options:
|
51
|
-
# * <code>:
|
42
|
+
# * <code>:gravatar_field (Symbol)</code> - the field to call from person. By default, <code>:email</code>.
|
52
43
|
# * <code>:default (String)</code> - override the default generated by <code>default_source</code>.
|
53
|
-
# * <code>:size or :s</code> - the size in pixels of the avatar to render.
|
54
|
-
# * <code>:rating or :r</code> - the maximum rating; one of ['G', 'PG', 'R', 'X']
|
44
|
+
# * <code>:gravatar_size or size or :s</code> - the size in pixels of the avatar to render.
|
45
|
+
# * <code>:gravatar_rating or rating or :r</code> - the maximum rating; one of ['G', 'PG', 'R', 'X']
|
55
46
|
def avatar_url_for(person, options = {})
|
56
47
|
return nil if person.nil?
|
57
|
-
field = options.delete(:field) || default_field
|
58
|
-
raise ArgumentError.new('No field specified; either specify a default field or pass in a value for :field (probably :email)') unless field
|
59
|
-
|
60
48
|
options = parse_options(person, options)
|
49
|
+
field = options.delete(:gravatar_field)
|
50
|
+
raise ArgumentError.new('No field specified; either specify a default field or pass in a value for :gravatar_field (probably :email)') unless field
|
51
|
+
|
61
52
|
returning(self.class.base_url) do |url|
|
62
53
|
url << Digest::MD5::hexdigest(person.send(field)).strip
|
63
54
|
options.each do |k, v|
|
@@ -68,14 +59,21 @@ module Avatar # :nodoc:
|
|
68
59
|
end
|
69
60
|
end
|
70
61
|
|
62
|
+
# Returns a Hash containing
|
63
|
+
# * :field - passed through; defaults to <code>self.default_field</code>
|
64
|
+
# * :default - passed through; defaults to <code>self.default_avatar_url_for(+person+, +options+)</code>
|
65
|
+
# * :size - :gravatar_size or :size or :s passed through <em>only if a number</em>
|
66
|
+
# * :rating - :gravatar_rating or :rating or :r passed through <em>only if one of <code>self.class.allowed_ratings</code></em>
|
71
67
|
def parse_options(person, options)
|
72
68
|
returning({}) do |result|
|
69
|
+
result[:gravatar_field] = options[:gravatar_field] || default_field
|
70
|
+
|
73
71
|
result[:default] = options[:default] || default_avatar_url_for(person, options)
|
74
72
|
|
75
|
-
size = options[:size] || options[:s]
|
73
|
+
size = options[:gravatar_size] || options[:size] || options[:s]
|
76
74
|
result[:size] = size if size.to_s =~ /^\d*/
|
77
75
|
|
78
|
-
rating = options[:rating] || options[:r]
|
76
|
+
rating = options[:gravatar_rating] || options[:rating] || options[:r]
|
79
77
|
result[:rating] = rating.upcase if rating and self.class.allowed_ratings.include?(rating.to_s)
|
80
78
|
end
|
81
79
|
end
|
@@ -15,8 +15,8 @@ module Avatar # :nodoc:
|
|
15
15
|
# Create a new source with static url +url+, which can contain any number
|
16
16
|
# of variables to be subsituted through +options+. Strings should
|
17
17
|
# be of the form '...#{variable_a}...#{variable_b}...'. <em>note the
|
18
|
-
# single quotes</em
|
19
|
-
# substituted at Source-creation (when #new is called)
|
18
|
+
# single quotes</em>. Double quotes will cause the variables to be
|
19
|
+
# substituted at Source-creation (when #new is called), which is almost
|
20
20
|
# certainly <strong>not</strong> what you want.
|
21
21
|
def initialize(url)
|
22
22
|
raise ArgumentError.new("URL cannot be nil") if url.nil?
|
data/lib/avatar/version.rb
CHANGED
@@ -4,6 +4,7 @@ require 'avatar/source/file_column_source'
|
|
4
4
|
|
5
5
|
class User < ActiveRecord::Base
|
6
6
|
file_column :avatar
|
7
|
+
file_column :icon
|
7
8
|
end
|
8
9
|
|
9
10
|
class TestFileColumnSource < Test::Unit::TestCase
|
@@ -12,6 +13,7 @@ class TestFileColumnSource < Test::Unit::TestCase
|
|
12
13
|
@source = Avatar::Source::FileColumnSource.new
|
13
14
|
png = File.new(File.join(File.dirname(__FILE__), ['lib', 'user_suit.png']))
|
14
15
|
@user_with_avatar = User.create!(:email => 'joe@example.com', :avatar => png)
|
16
|
+
@user_with_icon = User.create!(:email => 'terry@example.com', :icon => png)
|
15
17
|
@user_without_avatar = User.create!(:email => 'sue@example.com')
|
16
18
|
end
|
17
19
|
|
@@ -27,4 +29,8 @@ class TestFileColumnSource < Test::Unit::TestCase
|
|
27
29
|
assert_equal "/user/avatar/#{@user_with_avatar.id}/0/user_suit.png", @source.avatar_url_for(@user_with_avatar)
|
28
30
|
end
|
29
31
|
|
32
|
+
def test_avatar_url_for_person_with_icon_and_custom_file_column_field
|
33
|
+
assert_equal "/user/icon/#{@user_with_icon.id}/0/user_suit.png", @source.avatar_url_for(@user_with_icon, :file_column_field => :icon)
|
34
|
+
end
|
35
|
+
|
30
36
|
end
|
@@ -21,7 +21,7 @@ class TestGravatarSource < Test::Unit::TestCase
|
|
21
21
|
|
22
22
|
def test_field
|
23
23
|
name_hash = Digest::MD5::hexdigest(@gary.name)
|
24
|
-
assert_equal "http://www.gravatar.com/avatar/#{name_hash}", @source.avatar_url_for(@gary, :
|
24
|
+
assert_equal "http://www.gravatar.com/avatar/#{name_hash}", @source.avatar_url_for(@gary, :gravatar_field => :name)
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_site_wide_default_string
|
@@ -46,11 +46,13 @@ class TestGravatarSource < Test::Unit::TestCase
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_size
|
49
|
-
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=70", @source.avatar_url_for(@gary, :
|
49
|
+
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=70", @source.avatar_url_for(@gary, :gravatar_size => 70)
|
50
|
+
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=109", @source.avatar_url_for(@gary, :size => 109)
|
50
51
|
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?size=62", @source.avatar_url_for(@gary, :s => 62)
|
51
52
|
end
|
52
53
|
|
53
54
|
def test_rating
|
55
|
+
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?rating=G", @source.avatar_url_for(@gary, :gravatar_rating => 'G')
|
54
56
|
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?rating=R", @source.avatar_url_for(@gary, :rating => 'R')
|
55
57
|
assert_equal "http://www.gravatar.com/avatar/#{@email_hash}?rating=PG", @source.avatar_url_for(@gary, :r => 'PG')
|
56
58
|
end
|
data/website/index.html
CHANGED
@@ -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.
|
36
|
+
<a href="http://rubyforge.org/projects/avatar" class="numbers">0.0.3</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘Avatar’</h1>
|
39
39
|
|
@@ -55,14 +55,17 @@ Set up Avatar::source (by default, a Gravatar with a StaticUrl as the default)</
|
|
55
55
|
<h2>Demonstration of usage</h2>
|
56
56
|
|
57
57
|
|
58
|
-
|
58
|
+
app/helpers/people_helper.rb:
|
59
|
+
<pre><code class='ruby'>
|
60
|
+
class PeopleHelper
|
59
61
|
include Avatar::View::ActionViewSupport
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
<p>app/views/people/show.html.erb:
|
64
|
-
<%= avatar_tag(@current_user, :size => 40) %></p>
|
62
|
+
end
|
63
|
+
</code></pre>
|
65
64
|
|
65
|
+
app/views/people/show.html.erb:
|
66
|
+
<pre><code class='ruby erb'>
|
67
|
+
<%= avatar_tag(@current_user, :size => 40) %>
|
68
|
+
</code></pre>
|
66
69
|
|
67
70
|
<h2>Forum</h2>
|
68
71
|
|
@@ -90,7 +93,7 @@ end</p>
|
|
90
93
|
|
91
94
|
<p>Comments are welcome. Put them on the <a href="http://groups.google.com/group/ruby-avatar">forum</a></p>
|
92
95
|
<p class="coda">
|
93
|
-
<a href="FIXME email">FIXME full name</a>,
|
96
|
+
<a href="FIXME email">FIXME full name</a>, 27th March 2008<br>
|
94
97
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
95
98
|
</p>
|
96
99
|
</div>
|
data/website/index.txt
CHANGED
@@ -16,12 +16,17 @@ Set up Avatar::source (by default, a Gravatar with a StaticUrl as the default)
|
|
16
16
|
|
17
17
|
h2. Demonstration of usage
|
18
18
|
|
19
|
+
app/helpers/people_helper.rb:
|
20
|
+
<pre><code class='ruby'>
|
19
21
|
class PeopleHelper
|
20
22
|
include Avatar::View::ActionViewSupport
|
21
|
-
end
|
23
|
+
end
|
24
|
+
</code></pre>
|
22
25
|
|
23
26
|
app/views/people/show.html.erb:
|
27
|
+
<pre><code class='ruby erb'>
|
24
28
|
<%= avatar_tag(@current_user, :size => 40) %>
|
29
|
+
</code></pre>
|
25
30
|
|
26
31
|
|
27
32
|
h2. Forum
|
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.
|
4
|
+
version: 0.0.3
|
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-
|
12
|
+
date: 2008-03-27 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|