has_token_on 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +2 -2
- data/Rakefile +1 -1
- data/has_token_on.gemspec +3 -1
- data/lib/has_token_on/models/active_record.rb +4 -136
- data/lib/has_token_on/models/base.rb +149 -0
- data/lib/has_token_on/models/mongoid.rb +20 -0
- data/lib/has_token_on/rails.rb +5 -0
- data/lib/has_token_on/version.rb +1 -1
- data/spec/has_token_on/active_record_spec.rb +31 -0
- data/spec/has_token_on/{has_token_on_spec.rb → base_spec.rb} +3 -36
- data/spec/has_token_on/mongoid_spec.rb +30 -0
- data/spec/spec_helper.rb +3 -0
- metadata +132 -112
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# HasTokenOn
|
2
2
|
|
3
|
-
Simple yet customizable token generator for Rails 3
|
3
|
+
Simple yet customizable token generator for Rails 3.
|
4
4
|
|
5
5
|
# Features
|
6
6
|
|
@@ -106,7 +106,7 @@ has_token_on comes with a generator that generates a migration for token.
|
|
106
106
|
|
107
107
|
# Testing
|
108
108
|
|
109
|
-
Tested on Mac OS X with Ruby 1.9.2
|
109
|
+
Tested on Mac OS X with Ruby 1.9.2. Should work on Ruby 1.8.7+.
|
110
110
|
|
111
111
|
* Enter gem directory
|
112
112
|
* Execute
|
data/Rakefile
CHANGED
data/has_token_on.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
|
22
22
|
s.add_dependency 'rails', ['>= 3.0.0']
|
23
|
-
s.
|
23
|
+
s.add_development_dependency 'simple_uuid'
|
24
24
|
s.add_development_dependency 'sqlite3', ['>= 0']
|
25
25
|
s.add_development_dependency 'rspec', ['>= 2.0.0']
|
26
26
|
s.add_development_dependency 'mocha', ['>= 0.9.8']
|
@@ -30,4 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'growl', ['>= 0']
|
31
31
|
s.add_development_dependency 'rb-fsevent', ['>= 0']
|
32
32
|
s.add_development_dependency 'ruby-debug19', ['>= 0']
|
33
|
+
s.add_development_dependency 'mongoid', ['>= 2']
|
34
|
+
s.add_development_dependency 'bson_ext', ['>= 1.3.1']
|
33
35
|
end
|
@@ -1,149 +1,17 @@
|
|
1
|
-
|
1
|
+
require 'has_token_on/models/base'
|
2
2
|
|
3
3
|
module HasTokenOn
|
4
|
-
|
5
|
-
class LibraryNotPresent < StandardError #:nodoc:
|
6
|
-
end
|
7
|
-
|
8
4
|
module ActiveRecord
|
9
5
|
extend ActiveSupport::Concern
|
10
|
-
|
11
|
-
included do
|
12
|
-
after_initialize { |record| create_tokens(record, :initialize) }
|
13
|
-
before_create { |record| create_tokens(record, :create) }
|
14
|
-
before_update { |record| create_tokens(record, :update) }
|
15
|
-
end
|
16
|
-
|
17
|
-
module ClassMethods
|
18
|
-
# = has_token_on
|
19
|
-
#
|
20
|
-
# Simple yet customizable token generator
|
21
|
-
#
|
22
|
-
# == Declaration
|
23
|
-
#
|
24
|
-
# Declare this in your model to generate token on specified attributes. Declaration can either be:
|
25
|
-
#
|
26
|
-
# For single token with configuration:
|
27
|
-
#
|
28
|
-
# has_token_on :slug, :length => 3
|
29
|
-
#
|
30
|
-
# For multiple tokens with same configuration:
|
31
|
-
#
|
32
|
-
# has_token_on [:slug, :permalink], :length => 3
|
33
|
-
#
|
34
|
-
# For multiple tokens with individual configurations:
|
35
|
-
#
|
36
|
-
# has_token_on :slug, :length => 3
|
37
|
-
# has_token_on :permalink, :length => 5
|
38
|
-
#
|
39
|
-
# Or using single hash:
|
40
|
-
#
|
41
|
-
# has_token_on :slug => { :length => 3 }, :permalink => { :length => 5 }
|
42
|
-
#
|
43
|
-
# == Options
|
44
|
-
#
|
45
|
-
# * :length - length of the token to generate
|
46
|
-
# * :prepend - prepend something to the token string
|
47
|
-
# * :append - append something to the token string
|
48
|
-
# * :unique - should the token be unique among other record's tokens
|
49
|
-
# * :if - sets the token only if Proc passed to this option returns true
|
50
|
-
# * :on - specify when to set the token, possible options are: :initialize, :create, :update
|
51
|
-
# * :seed - elements or functions used to generate hash. Possible options:
|
52
|
-
# * :securerandom (default) uses ActiveSupport::SecureRandom.hex
|
53
|
-
# * :guid uses simple_uuid gem (add it to your Gemfile!).
|
54
|
-
# Length is ignored in this case. GUIDs are 36 characters long.
|
55
|
-
# * ('a'..'z') a Range. Mixes the range elements up to specified length.
|
56
|
-
# * lambda { 2 * 2 } a Proc. Executes proc, length param is ignored in this case.
|
57
|
-
#
|
58
|
-
def has_token_on(*args)
|
59
|
-
@tokens ||= {}
|
60
|
-
|
61
|
-
case args.first
|
62
|
-
when String, Symbol
|
63
|
-
@tokens[args.first] = args.last
|
64
|
-
when Hash
|
65
|
-
args.first.each { |token, config|
|
66
|
-
@tokens[token] = config
|
67
|
-
}
|
68
|
-
when Array
|
69
|
-
args.first.each { |token|
|
70
|
-
@tokens[token] = args.last
|
71
|
-
}
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
# Returns Hash of tokens that are configured for specific class
|
76
|
-
def tokens
|
77
|
-
@tokens
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
6
|
+
include HasTokenOn::Base
|
81
7
|
|
82
8
|
module InstanceMethods
|
83
9
|
|
84
10
|
private
|
85
11
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
tokens_to_build_on(callback).each do |token, config|
|
90
|
-
if !config.has_key?(:if) or (config.has_key?(:if) and config[:if].call(record))
|
91
|
-
begin
|
92
|
-
self[token] = build_token(config)
|
93
|
-
end while (config.has_key?(:unique) and config[:unique]) and self.class.exists?(token => self[token])
|
94
|
-
end
|
95
|
-
end
|
12
|
+
def token_is_nonunique?(token)
|
13
|
+
self.class.exists?(token => self[token])
|
96
14
|
end
|
97
|
-
|
98
|
-
def build_token(config)
|
99
|
-
defaults = { :length => 16, :prepend => "", :append => "", :seed => :securerandom }
|
100
|
-
config = defaults.merge(config)
|
101
|
-
|
102
|
-
return [config[:prepend],
|
103
|
-
build_from_seed(config),
|
104
|
-
config[:append]
|
105
|
-
].join
|
106
|
-
end
|
107
|
-
|
108
|
-
def build_from_seed(config)
|
109
|
-
case config[:seed]
|
110
|
-
when Symbol
|
111
|
-
if config[:seed] == :securerandom
|
112
|
-
ActiveSupport::SecureRandom.hex(config[:length]).first(config[:length])
|
113
|
-
elsif config[:seed] == :guid
|
114
|
-
if simple_uuid_present?
|
115
|
-
::SimpleUUID::UUID.new.to_guid
|
116
|
-
else
|
117
|
-
raise LibraryNotPresent, "Supporting library SimpleUUID is not present. Add it to your Gemfile?"
|
118
|
-
end
|
119
|
-
end
|
120
|
-
when Range
|
121
|
-
chars = config[:seed].to_a
|
122
|
-
(0...config[:length]).collect { chars[Kernel.rand(chars.length)] }.join
|
123
|
-
when Proc
|
124
|
-
config[:seed].call.to_s
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def any_tokens?
|
129
|
-
self.class.tokens && self.class.tokens.any?
|
130
|
-
end
|
131
|
-
|
132
|
-
def tokens_to_build_on(callback)
|
133
|
-
self.class.tokens.select{ |token, config|
|
134
|
-
if config.has_key?(:on)
|
135
|
-
config[:on].include?(callback)
|
136
|
-
else
|
137
|
-
# if user didn't specify :on we set token before record create
|
138
|
-
callback == :create
|
139
|
-
end
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
def simple_uuid_present?
|
144
|
-
defined? ::SimpleUUID
|
145
|
-
end
|
146
|
-
|
147
15
|
end
|
148
16
|
end
|
149
17
|
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
begin; require 'simple_uuid'; rescue LoadError; end
|
2
|
+
|
3
|
+
module HasTokenOn
|
4
|
+
|
5
|
+
class LibraryNotPresent < StandardError #:nodoc:
|
6
|
+
end
|
7
|
+
|
8
|
+
module Base
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
after_initialize { |record| create_tokens(record, :initialize) }
|
13
|
+
before_create { |record| create_tokens(record, :create) }
|
14
|
+
before_update { |record| create_tokens(record, :update) }
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
# = has_token_on
|
19
|
+
#
|
20
|
+
# Simple yet customizable token generator
|
21
|
+
#
|
22
|
+
# == Declaration
|
23
|
+
#
|
24
|
+
# Declare this in your model to generate token on specified attributes. Declaration can either be:
|
25
|
+
#
|
26
|
+
# For single token with configuration:
|
27
|
+
#
|
28
|
+
# has_token_on :slug, :length => 3
|
29
|
+
#
|
30
|
+
# For multiple tokens with same configuration:
|
31
|
+
#
|
32
|
+
# has_token_on [:slug, :permalink], :length => 3
|
33
|
+
#
|
34
|
+
# For multiple tokens with individual configurations:
|
35
|
+
#
|
36
|
+
# has_token_on :slug, :length => 3
|
37
|
+
# has_token_on :permalink, :length => 5
|
38
|
+
#
|
39
|
+
# Or using single hash:
|
40
|
+
#
|
41
|
+
# has_token_on :slug => { :length => 3 }, :permalink => { :length => 5 }
|
42
|
+
#
|
43
|
+
# == Options
|
44
|
+
#
|
45
|
+
# * :length - length of the token to generate
|
46
|
+
# * :prepend - prepend something to the token string
|
47
|
+
# * :append - append something to the token string
|
48
|
+
# * :unique - should the token be unique among other record's tokens
|
49
|
+
# * :if - sets the token only if Proc passed to this option returns true
|
50
|
+
# * :on - specify when to set the token, possible options are: :initialize, :create, :update
|
51
|
+
# * :seed - elements or functions used to generate hash. Possible options:
|
52
|
+
# * :securerandom (default) uses ActiveSupport::SecureRandom.hex
|
53
|
+
# * :guid uses simple_uuid gem (add it to your Gemfile!).
|
54
|
+
# Length is ignored in this case. GUIDs are 36 characters long.
|
55
|
+
# * ('a'..'z') a Range. Mixes the range elements up to specified length.
|
56
|
+
# * lambda { 2 * 2 } a Proc. Executes proc, length param is ignored in this case.
|
57
|
+
#
|
58
|
+
def has_token_on(*args)
|
59
|
+
@tokens ||= {}
|
60
|
+
|
61
|
+
case args.first
|
62
|
+
when String, Symbol
|
63
|
+
@tokens[args.first] = args.last.kind_of?(Symbol) ? {} : args.last
|
64
|
+
when Hash
|
65
|
+
args.first.each { |token, config|
|
66
|
+
@tokens[token] = config
|
67
|
+
}
|
68
|
+
when Array
|
69
|
+
args.first.each { |token|
|
70
|
+
@tokens[token] = args.last
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns Hash of tokens that are configured for specific class
|
76
|
+
def tokens
|
77
|
+
@tokens
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
module InstanceMethods
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def create_tokens(record, callback)
|
87
|
+
return unless any_tokens?
|
88
|
+
|
89
|
+
tokens_to_build_on(callback).each do |token, config|
|
90
|
+
if !config.has_key?(:if) or (config.has_key?(:if) and config[:if].call(record))
|
91
|
+
begin
|
92
|
+
self[token] = build_token(config)
|
93
|
+
end while (config.has_key?(:unique) and config[:unique]) and token_is_nonunique?(token)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def build_token(config)
|
99
|
+
defaults = { :length => 16, :prepend => "", :append => "", :seed => :securerandom }
|
100
|
+
config = defaults.merge(config)
|
101
|
+
|
102
|
+
return [config[:prepend],
|
103
|
+
build_from_seed(config),
|
104
|
+
config[:append]
|
105
|
+
].join
|
106
|
+
end
|
107
|
+
|
108
|
+
def build_from_seed(config)
|
109
|
+
case config[:seed]
|
110
|
+
when Symbol
|
111
|
+
if config[:seed] == :securerandom
|
112
|
+
SecureRandom.hex(config[:length]).first(config[:length])
|
113
|
+
elsif config[:seed] == :guid
|
114
|
+
if simple_uuid_present?
|
115
|
+
::SimpleUUID::UUID.new.to_guid
|
116
|
+
else
|
117
|
+
raise LibraryNotPresent, "Supporting library SimpleUUID is not present. Add it to your Gemfile?"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
when Range
|
121
|
+
chars = config[:seed].to_a
|
122
|
+
(0...config[:length]).collect { chars[Kernel.rand(chars.length)] }.join
|
123
|
+
when Proc
|
124
|
+
config[:seed].call.to_s
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def any_tokens?
|
129
|
+
self.class.tokens && self.class.tokens.any?
|
130
|
+
end
|
131
|
+
|
132
|
+
def tokens_to_build_on(callback)
|
133
|
+
self.class.tokens.select{ |token, config|
|
134
|
+
if config.has_key?(:on)
|
135
|
+
config[:on].include?(callback)
|
136
|
+
else
|
137
|
+
# if user didn't specify :on we set token before record create
|
138
|
+
callback == :create
|
139
|
+
end
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
def simple_uuid_present?
|
144
|
+
defined? ::SimpleUUID
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'has_token_on/models/base'
|
2
|
+
require 'mongoid'
|
3
|
+
|
4
|
+
module HasTokenOn
|
5
|
+
module Mongoid
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
include HasTokenOn::Base
|
8
|
+
|
9
|
+
module InstanceMethods
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def token_is_nonunique?(token)
|
14
|
+
self.class.first(:conditions => { token => self[token] }).present?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
::Mongoid::Document.send :include, HasTokenOn::Mongoid
|
data/lib/has_token_on/rails.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rails'
|
2
|
+
begin; require 'mongoid'; rescue LoadError; end
|
2
3
|
|
3
4
|
module HasTokenOn
|
4
5
|
class Engine < ::Rails::Engine #:nodoc:
|
@@ -11,6 +12,10 @@ module HasTokenOn
|
|
11
12
|
::ActiveSupport.on_load(:active_record) do
|
12
13
|
require File.join(File.dirname(__FILE__), 'models/active_record')
|
13
14
|
end
|
15
|
+
|
16
|
+
if defined? ::Mongoid
|
17
|
+
require File.join(File.dirname(__FILE__), 'models/mongoid')
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/has_token_on/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe HasTokenOn::ActiveRecord do
|
4
|
+
subject { Post.new }
|
5
|
+
|
6
|
+
with_model :post do
|
7
|
+
table do |t|
|
8
|
+
t.string "permalink"
|
9
|
+
end
|
10
|
+
|
11
|
+
model do
|
12
|
+
has_token_on :permalink, {
|
13
|
+
:length => 5,
|
14
|
+
:unique => true,
|
15
|
+
:prepend => "foo",
|
16
|
+
:append => "bar",
|
17
|
+
:on => [:create]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should generate unique token if requested" do
|
23
|
+
somepost = Post.new
|
24
|
+
somepost.stubs(:build_token).returns('hi')
|
25
|
+
somepost.save
|
26
|
+
subject.expects(:build_token).times(3).returns('hi').then.returns('unique')
|
27
|
+
Post.expects(:exists?).twice # on first time we'll find unique
|
28
|
+
subject.save
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
require 'pp'
|
3
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
4
2
|
|
5
|
-
describe HasTokenOn::
|
3
|
+
describe HasTokenOn::Base, "instantiation" do
|
6
4
|
subject { Post }
|
7
5
|
|
8
6
|
with_model :post do
|
@@ -58,7 +56,7 @@ describe HasTokenOn::ActiveRecord, "instantiation" do
|
|
58
56
|
end
|
59
57
|
end
|
60
58
|
|
61
|
-
describe HasTokenOn::
|
59
|
+
describe HasTokenOn::Base, "callbacks" do
|
62
60
|
subject { Post.new }
|
63
61
|
|
64
62
|
with_model :post do
|
@@ -105,7 +103,7 @@ describe HasTokenOn::ActiveRecord, "callbacks" do
|
|
105
103
|
end
|
106
104
|
end
|
107
105
|
|
108
|
-
describe HasTokenOn::
|
106
|
+
describe HasTokenOn::Base do
|
109
107
|
subject { Post.new }
|
110
108
|
|
111
109
|
with_model :post do
|
@@ -210,34 +208,3 @@ describe HasTokenOn::ActiveRecord do
|
|
210
208
|
end
|
211
209
|
|
212
210
|
end
|
213
|
-
|
214
|
-
describe HasTokenOn::ActiveRecord do
|
215
|
-
subject { Post.new }
|
216
|
-
|
217
|
-
with_model :post do
|
218
|
-
table do |t|
|
219
|
-
t.string "permalink"
|
220
|
-
end
|
221
|
-
|
222
|
-
model do
|
223
|
-
has_token_on :permalink, {
|
224
|
-
:length => 5,
|
225
|
-
:unique => true,
|
226
|
-
:prepend => "foo",
|
227
|
-
:append => "bar",
|
228
|
-
:on => [:create]
|
229
|
-
}
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
it "should generate unique token if requested" do
|
234
|
-
somepost = Post.new
|
235
|
-
somepost.stubs(:build_token).returns('hi')
|
236
|
-
somepost.save
|
237
|
-
subject.expects(:build_token).times(3).returns('hi').then.returns('unique')
|
238
|
-
Post.expects(:exists?).twice # on first time we'll find unique
|
239
|
-
subject.save
|
240
|
-
end
|
241
|
-
|
242
|
-
|
243
|
-
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
connection = Mongo::Connection.new
|
4
|
+
Mongoid.database = connection.db("has_token_on_test")
|
5
|
+
|
6
|
+
describe HasTokenOn::Mongoid do
|
7
|
+
before :all do
|
8
|
+
class Post
|
9
|
+
include Mongoid::Document
|
10
|
+
field :slug
|
11
|
+
has_token_on :slug, :unique => true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
Post.destroy_all
|
17
|
+
end
|
18
|
+
|
19
|
+
subject { Post.new }
|
20
|
+
|
21
|
+
it "should generate unique token if requested" do
|
22
|
+
somepost = Post.new
|
23
|
+
somepost.stubs(:build_token).returns('hi')
|
24
|
+
somepost.save
|
25
|
+
subject.expects(:build_token).times(3).returns('hi').then.returns('unique')
|
26
|
+
Post.expects(:exists?).twice # on first time we'll find unique
|
27
|
+
subject.save
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,7 +8,9 @@ require 'with_model'
|
|
8
8
|
require 'mocha'
|
9
9
|
|
10
10
|
require 'has_token_on'
|
11
|
+
require 'has_token_on/models/base'
|
11
12
|
require 'has_token_on/models/active_record'
|
13
|
+
require 'has_token_on/models/mongoid'
|
12
14
|
|
13
15
|
RSpec.configure do |config|
|
14
16
|
config.filter_run :focus => true
|
@@ -16,3 +18,4 @@ RSpec.configure do |config|
|
|
16
18
|
config.extend WithModel
|
17
19
|
end
|
18
20
|
|
21
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
metadata
CHANGED
@@ -1,149 +1,168 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_token_on
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Saulius Grigaliunas
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-05-21 00:00:00 +03:00
|
12
|
+
date: 2011-08-19 00:00:00.000000000 +03:00
|
14
13
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: rails
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2161380880 !ruby/object:Gem::Requirement
|
20
18
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
24
22
|
version: 3.0.0
|
25
23
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: simple_uuid
|
29
24
|
prerelease: false
|
30
|
-
|
25
|
+
version_requirements: *2161380880
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: simple_uuid
|
28
|
+
requirement: &2161380460 !ruby/object:Gem::Requirement
|
31
29
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
type: :
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: sqlite3
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
40
35
|
prerelease: false
|
41
|
-
|
36
|
+
version_requirements: *2161380460
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: sqlite3
|
39
|
+
requirement: &2161379900 !ruby/object:Gem::Requirement
|
42
40
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
47
45
|
type: :development
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rspec
|
51
46
|
prerelease: false
|
52
|
-
|
47
|
+
version_requirements: *2161379900
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &2161379380 !ruby/object:Gem::Requirement
|
53
51
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
57
55
|
version: 2.0.0
|
58
56
|
type: :development
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: mocha
|
62
57
|
prerelease: false
|
63
|
-
|
58
|
+
version_requirements: *2161379380
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mocha
|
61
|
+
requirement: &2161378900 !ruby/object:Gem::Requirement
|
64
62
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
68
66
|
version: 0.9.8
|
69
67
|
type: :development
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: with_model
|
73
68
|
prerelease: false
|
74
|
-
|
69
|
+
version_requirements: *2161378900
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: with_model
|
72
|
+
requirement: &2161378420 !ruby/object:Gem::Requirement
|
75
73
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
79
77
|
version: 0.1.4
|
80
78
|
type: :development
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: guard
|
84
79
|
prerelease: false
|
85
|
-
|
80
|
+
version_requirements: *2161378420
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: guard
|
83
|
+
requirement: &2161377940 !ruby/object:Gem::Requirement
|
86
84
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
90
88
|
version: 0.3.4
|
91
89
|
type: :development
|
92
|
-
version_requirements: *id007
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: guard-rspec
|
95
90
|
prerelease: false
|
96
|
-
|
91
|
+
version_requirements: *2161377940
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: guard-rspec
|
94
|
+
requirement: &2161377460 !ruby/object:Gem::Requirement
|
97
95
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
102
100
|
type: :development
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: growl
|
106
101
|
prerelease: false
|
107
|
-
|
102
|
+
version_requirements: *2161377460
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: growl
|
105
|
+
requirement: &2161369020 !ruby/object:Gem::Requirement
|
108
106
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version:
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
113
111
|
type: :development
|
114
|
-
version_requirements: *id009
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: rb-fsevent
|
117
112
|
prerelease: false
|
118
|
-
|
113
|
+
version_requirements: *2161369020
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: rb-fsevent
|
116
|
+
requirement: &2161368520 !ruby/object:Gem::Requirement
|
119
117
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version:
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
124
122
|
type: :development
|
125
|
-
|
126
|
-
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *2161368520
|
125
|
+
- !ruby/object:Gem::Dependency
|
127
126
|
name: ruby-debug19
|
127
|
+
requirement: &2161368040 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
128
134
|
prerelease: false
|
129
|
-
|
135
|
+
version_requirements: *2161368040
|
136
|
+
- !ruby/object:Gem::Dependency
|
137
|
+
name: mongoid
|
138
|
+
requirement: &2161367520 !ruby/object:Gem::Requirement
|
130
139
|
none: false
|
131
|
-
requirements:
|
132
|
-
- -
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version:
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '2'
|
135
144
|
type: :development
|
136
|
-
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: *2161367520
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: bson_ext
|
149
|
+
requirement: &2161367000 !ruby/object:Gem::Requirement
|
150
|
+
none: false
|
151
|
+
requirements:
|
152
|
+
- - ! '>='
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 1.3.1
|
155
|
+
type: :development
|
156
|
+
prerelease: false
|
157
|
+
version_requirements: *2161367000
|
137
158
|
description: Simple yet customizable token generator for Rails 3
|
138
|
-
email:
|
159
|
+
email:
|
139
160
|
- saulius@ninja.lt
|
140
161
|
executables: []
|
141
|
-
|
142
162
|
extensions: []
|
143
|
-
|
144
|
-
extra_rdoc_files:
|
163
|
+
extra_rdoc_files:
|
145
164
|
- README.md
|
146
|
-
files:
|
165
|
+
files:
|
147
166
|
- .gitignore
|
148
167
|
- .rspec
|
149
168
|
- .rvmrc
|
@@ -158,38 +177,39 @@ files:
|
|
158
177
|
- lib/generators/has_token_on/templates/create_token.rb.erb
|
159
178
|
- lib/has_token_on.rb
|
160
179
|
- lib/has_token_on/models/active_record.rb
|
180
|
+
- lib/has_token_on/models/base.rb
|
181
|
+
- lib/has_token_on/models/mongoid.rb
|
161
182
|
- lib/has_token_on/rails.rb
|
162
183
|
- lib/has_token_on/version.rb
|
163
184
|
- rails/init.rb
|
164
|
-
- spec/has_token_on/
|
185
|
+
- spec/has_token_on/active_record_spec.rb
|
186
|
+
- spec/has_token_on/base_spec.rb
|
187
|
+
- spec/has_token_on/mongoid_spec.rb
|
165
188
|
- spec/spec_helper.rb
|
166
189
|
has_rdoc: true
|
167
190
|
homepage: https://github.com/sauliusg/has_token_on
|
168
|
-
licenses:
|
191
|
+
licenses:
|
169
192
|
- MIT
|
170
193
|
post_install_message:
|
171
194
|
rdoc_options: []
|
172
|
-
|
173
|
-
require_paths:
|
195
|
+
require_paths:
|
174
196
|
- lib
|
175
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
198
|
none: false
|
177
|
-
requirements:
|
178
|
-
- -
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version:
|
181
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ! '>='
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
204
|
none: false
|
183
|
-
requirements:
|
184
|
-
- -
|
185
|
-
- !ruby/object:Gem::Version
|
186
|
-
version:
|
205
|
+
requirements:
|
206
|
+
- - ! '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
187
209
|
requirements: []
|
188
|
-
|
189
210
|
rubyforge_project: has_token_on
|
190
|
-
rubygems_version: 1.6.
|
211
|
+
rubygems_version: 1.6.2
|
191
212
|
signing_key:
|
192
213
|
specification_version: 3
|
193
214
|
summary: A token generator plugin for Rails 3
|
194
215
|
test_files: []
|
195
|
-
|