tsalzer-img_gravatar 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -3,12 +3,12 @@ require 'rubygems'
3
3
  require 'rake'
4
4
  require 'echoe'
5
5
 
6
- Echoe.new('img_gravatar', '0.0.0') do |p|
6
+ Echoe.new('img_gravatar', '0.0.1') do |p|
7
7
  p.description = "Add a img_gravatar helper to ActiveView."
8
8
  p.url = "http://github.com/tsalzer/img_gravatar"
9
9
  p.author = "Till Salzer"
10
10
  p.email = "till.salzer@googlemail.com"
11
- p.ignore_pattern = ["tmp/*", "script/*", "rdoc/*"]
11
+ p.ignore_pattern = ["tmp/*", "script/*", "rdoc/*", "pkg/*", "gravatar.tmproj"]
12
12
  p.development_dependencies = []
13
13
  end
14
14
 
data/img_gravatar.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{img_gravatar}
5
- s.version = "0.0.0"
5
+ s.version = "0.0.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Till Salzer"]
9
- s.date = %q{2009-01-17}
9
+ s.date = %q{2009-01-20}
10
10
  s.description = %q{Add a img_gravatar helper to ActiveView.}
11
11
  s.email = %q{till.salzer@googlemail.com}
12
12
  s.extra_rdoc_files = ["lib/img_gravatar.rb", "README.rdoc", "tasks/img_gravatar_tasks.rake"]
data/init.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  # Include hook code here
2
- # $Id$
3
2
 
4
3
  require 'gravatar'
data/install.rb CHANGED
@@ -1,2 +1 @@
1
1
  # Install hook code here
2
- # $Id$
data/lib/img_gravatar.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'md5'
2
2
  require 'uri'
3
+ require 'action_view'
3
4
 
4
5
  # = Gravatar
5
6
  #
@@ -7,23 +8,30 @@ require 'uri'
7
8
  #
8
9
  # $Id$
9
10
  module ImgGravatar #:nodoc:
11
+ mattr_reader :gravatar_host
12
+ @@gravatar_host = 'www.gravatar.com'
10
13
  # gravatar.com base URL.
11
- # This is +http://www.gravatar.com/avatar.php+.
14
+ # This is +http://www.gravatar.com/avatar/+.
12
15
  mattr_reader :gravatar_base_url
13
- @@gravatar_base_url = 'http://www.gravatar.com/avatar.php'
16
+ @@gravatar_base_url = "http://#{@@gravatar_host}/avatar"
14
17
 
15
18
  # default image URL. Default is +/img/no_gravatar.png+.
16
19
  mattr_accessor :default_img_url
17
20
  @@default_img_url = '/img/no_gravatar.png'
18
21
 
19
- # Default size of the image in pixel. Default is +40+.
22
+ mattr_reader :minimum_size
23
+ @@minimum_size = 1
24
+ mattr_reader :maximum_size
25
+ @@maximum_size = 512
26
+
27
+ # Default size of the image in pixel. Default is +80+.
20
28
  mattr_accessor :default_size
21
- @@default_size = 40
29
+ @@default_size = 80
22
30
 
23
31
  # default rating.
24
- # Valid values are +G+, default is +G+.
32
+ # Valid values are +g+, +r+, +x+, default is +g+.
25
33
  mattr_accessor :default_rating
26
- @@default_rating = 'G'
34
+ @@default_rating = 'g'
27
35
 
28
36
  # Methods injected in all ActionView classes.
29
37
  module Base #:nodoc:
@@ -52,30 +60,54 @@ module ImgGravatar #:nodoc:
52
60
  def img_gravatar(email, opts={})
53
61
  # the defaults
54
62
  alt = nil
55
- default_img_url = ImgGravatar.default_img_url
56
- size = ImgGravatar.default_size
57
- rating = ImgGravatar.default_rating
63
+ appender = '?'
58
64
 
59
65
  # now, load infos from options
60
66
  alt = opts[:alt] if opts[:alt]
61
- default_img_url = opts[:default_url] if opts[:default_url]
62
- size = opts[:size] if opts[:size]
63
- rating = opts[:rating] if opts[:rating]
67
+ default_img_url = check_default_opt(opts[:default_url])
68
+ size = check_size_opt(opts[:size] )
69
+ rating = check_rating_opt(opts[:rating])
64
70
 
65
- #uri = URI::HTTP.new(Gravatar.gravatar_base_url)
66
- uri = "%s?gravatar_id=%s&rating=%s&size=%s" % [ImgGravatar.gravatar_base_url,
67
- MD5.md5(email.strip),
68
- rating,
69
- size
70
- ]
71
+ query = nil
72
+ query = "s=%s" % size if size
73
+ query = query ? "%s&r=%s" % [query, rating] : "r=%s" % rating if rating
74
+ query = query ? "%s&d=%s" % [query, default_img_url] : "d=%s" % default_img_url if default_img_url
71
75
 
