gravtastic 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -35,7 +35,7 @@ Now, you can access your object's gravatar with the @gravatar_url@ method:
35
35
 
36
36
  Note that it defaults to a PG rating. You can specify extra options with a hash:
37
37
 
38
- current_user.gravatar_url(:rating => 'R18', :size => 512)
38
+ current_user.gravatar_url(:rating => 'R', :size => 512)
39
39
  => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=R18&s=512"
40
40
 
41
41
  current_user.gravatar_url(:secure => true)
@@ -43,7 +43,7 @@ Note that it defaults to a PG rating. You can specify extra options with a hash:
43
43
 
44
44
  However, to DRY things up you can specify defaults in the class declaration.
45
45
 
46
- is_gravtastic :with => :author_email, :rating => 'R18', :size => 20
46
+ is_gravtastic :with => :author_email, :rating => 'R', :size => 20
47
47
 
48
48
  Nice, now all the calls to gravatar_url will have the defaults you have specified. Any options that you pass when you use @gravatar_url@ will over-ride these class-defaults.
49
49
 
@@ -69,6 +69,8 @@ h2. Thanks
69
69
 
70
70
  * "Xavier Shay":http://rhnh.net and others for "Enki":http://enkiblog.com (the reason this was written)
71
71
  * "Matthew Moore":http://www.matthewpaulmoore.com/ for helpful suggestions and for submitting it to the official list of Gravatar implementations.
72
+ * "Vincent Charles":http://vincentcharles.com/ For an updated README.
73
+
72
74
 
73
75
 
74
76
  h2. License
data/Rakefile CHANGED
@@ -1,72 +1,76 @@
1
- require 'rubygems'
2
- require 'rake/gempackagetask'
3
- require 'rake/rdoctask'
4
- require 'rubygems/specification'
5
- require 'spec/rake/spectask'
6
- require 'date'
1
+ require 'mg'
7
2
 
8
- GEM = "gravtastic"
9
- GEM_VERSION = "2.0.0"
10
- AUTHOR = "Chris Lloyd"
11
- EMAIL = "christopher.lloyd@gmail.com"
12
- HOMEPAGE = "http://github.com/chrislloyd/gravtastic"
13
- SUMMARY = "Easily add Gravatars to your Ruby objects."
3
+ MG.new('gravtastic.gemspec')
14
4
 
