gravtastic 2.2.0 → 3.0.0
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/README.md +62 -20
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/lib/gravtastic.rb +38 -34
- data/spec/gravtastic_integration_spec.rb +40 -26
- data/spec/gravtastic_spec.rb +0 -3
- data/spec/helper.rb +5 -0
- metadata +16 -7
- data/spec/spec_helper.rb +0 -15
data/README.md
CHANGED
@@ -12,9 +12,9 @@ The best way to learn more about Gravtastic is to [look at the source](http://gi
|
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
|
15
|
-
Add this to your `
|
15
|
+
Add this to your `Gemfile`:
|
16
16
|
|
17
|
-
|
17
|
+
gem 'gravtastic'
|
18
18
|
|
19
19
|
Next, say that you want a Gravatar for your model:
|
20
20
|
|
@@ -40,20 +40,6 @@ Now all your Gravatars will come from a secure connection, be a GIF and be 120x1
|
|
40
40
|
|
41
41
|
_Note: You can use either `is_gravtastic!` or `is_gravtastic`, they both do the same thing._
|
42
42
|
|
43
|
-
### Plain Ruby
|
44
|
-
|
45
|
-
So you just have a regular ol' Ruby app? No Rails and ActiveRecord?
|
46
|
-
|
47
|
-
require 'gravtastic'
|
48
|
-
class BoringUser
|
49
|
-
include Gravtastic
|
50
|
-
is_gravtastic!
|
51
|
-
end
|
52
|
-
|
53
|
-
And wallah! That works exactly the same as in Rails! Now all instances of the BoringUser class will have `#gravatar_url` methods.
|
54
|
-
|
55
|
-
_Note: the `#gravatar_url` methods don't get included until you specify the class `is_gravtastic!`_
|
56
|
-
|
57
43
|
### Complete List of Options
|
58
44
|
|
59
45
|
<table>
|
@@ -95,6 +81,58 @@ _Note: the `#gravatar_url` methods don't get included until you specify the clas
|
|
95
81
|
</tr>
|
96
82
|
</table>
|
97
83
|
|
84
|
+
## Other ORM
|
85
|
+
|
86
|
+
### Plain Ruby
|
87
|
+
|
88
|
+
So you just have a regular ol' Ruby app? No Rails and ActiveRecord?
|
89
|
+
|
90
|
+
require 'gravtastic'
|
91
|
+
class BoringUser
|
92
|
+
include Gravtastic
|
93
|
+
is_gravtastic!
|
94
|
+
end
|
95
|
+
|
96
|
+
And wallah! That works exactly the same as in Rails! Now all instances of the BoringUser class will have `#gravatar_url` methods.
|
97
|
+
|
98
|
+
_Note: the `#gravatar_url` methods don't get included until you specify the class `is_gravtastic!`_
|
99
|
+
|
100
|
+
### DataMapper
|
101
|
+
|
102
|
+
require 'dm-core'
|
103
|
+
require 'gravtastic'
|
104
|
+
class User
|
105
|
+
include DataMapper::Resource
|
106
|
+
is :gravtastic
|
107
|
+
end
|
108
|
+
|
109
|
+
### Sequel
|
110
|
+
|
111
|
+
require 'sequel'
|
112
|
+
require 'gravtastic'
|
113
|
+
class User < Sequel::Model
|
114
|
+
plugin Gravtastic
|
115
|
+
end
|
116
|
+
|
117
|
+
### MongoMapper
|
118
|
+
|
119
|
+
require 'mongo_mapper'
|
120
|
+
require 'gravtastic'
|
121
|
+
class User
|
122
|
+
include MongoMapper::Document
|
123
|
+
plugin Gravtastic
|
124
|
+
end
|
125
|
+
|
126
|
+
### Mongoid
|
127
|
+
|
128
|
+
require 'mongoid'
|
129
|
+
require 'gravtastic'
|
130
|
+
class User
|
131
|
+
include Mongoid::Document
|
132
|
+
is_gravtastic
|
133
|
+
end
|
134
|
+
|
135
|
+
|
98
136
|
## Making Changes Yourself
|
99
137
|
|
100
138
|
Fork the project, submit a pull request and I'll get to it straight away. Or you can just view the source like:
|
@@ -104,10 +142,14 @@ Fork the project, submit a pull request and I'll get to it straight away. Or you
|
|
104
142
|
## Thanks
|
105
143
|
|
106
144
|
* [Xavier Shay](http://rhnh.net) and others for [Enki](http://enkiblog.com) (the reason this was originally written)
|
107
|
-
* [Matthew Moore](http://
|
108
|
-
* [
|
109
|
-
* [
|
110
|
-
* [
|
145
|
+
* [Matthew Moore](http://github.com/moorage)
|
146
|
+
* [Galen O'Hanlon](http://github.com/gohanlon)
|
147
|
+
* [Jason Cheow](http://jasoncheow.com)
|
148
|
+
* [Paul Farnell](http://github.com/salted)
|
149
|
+
* [Jeff Kreeftmeijer](http://github.com/jeffkreeftmeijer)
|
150
|
+
* [Ryan Lewis](http://github.com/c00lryguy)
|
151
|
+
* [Arthur Chiu](http://github.com/achiu)
|
152
|
+
|
111
153
|
|
112
154
|
## License
|
113
155
|
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0
|
data/lib/gravtastic.rb
CHANGED
@@ -4,73 +4,73 @@ require 'uri'
|
|
4
4
|
|
5
5
|
module Gravtastic
|
6
6
|
|
7
|
-
def self.included(base)
|
8
|
-
base.extend(SingletonMethods)
|
9
|
-
end
|
10
|
-
|
11
7
|
def self.version
|
12
8
|
File.read(__FILE__.sub('lib/gravtastic.rb','VERSION')).strip
|
13
9
|
end
|
10
|
+
|
11
|
+
def self.included(model)
|
12
|
+
model.extend ManualConfigure
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.apply(model, *args, &blk)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.configure(model, *args, &blk)
|
19
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
20
|
+
|
21
|
+
model.gravatar_defaults = {
|
22
|
+
:rating => 'PG',
|
23
|
+
:secure => false,
|
24
|
+
:filetype => :png
|
25
|
+
}.merge(options)
|
26
|
+
|
27
|
+
model.gravatar_source = args.first || :email
|
28
|
+
end
|
14
29
|
|
15
|
-
module
|
16
|
-
|
17
|
-
def is_gravtastic(*args)
|
30
|
+
module ManualConfigure
|
31
|
+
def is_gravtastic(*args, &blk)
|
18
32
|
extend ClassMethods
|
19
33
|
include InstanceMethods
|
20
|
-
|
21
|
-
|
22
|
-
source = args.first || :email
|
23
|
-
|
24
|
-
@gravatar_defaults = {
|
25
|
-
:rating => 'PG',
|
26
|
-
:secure => false,
|
27
|
-
:filetype => :png
|
28
|
-
}.merge(options)
|
29
|
-
@gravatar_source = source
|
34
|
+
Gravtastic.configure(self, *args, &blk)
|
35
|
+
self
|
30
36
|
end
|
31
37
|
|
32
38
|
alias_method :has_gravatar, :is_gravtastic
|
33
39
|
alias_method :is_gravtastic!, :is_gravtastic
|
34
|
-
|
35
40
|
end
|
36
41
|
|
37
42
|
module ClassMethods
|
43
|
+
attr_accessor :gravatar_source, :gravatar_defaults
|
38
44
|
|
39
|
-
def
|
40
|
-
@gravatar_source
|
41
|
-
end
|
42
|
-
|
43
|
-
def gravatar_defaults
|
44
|
-
@gravatar_defaults
|
45
|
-
end
|
46
|
-
|
47
|
-
def gravatar_options
|
45
|
+
def gravatar_abbreviations
|
48
46
|
{ :size => 's',
|
49
47
|
:default => 'd',
|
50
48
|
:rating => 'r'
|
51
49
|
}
|
52
50
|
end
|
53
|
-
|
54
51
|
end
|
55
52
|
|
56
53
|
module InstanceMethods
|
57
|
-
|
54
|
+
|
58
55
|
def gravatar_id
|
59
56
|
Digest::MD5.hexdigest(send(self.class.gravatar_source).to_s.downcase)
|
60
57
|
end
|
61
58
|
|
62
59
|
def gravatar_url(options={})
|
63
60
|
options = self.class.gravatar_defaults.merge(options)
|
64
|
-
gravatar_hostname(options.delete(:secure)) +
|
61
|
+
path = gravatar_hostname(options.delete(:secure)) +
|
65
62
|
gravatar_filename(options.delete(:filetype)) +
|
66
63
|
url_params_from_hash(options)
|
64
|
+
|
65
|
+
# This would be alot cleaner with .try(:html_safe)
|
66
|
+
path.respond_to?(:html_safe) ? path.html_safe : path
|
67
67
|
end
|
68
68
|
|
69
69
|
private
|
70
70
|
|
71
71
|
def url_params_from_hash(hash)
|
72
72
|
'?' + hash.map do |key, val|
|
73
|
-
[self.class.
|
73
|
+
[self.class.gravatar_abbreviations[key.to_sym] || key.to_s, CGI::escape(val.to_s) ].join('=')
|
74
74
|
end.sort.join('&')
|
75
75
|
end
|
76
76
|
|
@@ -81,11 +81,15 @@ module Gravtastic
|
|
81
81
|
def gravatar_filename(filetype)
|
82
82
|
"#{gravatar_id}.#{filetype}"
|
83
83
|
end
|
84
|
-
|
85
84
|
end
|
86
85
|
|
87
86
|
end
|
88
87
|
|
88
|
+
# All these ORMs suck balls. See Sequel or MongoMapper for examples of good
|
89
|
+
# plugin systems.
|
90
|
+
|
89
91
|
ActiveRecord::Base.send(:include, Gravtastic) if defined?(ActiveRecord) # :nodoc:
|
90
|
-
DataMapper::
|
91
|
-
|
92
|
+
DataMapper::Model.append_extensions(Gravtastic::ManualConfigure) if defined?(DataMapper) # :nodoc:
|
93
|
+
Mongoid::Document.included do
|
94
|
+
include Gravtastic
|
95
|
+
end if defined?(Mongoid) # :nodoc:
|
@@ -1,38 +1,52 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
require 'rubygems'
|
3
|
-
|
4
1
|
require 'active_record'
|
5
|
-
|
2
|
+
require 'dm-core'
|
3
|
+
require 'sequel'
|
4
|
+
require 'mongo_mapper'
|
5
|
+
require 'mongoid'
|
6
6
|
require 'gravtastic'
|
7
7
|
|
8
|
+
describe ActiveRecord do
|
9
|
+
it "includes Gravtastic" do
|
10
|
+
ActiveRecord::Base.should respond_to(:is_gravtastic)
|
8
11
|
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
describe ActiveRecord::Base do
|
12
|
+
# Class.new(ActiveRecord::Base) do
|
13
|
+
# is_gravtastic
|
14
|
+
# end.new.should respond_to(:gravatar_url)
|
15
|
+
end
|
16
|
+
end
|
15
17
|
|
18
|
+
describe DataMapper do
|
16
19
|
it "includes Gravtastic" do
|
17
|
-
|
20
|
+
Class.new do
|
21
|
+
include DataMapper::Resource
|
22
|
+
is :gravtastic
|
23
|
+
end.new.should respond_to(:gravatar_url)
|
18
24
|
end
|
25
|
+
end
|
19
26
|
|
20
|
-
|
21
|
-
|
27
|
+
describe Sequel do
|
28
|
+
it "includes Gravtastic" do
|
29
|
+
Sequel::Model.plugin Gravtastic
|
30
|
+
# Class.new(Sequel::Model) do
|
31
|
+
# plugin Gravtastic
|
32
|
+
# end.new.should respond_to(:gravatar_url)
|
22
33
|
end
|
23
|
-
|
24
34
|
end
|
25
35
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
# end
|
35
|
-
#
|
36
|
-
# end
|
37
|
-
|
36
|
+
describe MongoMapper do
|
37
|
+
it "includes Gravtastic" do
|
38
|
+
Class.new do
|
39
|
+
include MongoMapper::Document
|
40
|
+
plugin Gravtastic
|
41
|
+
end.new.should respond_to(:gravatar_url)
|
42
|
+
end
|
43
|
+
end
|
38
44
|
|
45
|
+
describe Mongoid do
|
46
|
+
it "includes Gravtastic" do
|
47
|
+
Class.new do
|
48
|
+
include Mongoid::Document
|
49
|
+
is_gravtastic
|
50
|
+
end.new.should respond_to(:gravatar_url)
|
51
|
+
end
|
52
|
+
end
|
data/spec/gravtastic_spec.rb
CHANGED
data/spec/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gravtastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 3
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 3.0.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Chris Lloyd
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-10-11 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -29,7 +34,7 @@ files:
|
|
29
34
|
- lib/gravtastic.rb
|
30
35
|
- spec/gravtastic_integration_spec.rb
|
31
36
|
- spec/gravtastic_spec.rb
|
32
|
-
- spec/
|
37
|
+
- spec/helper.rb
|
33
38
|
has_rdoc: true
|
34
39
|
homepage: http://github.com/chrislloyd/gravtastic
|
35
40
|
licenses: []
|
@@ -40,25 +45,29 @@ rdoc_options:
|
|
40
45
|
require_paths:
|
41
46
|
- lib
|
42
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
43
49
|
requirements:
|
44
50
|
- - ">="
|
45
51
|
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
46
54
|
version: "0"
|
47
|
-
version:
|
48
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
49
57
|
requirements:
|
50
58
|
- - ">="
|
51
59
|
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
52
62
|
version: "0"
|
53
|
-
version:
|
54
63
|
requirements: []
|
55
64
|
|
56
65
|
rubyforge_project: gravtastic
|
57
|
-
rubygems_version: 1.3.
|
66
|
+
rubygems_version: 1.3.7
|
58
67
|
signing_key:
|
59
68
|
specification_version: 3
|
60
69
|
summary: Ruby/Gravatar
|
61
70
|
test_files:
|
62
71
|
- spec/gravtastic_integration_spec.rb
|
63
72
|
- spec/gravtastic_spec.rb
|
64
|
-
- spec/
|
73
|
+
- spec/helper.rb
|
data/spec/spec_helper.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
$TESTING=true
|
2
|
-
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
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
|
-
|
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
|