timed_lru 0.3.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6cf30083009f9f233369eea32cbbe9446ed8cb37
4
- data.tar.gz: 0eaf174e3f28b27e20983daf5adb38a73158e0ac
2
+ SHA256:
3
+ metadata.gz: 256a5775aadc75a4ba0151c3b2530d77b6fe66d8a80163bd4a51500008fc81c4
4
+ data.tar.gz: 2e46aa41b37eac70b04bcabac5abf3d160af09c4da00f8fa89b5e35223b9bf6a
5
5
  SHA512:
6
- metadata.gz: 5e8e534ba9487aab9255be94956beea7c7bec8cd1364c2c2db446258f308c4e5969b50df303ac21197be77ea5d938aeff02577a825247e7147bf76555f7c29ec
7
- data.tar.gz: a4a8b1b83dbd3ad8d50a3d74ad6ff566f27a0ec1e9782615fadd83fdd6e3e643eaf425b4c26efe15c10ec675bcbc596f9942fd88c290bc9858150a66a8cf6029
6
+ metadata.gz: 225fa64f43a2d8c4d730060df4af035697a628f4080c06542828fef00b58c9c7f53d0b871bb60d27cf203f5a0fd34cb47540e4eb3655fe06a192df9a8d1f12ba
7
+ data.tar.gz: 9a24526b95949e25e55b919d66a393a2fe7a1f0fcdd0315c7e8edf0c662038fdd9198d0a0fe808e54b4a66ac534763e6ca798a71f07238232ceeb0ef3214ea2d
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .yardoc/
3
3
  coverage/
4
4
  doc/
5
+ .rubocop-*
@@ -0,0 +1,8 @@
1
+ inherit_from:
2
+ - https://gitlab.com/bsm/misc/raw/master/rubocop/default.yml
3
+
4
+ AllCops:
5
+ TargetRubyVersion: "2.4"
6
+
7
+ Naming/MemoizedInstanceVariableName:
8
+ Enabled: false
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
- script: bundle exec rake coverage
2
+ before_install:
3
+ - gem install bundler
3
4
  rvm:
4
- - 2.2
5
- - 2.3
6
5
  - 2.4
7
- gemfile:
8
- - Gemfile
6
+ - 2.5
7
+ - 2.6
8
+ cache: bundler
data/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'coveralls', require: false, group: :test
5
5
  gem 'json', '>= 1.7.7', require: false, group: :test
6
-
@@ -1,45 +1,58 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- timed_lru (0.3.2)
4
+ timed_lru (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- coveralls (0.8.21)
9
+ ast (2.4.0)
10
+ coveralls (0.8.23)
10
11
  json (>= 1.8, < 3)
11
- simplecov (~> 0.14.1)
12
+ simplecov (~> 0.16.1)
12
13
  term-ansicolor (~> 1.3)
13
- thor (~> 0.19.4)
14
+ thor (>= 0.19.4, < 2.0)
14
15
  tins (~> 1.6)
15
16
  diff-lcs (1.3)
16
- docile (1.1.5)
17
- json (2.1.0)
18
- rake (12.3.0)
19
- redcarpet (3.4.0)
20
- rspec (3.7.0)
21
- rspec-core (~> 3.7.0)
22
- rspec-expectations (~> 3.7.0)
23
- rspec-mocks (~> 3.7.0)
24
- rspec-core (3.7.0)
25
- rspec-support (~> 3.7.0)
26
- rspec-expectations (3.7.0)
17
+ docile (1.3.2)
18
+ jaro_winkler (1.5.3)
19
+ json (2.2.0)
20
+ parallel (1.17.0)
21
+ parser (2.6.3.0)
22
+ ast (~> 2.4.0)
23
+ rainbow (3.0.0)
24
+ rake (12.3.3)
25
+ rspec (3.8.0)
26
+ rspec-core (~> 3.8.0)
27
+ rspec-expectations (~> 3.8.0)
28
+ rspec-mocks (~> 3.8.0)
29
+ rspec-core (3.8.2)
30
+ rspec-support (~> 3.8.0)
31
+ rspec-expectations (3.8.4)
27
32
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.7.0)
29
- rspec-mocks (3.7.0)
33
+ rspec-support (~> 3.8.0)
34
+ rspec-mocks (3.8.1)
30
35
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.7.0)
32
- rspec-support (3.7.0)
33
- simplecov (0.14.1)
34
- docile (~> 1.1.0)
36
+ rspec-support (~> 3.8.0)
37
+ rspec-support (3.8.2)
38
+ rubocop (0.71.0)
39
+ jaro_winkler (~> 1.5.1)
40
+ parallel (~> 1.10)
41
+ parser (>= 2.6)
42
+ rainbow (>= 2.2.2, < 4.0)
43
+ ruby-progressbar (~> 1.7)
44
+ unicode-display_width (>= 1.4.0, < 1.7)
45
+ ruby-progressbar (1.10.1)
46
+ simplecov (0.16.1)
47
+ docile (~> 1.1)
35
48
  json (>= 1.8, < 3)
