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 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 [![Build Status](https://secure.travis-ci.org/citrus/has_token_id.png)](http://travis-ci.org/citrus/has_token_id) [![Dependency Status](https://gemnasium.com/citrus/has_token_id.png)](https://gemnasium.com/citrus/has_token_id)
1
+ # has_token_id [![Build Status](https://secure.travis-ci.org/citrus/has_token_id.png)](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.3.1'
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 - 2012 Spencer Steffen and Citrus, released under the New BSD License All rights reserved.
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', '>= 3.0.0')
22
- s.add_dependency('activesupport', '>= 3.0.0')
23
-
24
- s.add_development_dependency('rails', '>= 3.0.0')
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', '>= 2.0.0')
27
- s.add_development_dependency('minitest_should', '>= 0.3.1')
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
- def self.included(base)
8
-
9
- base.instance_eval do
10
-
11
- def has_token_id(options={})
12
- self.send(:include, HasTokenId::Concern)
13
- self.has_token_id_options = self.default_token_options.merge(options)
14
- end
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
- ActiveRecord::Base.send(:include, HasTokenId)
31
+ end
32
+
33
+ ActiveRecord::Base.send(:extend, HasTokenId::ActiveRecordTie)
34
+ ActiveRecord::Base.send(:extend, HasTokenId::FinderMethods)
@@ -1,36 +1,17 @@
1
1
  module HasTokenId
2
2
  module Concern
3
-
4
- extend ActiveSupport::Concern
5
3
 
6
- included do
7
- validates :token, :presence => true, :uniqueness => true
8
- before_validation :generate_token, :on => :create, :if => proc{|record| record.token.nil? }
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, self.has_token_id_options
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
- # Find by token ensuring case sensitivity
55
- def find_by_case_sensitive_token(token)
56
- where("#{token_with_table_name} = ?", token).first
57
- end
58
-
59
- # Find by token regardless of case
60
- def find_by_case_insensitive_token(token)
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
- # Find by token if the first param looks like a token, otherwise use super
77
- def find(*args)
78
- if args[0].is_a?(String) && args[0].length == has_token_id_options[:length]
79
- record = find_by_token(args[0])
80
- end
81
- record || super(*args)
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 token_with_table_name
87
- [ table_name, has_token_id_options[:param_name] ].join(".")
53
+
54
+ def generate_token
55
+ self.token = self.class.generate_unique_token
88
56
  end
89
-
90
- end # ClassMethods
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
@@ -1,3 +1,3 @@
1
1
  module HasTokenId
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
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.exists?(env)
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"
@@ -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 /^item-(.*)/, @item.token
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.3.1
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: 2012-02-29 00:00:00.000000000Z
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: &70291048984920 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 3.0.0
19
+ version: '3'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70291048984920
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: &70291048982160 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - "~>"
31
32
  - !ruby/object:Gem::Version
32
- version: 3.0.0
33
+ version: '3'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70291048982160
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: &70291048980960 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - "~>"
42
46
  - !ruby/object:Gem::Version
43
- version: 3.0.0
47
+ version: '3'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70291048980960
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: &70291048979200 !ruby/object:Gem::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: *70291048979200
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: &70291048977980 !ruby/object:Gem::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.0
75
+ version: '2.0'
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *70291048977980
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: &70291048976940 !ruby/object:Gem::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.1
89
+ version: '0.3'
77
90
  type: :development
78
91
  prerelease: false
79
- version_requirements: *70291048976940
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: &70291048975440 !ruby/object:Gem::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: *70291048975440
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: 1.8.10
157
+ rubygems_version: 2.4.5.1
144
158
  signing_key:
145
- specification_version: 3
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