has_token_id 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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