36
49
  simplecov-html (~> 0.10.0)
37
50
  simplecov-html (0.10.2)
38
- term-ansicolor (1.6.0)
51
+ term-ansicolor (1.7.1)
39
52
  tins (~> 1.0)
40
- thor (0.19.4)
41
- tins (1.16.3)
42
- yard (0.9.12)
53
+ thor (0.20.3)
54
+ tins (1.21.1)
55
+ unicode-display_width (1.6.0)
43
56
 
44
57
  PLATFORMS
45
58
  ruby
@@ -49,10 +62,9 @@ DEPENDENCIES
49
62
  coveralls
50
63
  json (>= 1.7.7)
51
64
  rake
52
- redcarpet
53
65
  rspec
66
+ rubocop
54
67
  timed_lru!
55
- yard
56
68
 
57
69
  BUNDLED WITH
58
- 1.16.0
70
+ 2.0.1
data/Rakefile CHANGED
@@ -1,14 +1,9 @@
1
1
  require 'bundler/setup'
2
2
  require 'bundler/gem_tasks'
3
-
4
3
  require 'rspec/core/rake_task'
5
- RSpec::Core::RakeTask.new(:spec)
6
- RSpec::Core::RakeTask.new(:coverage) do |c|
7
- c.ruby_opts = '-r ./spec/coverage_helper'
8
- end
4
+ require 'rubocop/rake_task'
9
5
 
10
- require 'yard'
11
- YARD::Rake::YardocTask.new
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ RuboCop::RakeTask.new(:rubocop)
12
8
 
13
- desc 'Default: run specs.'
14
- task :default => :spec
9
+ task default: %i[spec rubocop]
@@ -28,15 +28,15 @@ class TimedLRU
28
28
  # that extra bit of performance
29
29
  # @option opts [Integer] ttl
30
30
  # the TTL in seconds
31
- def initialize(opts = {})
31
+ def initialize(opts={})
32
32
  super() # MonitorMixin
33
33
 
34
34
  @hash = {}
35
35
  @max_size = Integer(opts[:max_size] || 100)
36
36
  @ttl = Integer(opts[:ttl]) if opts[:ttl]
37
37
 
38
- raise ArgumentError, "Option :max_size must be > 0" unless max_size > 0
39
- raise ArgumentError, "Option :ttl must be > 0" unless ttl.nil? || ttl > 0
38
+ raise ArgumentError, 'Option :max_size must be > 0' unless max_size.positive?
39
+ raise ArgumentError, 'Option :ttl must be > 0' unless ttl.nil? || ttl.positive?
40
40
 
41
41
  extend ThreadUnsafe if opts[:thread_safe] == false
42
42
  end
@@ -48,13 +48,13 @@ class TimedLRU
48
48
  def store(key, value)
49
49
  mon_synchronize do
50
50
  node = (@hash[key] ||= Node.new(key))