15
- spec = Gem::Specification.new do |s|
16
- s.name = GEM
17
- s.version = GEM_VERSION
18
- s.platform = Gem::Platform::RUBY
19
- s.rubyforge_project = GEM
20
- s.has_rdoc = true
21
- s.extra_rdoc_files = ['README.textile', 'LICENSE']
22
- s.summary = SUMMARY
23
- s.description = s.summary
24
- s.author = AUTHOR
25
- s.email = EMAIL
26
- s.homepage = HOMEPAGE
27
-
28
- # Uncomment this to add a dependency
29
- # s.add_dependency "foo"
30
-
31
- s.require_path = 'lib'
32
- s.files = %w(LICENSE README.textile Rakefile) + Dir.glob("{lib,spec}/**/*")
33
- end
34
-
35
- desc "Run Specs"
36
- Rake::GemPackageTask.new(spec) do |pkg|
37
- pkg.gem_spec = spec
38
- end
39
-
40
- desc "Generate Documentation"
41
- Rake::RDocTask.new do |rdoc|
42
- rdoc.rdoc_dir = 'doc'
43
- rdoc.title = 'Gravtastic'
44
- rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'Gravtastic'
45
- rdoc.rdoc_files.include(FileList[ 'lib/**/*.rb', 'README.textile', 'LICENSE'])
46
- end
47
-
48
- task :default => :spec
49
- task :specs => :spec
50
-
51
- desc "Run all examples"
52
- Spec::Rake::SpecTask.new('spec') do |t|
53
- t.spec_opts = ['--options','spec/spec.opts']
54
- t.spec_files = FileList['spec/**/*.rb']
55
- t.rcov = true
56
- end
57
-
58
- desc "install the gem locally"
59
- task :install => [:package] do
60
- sh %{sudo gem install pkg/#{GEM}-#{GEM_VERSION}}
61
- end
62
-
63
- desc "create a gemspec file"
64
- task :make_spec do
65
- File.open("#{GEM}.gemspec", "w") do |file|
66
- file.puts spec.to_ruby
67
- end
68
- end
69
-
70
- task :bugs do
71
- sh %{ditz html ; open html/index.html}
72
- end
5
+ # require 'rubygems'
6
+ # require 'rake/gempackagetask'
7
+ # require 'rake/rdoctask'
8
+ # require 'rubygems/specification'
9
+ # require 'spec/rake/spectask'
10
+ # require 'date'
11
+ #
12
+ # GEM = "gravtastic"
13
+ # GEM_VERSION = "2.0.0"
14
+ # AUTHOR = "Chris Lloyd"
15
+ # EMAIL = "christopher.lloyd@gmail.com"
16
+ # HOMEPAGE = "http://github.com/chrislloyd/gravtastic"
17
+ # SUMMARY = "Easily add Gravatars to your Ruby objects."
18
+ #
19
+ # spec = Gem::Specification.new do |s|
20
+ # s.name = GEM
21
+ # s.version = GEM_VERSION
22
+ # s.platform = Gem::Platform::RUBY
23
+ # s.rubyforge_project = GEM
24
+ # s.has_rdoc = true
25
+ # s.extra_rdoc_files = ['README.textile', 'LICENSE']
26
+ # s.summary = SUMMARY
27
+ # s.description = s.summary
28
+ # s.author = AUTHOR
29
+ # s.email = EMAIL
30
+ # s.homepage = HOMEPAGE
31
+ #
32
+ # # Uncomment this to add a dependency
33
+ # # s.add_dependency "foo"
34
+ #
35
+ # s.require_path = 'lib'
36
+ # s.files = %w(LICENSE README.textile Rakefile) + Dir.glob("{lib,spec}/**/*")
37
+ # end
38
+ #
39
+ # desc "Run Specs"
40
+ # Rake::GemPackageTask.new(spec) do |pkg|
41
+ # pkg.gem_spec = spec
42
+ # end
43
+ #
44
+ # desc "Generate Documentation"
45
+ # Rake::RDocTask.new do |rdoc|
46
+ # rdoc.rdoc_dir = 'doc'
47
+ # rdoc.title = 'Gravtastic'
48
+ # rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'Gravtastic'
49
+ # rdoc.rdoc_files.include(FileList[ 'lib/**/*.rb', 'README.textile', 'LICENSE'])
50
+ # end
51
+ #
52
+ # task :default => :spec
53
+ # task :specs => :spec
54
+ #
55
+ # desc "Run all examples"
56
+ # Spec::Rake::SpecTask.new('spec') do |t|
57
+ # t.spec_opts = ['--options','spec/spec.opts']
58
+ # t.spec_files = FileList['spec/**/*.rb']
59
+ # # t.rcov = true
60
+ # end
61
+ #
62
+ # desc "install the gem locally"
63
+ # task :install => [:package] do
64
+ # sh %{sudo gem install pkg/#{GEM}-#{GEM_VERSION}}
65
+ # end
66
+ #
67
+ # desc "create a gemspec file"
68
+ # task :make_spec do
69
+ # File.open("#{GEM}.gemspec", "w") do |file|
70
+ # file.puts spec.to_ruby
71
+ # end
72
+ # end
73
+ #
74
+ # task :bugs do
75
+ # sh %{ditz html ; open html/index.html}
76
+ # end
data/lib/gravtastic.rb CHANGED
@@ -3,180 +3,79 @@ $:.unshift(File.dirname(__FILE__)) unless
3
3
 
4
4
  require 'digest/md5'
5
5
  require 'cgi'
6
+ require 'uri'
6
7
 
7
- # = Gravtastic - Easily add Gravatars to your Ruby objects.
8
- #
9
- # Copyright (C) 2008 mailto:christopher.lloyd@gmail.com
10
- #
11
- # == Example
12
- #
13
- # Somewhere in your application you need to <tt>require 'gravtastic'</tt>. In Rails >= 2.1 you can forego this and just add a dependency gem dependency for Gravtastic.
14
- #
15
- # config.gem 'gravtastic'
16
- #
17
- # If you are using Merb & DataMapper you can add do the same by adding the following to your init.rb file:
18
- #
19
- # dependency 'gravtastic'
20
- #
21
- # Make sure you add this after either the <tt>use_orm :datamapper</tt> line or after a DataMapper extension. The next step is to give your model a Gravatar:
22
- #
23
- # class User
24
- # is_gravtastic
25
- # end
26
- #
27
- # If you are using a standard Ruby class you have to add the line <tt>include Gravtastic::Resource</tt> before <tt>is_gravtastic</tt>.
28
- #
29
- # This defaults to looking for the gravatar ID on the <tt>email</tt> method. So, if your <tt>User</tt> has an <tt>email</tt> then it will send that to Gravatar to get their picture. You can change the default gravatar source like this:
30
- #
31
- # is_gravtastic :with => :author_email
32
- #
33
- # Now, you can access your object's gravatar with the <tt>gravatar_url</tt> method:
34
- #
35
- # current_user.gravatar_url
36
- # => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=PG"
37
- #
38
- # Note that it defaults to a PG rating. You can specify extra options with a hash:
39
- #
40
- # current_user.gravatar_url(:rating => 'R18', :size => 512)
41
- # => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=R18&s=512"
42
- #
43
- # current_user.gravatar_url(:secure => true)
44
- # => "https://secure.gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=PG"
45
- #
46
- # However, to DRY things up you can specify defaults in the class declaration.
47
- #
48
- # is_gravtastic :with => :author_email, :rating => 'R18', :size => 20
49
- #
50
- # Nice, now all the calls to gravatar_url will have the defaults you have specified. Any options that you pass when you use <tt>gravatar_url</tt> will over-ride these class-defaults.
51
- #
52
8
  module Gravtastic
53
- module Resource
54
9
 
55
- def self.included(base) # :nodoc:
56
- base.extend(ClassMethods)
10
+ def self.included(base)
11
+ base.extend(SingletonMethods)
12
+ end
13
+
14
+ module SingletonMethods
15
+
16
+ def is_gravtastic(source = :email, options={})
17
+ extend ClassMethods
18
+ include InstanceMethods
19
+
20
+ @gravatar_defaults = {
21
+ :rating => 'PG',
22
+ :secure => false,
23
+ :filetype => :png
24
+ }.merge(options)
25
+ @gravatar_source = source
26
+ end
27
+
28
+ alias :has_gravatar :is_gravtastic
29
+
30
+ end
31
+
32
+ module ClassMethods
33
+
34
+ # attr_reader :gravatar_source, :gravatar_defaults
35
+
36
+ def gravatar_source
37
+ @gravatar_source
57
38
  end
58
-
59
- module ClassMethods
60
-
61
- #
62
- # Sets the gravatar_source. Basically starts this whole shindig.
63
- #
64
- # Examples:
65
- #
66
- # is_gravtastic
67
- #
68
- # is_gravtastic :with => :author_email
69
- #
70
- # is_gravtastic :with => :author_email, :rating => 'R18', :secure => true
71
- #
72
- def is_gravtastic(options={})
73
- @gravatar_source = options[:with] || :email
74
-
75
- options.delete_if {|key,_| ![:size, :rating, :default, :secure].include?(key) }
76
- @gravatar_defaults = {:rating => 'PG', :secure => false}.merge(options)
77
- end
78
-
79
- alias :has_gravatar :is_gravtastic
80
-
81
- #
82
- # Returns a symbol of the instance method where the Gravatar is pulled from.
83
- #
84
- # For example, if your users email is returned by the method <tt>#gobagaldy_gook</tt> then it
85
- # will return the symbol <tt>:gobagaldy_gook</tt>.
86
- #
87
- def gravatar_source
88
- @gravatar_source
89
- end
90
-
91
- #
92
- # Returns a hash of all the default gravtastic options.
93
- #
94
- def gravatar_defaults
95
- @gravatar_defaults
96
- end
97
-
98
- #
99
- # Returns <tt>true</tt> if the gravatar_source is set. <tt>false</tt> if not. Easy!
100
- #
101
- def has_gravatar?
102
- !!gravatar_source
103
- end
104
39
 
40
+ def gravatar_defaults
41
+ @gravatar_defaults
105
42
  end
106
43
 
107
- #
108
- # The raw MD5 hash used by Gravatar, generated from the ClassMethods#gravatar_source.
109
- #
44
+ end
45
+
46
+ module InstanceMethods
47
+
110
48
  def gravatar_id
111
- if self.class.gravatar_source && value = send(self.class.gravatar_source)
112
- @gravatar_id = Digest::MD5.hexdigest(value.to_s.downcase)
113
- end
49
+ Digest::MD5.hexdigest(send(self.class.gravatar_source).to_s.downcase)
114
50
  end
115
51
 
116
- #
117
- # Returns a string with the URL for the instance's Gravatar.
118
- #
119
- # It defaults to <tt>:rating => 'PG'</tt> and <tt>:secure => false</tt>
120
- #
121
- # Examples:
122
- #
123
- # current_user.gravatar_url
124
- # => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=PG"
125
- #
126
- # current_user.gravatar_url(:rating => 'R18', :size => 512, :default => 'http://example.com/images/example.jpg')
127
- # => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?d=http%3A%2F%2Fexample.com%2Fimages%2Fexample.jpg&r=R18&s=512"
128
- #
129
- # current_user.gravatar_url(:secure => true)
130
- # => "https://secure.gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=PG"
131
- #
132
- def gravatar_url(options={})
52
+ def gravatar_url(options={})
133
53
  options = self.class.gravatar_defaults.merge(options)
134
-
135
- @gravatar_url = gravatar_hostname(options[:secure]) + gravatar_filename + parse_url_options_hash(options)
54
+ gravatar_hostname(options.delete(:secure)) +
55
+ gravatar_filename(options.delete(:filetype)) +
56
+ url_params_from_hash(options)
136
57
  end
137
58
 
138
- private
139
-
140
- #
141
- # Parses a hash options for the image parameters. Returns a CGI escaped string.
142
- #
143
- def parse_url_options_hash(options)
144
- options.delete_if { |key,_| ![:size, :rating, :default].include?(key) }
145
-
146
- unless options.empty?
147
- '?' + options.map do |pair|
148
- pair[0] = pair[0].to_s[0,1] # Get the first character of the option
149
- pair.map{|item| item = CGI::escape(item.to_s) }.join('=') # Join key & value together
150
- end.sort.join('&') # Join options together
151
- else
152
- ''
153
- end
59
+ private
60
+
61
+ def url_params_from_hash(hash)
62
+ '?' + hash.map do |pair|
63
+ pair[0] = pair[0].to_s[0,1]
64
+ pair.map{|item| item = CGI::escape(item.to_s) }.join('=')
65
+ end.sort.join('&')
154
66
  end
155
-
156
- #
157
- # Returns the Gravatar.com hostname
158
- #
67
+
159
68
  def gravatar_hostname(secure)
160
69
  'http' + (secure ? 's://secure.' : '://') + 'gravatar.com/avatar/'
161
70
  end
162
71
 
163
- #
164
- # Returns the filename of the gravatar image.
165
- #
166
- def gravatar_filename
167
- if gravatar_id
168
- gravatar_id + '.png'
169
- else
170
- ''
171
- end
72
+ def gravatar_filename(filetype)
73
+ "#{gravatar_id}.#{filetype}"
172
74
  end
173
75
 
174
76
  end
175
- end
176
77
 
177
- ActiveRecord::Base.send(:include, Gravtastic::Resource) if defined?(ActiveRecord) # :nodoc:
78
+ end
178
79
 
179
- if defined?(DataMapper) # :nodoc:
180
- DataMapper::Resource.append_inclusions Gravtastic::Resource
181
- DataMapper::Model.append_extensions Gravtastic::Resource::ClassMethods
182
- end
80
+ ActiveRecord::Base.send(:include, Gravtastic) if defined?(ActiveRecord) # :nodoc:
81
+ DataMapper::Resource.append_inclusions(Gravtastic) if defined?(DataMapper) # :nodoc:
@@ -2,37 +2,37 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
  require 'rubygems'
3
3
 
4
4
  require 'activerecord'
5
- require 'dm-core'
5
+ # require 'dm-core'
6
+ require 'gravtastic'
6
7
 
7
- reload_gravtastic!
8
8
 
9
- class User
10
- include DataMapper::Resource
11
- is_gravtastic
12
- end
9
+ # class User
10
+ # include DataMapper::Resource
11
+ # is_gravtastic
12
+ # end
13
13
 
14
14
  describe ActiveRecord::Base do
15
-
16
- it "includes Gravtastic::Resource" do
17
- ActiveRecord::Base.included_modules.should include(Gravtastic::Resource)
15
+
16
+ it "includes Gravtastic" do
17
+ ActiveRecord::Base.included_modules.should include(Gravtastic)
18
18
  end
19
-
19
+
20
20
  it "responds to .is_gravtastic" do
21
21
  ActiveRecord::Base.should respond_to(:is_gravtastic)
22
22
  end
23
-
24
- end
25
23
 
26
- describe DataMapper::Resource do
27
-
28
- it "includes Gravtastic::Resource" do
29
- User.included_modules.should include(Gravtastic::Resource)
30
- end
31
-
32
- it "responds to .is_gravtastic" do
33
- User.should respond_to(:is_gravtastic)
34
- end
35
-
36
24
  end
37
25
 
26
+ # describe DataMapper::Resource do
27
+ #
28
+ # it "includes Gravtastic::Resource" do
29
+ # User.included_modules.should include(Gravtastic)
30
+ # end
31
+ #
32
+ # it "responds to .is_gravtastic" do
33
+ # User.should respond_to(:is_gravtastic)
34
+ # end
35
+ #
36
+ # end
37
+
38
38
 
@@ -1,218 +1,75 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'gravtastic'
2
3
 
3
- describe Gravtastic::Resource do
4
+ describe Gravtastic do
4
5
 
5
6
  before(:each) do
6
- @user = mock('User')
7
- @user.class.send(:include, Gravtastic::Resource)
8
- @klass = @user.class
9
- end
10
-
11
- describe ".gravatar_source" do
12
-
13
- it "is nil if unset" do
14
- @klass.gravatar_source.should be_nil
15
- end
16
-
17
- it "returns the value of @gravatar_source" do
18
- @klass.instance_variable_set('@gravatar_source', :foo)
19
- @klass.gravatar_source.should == :foo
20
- end
21
-
22
- end
23
-
24
- describe ".gravatar_defaults" do
25
-
26
- it "it nil if unset" do
27
- @klass.gravatar_defaults.should be_nil
28
- end
29
-
30
- it "returns the value of @gravatar_defaults" do
31
- @klass.instance_variable_set('@gravatar_defaults', :foo)
32
- @klass.gravatar_source.should == :foo
7
+ @g = Class.new do |c|
8
+ c.send(:include, Gravtastic)
9
+ c.is_gravtastic
33
10
  end
34
-
35
11
  end
36
-
12
+
37
13
  describe ".is_gravtastic" do
38
-
39
- it "sets .gravatar_source to :email by default" do
40
- @klass.is_gravtastic
41
- @klass.gravatar_source.should == :email
42
- end
43
-
44
- it "sets .gravatar_defaults to { :rating => 'PG', :secure => false } by default" do
45
- @klass.is_gravtastic
46
- @klass.gravatar_defaults.should == { :rating => 'PG', :secure => false }
47
- end
48
-
49
- it "sets .gravatar_source to :email by default, even when defaults are supplied" do
50
- @klass.is_gravtastic :secure => true
51
- @klass.gravatar_source.should == :email
52
- end
53
-
54
- it "keeps either :rating or :secure if only the other is passed as a default" do
55
- @klass.is_gravtastic :secure => true
56
- @klass.gravatar_defaults.should == { :rating => 'PG', :secure => true }
57
- end
58
-
59
- it "changes .gravatar_source" do
60
- lambda {
61
- @klass.is_gravtastic :with => :other_method
62
- }.should change(@klass, :gravatar_source)
63
- end
64
-
65
- it "changes .gravatar_defaults" do
66
- lambda {
67
- @klass.is_gravtastic :rating => 'R18'
68
- }.should change(@klass, :gravatar_defaults)
69
- end
70
-
71
- it "sets .gravatar_source to the value of :on" do
72
- @klass.is_gravtastic :with => :other_method
73
- @klass.gravatar_source.should == :other_method
74
- end
75
-
76
- it "sets .gravatar_defaults to the value of :defaults" do
77
- @klass.is_gravtastic :rating => 'R18'
78
- @klass.gravatar_defaults.should == { :rating => 'R18', :secure => false }
14
+
15
+ it "includes the methods" do
16
+ @g.included_modules.should include(Gravtastic::InstanceMethods)
79
17
  end
80
-
18
+
81
19
  end
82
20
 
83
- describe ".has_gravatar?" do
84
-
85
- it "is true when .gravatar_source is not nil" do
86
- @user.class.stub!(:gravatar_source).and_return(:email)
87
- @user.class.should have_gravatar
21
+ describe 'default' do
22
+
23
+ it "options are {:rating => 'PG', :secure => false, :filetype => :png}" do
24
+ @g.gravatar_defaults.should == {:rating => 'PG', :secure => false, :filetype => :png}
88
25
  end
89
-
90
- it "is false when .gravatar_soruce is not is nil" do
91
- @user.class.stub!(:gravatar_source).and_return(nil)
92
- @user.class.should_not have_gravatar
26
+
27
+ it "source is :email" do
28
+ @g.gravatar_source.should == :email
93
29
  end
94
-
30
+
95
31
  end
96
32
 
97
33
  describe "#gravatar_id" do
98
34
 
99
- before(:each) do
100
- @user.stub!(:email).and_return('joe@example.com')
101
- @user.stub!(:name).and_return('Joe Bloggs')
102
- @user.class.stub!(:gravatar_source).and_return(:email)
103
- end
104
-
105
- it "is not nil when .gravatar_source is not nil" do
106
- @user.gravatar_id.should_not be_nil
107
- end
108
-
109
- it "is nil when .gravatar_source is nil" do
110
- @user.class.stub!(:gravatar_source).and_return(nil)
111
- @user.gravatar_id.should be_nil
35
+ it "downcases email" do
36
+ a = @g.new
37
+ stub(a).email{ 'USER@EXAMPLE.COM' }
38
+ b = @g.new
39
+ stub(b).email{ 'user@example.com' }
40
+ a.gravatar_id.should == b.gravatar_id
112
41
  end
113
42
 
114
- it "changes when .gravatar_source is changed" do
115
- lambda {
116
- @user.class.stub!(:gravatar_source).and_return(:name)
117
- }.should change(@user, :gravatar_id)
118
- end
119
-
120
- it "is a MD5 hash" do
121
- @user.gravatar_id.should == 'f5b8fb60c6116331da07c65b96a8a1d1'
122
- end
123
-
124
- it "downcases any imput" do
125
- @user.stub!(:email).and_return('JOE@EXAMPLE.COM')
126
- @user.gravatar_id.should == 'f5b8fb60c6116331da07c65b96a8a1d1'
127
- end
128
-
129
- it "is nil when email is not a string" do
130
- @user.stub!(:email).and_return(nil)
131
- @user.gravatar_id.should == nil
132
- end
133
-
134
43
  end
135
-
44
+
136
45
  describe "#gravatar_url" do
137
-
46
+
138
47
  before(:each) do
139
- @user.stub!(:email).and_return('joe@example.com')
140
- @user.stub!(:name).and_return('Joe Bloggs')
141
- @user.class.stub!(:gravatar_source).and_return(:email)
142
- @user.class.stub!(:gravatar_defaults).and_return({:rating => 'PG'})
143
- end
144
-
145
- it "is not nil when .gravatar_source is not nil" do
146
- @user.gravatar_url.should_not be_nil
147
- end
148
-
149
- it "returns a default Gravatar url when .gravatar_source is nil" do
150
- @user.class.stub!(:gravatar_source).and_return(nil)
151
- @user.gravatar_url.should =~ /http:\/\/gravatar.com\/avatar/
152
- end
153
-
154
- it "always specifies a png resource type" do
155
- @user.gravatar_url.should match(/.png/)
156
- end
157
-
158
- it "returns a valid gravatar URL" do
159
- @user.gravatar_url.should == valid_gravatar_url + '?r=PG'
160
- end
161
-
162
- it "returns a valid SSL gravatar URL" do
163
- @user.gravatar_url(:secure => true).should == 'https://secure.gravatar.com/avatar/f5b8fb60c6116331da07c65b96a8a1d1.png?r=PG'
164
- end
165
-
166
- it "returns a url without the 'www'" do
167
- @user.gravatar_url.should_not match(/www/)
168
- end
169
-
170
- it "returns a valid gravatar URL even when invalid option is passed" do
171
- @user.gravatar_url(:foo => :bar).should == valid_gravatar_url + '?r=PG'
172
- end
173
-
174
- it "parses a size" do
175
- @user.gravatar_url(:size => 512).should == valid_gravatar_url + '?r=PG&s=512'
48
+ @user = @g.new
49
+ stub(@user).email{ 'user@example.com' }
176
50
  end
177
-
178
- it "parses a rating" do
179
- @user.gravatar_url(:rating => 'MA').should == valid_gravatar_url + '?r=MA'
180
- end
181
-
182
- it "returns a valid gravatar URL when the rating option is unescaped" do
183
- @user.gravatar_url(:rating => 'Unescaped String').should == valid_gravatar_url + '?r=Unescaped+String'
184
- end
185
-
186
- it "parses a default image type" do
187
- @user.gravatar_url(:default => :identicon).should == valid_gravatar_url + '?d=identicon&r=PG'
188
- end
189
-
190
- it "parses a default image URL" do
191
- @user.gravatar_url(:default => 'http://example.com/images/example.jpg').should == valid_gravatar_url + '?d=http%3A%2F%2Fexample.com%2Fimages%2Fexample.jpg&r=PG'
192
- end
193
-
194
- it "parses multiple options" do
195
- @user.gravatar_url(:size => 20, :rating => 'R18', :default => :monsterid).should == valid_gravatar_url + '?d=monsterid&r=R18&s=20'
51
+
52
+ it "makes a pretty URL" do
53
+ @user.gravatar_url.should == 'http://gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.png?r=PG'
196
54
  end
197
-
198
- it "defaults to a 'PG' rating" do
199
- @user.gravatar_url(:rating => 'PG').should == @user.gravatar_url
55
+
56
+ it "makes a secure URL" do
57
+ @user.gravatar_url(:secure => true).should == 'https://secure.gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.png?r=PG'
200
58
  end
201
-
202
- it "uses the defaults from .gravatar_defaults" do
203
- @user.class.stub!(:gravatar_defaults).and_return({ :size => 20, :rating => 'R18'})
204
- @user.gravatar_url.should == valid_gravatar_url + '?r=R18&s=20'
59
+
60
+ it "makes a jpeggy URL" do
61
+ @user.gravatar_url(:filetype => :jpg).should == 'http://gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.jpg?r=PG'
205
62
  end
206
-
207
- it "returns a default Gravatar url when #gravatar_id is nil" do
208
- @user.stub!(:email).and_return(nil)
209
- @user.gravatar_url.should =~ /http:\/\/gravatar.com\/avatar/
63
+
64
+ it "makes a saucy URL" do
65
+ @user.gravatar_url(:rating => 'R').should == 'http://gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.png?r=R'
210
66
  end
211
-
212
- def valid_gravatar_url # :nodoc:
213
- 'http://gravatar.com/avatar/f5b8fb60c6116331da07c65b96a8a1d1.png'
67
+
68
+ it "makes a URL from the defaults" do
69
+ stub(@user.class).gravatar_defaults{ {:size => 20, :rating => 'R18', :secure => true, :filetype => :png} }
70
+ @user.gravatar_url.should == 'https://secure.gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.png?r=R18&s=20'
214
71
  end
215
-
72
+
216
73
  end
217
-
74
+
218
75
  end
data/spec/spec_helper.rb CHANGED
@@ -6,4 +6,10 @@ def reload_gravtastic!
6
6
  require File.join(File.dirname(__FILE__),'../lib/gravtastic')
7
7
  end
8
8
 
9
- require 'gravtastic'
9
+ Spec::Runner.configure do |config|
10
+ config.mock_with :rr
11
+ end
12
+
13
+ class Class
14
+ def to_sym; name.to_sym end
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gravtastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Lloyd
@@ -33,6 +33,8 @@ files:
33
33
  - spec/spec_helper.rb
34
34
  has_rdoc: true
35
35
  homepage: http://github.com/chrislloyd/gravtastic
36
+ licenses: []
37
+
36
38
  post_install_message:
37
39
  rdoc_options: []
38
40
 
@@ -53,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
55
  requirements: []
54
56
 
55
57
  rubyforge_project: gravtastic
56
- rubygems_version: 1.2.0
58
+ rubygems_version: 1.3.2
57
59
  signing_key:
58
60
  specification_version: 2
59
61
  summary: Easily add Gravatars to your Ruby objects.