gravtastic 1.7.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +10 -6
- data/Rakefile +11 -1
- data/lib/gravtastic.rb +53 -29
- data/spec/gravtastic_integration_spec.rb +38 -0
- data/spec/gravtastic_spec.rb +12 -12
- data/spec/spec_helper.rb +5 -0
- metadata +2 -1
data/README.textile
CHANGED
@@ -12,17 +12,21 @@ Somewhere in your application you need to @require 'gravtastic'@. In Rails >= 2.
|
|
12
12
|
|
13
13
|
config.gem 'gravtastic'
|
14
14
|
|
15
|
-
|
15
|
+
If you are using Merb & DataMapper you can add do the same by adding the following to your init.rb file:
|
16
|
+
|
17
|
+
dependency 'gravtastic'
|
18
|
+
|
19
|
+
Make sure you add this after either the @use_orm :datamapper@ line or after a DataMapper extension. The next step is to give your model a Gravatar:
|
16
20
|
|
17
21
|
class User
|
18
|
-
|
22
|
+
is_gravtastic
|
19
23
|
end
|
20
24
|
|
21
|
-
If you are using a standard Ruby class
|
25
|
+
If you are using a standard Ruby class you have to add the line @include Gravtastic::Resource@ before @is_gravtastic@.
|
22
26
|
|
23
27
|
This defaults to looking for the gravatar ID on the @email@ method. So, if your @User@ has an @email@ then it will send that to Gravatar to get their picture. You can change the default gravatar source like this:
|
24
28
|
|
25
|
-
|
29
|
+
is_gravtastic :with => :author_email
|
26
30
|
|
27
31
|
Now, you can access your object's gravatar with the @gravatar_url@ method:
|
28
32
|
|
@@ -39,9 +43,9 @@ Note that it defaults to a PG rating. You can specify extra options with a hash:
|
|
39
43
|
|
40
44
|
However, to DRY things up you can specify defaults in the class declaration.
|
41
45
|
|
42
|
-
|
46
|
+
is_gravtastic :with => :author_email, :rating => 'R18', :size => 20
|
43
47
|
|
44
|
-
Nice, now all the calls to gravatar_url will have the defaults you have specified.
|
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.
|
45
49
|
|
46
50
|
PS. Bonus points for anybody who can tell me what that users email is!
|
47
51
|
|
data/Rakefile
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake/gempackagetask'
|
3
|
+
require 'rake/rdoctask'
|
3
4
|
require 'rubygems/specification'
|
4
5
|
require 'spec/rake/spectask'
|
5
6
|
require 'date'
|
6
7
|
|
7
8
|
GEM = "gravtastic"
|
8
|
-
GEM_VERSION = "
|
9
|
+
GEM_VERSION = "2.0.0"
|
9
10
|
AUTHOR = "Chris Lloyd"
|
10
11
|
EMAIL = "christopher.lloyd@gmail.com"
|
11
12
|
HOMEPAGE = "http://github.com/chrislloyd/gravtastic"
|
@@ -31,10 +32,19 @@ spec = Gem::Specification.new do |s|
|
|
31
32
|
s.files = %w(LICENSE README.textile Rakefile) + Dir.glob("{lib,spec}/**/*")
|
32
33
|
end
|
33
34
|
|
35
|
+
desc "Run Specs"
|
34
36
|
Rake::GemPackageTask.new(spec) do |pkg|
|
35
37
|
pkg.gem_spec = spec
|
36
38
|
end
|
37
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
|
+
|
38
48
|
task :default => :spec
|
39
49
|
task :specs => :spec
|
40
50
|
|
data/lib/gravtastic.rb
CHANGED
@@ -12,19 +12,23 @@ require 'cgi'
|
|
12
12
|
#
|
13
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
14
|
#
|
15
|
-
#
|
15
|
+
# config.gem 'gravtastic'
|
16
16
|
#
|
17
|
-
#
|
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:
|
18
22
|
#
|
19
23
|
# class User
|
20
|
-
#
|
24
|
+
# is_gravtastic
|
21
25
|
# end
|
22
26
|
#
|
23
|
-
# If you are using a standard Ruby class
|
24
|
-
#
|
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
|
+
#
|
25
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:
|
26
30
|
#
|
27
|
-
#
|
31
|
+
# is_gravtastic :with => :author_email
|
28
32
|
#
|
29
33
|
# Now, you can access your object's gravatar with the <tt>gravatar_url</tt> method:
|
30
34
|
#
|
@@ -35,53 +39,62 @@ require 'cgi'
|
|
35
39
|
#
|
36
40
|
# current_user.gravatar_url(:rating => 'R18', :size => 512)
|
37
41
|
# => "http://gravatar.com/e9e719b44653a9300e1567f09f6b2e9e.png?r=R18&s=512"
|
38
|
-
#
|
42
|
+
#
|
39
43
|
# current_user.gravatar_url(:secure => true)
|
40
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.
|
41
51
|
#
|
42
52
|
module Gravtastic
|
43
|
-
module
|
53
|
+
module Resource
|
44
54
|
|
45
55
|
def self.included(base) # :nodoc:
|
46
56
|
base.extend(ClassMethods)
|
47
57
|
end
|
48
|
-
|
58
|
+
|
49
59
|
module ClassMethods
|
50
|
-
|
60
|
+
|
51
61
|
#
|
52
62
|
# Sets the gravatar_source. Basically starts this whole shindig.
|
53
63
|
#
|
54
64
|
# Examples:
|
55
65
|
#
|
56
|
-
#
|
66
|
+
# is_gravtastic
|
57
67
|
#
|
58
|
-
#
|
68
|
+
# is_gravtastic :with => :author_email
|
59
69
|
#
|
60
|
-
#
|
70
|
+
# is_gravtastic :with => :author_email, :rating => 'R18', :secure => true
|
61
71
|
#
|
62
|
-
def
|
63
|
-
@gravatar_source = options[:
|
64
|
-
|
65
|
-
|
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)
|
66
77
|
end
|
67
78
|
|
79
|
+
alias :has_gravatar :is_gravtastic
|
80
|
+
|
68
81
|
#
|
69
82
|
# Returns a symbol of the instance method where the Gravatar is pulled from.
|
70
83
|
#
|
71
84
|
# For example, if your users email is returned by the method <tt>#gobagaldy_gook</tt> then it
|
72
|
-
# will return the symbol <tt>:
|
85
|
+
# will return the symbol <tt>:gobagaldy_gook</tt>.
|
73
86
|
#
|
74
87
|
def gravatar_source
|
75
88
|
@gravatar_source
|
76
89
|
end
|
77
|
-
|
90
|
+
|
78
91
|
#
|
79
92
|
# Returns a hash of all the default gravtastic options.
|
80
93
|
#
|
81
94
|
def gravatar_defaults
|
82
95
|
@gravatar_defaults
|
83
96
|
end
|
84
|
-
|
97
|
+
|
85
98
|
#
|
86
99
|
# Returns <tt>true</tt> if the gravatar_source is set. <tt>false</tt> if not. Easy!
|
87
100
|
#
|
@@ -119,16 +132,16 @@ module Gravtastic
|
|
119
132
|
def gravatar_url(options={})
|
120
133
|
options = self.class.gravatar_defaults.merge(options)
|
121
134
|
|
122
|
-
@gravatar_url =
|
135
|
+
@gravatar_url = gravatar_hostname(options[:secure]) + gravatar_filename + parse_url_options_hash(options)
|
123
136
|
end
|
124
137
|
|
125
138
|
private
|
126
139
|
|
127
|
-
|
128
|
-
|
140
|
+
#
|
141
|
+
# Parses a hash options for the image parameters. Returns a CGI escaped string.
|
142
|
+
#
|
129
143
|
def parse_url_options_hash(options)
|
130
|
-
|
131
|
-
options.delete_if { |key,_| ![:size,:rating,:default].include?(key) }
|
144
|
+
options.delete_if { |key,_| ![:size, :rating, :default].include?(key) }
|
132
145
|
|
133
146
|
unless options.empty?
|
134
147
|
'?' + options.map do |pair|
|
@@ -140,10 +153,16 @@ module Gravtastic
|
|
140
153
|
end
|
141
154
|
end
|
142
155
|
|
143
|
-
|
156
|
+
#
|
157
|
+
# Returns the Gravatar.com hostname
|
158
|
+
#
|
159
|
+
def gravatar_hostname(secure)
|
144
160
|
'http' + (secure ? 's://secure.' : '://') + 'gravatar.com/avatar/'
|
145
161
|
end
|
146
|
-
|
162
|
+
|
163
|
+
#
|
164
|
+
# Returns the filename of the gravatar image.
|
165
|
+
#
|
147
166
|
def gravatar_filename
|
148
167
|
if gravatar_id
|
149
168
|
gravatar_id + '.png'
|
@@ -151,8 +170,13 @@ module Gravtastic
|
|
151
170
|
''
|
152
171
|
end
|
153
172
|
end
|
154
|
-
|
173
|
+
|
155
174
|
end
|
156
175
|
end
|
157
176
|
|
158
|
-
ActiveRecord::Base.send(:include, Gravtastic::
|
177
|
+
ActiveRecord::Base.send(:include, Gravtastic::Resource) if defined?(ActiveRecord) # :nodoc:
|
178
|
+
|
179
|
+
if defined?(DataMapper) # :nodoc:
|
180
|
+
DataMapper::Resource.append_inclusions Gravtastic::Resource
|
181
|
+
DataMapper::Model.append_extensions Gravtastic::Resource::ClassMethods
|
182
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
require 'activerecord'
|
5
|
+
require 'dm-core'
|
6
|
+
|
7
|
+
reload_gravtastic!
|
8
|
+
|
9
|
+
class User
|
10
|
+
include DataMapper::Resource
|
11
|
+
is_gravtastic
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ActiveRecord::Base do
|
15
|
+
|
16
|
+
it "includes Gravtastic::Resource" do
|
17
|
+
ActiveRecord::Base.included_modules.should include(Gravtastic::Resource)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "responds to .is_gravtastic" do
|
21
|
+
ActiveRecord::Base.should respond_to(:is_gravtastic)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
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
|
+
end
|
37
|
+
|
38
|
+
|
data/spec/gravtastic_spec.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Gravtastic::Resource do
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
@user = mock('User')
|
7
|
-
@user.class.send(:include, Gravtastic::
|
7
|
+
@user.class.send(:include, Gravtastic::Resource)
|
8
8
|
@klass = @user.class
|
9
9
|
end
|
10
10
|
|
@@ -34,47 +34,47 @@ describe "Gravtastic::Model" do
|
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
-
describe ".
|
37
|
+
describe ".is_gravtastic" do
|
38
38
|
|
39
39
|
it "sets .gravatar_source to :email by default" do
|
40
|
-
@klass.
|
40
|
+
@klass.is_gravtastic
|
41
41
|
@klass.gravatar_source.should == :email
|
42
42
|
end
|
43
43
|
|
44
44
|
it "sets .gravatar_defaults to { :rating => 'PG', :secure => false } by default" do
|
45
|
-
@klass.
|
45
|
+
@klass.is_gravtastic
|
46
46
|
@klass.gravatar_defaults.should == { :rating => 'PG', :secure => false }
|
47
47
|
end
|
48
48
|
|
49
|
-
it "sets .gravatar_source to :email by default, even when
|
50
|
-
@klass.
|
49
|
+
it "sets .gravatar_source to :email by default, even when defaults are supplied" do
|
50
|
+
@klass.is_gravtastic :secure => true
|
51
51
|
@klass.gravatar_source.should == :email
|
52
52
|
end
|
53
53
|
|
54
54
|
it "keeps either :rating or :secure if only the other is passed as a default" do
|
55
|
-
@klass.
|
55
|
+
@klass.is_gravtastic :secure => true
|
56
56
|
@klass.gravatar_defaults.should == { :rating => 'PG', :secure => true }
|
57
57
|
end
|
58
58
|
|
59
59
|
it "changes .gravatar_source" do
|
60
60
|
lambda {
|
61
|
-
@klass.
|
61
|
+
@klass.is_gravtastic :with => :other_method
|
62
62
|
}.should change(@klass, :gravatar_source)
|
63
63
|
end
|
64
64
|
|
65
65
|
it "changes .gravatar_defaults" do
|
66
66
|
lambda {
|
67
|
-
@klass.
|
67
|
+
@klass.is_gravtastic :rating => 'R18'
|
68
68
|
}.should change(@klass, :gravatar_defaults)
|
69
69
|
end
|
70
70
|
|
71
71
|
it "sets .gravatar_source to the value of :on" do
|
72
|
-
@klass.
|
72
|
+
@klass.is_gravtastic :with => :other_method
|
73
73
|
@klass.gravatar_source.should == :other_method
|
74
74
|
end
|
75
75
|
|
76
76
|
it "sets .gravatar_defaults to the value of :defaults" do
|
77
|
-
@klass.
|
77
|
+
@klass.is_gravtastic :rating => 'R18'
|
78
78
|
@klass.gravatar_defaults.should == { :rating => 'R18', :secure => false }
|
79
79
|
end
|
80
80
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
$TESTING=true
|
2
2
|
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
3
3
|
|
4
|
+
def reload_gravtastic!
|
5
|
+
Object.class_eval { remove_const :Gravtastic } if defined? Gravtastic
|
6
|
+
require File.join(File.dirname(__FILE__),'../lib/gravtastic')
|
7
|
+
end
|
8
|
+
|
4
9
|
require 'gravtastic'
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Lloyd
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- README.textile
|
28
28
|
- Rakefile
|
29
29
|
- lib/gravtastic.rb
|
30
|
+
- spec/gravtastic_integration_spec.rb
|
30
31
|
- spec/gravtastic_spec.rb
|
31
32
|
- spec/spec.opts
|
32
33
|
- spec/spec_helper.rb
|