51
- node.value = value
51
+ node.value = value
52
52
  touch(node)
53
53
  compact!
54
54
  node.value
55
55
  end
56
56
  end
57
- alias_method :[]=, :store
57
+ alias []= store
58
58
 
59
59
  # Retrieves a `value` by `key`
60
60
  # @param [Object] key the storage key
@@ -68,7 +68,7 @@ class TimedLRU
68
68
  node.value
69
69
  end
70
70
  end
71
- alias_method :[], :fetch
71
+ alias [] fetch
72
72
 
73
73
  # Deletes by `key`
74
74
  # @param [Object] key the storage key
@@ -82,38 +82,36 @@ class TimedLRU
82
82
 
83
83
  private
84
84
 
85
- def compact!
86
- while @hash.size > max_size
87
- remove(@tail)
88
- end
85
+ def compact!
86
+ remove(@tail) while @hash.size > max_size
89
87
 
90
- while ttl && @tail.expires_at < Time.now.to_i
91
- remove(@tail)
92
- end
93
- end
94
-
95
- def remove(node)
96
- @hash.delete(node.key)
97
- left, right = node.left, node.right
98
- left.nil? ? @head = right : left.right = right
99
- right.nil? ? @tail = left : right.left = left
100
- node
101
- end
88
+ remove(@tail) while ttl && @tail.expires_at < Time.now.to_i
89
+ end
102
90
 
103
- def touch(node)
104
- node.expires_at = Time.now.to_i + ttl if ttl
105
- return if node == @head
91
+ def remove(node)
92
+ @hash.delete(node.key)
93
+ left = node.left
94
+ right = node.right
95
+ left.nil? ? @head = right : left.right = right
96
+ right.nil? ? @tail = left : right.left = left
97
+ node
98
+ end
106
99
 
107
- left, right = node.left, node.right
108
- node.left, node.right = nil, @head
109
- @head.left = node if @head
100
+ def touch(node)
101
+ node.expires_at = Time.now.to_i + ttl if ttl
102
+ return if node == @head
110
103
 
111
- left.right = right if left
112
- right.left = left if right
104
+ left = node.left
105
+ right = node.right
106
+ node.left = nil
107
+ node.right = @head
108
+ @head.left = node if @head
113
109
 
114
- @tail = left if @tail == node
115
- @head = node
116
- @tail = @head unless @tail
117
- end
110
+ left.right = right if left
111
+ right.left = left if right
118
112
 
113
+ @tail = left if @tail == node
114
+ @head = node
115
+ @tail ||= @head
116
+ end
119
117
  end
@@ -2,4 +2,3 @@ require 'coveralls'
2
2
 
3
3
  # Enable coverage
4
4
  Coveralls.wear!
5
-
@@ -1,4 +1,3 @@
1
1
  require 'bundler/setup'
2
2
  require 'rspec'
3
3
  require 'timed_lru'
4
-
@@ -8,9 +8,12 @@ describe TimedLRU do
8
8
  return [] unless head
9
9
 
10
10
  res = [head]
11
- while curr = res.last.right
12
- expect(curr.left).to eq(res.last)
13
- res << curr
11
+ loop do
12
+ current = res.last.right
13
+ break unless current
14
+
15
+ expect(current.left).to eq(res.last)
16
+ res << current
14
17
  end
15
18
  expect(head.left).to be_nil
16
19
  expect(tail.right).to be_nil
@@ -30,7 +33,7 @@ describe TimedLRU do
30
33
  subject.instance_variable_get(:@tail)
31
34
  end
32
35
 
33
- describe "defaults" do
36
+ describe 'defaults' do
34
37
  subject { described_class.new }
35
38
 
36
39
  describe '#max_size' do
@@ -51,7 +54,7 @@ describe TimedLRU do
51
54
  it { is_expected.to respond_to(:each_key) }
52
55
  end
53
56
 
54
- describe "init" do
57
+ describe 'init' do
55
58
  subject { described_class.new max_size: 25, ttl: 120, thread_safe: false }