76
+ query = URI.escape(query) if query
77
+
78
+ #uri = URI::HTTP.new(Gravatar.gravatar_base_url)
79
+ uri = URI::HTTP.build(:host => ImgGravatar.gravatar_host,
80
+ :path => "/avatar/%s" % MD5.md5(email.downcase.strip),
81
+ :query => query)
82
+
72
83
  if alt then
73
84
  "<img src=\"%s\" alt=\"%s\" />" % [uri, alt]
74
85
  else
75
86
  "<img src=\"%s\" />" % uri
76
87
  end
88
+
89
+ end
90
+
91
+
92
+ private
93
+
94
+ def check_size_opt(size)
95
+ if size and size >= ImgGravatar.minimum_size and size <= ImgGravatar.maximum_size
96
+ return size
97
+ end
98
+ end
99
+
100
+ def check_rating_opt(rating)
101
+ if rating and ['g', 'r', 'x'].include?(rating)
102
+ return rating
103
+ end
77
104
  end
78
105
 
106
+ def check_default_opt(dflt)
107
+ if dflt
108
+ return dflt
109
+ end
110
+ end
79
111
  end
80
112
  end
81
113
 
@@ -1,9 +1,88 @@
1
1
  # Unit tests for ImgGravatar
2
2
  require 'test/unit'
3
+ require 'img_gravatar'
4
+
5
+ class TestView < ActionView::Base
6
+ end
3
7
 
4
8
  class ImgGravatarTest < Test::Unit::TestCase
5
- # TODO: Replace this with your real tests.
6
- def test_this_plugin
7
- flunk
9
+ @@gravatar_host = "www.gravatar.com"
10
+ @@base_url = "http://#{@@gravatar_host}/avatar"
11
+ @@ref_mail = "iHaveAn@email.com"
12
+ @@ref_hash = "3b3be63a4c2a439b013787725dfce802"
13
+
14
+
15
+ def test_actionview_integration
16
+ myview = TestView.new
17
+ assert myview.respond_to?('img_gravatar'), "integration into ActionView failed"
18
+ end
19
+
20
+ def test_reference_data
21
+ myview = TestView.new
22
+ # the reference data from http://en.gravatar.com/site/implement/url
23
+ link_url = myview.img_gravatar(@@ref_mail)
24
+ assert_match(/^<img src="#{@@base_url}\/#{@@ref_hash}\" \/>/, link_url)
25
+ #assert_match(/^<img src="http:\/\/www\.gravatar\.com\/avatar\/#{ref_hash}\" \/>/, link_url)
26
+ end
27
+
28
+ def test_actionview_url
29
+ myview = TestView.new
30
+ link_url = myview.img_gravatar(@@ref_mail)
31
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\" \/>/, link_url)
32
+ end
33
+
34
+ def test_defaults
35
+ myview = TestView.new
36
+ link_url = myview.img_gravatar(@@ref_mail)
37
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\" \/>/, link_url)
38
+ end
39
+
40
+ def test_actionview_ratings
41
+ myview = TestView.new
42
+ ['g', 'r', 'x'].each do |rating|
43
+ link_url = myview.img_gravatar(@@ref_mail, {:rating => rating})
44
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\?r=#{rating}\" \/>/, link_url)
45
+ end
46
+ end
47
+
48
+ def test_actionview_size
49
+ myview = TestView.new
50
+ (1..512).each do |size|
51
+ link_url = myview.img_gravatar(@@ref_mail, {:size => size})
52
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\?s=#{size}\" \/>/, link_url)
53
+ end
54
+ end
55
+
56
+ def test_illegal_small_sizes
57
+ myview = TestView.new
58
+ (-10..0).each do |size|
59
+ link_url = myview.img_gravatar(@@ref_mail, {:size => size})
60
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\" \/>/, link_url)
61
+ end
62
+ end
63
+
64
+ def test_illegal_large_sizes
65
+ myview = TestView.new
66
+ (513..10000).each do |size|
67
+ link_url = myview.img_gravatar(@@ref_mail, {:size => size})
68
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\" \/>/, link_url)
69
+ end
70
+ end
71
+
72
+ def test_default_image_encoding
73
+ myview = TestView.new
74
+ unencoded = "http://example.com/images/example.jpg"
75
+ encoded = 'http%3A%2F%2Fexample.com%2Fimages%2Fexample.jpg'
76
+ link_url = myview.img_gravatar(@@ref_mail, {:default_url => unencoded})
77
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\?d=#{encoded}\" \/>/, link_url)
78
+ end
79
+
80
+ def test_default_image_specials
81
+ myview = TestView.new
82
+ ['identicon', 'monsterid', 'wavatar'].each do |dflt|
83
+ link_url = myview.img_gravatar(@@ref_mail, {:default_url => dflt})
84
+ assert_match(/^<img src="#{@@base_url}\/[a-z0-9]{32}\?d=#{dflt}\" \/>/, link_url)
85
+ end
8
86
  end
87
+
9
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tsalzer-img_gravatar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Till Salzer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-17 00:00:00 -08:00
12
+ date: 2009-01-20 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15