has_token_id 0.3.1 → 0.4.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.
- checksums.yaml +7 -0
- data/README.md +4 -4
- data/has_token_id.gemspec +8 -8
- data/lib/has_token_id.rb +17 -15
- data/lib/has_token_id/concern.rb +32 -64
- data/lib/has_token_id/finder_methods.rb +41 -0
- data/lib/has_token_id/version.rb +1 -1
- data/test/test_helper.rb +1 -2
- data/test/unit/concern_test.rb +45 -45
- data/test/unit/has_token_id_test.rb +3 -7
- metadata +64 -50
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1a1c0ccaba9d98fa8f1e2018bfd79d3d6f53b33b
|
4
|
+
data.tar.gz: bb715b4c6c5ce510ad8f78e37d19dbb429c91de3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: be8a58757749a4f5a4687310729535e3c62511f8640cec9ec582f3477d7ebc92207f8513c681fd2897ecb1d5c80080425a8cb1e794b41c9925423e275e68aa23
|
7
|
+
data.tar.gz: a0604087c626d0a8dcf7dd6ee69f36876baa7bd34d063de53716b9044402cc8f53b8721c57668ce6b5f994bd2e54a2470c1dc08f8bd725760febd08479b040c6
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# has_token_id [](http://travis-ci.org/citrus/has_token_id)
|
1
|
+
# has_token_id [](http://travis-ci.org/citrus/has_token_id)
|
2
2
|
|
3
3
|
Identify your active records with random tokens when you don't want your users to see a sequential ID.
|
4
4
|
|
@@ -10,7 +10,7 @@ Installation
|
|
10
10
|
Add has_token_id to your Gemfile like so:
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
gem 'has_token_id', '~> 0.
|
13
|
+
gem 'has_token_id', '~> 0.4.0'
|
14
14
|
```
|
15
15
|
|
16
16
|
Now run `bundle install` and you're good to go!
|
@@ -73,7 +73,7 @@ Options
|
|
73
73
|
You can customize has_token_id by setting a few options. Here's the defaults:
|
74
74
|
|
75
75
|
```ruby
|
76
|
-
:prefix => nil, # if nil use first letter of class name
|
76
|
+
:prefix => nil, # if nil use first letter of class name
|
77
77
|
:length => 24,
|
78
78
|
:short_token_length => 8,
|
79
79
|
:param_name => 'token',
|
@@ -154,4 +154,4 @@ bundle exec rake
|
|
154
154
|
License
|
155
155
|
------------------------------------------------------------------------------
|
156
156
|
|
157
|
-
Copyright (c) 2011 -
|
157
|
+
Copyright (c) 2011 - 2016 Spencer Steffen and Citrus, released under the New BSD License All rights reserved.
|
data/has_token_id.gemspec
CHANGED
@@ -12,19 +12,19 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.homepage = "https://github.com/citrus/has_token_id"
|
13
13
|
s.summary = %q{Identifies your active records with a random token.}
|
14
14
|
s.description = %q{Identifies your active records with a random token. For more information, please see the documentation.}
|
15
|
-
|
15
|
+
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features,lib/dummy_hooks}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
|
-
|
21
|
-
s.add_dependency('activerecord', '
|
22
|
-
s.add_dependency('activesupport', '
|
23
|
-
|
24
|
-
s.add_development_dependency('rails', '
|
20
|
+
|
21
|
+
s.add_dependency('activerecord', '~> 3')
|
22
|
+
s.add_dependency('activesupport', '~> 3')
|
23
|
+
|
24
|
+
s.add_development_dependency('rails', '~> 3')
|
25
25
|
s.add_development_dependency('dummier', '>= 0.3.0')
|
26
|
-
s.add_development_dependency('minitest', '
|
27
|
-
s.add_development_dependency('minitest_should', '
|
26
|
+
s.add_development_dependency('minitest', '~> 2.0')
|
27
|
+
s.add_development_dependency('minitest_should', '~> 0.3')
|
28
28
|
s.add_development_dependency('sqlite3', '>= 1.3.5')
|
29
29
|
|
30
30
|
end
|
data/lib/has_token_id.rb
CHANGED
@@ -1,32 +1,34 @@
|
|
1
1
|
require 'digest/sha1'
|
2
2
|
require 'has_token_id/concern'
|
3
|
+
require 'has_token_id/finder_methods'
|
3
4
|
require 'has_token_id/table_definition'
|
4
5
|
|
5
6
|
module HasTokenId
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
module ActiveRecordTie
|
9
|
+
|
10
|
+
def has_token_id(options={})
|
11
|
+
self.send(:include, HasTokenId::Concern)
|
12
|
+
@has_token_id_options = HasTokenId.default_token_options.merge(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_token_id_options
|
16
|
+
@has_token_id_options
|
16
17
|
end
|
17
|
-
|
18
|
+
|
18
19
|
end
|
19
|
-
|
20
|
+
|
20
21
|
def self.default_token_options
|
21
22
|
@default_token_options ||= {
|
22
|
-
:prefix => nil, # if nil use first letter of class name
|
23
|
+
:prefix => nil, # if nil use first letter of class name
|
23
24
|
:length => 24,
|
24
25
|
:short_token_length => 8,
|
25
26
|
:param_name => 'token',
|
26
27
|
:case_sensitive => false
|
27
28
|
}
|
28
29
|
end
|
29
|
-
|
30
|
-
end # Has Token
|
31
30
|
|
32
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
ActiveRecord::Base.send(:extend, HasTokenId::ActiveRecordTie)
|
34
|
+
ActiveRecord::Base.send(:extend, HasTokenId::FinderMethods)
|
data/lib/has_token_id/concern.rb
CHANGED
@@ -1,36 +1,17 @@
|
|
1
1
|
module HasTokenId
|
2
2
|
module Concern
|
3
|
-
|
4
|
-
extend ActiveSupport::Concern
|
5
3
|
|
6
|
-
included
|
7
|
-
|
8
|
-
|
4
|
+
def self.included(base)
|
5
|
+
base.send(:extend, ClassMethods)
|
6
|
+
base.send(:include, InstanceMethods)
|
7
|
+
base.class_eval do
|
8
|
+
validates :token, :presence => true, :uniqueness => true
|
9
|
+
before_validation :generate_token, :on => :create, :if => proc{|record| record.token.nil? }
|
10
|
+
end
|
9
11
|
end
|
10
12
|
|
11
|
-
# Returns the resource's token
|
12
|
-
def to_param
|
13
|
-
self.send(self.class.has_token_id_options[:param_name])
|
14
|
-
end
|
15
|
-
|
16
|
-
# Returns the first N digits of the resource's token
|
17
|
-
# N = has_token_id_options[:short_token_length]
|
18
|
-
def short_token
|
19
|
-
max = self.class.has_token_id_options[:length]
|
20
|
-
len = self.class.has_token_id_options[:short_token_length]
|
21
|
-
to_param[0, len < max ? len : max]
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def generate_token
|
27
|
-
self.token = self.class.generate_unique_token
|
28
|
-
end
|
29
|
-
|
30
13
|
module ClassMethods
|
31
|
-
|
32
|
-
attr_accessor :has_token_id_options
|
33
|
-
|
14
|
+
|
34
15
|
# Default options as well as an overwrite point so you can assign different defaults to different models
|
35
16
|
def default_token_options
|
36
17
|
return @default_token_options if @default_token_options
|
@@ -38,10 +19,10 @@ module HasTokenId
|
|
38
19
|
@default_token_options[:prefix] ||= self.name[0, 1]
|
39
20
|
@default_token_options
|
40
21
|
end
|
41
|
-
|
22
|
+
|
42
23
|
# Generates a unique token based on the options
|
43
24
|
def generate_unique_token
|
44
|
-
record, options = true,
|
25
|
+
record, options = true, @has_token_id_options
|
45
26
|
conditions = {}
|
46
27
|
while record
|
47
28
|
token = [ options[:prefix], Digest::SHA1.hexdigest((Time.now.to_i * rand()).to_s)].compact.join[0...options[:length].to_i]
|
@@ -50,45 +31,32 @@ module HasTokenId
|
|
50
31
|
end
|
51
32
|
token
|
52
33
|
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
where("lower(#{token_with_table_name}) = ?", token.downcase).first
|
62
|
-
end
|
63
|
-
|
64
|
-
# Find by token
|
65
|
-
def find_by_token(token)
|
66
|
-
send(has_token_id_options[:case_sensitive] ? :find_by_case_sensitive_token : :find_by_case_insensitive_token, token) rescue nil
|
67
|
-
end
|
68
|
-
|
69
|
-
# Find by token and raise error if no record is found
|
70
|
-
def find_by_token!(token)
|
71
|
-
record = find_by_token(token)
|
72
|
-
raise ActiveRecord::RecordNotFound, "Could not find #{self.name} with token #{token.inspect}" if record.nil?
|
73
|
-
record
|
34
|
+
|
35
|
+
end # ClassMethods
|
36
|
+
|
37
|
+
module InstanceMethods
|
38
|
+
|
39
|
+
# Returns the resource's token
|
40
|
+
def to_param
|
41
|
+
self.send(self.class.has_token_id_options[:param_name])
|
74
42
|
end
|
75
|
-
|
76
|
-
#
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
43
|
+
|
44
|
+
# Returns the first N digits of the resource's token
|
45
|
+
# N = has_token_id_options[:short_token_length]
|
46
|
+
def short_token
|
47
|
+
max = self.class.has_token_id_options[:length]
|
48
|
+
len = self.class.has_token_id_options[:short_token_length]
|
49
|
+
to_param[0, len < max ? len : max]
|
82
50
|
end
|
83
|
-
|
51
|
+
|
84
52
|
private
|
85
|
-
|
86
|
-
def
|
87
|
-
|
53
|
+
|
54
|
+
def generate_token
|
55
|
+
self.token = self.class.generate_unique_token
|
88
56
|
end
|
89
|
-
|
90
|
-
end #
|
57
|
+
|
58
|
+
end # InstanceMethods
|
91
59
|
|
92
60
|
end # Concern
|
93
|
-
|
61
|
+
|
94
62
|
end # HasTokenId
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module HasTokenId
|
2
|
+
module FinderMethods
|
3
|
+
|
4
|
+
# Find by token ensuring case sensitivity
|
5
|
+
def find_by_case_sensitive_token(token)
|
6
|
+
where("#{token_with_table_name} = ?", token).first
|
7
|
+
end
|
8
|
+
|
9
|
+
# Find by token regardless of case
|
10
|
+
def find_by_case_insensitive_token(token)
|
11
|
+
where("lower(#{token_with_table_name}) = ?", token.downcase).first
|
12
|
+
end
|
13
|
+
|
14
|
+
# Find by token
|
15
|
+
def find_by_token(token)
|
16
|
+
send(has_token_id_options[:case_sensitive] ? :find_by_case_sensitive_token : :find_by_case_insensitive_token, token)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Find by token and raise error if no record is found
|
20
|
+
def find_by_token!(token)
|
21
|
+
record = find_by_token(token)
|
22
|
+
raise ActiveRecord::RecordNotFound, "Could not find #{self.name} with token #{token.inspect}" if record.nil?
|
23
|
+
record
|
24
|
+
end
|
25
|
+
|
26
|
+
# Find by token if the first param looks like a token, otherwise use super
|
27
|
+
def find(*args)
|
28
|
+
if args[0].is_a?(String) && args[0].length == has_token_id_options[:length]
|
29
|
+
record = find_by_token(args[0])
|
30
|
+
end
|
31
|
+
record || super(*args)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def token_with_table_name
|
37
|
+
"#{table_name}.#{has_token_id_options[:param_name]}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
data/lib/has_token_id/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -13,13 +13,12 @@ rescue LoadError
|
|
13
13
|
end
|
14
14
|
|
15
15
|
env = File.expand_path("../dummy/config/environment.rb", __FILE__)
|
16
|
-
if File.
|
16
|
+
if File.exist?(env)
|
17
17
|
require env
|
18
18
|
else
|
19
19
|
raise LoadError, "Please create the dummy app before running tests. Try running `bundle exec dummier`"
|
20
20
|
end
|
21
21
|
|
22
|
-
require "rails/test_help"
|
23
22
|
require "minitest/autorun"
|
24
23
|
require "minitest/should"
|
25
24
|
require "support/test_case"
|
data/test/unit/concern_test.rb
CHANGED
@@ -3,25 +3,25 @@ require "test_helper"
|
|
3
3
|
# We'll test the test/dummy/app/item.rb model
|
4
4
|
|
5
5
|
class ConcernTest < MiniTest::Should::TestCase
|
6
|
-
|
6
|
+
|
7
7
|
setup do
|
8
8
|
# remove all items
|
9
9
|
Item.destroy_all
|
10
10
|
# reset to defaults
|
11
11
|
Item.has_token_id_options.merge!(Item.default_token_options)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
should "respond to has_token_id" do
|
15
15
|
assert Item.respond_to?(:has_token_id)
|
16
16
|
end
|
17
|
-
|
18
|
-
should "set it's token" do
|
17
|
+
|
18
|
+
should "set it's token" do
|
19
19
|
@item = Item.new(:name => "Something")
|
20
20
|
assert @item.valid?
|
21
21
|
assert !@item.token.nil?
|
22
22
|
assert @item.save
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
should "only set it's token once" do
|
26
26
|
@item = Item.new(:name => "Something")
|
27
27
|
assert @item.valid?
|
@@ -31,105 +31,105 @@ class ConcernTest < MiniTest::Should::TestCase
|
|
31
31
|
assert @item.valid?
|
32
32
|
assert_equal token, @item.token
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
should "join token with table name when searching for record" do
|
36
|
-
assert_equal "items.token", Item.send(:token_with_table_name)
|
36
|
+
assert_equal "items.token", Item.send(:token_with_table_name)
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
context "with an existing item" do
|
40
|
-
|
40
|
+
|
41
41
|
setup do
|
42
42
|
@item = Item.create(:name => "Blue Cheese Burger")
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
should "assume token prefix" do
|
46
46
|
assert_equal "I", @item.token[0, 1]
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
should "have default options" do
|
50
50
|
opts = { :prefix => "I", :length => 24, :short_token_length => 8, :param_name => "token", :case_sensitive => false }
|
51
51
|
assert_equal opts, Item.has_token_id_options
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
should "have proper token length" do
|
55
55
|
assert_equal Item.has_token_id_options[:length], @item.token.length
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
should "have token as to_param" do
|
59
59
|
assert_equal @item.to_param, @item.token
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
should "have short token" do
|
63
63
|
assert_equal @item.token[0, 8], @item.short_token
|
64
64
|
assert_equal 8, @item.short_token.length
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
should "return max token size when short token length is set longer than token length" do
|
68
68
|
Item.has_token_id_options.merge!(:short_token_length => 99)
|
69
69
|
assert_equal @item.token[0..24], @item.short_token
|
70
70
|
assert_equal 24, @item.short_token.length
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
should "find by token" do
|
74
74
|
assert_equal @item, Item.find(@item.token)
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
should "work with token finder method" do
|
78
78
|
assert Item.find_by_token(@item.token)
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
should "work with !bang token finder method" do
|
82
82
|
assert Item.find_by_token!(@item.token)
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
should "return nil from token finder method when record is not found" do
|
86
86
|
assert_equal nil, Item.find_by_token("invalid")
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
should "raise activerecord not found from !bang token finder method when record is not found" do
|
90
90
|
assert_raises ActiveRecord::RecordNotFound do
|
91
91
|
Item.find_by_token!("invalid")
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
context "when case sensitivity is disabled" do
|
96
|
-
|
96
|
+
|
97
97
|
setup do
|
98
98
|
Item.has_token_id_options[:case_sensitive] = false
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
should "find by token" do
|
102
102
|
assert_equal @item, Item.find(@item.token)
|
103
103
|
assert_equal @item, Item.find_by_token(@item.token)
|
104
104
|
assert_equal @item, Item.find_by_token!(@item.token)
|
105
|
-
end
|
106
|
-
|
105
|
+
end
|
106
|
+
|
107
107
|
should "find by token even if it's all uppercase" do
|
108
108
|
assert_equal @item, Item.find(@item.token.upcase)
|
109
109
|
assert_equal @item, Item.find_by_token(@item.token.upcase)
|
110
110
|
assert_equal @item, Item.find_by_token!(@item.token.upcase)
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
should "find by token even if it's all lowercase" do
|
114
114
|
assert_equal @item, Item.find(@item.token.downcase)
|
115
115
|
assert_equal @item, Item.find_by_token(@item.token.downcase)
|
116
116
|
assert_equal @item, Item.find_by_token!(@item.token.downcase)
|
117
117
|
end
|
118
|
-
|
118
|
+
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
context "when case sensitivity is enabled" do
|
122
|
-
|
122
|
+
|
123
123
|
setup do
|
124
124
|
Item.has_token_id_options[:case_sensitive] = true
|
125
125
|
end
|
126
|
-
|
126
|
+
|
127
127
|
should "find by token" do
|
128
128
|
assert_equal @item, Item.find(@item.token)
|
129
129
|
assert_equal @item, Item.find_by_token(@item.token)
|
130
130
|
assert_equal @item, Item.find_by_token!(@item.token)
|
131
|
-
end
|
132
|
-
|
131
|
+
end
|
132
|
+
|
133
133
|
should "not find by token if it's all uppercase" do
|
134
134
|
assert_raises ActiveRecord::RecordNotFound do
|
135
135
|
Item.find(@item.token.upcase)
|
@@ -139,7 +139,7 @@ class ConcernTest < MiniTest::Should::TestCase
|
|
139
139
|
Item.find_by_token!(@item.token.upcase)
|
140
140
|
end
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
should "not find by token if it's all lowercase" do
|
144
144
|
assert_raises ActiveRecord::RecordNotFound do
|
145
145
|
Item.find(@item.token.downcase)
|
@@ -149,36 +149,36 @@ class ConcernTest < MiniTest::Should::TestCase
|
|
149
149
|
assert Item.find_by_token!(@item.token.downcase)
|
150
150
|
end
|
151
151
|
end
|
152
|
-
|
152
|
+
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
end
|
156
156
|
|
157
157
|
context "with a long token" do
|
158
|
-
|
158
|
+
|
159
159
|
setup do
|
160
160
|
Item.has_token_id_options[:length] = 40
|
161
161
|
@item = Item.create(:name => "Bacon Cheese Burger")
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
should "have long token" do
|
165
165
|
assert_equal 40, @item.token.length
|
166
166
|
end
|
167
|
-
|
167
|
+
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
context "with long prefix" do
|
171
|
-
|
171
|
+
|
172
172
|
setup do
|
173
173
|
Item.has_token_id_options.update(:prefix => "item-", :length => 40)
|
174
174
|
@item = Item.create(:name => "Bacon Cheese Burger")
|
175
175
|
end
|
176
|
-
|
177
|
-
should "account for longer prefixes" do
|
176
|
+
|
177
|
+
should "account for longer prefixes" do
|
178
178
|
assert_equal 40, @item.token.length
|
179
|
-
assert_match
|
179
|
+
assert_match Regexp.new("^item-(.*)"), @item.token
|
180
180
|
end
|
181
|
-
|
181
|
+
|
182
182
|
end
|
183
|
-
|
183
|
+
|
184
184
|
end
|
@@ -1,17 +1,13 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
3
|
class HasTokenIdIdTest < MiniTest::Should::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
should "have version" do
|
6
6
|
assert_equal String, HasTokenId::VERSION.class
|
7
7
|
end
|
8
|
-
|
9
|
-
should "include HasTokenId" do
|
10
|
-
assert ActiveRecord::Base.included_modules.include?(HasTokenId)
|
11
|
-
end
|
12
|
-
|
8
|
+
|
13
9
|
should "have has_token_id method" do
|
14
10
|
assert ActiveRecord::Base.respond_to?(:has_token_id)
|
15
11
|
end
|
16
|
-
|
12
|
+
|
17
13
|
end
|
metadata
CHANGED
@@ -1,93 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_token_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Spencer Steffen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-08-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3
|
19
|
+
version: '3'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: activesupport
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: 3
|
33
|
+
version: '3'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3'
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: rails
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - "~>"
|
42
46
|
- !ruby/object:Gem::Version
|
43
|
-
version: 3
|
47
|
+
version: '3'
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: dummier
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ">="
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: 0.3.0
|
55
62
|
type: :development
|
56
63
|
prerelease: false
|
57
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.3.0
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: minitest
|
60
|
-
requirement:
|
61
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
62
72
|
requirements:
|
63
|
-
- -
|
73
|
+
- - "~>"
|
64
74
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.0
|
75
|
+
version: '2.0'
|
66
76
|
type: :development
|
67
77
|
prerelease: false
|
68
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: minitest_should
|
71
|
-
requirement:
|
72
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
73
86
|
requirements:
|
74
|
-
- -
|
87
|
+
- - "~>"
|
75
88
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0.3
|
89
|
+
version: '0.3'
|
77
90
|
type: :development
|
78
91
|
prerelease: false
|
79
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.3'
|
80
97
|
- !ruby/object:Gem::Dependency
|
81
98
|
name: sqlite3
|
82
|
-
requirement:
|
83
|
-
none: false
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
84
100
|
requirements:
|
85
|
-
- -
|
101
|
+
- - ">="
|
86
102
|
- !ruby/object:Gem::Version
|
87
103
|
version: 1.3.5
|
88
104
|
type: :development
|
89
105
|
prerelease: false
|
90
|
-
version_requirements:
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.3.5
|
91
111
|
description: Identifies your active records with a random token. For more information,
|
92
112
|
please see the documentation.
|
93
113
|
email:
|
@@ -96,8 +116,8 @@ executables: []
|
|
96
116
|
extensions: []
|
97
117
|
extra_rdoc_files: []
|
98
118
|
files:
|
99
|
-
- .gitignore
|
100
|
-
- .travis.yml
|
119
|
+
- ".gitignore"
|
120
|
+
- ".travis.yml"
|
101
121
|
- Gemfile
|
102
122
|
- LICENSE
|
103
123
|
- README.md
|
@@ -105,6 +125,7 @@ files:
|
|
105
125
|
- has_token_id.gemspec
|
106
126
|
- lib/has_token_id.rb
|
107
127
|
- lib/has_token_id/concern.rb
|
128
|
+
- lib/has_token_id/finder_methods.rb
|
108
129
|
- lib/has_token_id/table_definition.rb
|
109
130
|
- lib/has_token_id/version.rb
|
110
131
|
- test/dummy_hooks/after_migrate.sample
|
@@ -116,33 +137,26 @@ files:
|
|
116
137
|
- test/unit/table_definition_test.rb
|
117
138
|
homepage: https://github.com/citrus/has_token_id
|
118
139
|
licenses: []
|
140
|
+
metadata: {}
|
119
141
|
post_install_message:
|
120
142
|
rdoc_options: []
|
121
143
|
require_paths:
|
122
144
|
- lib
|
123
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
-
none: false
|
125
146
|
requirements:
|
126
|
-
- -
|
147
|
+
- - ">="
|
127
148
|
- !ruby/object:Gem::Version
|
128
149
|
version: '0'
|
129
|
-
segments:
|
130
|
-
- 0
|
131
|
-
hash: -3396225044547462416
|
132
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
-
none: false
|
134
151
|
requirements:
|
135
|
-
- -
|
152
|
+
- - ">="
|
136
153
|
- !ruby/object:Gem::Version
|
137
154
|
version: '0'
|
138
|
-
segments:
|
139
|
-
- 0
|
140
|
-
hash: -3396225044547462416
|
141
155
|
requirements: []
|
142
156
|
rubyforge_project:
|
143
|
-
rubygems_version:
|
157
|
+
rubygems_version: 2.4.5.1
|
144
158
|
signing_key:
|
145
|
-
specification_version:
|
159
|
+
specification_version: 4
|
146
160
|
summary: Identifies your active records with a random token.
|
147
161
|
test_files:
|
148
162
|
- test/dummy_hooks/after_migrate.sample
|