56
59
 
57
60
  describe '#max_size' do
@@ -63,91 +66,91 @@ describe TimedLRU do
63
66
  subject { super().ttl }
64
67
  it { is_expected.to be(120) }
65
68
  end
66
- it { is_expected.to be_a(described_class::ThreadUnsafe) }
69
+ it { is_expected.to be_a(described_class::ThreadUnsafe) }
67
70
 
68
71
  it 'should assert correct option values' do
69
- expect { described_class.new(max_size: "X") }.to raise_error(ArgumentError)
72
+ expect { described_class.new(max_size: 'X') }.to raise_error(ArgumentError)
70
73
  expect { described_class.new(max_size: -1) }.to raise_error(ArgumentError)
71
74
  expect { described_class.new(max_size: 0) }.to raise_error(ArgumentError)
72
75
 
73
- expect { described_class.new(ttl: "X") }.to raise_error(ArgumentError)
76
+ expect { described_class.new(ttl: 'X') }.to raise_error(ArgumentError)
74
77
  expect { described_class.new(ttl: true) }.to raise_error(TypeError)
75
78
  expect { described_class.new(ttl: 0) }.to raise_error(ArgumentError)
76
79
  end
77
80
  end
78
81
 
79
- describe "storing" do
82
+ describe 'storing' do
80
83
 
81
- it "should set head + tail on first item" do
82
- expect {
83
- expect(subject.store("a", 1)).to eq(1)
84
- }.to change { chain }.from([]).to(["a"])
84
+ it 'should set head + tail on first item' do
85
+ expect do
86
+ expect(subject.store('a', 1)).to eq(1)
87
+ end.to change { chain }.from([]).to(['a'])
85
88
  end
86
89
 
87
- it "should shift chain when new items are added" do
88
- subject["a"] = 1
89
- expect { subject["b"] = 2 }.to change { chain }.from(%w|a|).to(%w|b a|)
90
- expect { subject["c"] = 3 }.to change { chain }.to(%w|c b a|)
91
- expect { subject["d"] = 4 }.to change { chain }.to(%w|d c b a|)
90
+ it 'should shift chain when new items are added' do
91
+ subject['a'] = 1
92
+ expect { subject['b'] = 2 }.to change { chain }.from(%w[a]).to(%w[b a])
93
+ expect { subject['c'] = 3 }.to change { chain }.to(%w[c b a])
94
+ expect { subject['d'] = 4 }.to change { chain }.to(%w[d c b a])
92
95
  end
93
96
 
94
- it "should expire LRU items when chain exceeds max size" do
95
- ("a".."d").each {|x| subject[x] = 1 }
96
- expect { subject["e"] = 5 }.to change { chain }.to(%w|e d c b|)
97
- expect { subject["f"] = 6 }.to change { chain }.to(%w|f e d c|)
97
+ it 'should expire LRU items when chain exceeds max size' do
98
+ ('a'..'d').each {|x| subject[x] = 1 }
99
+ expect { subject['e'] = 5 }.to change { chain }.to(%w[e d c b])
100
+ expect { subject['f'] = 6 }.to change { chain }.to(%w[f e d c])
98
101
  end
99
102
 
100
- it "should update items" do
101
- ("a".."d").each {|x| subject[x] = 1 }
102
- expect { subject["d"] = 2 }.not_to change { chain }
103
- expect { subject["c"] = 2 }.to change { chain }.to(%w|c d b a|)
104
- expect { subject["b"] = 2 }.to change { chain }.to(%w|b c d a|)
105
- expect { subject["a"] = 2 }.to change { chain }.to(%w|a b c d|)
103
+ it 'should update items' do
104
+ ('a'..'d').each {|x| subject[x] = 1 }
105
+ expect { subject['d'] = 2 }.not_to change { chain }
106
+ expect { subject['c'] = 2 }.to change { chain }.to(%w[c d b a])
107
+ expect { subject['b'] = 2 }.to change { chain }.to(%w[b c d a])
108
+ expect { subject['a'] = 2 }.to change { chain }.to(%w[a b c d])
106
109
  end
107
110
 
108
111
  end
109
112
 
110
- describe "retrieving" do
113
+ describe 'retrieving' do
111
114
 
112
115
  it 'should fetch values' do
113
- expect(subject.fetch("a")).to be_nil
114
- expect(subject["a"]).to be_nil
115
- subject["a"] = 1
116
- expect(subject["a"]).to eq(1)
116
+ expect(subject.fetch('a')).to be_nil
117
+ expect(subject['a']).to be_nil
118
+ subject['a'] = 1
119
+ expect(subject['a']).to eq(1)
117
120
  end
118
121
 
119
122
  it 'should renew membership on access' do
120
- ("a".."d").each {|x| subject[x] = 1 }
121
- expect { subject["d"] }.not_to change { chain }
122
- expect { subject["c"] }.to change { chain }.to(%w|c d b a|)
123
- expect { subject["b"] }.to change { chain }.to(%w|b c d a|)
124
- expect { subject["a"] }.to change { chain }.to(%w|a b c d|)
125
- expect { subject["x"] }.not_to change { chain }
123
+ ('a'..'d').each {|x| subject[x] = 1 }
124
+ expect { subject['d'] }.not_to change { chain }
125
+ expect { subject['c'] }.to change { chain }.to(%w[c d b a])
126
+ expect { subject['b'] }.to change { chain }.to(%w[b c d a])
127
+ expect { subject['a'] }.to change { chain }.to(%w[a b c d])
128
+ expect { subject['x'] }.not_to change { chain }
126
129
  end
127
130
 
128
131
  end
129
132
 
130
- describe "deleting" do
133
+ describe 'deleting' do
131
134
 
132
135
  it 'should delete an return values' do
133
- expect(subject.delete("a")).to be_nil
134
- subject["a"] = 1
135
- expect(subject.delete("a")).to eq(1)
136
+ expect(subject.delete('a')).to be_nil
137
+ subject['a'] = 1
138
+ expect(subject.delete('a')).to eq(1)
136
139
  end
137
140
 
138
141
  it 'should re-arrange membership chain' do
139
- ("a".."d").each {|x| subject[x] = 1 }
140
- expect { subject.delete("x") }.not_to change { chain }
141
- expect { subject.delete("c") }.to change { chain }.to(%w|d b a|)
142
- expect { subject.delete("a") }.to change { chain }.to(%w|d b|)
143
- expect { subject.delete("d") }.to change { chain }.to(%w|b|)
144
- expect { subject.delete("b") }.to change { subject.size }.from(1).to(0)
142
+ ('a'..'d').each {|x| subject[x] = 1 }
143
+ expect { subject.delete('x') }.not_to change { chain }
144
+ expect { subject.delete('c') }.to change { chain }.to(%w[d b a])
145
+ expect { subject.delete('a') }.to change { chain }.to(%w[d b])
146
+ expect { subject.delete('d') }.to change { chain }.to(%w[b])
147
+ expect { subject.delete('b') }.to change { subject.size }.from(1).to(0)
145
148
  end
146
149
 
147
150
  end
148
151
 
149
- describe "TTL expiration" do
150
- subject { described_class.new max_size: 4, ttl: 60 }
152
+ describe 'TTL expiration' do
153
+ subject { described_class.new max_size: 4, ttl: 60 }
151
154
 
152
155
  def in_past(ago)
153
156
  allow(Time).to receive_messages now: (Time.now - ago)
@@ -158,33 +161,33 @@ describe TimedLRU do
158
161
 
159
162
  it 'should expire on access' do
160
163
  in_past(70) do
161
- subject["a"] = 1
162
- expect(chain).to eq(%w|a|)
164
+ subject['a'] = 1
165
+ expect(chain).to eq(%w[a])
163
166
  end
164
167
 
165
168
  in_past(50) do
166
- subject["b"] = 2
167
- expect(chain).to eq(%w|b a|)
169
+ subject['b'] = 2
170
+ expect(chain).to eq(%w[b a])
168
171
  end
169
172
 
170
- subject["c"] = 3
171
- expect(chain).to eq(%w|c b|)
173
+ subject['c'] = 3
174
+ expect(chain).to eq(%w[c b])
172
175
  end
173
176
 
174
177
  it 'should renew expiration on access' do
175
178
  in_past(70) do
176
- subject["a"] = 1
177
- subject["b"] = 2
178
- expect(chain).to eq(%w|b a|)
179
+ subject['a'] = 1
180
+ subject['b'] = 2
181
+ expect(chain).to eq(%w[b a])
179
182
  end
180
183
 
181
184
  in_past(50) do
182
- expect(subject["a"]).to eq(1)
183
- expect(chain).to eq(%w|a b|)
185
+ expect(subject['a']).to eq(1)
186
+ expect(chain).to eq(%w[a b])
184
187
  end
185
188
 
186
- subject["c"] = 3
187
- expect(chain).to eq(%w|c a|)
189
+ subject['c'] = 3
190
+ expect(chain).to eq(%w[c a])
188
191
  end
189
192
 
190
193
  end
@@ -1,22 +1,21 @@
1
1
  Gem::Specification.new do |s|
2
- s.required_ruby_version = '>= 2.2.0'
2
+ s.required_ruby_version = '>= 2.4.0'
3
3
 
4
4
  s.name = File.basename(__FILE__, '.gemspec')
5
- s.summary = "Timed LRU"
6
- s.description = "Thread-safe LRU implementation with (optional) TTL and constant time operations"
7
- s.version = "0.3.2"
5
+ s.summary = 'Timed LRU'
6
+ s.description = 'Thread-safe LRU implementation with (optional) TTL and constant time operations'
7
+ s.version = '0.4.0'
8
8
 
9
- s.authors = ["Black Square Media"]
10
- s.email = "info@blacksquaremedia.com"
11
- s.homepage = "https://github.com/bsm/timed_lru"
9
+ s.authors = ['Black Square Media']
10
+ s.email = 'info@blacksquaremedia.com'
11
+ s.homepage = 'https://github.com/bsm/timed_lru'
12
12
 
13
13
  s.require_path = 'lib'
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
 
17
- s.add_development_dependency "rake"
18
- s.add_development_dependency "bundler"
19
- s.add_development_dependency "rspec"
20
- s.add_development_dependency "yard"
21
- s.add_development_dependency "redcarpet"
17
+ s.add_development_dependency 'bundler'
18
+ s.add_development_dependency 'rake'
19
+ s.add_development_dependency 'rspec'
20
+ s.add_development_dependency 'rubocop'
22
21
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timed_lru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-21 00:00:00.000000000 Z
11
+ date: 2019-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +25,7 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
- name: rspec
28
+ name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - ">="
@@ -53,7 +39,7 @@ dependencies:
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: yard
42
+ name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
@@ -67,7 +53,7 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: redcarpet
56
+ name: rubocop
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -88,6 +74,7 @@ extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
90
76
  - ".gitignore"
77
+ - ".rubocop.yml"
91
78
  - ".travis.yml"
92
79
  - Gemfile
93
80
  - Gemfile.lock
@@ -109,15 +96,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
96
  requirements:
110
97
  - - ">="
111
98
  - !ruby/object:Gem::Version
112
- version: 2.2.0
99
+ version: 2.4.0
113
100
  required_rubygems_version: !ruby/object:Gem::Requirement
114
101
  requirements:
115
102
  - - ">="
116
103
  - !ruby/object:Gem::Version
117
104
  version: '0'
118
105
  requirements: []
119
- rubyforge_project:
120
- rubygems_version: 2.6.14
106
+ rubygems_version: 3.0.3
121
107
  signing_key:
122
108
  specification_version: 4
123
109
  summary: Timed LRU