coffee_table 0.2.13 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1d7331eff9097d4153823ae69c4e0fa3b017e374
4
- data.tar.gz: c16684103f5038ef6fc8478a0d9e6fc2d6a2aefa
2
+ SHA256:
3
+ metadata.gz: 8331d649faef4d9b5ba700f8ac93cad2a263bd293e5535c721ed57a170140c7f
4
+ data.tar.gz: a26ffaba10d13a680e611aa39ba5d3b217acb4c786269b7435d05a354e4ae00c
5
5
  SHA512:
6
- metadata.gz: 556e0ed42a7a01d0c0fceb1ad947ef2db67b6027ec1574bb7575d7b5057d793bce9706755b721a472b01abb9c6c2cff2076f9760b332118f53ec1ced30e7045a
7
- data.tar.gz: e3cb8e262065f3dfdf213bc0b30114a50dc7f6eb29519e2167dee77fa5129a18634f6cb2a2ab754635bf0f340a1bf53f53a6b6d22ce07f14bb3590c3d2a9c129
6
+ metadata.gz: c4a5cfdda959a00ea4e79bc41b296771f2eb44cb0dbae1db5f1daf638a6995b7f19b1f678cdfa64139424cd9cf639e92130dbfc1e8fb35f38f5cf2f31331861b
7
+ data.tar.gz: 9228a6f6c205dfaca58386cf08777818a8e57ceb48726dcb705625dec76cabcb3aa9d2da43bd7645bd6cb06b7782e24c484432bb1a550033c165e028afb44276
@@ -0,0 +1,32 @@
1
+ version: 2.1
2
+
3
+ orbs:
4
+ ruby: circleci/ruby@1.0
5
+
6
+ jobs:
7
+ build:
8
+ docker:
9
+ - image: cimg/ruby:2.5
10
+ steps:
11
+ - checkout
12
+ - ruby/install-deps
13
+ test:
14
+ parallelism: 3
15
+ docker:
16
+ - image: cimg/ruby:2.5
17
+ environment:
18
+ BUNDLE_JOBS: "3"
19
+ BUNDLE_RETRY: "3"
20
+ steps:
21
+ - checkout
22
+ - ruby/install-deps
23
+ - ruby/rspec-test
24
+
25
+ workflows:
26
+ version: 2
27
+ build_and_test:
28
+ jobs:
29
+ - build
30
+ - test:
31
+ requires:
32
+ - build
@@ -1 +1 @@
1
- ruby-2.4.1
1
+ ruby-2.5.0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coffee_table (0.2.13)
4
+ coffee_table (0.3.0)
5
5
  activesupport
6
6
  gzip
7
7
  redis
@@ -11,63 +11,74 @@ PATH
11
11
  GEM
12
12
  remote: http://rubygems.org/
13
13
  specs:
14
- activesupport (5.1.5)
14
+ activesupport (6.0.3.1)
15
15
  concurrent-ruby (~> 1.0, >= 1.0.2)
16
- i18n (~> 0.7)
16
+ i18n (>= 0.7, < 2)
17
17
  minitest (~> 5.1)
18
18
  tzinfo (~> 1.1)
19
- colorize (0.5.8)
20
- concurrent-ruby (1.0.5)
21
- coveralls (0.6.7)
22
- colorize
23
- multi_json (~> 1.3)
24
- rest-client
25
- simplecov (>= 0.7)
26
- thor
27
- diff-lcs (1.2.4)
19
+ zeitwerk (~> 2.2, >= 2.2.2)
20
+ concurrent-ruby (1.1.6)
21
+ coveralls (0.8.23)
22
+ json (>= 1.8, < 3)
23
+ simplecov (~> 0.16.1)
24
+ term-ansicolor (~> 1.3)
25
+ thor (>= 0.19.4, < 2.0)
26
+ tins (~> 1.6)
27
+ diff-lcs (1.3)
28
+ docile (1.3.2)
28
29
  file-tail (1.2.0)
29
30
  tins (~> 1.0)
30
31
  gzip (1.0)
31
- i18n (0.9.5)
32
+ i18n (1.8.3)
32
33
  concurrent-ruby (~> 1.0)
33
- mime-types (1.23)
34
- minitest (5.11.3)
35
- mock_redis (0.17.0)
36
- multi_json (1.7.8)
37
- redis (4.0.1)
38
- redis-namespace (1.6.0)
34
+ json (2.3.0)
35
+ minitest (5.14.1)
36
+ mock_redis (0.23.0)
37
+ redis (4.2.1)
38
+ redis-namespace (1.7.0)
39
39
  redis (>= 3.0.4)
40
- rest-client (1.6.7)
41
- mime-types (>= 1.16)
42
- rspec (2.14.1)
43
- rspec-core (~> 2.14.0)
44
- rspec-expectations (~> 2.14.0)
45
- rspec-mocks (~> 2.14.0)
46
- rspec-core (2.14.4)
47
- rspec-expectations (2.14.1)
48
- diff-lcs (>= 1.1.3, < 2.0)
49
- rspec-mocks (2.14.3)
50
- ruby2ruby (2.4.1)
40
+ rspec (3.9.0)
41
+ rspec-core (~> 3.9.0)
42
+ rspec-expectations (~> 3.9.0)
43
+ rspec-mocks (~> 3.9.0)
44
+ rspec-core (3.9.2)
45
+ rspec-support (~> 3.9.3)
46
+ rspec-expectations (3.9.2)
47
+ diff-lcs (>= 1.2.0, < 2.0)
48
+ rspec-support (~> 3.9.0)
49
+ rspec-mocks (3.9.1)
50
+ diff-lcs (>= 1.2.0, < 2.0)
51
+ rspec-support (~> 3.9.0)
52
+ rspec-support (3.9.3)
53
+ rspec_junit_formatter (0.4.1)
54
+ rspec-core (>= 2, < 4, != 2.12.0)
55
+ ruby2ruby (2.4.4)
51
56
  ruby_parser (~> 3.1)
52
57
  sexp_processor (~> 4.6)
53
- ruby_parser (3.11.0)
58
+ ruby_parser (3.14.2)
54
59
  sexp_processor (~> 4.9)
55
- sexp_processor (4.10.1)
56
- simplecov (0.7.1)
57
- multi_json (~> 1.0)
58
- simplecov-html (~> 0.7.1)
59
- simplecov-html (0.7.1)
60
+ sexp_processor (4.15.0)
61
+ simplecov (0.16.1)
62
+ docile (~> 1.1)
63
+ json (>= 1.8, < 3)
64
+ simplecov-html (~> 0.10.0)
65
+ simplecov-html (0.10.2)
60
66
  sourcify (0.5.0)
61
67
  file-tail (>= 1.0.5)
62
68
  ruby2ruby (>= 1.2.5)
63
69
  ruby_parser (>= 2.0.5)
64
70
  sexp_processor (>= 3.0.5)
65
71
  spork (0.9.2)
66
- thor (0.18.1)
72
+ sync (0.5.0)
73
+ term-ansicolor (1.7.1)
74
+ tins (~> 1.0)
75
+ thor (1.0.1)
67
76
  thread_safe (0.3.6)
68
- tins (1.16.3)
69
- tzinfo (1.2.5)
77
+ tins (1.25.0)
78
+ sync
79
+ tzinfo (1.2.7)
70
80
  thread_safe (~> 0.1)
81
+ zeitwerk (2.3.0)
71
82
 
72
83
  PLATFORMS
73
84
  ruby
@@ -77,7 +88,8 @@ DEPENDENCIES
77
88
  coveralls
78
89
  mock_redis
79
90
  rspec
91
+ rspec_junit_formatter
80
92
  spork
81
93
 
82
94
  BUNDLED WITH
83
- 1.16.1
95
+ 2.1.4
@@ -2,7 +2,6 @@
2
2
  h1. CoffeeTable v0.2.8
3
3
 
4
4
  !https://badge.fury.io/rb/coffee_table.png!:http://badge.fury.io/rb/coffee_table
5
- !https://gemnasium.com/stewartmckee/coffee_table.png!
6
5
  !https://coveralls.io/repos/stewartmckee/coffee_table/badge.png?branch=master(Coverage Status)!:https://coveralls.io/r/stewartmckee/coffee_table
7
6
 
8
7
  h2. Intro
@@ -23,6 +23,8 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "mock_redis"
24
24
  s.add_development_dependency "spork"
25
25
  s.add_development_dependency "coveralls"
26
+ s.add_development_dependency "rspec_junit_formatter"
27
+
26
28
  s.add_dependency "redis"
27
29
  s.add_dependency "redis-namespace"
28
30
  s.add_dependency "activesupport"
@@ -5,7 +5,7 @@ require "coffee_table/invalid_object_error"
5
5
  require "coffee_table/block_missing_error"
6
6
  require "coffee_table/object_definition"
7
7
  require "redis"
8
- require 'redis-namespace'
8
+ require "redis-namespace"
9
9
  require 'active_support/inflector'
10
10
  require 'digest/md5'
11
11
  require 'gzip'
@@ -16,6 +16,8 @@ module CoffeeTable
16
16
 
17
17
  include CoffeeTable::Utility
18
18
 
19
+ attr_reader :redis
20
+
19
21
  # initialize for coffee_table. takes options to setup behaviour of cache
20
22
  def initialize(options={})
21
23
  @options = options.symbolize_keys
@@ -39,6 +41,7 @@ module CoffeeTable
39
41
  end
40
42
 
41
43
  @redis = Redis::Namespace.new(@options[:redis_namespace], :redis => redis_client)
44
+ @real_redis = redis_client
42
45
 
43
46
  self
44
47
 
@@ -64,22 +67,21 @@ module CoffeeTable
64
67
  block_source = RubyVM::InstructionSequence.disasm(block.to_proc).to_s.gsub(/\(\s*\d+\)/, "").gsub(/^== disasm.*?$/, "")
65
68
  block_key = Digest::MD5.hexdigest(block_source)
66
69
  end
67
-
68
70
  flags = {}
69
71
 
70
72
  # if first related_object is integer or fixnum it is used as an expiry time for the cache object
71
- key = CoffeeTable::Key.new(initial_key, block_key, flags, related_objects)
73
+ key = CoffeeTable::Key.new({name: initial_key, block_key: block_key, options: @options, flags: flags}, related_objects)
72
74
  if @options[:enable_cache]
73
75
  if options.has_key?(:expiry)
74
76
  expiry = options[:expiry]
75
77
  else
76
78
  expiry = nil
77
79
  end
78
- if @redis.exists(key.to_s)
80
+ if keys.include?(key.to_s)
79
81
  result = marshal_value(@redis.get(key.to_s))
80
82
  else
81
83
  key.add_flag(:compressed => true)
82
- if @redis.exists(key.to_s)
84
+ if keys.include?(key.to_s)
83
85
  result = marshal_value(@redis.get(key.to_s)).gunzip
84
86
  else
85
87
  key.remove_flag(:compressed)
@@ -164,7 +166,11 @@ module CoffeeTable
164
166
 
165
167
  private
166
168
  def marshal_value(value)
169
+ return nil if value.nil?
167
170
  begin
171
+ # io = StringIO.new
172
+ # io.write(value)
173
+ # io.rewind
168
174
  result = Marshal.load(value)
169
175
  rescue ArgumentError => e
170
176
  puts "Attempting to load class/module #{e.message.split(" ")[-1]}"
@@ -6,15 +6,16 @@ module CoffeeTable
6
6
 
7
7
  def self.parse(string)
8
8
  elements = string.split("|", -1).map{|e| decode_element(e) }
9
- key = Key.new(elements[0], elements[1], Hash[elements.last.split("&").map{|kv| [kv.split("=")[0].to_sym, kv.split("=")[1]]}])
9
+ key = Key.new(name: elements[0], block_key: elements[1], flags: Hash[elements.last.split("&").map{|kv| [kv.split("=")[0].to_sym, kv.split("=")[1]]}])
10
10
  key.elements = elements[2..-2]
11
11
  key
12
12
  end
13
13
 
14
- def initialize(name, block_key, options, *objects)
15
- @name = name
16
- @block_key = block_key
17
- @options = options
14
+ def initialize(params = {}, *objects)
15
+ @block_key = params[:block_key] || ""
16
+ @flags = params[:flags] || {}
17
+ @options = params[:options] || {}
18
+ @name = "#{params[:name]}"
18
19
  @elements = objects.flatten.map{|o| key_for_object(o)}
19
20
  end
20
21
 
@@ -34,15 +35,15 @@ module CoffeeTable
34
35
  @block_key
35
36
  end
36
37
 
37
- def options
38
- @options
38
+ def flags
39
+ @flags
39
40
  end
40
41
 
41
- def add_flag(options)
42
- @options.merge!(options)
42
+ def add_flag(flags)
43
+ @flags.merge!(flags)
43
44
  end
44
45
  def remove_flag(key)
45
- @options.delete key
46
+ @flags.delete key
46
47
  end
47
48
 
48
49
  def elements
@@ -50,7 +51,7 @@ module CoffeeTable
50
51
  end
51
52
 
52
53
  def elements=(elements)
53
- @elements = elements
54
+ @elements = Array(elements)
54
55
  end
55
56
 
56
57
  def <=>(o)
@@ -58,16 +59,16 @@ module CoffeeTable
58
59
  end
59
60
 
60
61
  def to_s
61
- [encode_element(@name), encode_element(@block_key), @elements.map{|e| encode_element(e) }, encode_element(@options.map{|k,v| "#{k}=#{v}"}.join("&"))].flatten.join("|")
62
+ [encode_element(@name), encode_element(@block_key), @elements.map{|e| encode_element(e) }, encode_element(@flags.map{|k,v| "#{k}=#{v}"}.join("&"))].flatten.join("|")
62
63
  end
63
64
 
64
65
  private
65
66
 
66
- def matches?(fragment, options={})
67
- if options[:match] == :start
67
+ def matches?(fragment, flags={})
68
+ if flags[:match] == :start
68
69
  @name == fragment || !@elements.select{|e| e =~ /^#{Regexp.escape(fragment)}/ }.empty?
69
70
  else
70
- @name == fragment || @elements.include?(fragment)
71
+ @name == fragment || Array(@elements).include?(fragment)
71
72
  end
72
73
  end
73
74
 
@@ -1,3 +1,3 @@
1
1
  module CoffeeTable
2
- VERSION = "0.2.13"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -6,12 +6,12 @@ describe CoffeeTable::Cache do
6
6
  @coffee_table = CoffeeTable::Cache.new
7
7
  end
8
8
 
9
- specify { CoffeeTable::Cache.should respond_to :new}
10
- specify { @coffee_table.should respond_to :fetch}
11
- specify { @coffee_table.should respond_to :expire_key}
12
- specify { @coffee_table.should respond_to :expire_all}
13
- specify { @coffee_table.should respond_to :keys}
14
- specify { @coffee_table.should respond_to :expire_for}
9
+ specify { expect(CoffeeTable::Cache).to respond_to :new}
10
+ specify { expect(@coffee_table).to respond_to :fetch}
11
+ specify { expect(@coffee_table).to respond_to :expire_key}
12
+ specify { expect(@coffee_table).to respond_to :expire_all}
13
+ specify { expect(@coffee_table).to respond_to :keys}
14
+ specify { expect(@coffee_table).to respond_to :expire_for}
15
15
 
16
16
  describe "config" do
17
17
  it "should take a hash for config" do
@@ -31,7 +31,7 @@ describe CoffeeTable::Cache do
31
31
  "this is a value"
32
32
  end
33
33
 
34
- result.should == "this is a value"
34
+ expect(result).to eq "this is a value"
35
35
  end
36
36
  it "should return cached value when cache available" do
37
37
  value = "this is a value"
@@ -43,7 +43,7 @@ describe CoffeeTable::Cache do
43
43
  value
44
44
  end
45
45
 
46
- result.should == "this is a value"
46
+ expect(result).to eq "this is a value"
47
47
 
48
48
  end
49
49
 
@@ -59,16 +59,16 @@ describe CoffeeTable::Cache do
59
59
  result = @coffee_table.fetch(:test_key) do
60
60
  "this string should be long"
61
61
  end
62
- result.should eql "this string should be long"
63
- @redis.get("test_key|1c083b7ed4b406f263ef329a608a80b9|compressed=true").should eq Marshal.dump(zipped_content)
62
+ expect(result).to eql "this string should be long"
63
+ @redis.get("test_key|90a52c9dc8646bf66e93ce76578306c6|compressed=true").should start_with "\u0004"
64
64
  end
65
65
  it "does not compress on non strings" do
66
66
  @coffee_table = CoffeeTable::Cache.new(:server => "127.0.0.1", :port => 6379, :compress_min_size => 20)
67
67
  result = @coffee_table.fetch(:test_key) do
68
68
  {:test => "this value is a decent length to trigger compress"}
69
69
  end
70
- result.should eql ({:test => "this value is a decent length to trigger compress"})
71
- Base64.encode64(@redis.get("test_key|6edc6a13bfb5a9f926072f34d1006557|")).should eql "BAh7BjoJdGVzdEkiNnRoaXMgdmFsdWUgaXMgYSBkZWNlbnQgbGVuZ3RoIHRv\nIHRyaWdnZXIgY29tcHJlc3MGOgZFVA==\n"
70
+ expect(result).to eql ({:test => "this value is a decent length to trigger compress"})
71
+ Base64.encode64(@redis.get("test_key|0402899032596ee850d5271ab2312906|")).should eql "BAh7BjoJdGVzdEkiNnRoaXMgdmFsdWUgaXMgYSBkZWNlbnQgbGVuZ3RoIHRv\nIHRyaWdnZXIgY29tcHJlc3MGOgZFVA==\n"
72
72
  end
73
73
 
74
74
  it "does not compress when turned off" do
@@ -76,16 +76,16 @@ describe CoffeeTable::Cache do
76
76
  result = @coffee_table.fetch(:test_key) do
77
77
  "this string should be long"
78
78
  end
79
- result.should eql "this string should be long"
80
- @redis.get("test_key|1c083b7ed4b406f263ef329a608a80b9|").should eql Marshal.dump("this string should be long")
79
+ expect(result).to eql "this string should be long"
80
+ @redis.get("test_key|90a52c9dc8646bf66e93ce76578306c6|").should eql Marshal.dump("this string should be long")
81
81
  end
82
82
  it "does not compress on strings below limit" do
83
83
  @coffee_table = CoffeeTable::Cache.new(:server => "127.0.0.1", :port => 6379, :compress_min_size => 20)
84
84
  result = @coffee_table.fetch(:test_key) do
85
85
  "short"
86
86
  end
87
- result.should eql "short"
88
- @redis.get("test_key|f0b9a08ff52e14e59daa03aae70a5cab|").should eql Marshal.dump("short")
87
+ expect(result).to eql "short"
88
+ @redis.get("test_key|55d2ae66967c26b2fef23e5ed6bd3930|").should eql Marshal.dump("short")
89
89
  end
90
90
  it "decompresses compressed value" do
91
91
  @coffee_table = CoffeeTable::Cache.new(:redis => @redis, :compress_min_size => 20)
@@ -95,8 +95,8 @@ describe CoffeeTable::Cache do
95
95
  result = @coffee_table.fetch(:test_key) do
96
96
  "this string should be long"
97
97
  end
98
- result.class.should eql String
99
- result.should eql "this string should be long"
98
+ expect(result.class).to eql String
99
+ expect(result).to eql "this string should be long"
100
100
 
101
101
  end
102
102
  it "does not decompress a non compressed value" do
@@ -107,7 +107,7 @@ describe CoffeeTable::Cache do
107
107
  result = @coffee_table.fetch(:test_key) do
108
108
  "short"
109
109
  end
110
- result.should eql "short"
110
+ expect(result).to eql "short"
111
111
  end
112
112
 
113
113
 
@@ -121,7 +121,7 @@ describe CoffeeTable::Cache do
121
121
  result = @coffee_table.fetch(:test_key) do
122
122
  "this is a changed value"
123
123
  end
124
- @coffee_table.keys.should == ["test_key|#{md5}|"]
124
+ expect(@coffee_table.keys).to eq ["test_key|#{md5}|"]
125
125
  end
126
126
 
127
127
  it "should create key from class" do
@@ -131,7 +131,7 @@ describe CoffeeTable::Cache do
131
131
  result = @coffee_table.fetch(:test_key, SampleClass) do
132
132
  "this is a changed value"
133
133
  end
134
- @coffee_table.keys.should == ["test_key|#{md5}|sample_classes|"]
134
+ expect(@coffee_table.keys).to eq ["test_key|#{md5}|sample_classes|"]
135
135
  end
136
136
 
137
137
  it "should use class name for keys" do
@@ -141,7 +141,7 @@ describe CoffeeTable::Cache do
141
141
  result = @coffee_table.fetch(:test_key, SampleClass.new(2)) do
142
142
  "this is a changed value"
143
143
  end
144
- @coffee_table.keys.should == ["test_key|#{md5}|sample_class[2]|"]
144
+ expect(@coffee_table.keys).to eq ["test_key|#{md5}|sample_class[2]|"]
145
145
  end
146
146
 
147
147
  it "should use id from class in key" do
@@ -151,7 +151,7 @@ describe CoffeeTable::Cache do
151
151
  result = @coffee_table.fetch(:test_key, SampleClass.new(2)) do
152
152
  "this is a changed value"
153
153
  end
154
- @coffee_table.keys.should == ["test_key|#{md5}|sample_class[2]|"]
154
+ expect(@coffee_table.keys).to eq ["test_key|#{md5}|sample_class[2]|"]
155
155
  end
156
156
 
157
157
  end
@@ -167,7 +167,7 @@ describe CoffeeTable::Cache do
167
167
  "this is a changed value"
168
168
  end
169
169
 
170
- @coffee_table.keys.should include "test_key|#{md5}|sample_class[9938]|"
170
+ expect(@coffee_table.keys).to include "test_key|#{md5}|sample_class[9938]|"
171
171
 
172
172
  end
173
173
  it "should raise an exception if a related object does not respond_to id" do
@@ -190,7 +190,7 @@ describe CoffeeTable::Cache do
190
190
  "this is a changed value"
191
191
  end
192
192
 
193
- @coffee_table.keys.should include "test_key|#{md5}|sample_classes|"
193
+ expect(@coffee_table.keys).to include "test_key|#{md5}|sample_classes|"
194
194
  end
195
195
 
196
196
  end
@@ -199,9 +199,9 @@ describe CoffeeTable::Cache do
199
199
  @coffee_table.fetch(:test_key, :expiry => 1) do
200
200
  "object1"
201
201
  end
202
- @coffee_table.keys.count.should == 1
202
+ expect(@coffee_table.keys.count).to eq 1
203
203
  sleep 1
204
- @coffee_table.keys.count.should == 0
204
+ expect(@coffee_table.keys.count).to eq 0
205
205
  end
206
206
  it "should not execute block during cache period" do
207
207
  value = 'this is a value'
@@ -212,8 +212,7 @@ describe CoffeeTable::Cache do
212
212
  result = @coffee_table.fetch("asdf") do
213
213
  value
214
214
  end
215
- result.should == "this is a value"
216
-
215
+ expect(result).to eq "this is a value"
217
216
  end
218
217
  it "should execute block and return value when cache has expired" do
219
218
  @coffee_table.fetch("asdf", :expiry => 1) do
@@ -223,7 +222,7 @@ describe CoffeeTable::Cache do
223
222
  result = @coffee_table.fetch("asdf") do
224
223
  "this is a changed value"
225
224
  end
226
- result.should == "this is a changed value"
225
+ expect(result).to eq "this is a changed value"
227
226
  end
228
227
  end
229
228
 
@@ -237,7 +236,7 @@ describe CoffeeTable::Cache do
237
236
  result = @coffee_table.get_cache(:test_key) do
238
237
  object
239
238
  end
240
- result.should == "object1"
239
+ expect(result).to eq "object1"
241
240
  end
242
241
  it "should change key with changed code" do
243
242
  @coffee_table.get_cache(:test_key) do
@@ -246,7 +245,7 @@ describe CoffeeTable::Cache do
246
245
  result = @coffee_table.get_cache(:test_key) do
247
246
  "object2"
248
247
  end
249
- result.should == "object2"
248
+ expect(result).to eq "object2"
250
249
  end
251
250
  end
252
251
  end
@@ -276,9 +275,9 @@ describe CoffeeTable::Cache do
276
275
  "object3"
277
276
  end
278
277
 
279
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
278
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
280
279
  @coffee_table.expire_key("second_key")
281
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|", "third_key|#{@proc_md53}|"].sort
280
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|", "third_key|#{@proc_md53}|"].sort
282
281
 
283
282
  end
284
283
  it "should not expire anything if no matches" do
@@ -302,9 +301,9 @@ describe CoffeeTable::Cache do
302
301
  "object3"
303
302
  end
304
303
 
305
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
304
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
306
305
  @coffee_table.expire_key("fourth_key")
307
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
306
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|", "second_key|#{@proc_md52}|", "third_key|#{@proc_md53}|"].sort
308
307
 
309
308
  end
310
309
 
@@ -322,7 +321,7 @@ describe CoffeeTable::Cache do
322
321
  "object2"
323
322
  end
324
323
 
325
- result.should == "object2"
324
+ expect(result).to eq "object2"
326
325
  end
327
326
 
328
327
  it "should not invalidate block when block has not changed" do
@@ -336,7 +335,7 @@ describe CoffeeTable::Cache do
336
335
  object
337
336
  end
338
337
 
339
- result.should == "object1"
338
+ expect(result).to eq "object1"
340
339
  end
341
340
 
342
341
  it "should not be affected by whitespace only changes" do
@@ -347,12 +346,10 @@ describe CoffeeTable::Cache do
347
346
 
348
347
  object = "object2"
349
348
  result = @coffee_table.fetch(:test_key) do
350
-
351
349
  object
352
-
353
350
  end
354
351
 
355
- result.should == "object1"
352
+ expect(result).to eq "object1"
356
353
  end
357
354
 
358
355
  end
@@ -372,7 +369,7 @@ describe CoffeeTable::Cache do
372
369
  "object2"
373
370
  end
374
371
 
375
- result.should == "object1"
372
+ expect(result).to eq "object1"
376
373
  end
377
374
  end
378
375
  end
@@ -396,15 +393,15 @@ describe CoffeeTable::Cache do
396
393
  end
397
394
 
398
395
  it "should delete all keys" do
399
- @coffee_table.keys.count.should == 3
396
+ expect(@coffee_table.keys.count).to eq 3
400
397
  @coffee_table.expire_all
401
- @coffee_table.keys.count.should == 0
398
+ expect(@coffee_table.keys.count).to eq 0
402
399
 
403
400
  result = @coffee_table.fetch(:first_key) do
404
401
  "changed value"
405
402
  end
406
403
 
407
- result.should == "changed value"
404
+ expect(result).to eq "changed value"
408
405
 
409
406
  end
410
407
  end
@@ -428,8 +425,8 @@ describe CoffeeTable::Cache do
428
425
  end
429
426
 
430
427
  it "should return an array of string" do
431
- @coffee_table.keys.should be_an_instance_of Array
432
- @coffee_table.keys.map{|key| key.should be_an_instance_of String}
428
+ expect(@coffee_table.keys).to be_an_instance_of Array
429
+ @coffee_table.keys.map{|key| expect(key).to be_an_instance_of String}
433
430
  end
434
431
  it "should return key created without objects" do
435
432
  @coffee_table.fetch(:first_key) do
@@ -442,7 +439,7 @@ describe CoffeeTable::Cache do
442
439
  "object3"
443
440
  end
444
441
 
445
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|",
442
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|",
446
443
  "second_key|#{@proc_md52}|",
447
444
  "third_key|#{@proc_md53}|"].sort
448
445
 
@@ -457,7 +454,7 @@ describe CoffeeTable::Cache do
457
454
  @coffee_table.fetch(:third_key, @object3) do
458
455
  "object3"
459
456
  end
460
- @coffee_table.keys.sort.should == ["first_key|#{@proc_md51}|sample_class[1]|sample_class[2]|sample_class[3]|",
457
+ expect(@coffee_table.keys.sort).to eq ["first_key|#{@proc_md51}|sample_class[1]|sample_class[2]|sample_class[3]|",
461
458
  "second_key|#{@proc_md52}|sample_class[4]|sample_class[2]|sample_class[5]|",
462
459
  "third_key|#{@proc_md53}|sample_class[7]|sample_class[2]|sample_class[8]|"].sort
463
460
  end
@@ -482,47 +479,47 @@ describe CoffeeTable::Cache do
482
479
  end
483
480
 
484
481
  it "should expire based on the initial key" do
485
- @coffee_table.keys.count.should == 3
482
+ expect(@coffee_table.keys.count).to eq 3
486
483
  @coffee_table.expire_for(:second_key)
487
- @coffee_table.keys.count.should == 2
484
+ expect(@coffee_table.keys.count).to eq 2
488
485
  end
489
486
 
490
487
  it "should expire based on a simple string" do
491
- @coffee_table.keys.count.should == 3
488
+ expect(@coffee_table.keys.count).to eq 3
492
489
  @coffee_table.expire_for("sample_class[4]")
493
- @coffee_table.keys.count.should == 2
490
+ expect(@coffee_table.keys.count).to eq 2
494
491
  end
495
492
 
496
493
  it "should not expire based on a part match" do
497
- @coffee_table.keys.count.should == 3
494
+ expect(@coffee_table.keys.count).to eq 3
498
495
  @coffee_table.expire_for("impl")
499
- @coffee_table.keys.count.should == 3
496
+ expect(@coffee_table.keys.count).to eq 3
500
497
  end
501
498
 
502
499
  it "should not delete any keys if object is not present" do
503
- @coffee_table.keys.count.should == 3
500
+ expect(@coffee_table.keys.count).to eq 3
504
501
  @coffee_table.expire_for(SampleClass.new(18))
505
- @coffee_table.keys.count.should == 3
502
+ expect(@coffee_table.keys.count).to eq 3
506
503
  end
507
504
  it "should only delete keys that object is present in" do
508
- @coffee_table.keys.count.should == 3
505
+ expect(@coffee_table.keys.count).to eq 3
509
506
  @coffee_table.expire_for(SampleClass.new(1))
510
- @coffee_table.keys.count.should == 2
507
+ expect(@coffee_table.keys.count).to eq 2
511
508
  end
512
509
 
513
510
  it "should delete a key if the object is at the end of they key" do
514
- @coffee_table.keys.count.should == 3
511
+ expect(@coffee_table.keys.count).to eq 3
515
512
  @coffee_table.expire_for(SampleClass.new(3))
516
- @coffee_table.keys.count.should == 2
513
+ expect(@coffee_table.keys.count).to eq 2
517
514
  end
518
515
 
519
516
  it "should expire all keys relating to a class if uninitialised class is passed in" do
520
517
  @coffee_table.fetch(:fourth_key) do
521
518
  "object4"
522
519
  end
523
- @coffee_table.keys.count.should == 4
520
+ expect(@coffee_table.keys.count).to eq 4
524
521
  @coffee_table.expire_for(SampleClass)
525
- @coffee_table.keys.count.should == 1
522
+ expect(@coffee_table.keys.count).to eq 1
526
523
  end
527
524
  end
528
525
 
@@ -4,13 +4,13 @@ describe CoffeeTable::Key do
4
4
 
5
5
  context "has correct methods" do
6
6
  it "should have a parse class method" do
7
- CoffeeTable::Key.should respond_to :parse
7
+ expect(CoffeeTable::Key).to respond_to :parse
8
8
  end
9
9
  it "should have a has_element? instance method" do
10
- CoffeeTable::Key.new("name", "key", {}).should respond_to :has_element?
10
+ expect(CoffeeTable::Key.new(name: "name", block_key: "key")).to respond_to :has_element?
11
11
  end
12
12
  it "should have a has_element_type? instance method" do
13
- CoffeeTable::Key.new("name", "key", {}).should respond_to :has_element_type?
13
+ expect(CoffeeTable::Key.new(name: "name", block_key: "key")).to respond_to :has_element_type?
14
14
  end
15
15
  end
16
16
 
@@ -19,51 +19,51 @@ describe CoffeeTable::Key do
19
19
  key = CoffeeTable::Key.parse("test|asdf|sample_class|")
20
20
 
21
21
 
22
- key.elements.count.should == 1
23
- key.name.should == "test"
24
- key.code_hash.should == "asdf"
25
- key.elements[0].should == "sample_class"
22
+ expect(key.elements.count).to eq 1
23
+ expect(key.name).to eq "test"
24
+ expect(key.code_hash).to eq "asdf"
25
+ expect(key.elements[0]).to eq "sample_class"
26
26
 
27
27
  end
28
28
  it "should decode encoded elements" do
29
29
  key = CoffeeTable::Key.parse("te&#124;s&amp;t|asdf&#124;s&amp;|sample_&#124;s&amp;class|")
30
30
 
31
31
 
32
- key.elements.count.should == 1
33
- key.name.should == "te|s&t"
34
- key.code_hash.should == "asdf|s&"
35
- key.elements[0].should == "sample_|s&class"
32
+ expect(key.elements.count).to eq 1
33
+ expect(key.name).to eq "te|s&t"
34
+ expect(key.code_hash).to eq "asdf|s&"
35
+ expect(key.elements[0]).to eq "sample_|s&class"
36
36
  end
37
37
  it "should encode the key data" do
38
38
 
39
- key = CoffeeTable::Key.new("te|s&t", "asdf|s&", {}, "sample_|s&class")
39
+ key = CoffeeTable::Key.new({name: "te|s&t", block_key: "asdf|s&"}, "sample_|s&class")
40
40
 
41
- key.name.should == "te|s&t"
42
- key.code_hash.should == "asdf|s&"
43
- key.elements[0].should == "sample_|s&class"
41
+ expect(key.name).to eq "te|s&t"
42
+ expect(key.code_hash).to eq "asdf|s&"
43
+ expect(key.elements[0]).to eq "sample_|s&class"
44
44
 
45
- key.to_s.should == "te&#124;s&amp;t|asdf&#124;s&amp;|sample_&#124;s&amp;class|"
45
+ expect(key.to_s).to eq "te&#124;s&amp;t|asdf&#124;s&amp;|sample_&#124;s&amp;class|"
46
46
 
47
47
  end
48
48
  end
49
49
 
50
50
  context "matching keys" do
51
51
  it "should match a key on its name" do
52
- key = CoffeeTable::Key.new("name", "key", {}, "value", ["value1", "value2"])
53
- key.has_element?("name").should be_true
54
- key.has_element?("key").should be_false
52
+ key = CoffeeTable::Key.new({name: "name", block_key: "key"}, "value", ["value1", "value2"])
53
+ expect(key.has_element?("name")).to be_truthy
54
+ expect(key.has_element?("key")).to be_falsey
55
55
  end
56
56
  it "should match a key on its data" do
57
- key = CoffeeTable::Key.new("name", "key", {}, "value", ["value1", "value2"])
58
- key.has_element?("key").should be_false
59
- key.has_element?("value").should be_true
60
- key.has_element?("value1").should be_true
61
- key.has_element?("value2").should be_true
57
+ key = CoffeeTable::Key.new({name: "name", block_key: "key"}, "value", ["value1", "value2"])
58
+ expect(key.has_element?("key")).to be_falsey
59
+ expect(key.has_element?("value")).to be_truthy
60
+ expect(key.has_element?("value1")).to be_truthy
61
+ expect(key.has_element?("value2")).to be_truthy
62
62
  end
63
63
  it "should match a key on a class type" do
64
- key = CoffeeTable::Key.new("name", "key", {}, "sample_class[3]", ["value1", "value2"])
65
- key.has_element?("key").should be_false
66
- key.has_element_type?("sample_class").should be_true
64
+ key = CoffeeTable::Key.new({name: "name", block_key: "key"}, "sample_class[3]", ["value1", "value2"])
65
+ expect(key.has_element?("key")).to be_falsey
66
+ expect(key.has_element_type?("sample_class")).to be_truthy
67
67
  end
68
68
  end
69
69
 
@@ -76,39 +76,39 @@ describe CoffeeTable::Key do
76
76
  end
77
77
 
78
78
  it "should encode options into key" do
79
- key = CoffeeTable::Key.new("name", "key", {:option => "value", :option2 => "value2"})
80
- key.to_s.should eql "name|key|option=value&amp;option2=value2"
79
+ key = CoffeeTable::Key.new(name: "name", block_key: "key", flags: {:option => "value", :option2 => "value2"})
80
+ expect(key.to_s).to eql "name|key|option=value&amp;option2=value2"
81
81
  end
82
82
  it "should parse back options out of key" do
83
83
  key = CoffeeTable::Key.parse("name|block|key=value")
84
- key.options.should eql ({:key => "value"})
84
+ expect(key.flags).to eql ({:key => "value"})
85
85
 
86
86
  end
87
87
  it "should handle no options" do
88
- key = CoffeeTable::Key.new("name", "key", {})
89
- key.to_s.should eql "name|key|"
88
+ key = CoffeeTable::Key.new(name: "name", block_key: "key")
89
+ expect(key.to_s).to eql "name|key|"
90
90
  end
91
91
 
92
92
  it "should handle one option" do
93
- key = CoffeeTable::Key.new("name", "key", {:option => "value"})
94
- key.to_s.should eql "name|key|option=value"
93
+ key = CoffeeTable::Key.new(name: "name", block_key: "key", flags: {:option => "value"})
94
+ expect(key.to_s).to eql "name|key|option=value"
95
95
  end
96
96
  it "should handle multiple options" do
97
- key = CoffeeTable::Key.new("name", "key", {:option => "value", :option2 => "value2"})
98
- key.to_s.should eql "name|key|option=value&amp;option2=value2"
97
+ key = CoffeeTable::Key.new(name: "name", block_key: "key", flags: {:option => "value", :option2 => "value2"})
98
+ expect(key.to_s).to eql "name|key|option=value&amp;option2=value2"
99
99
  end
100
100
 
101
101
  it "matches regardless of flags" do
102
- key = CoffeeTable::Key.new("name", "key", {:option => "value", :option2 => "value2"}, @obj1, @obj2, @obj3)
103
- key.has_element?("test[1]").should be_true
104
- key.has_element?("test[2]").should be_true
105
- key.has_element?("test[3]").should be_true
106
- key.has_element?("test[4]").should be_false
102
+ key = CoffeeTable::Key.new({name: "name", block_key: "key", flgas: {:option => "value", :option2 => "value2"}}, @obj1, @obj2, @obj3)
103
+ expect(key.has_element?("test[1]")).to be_truthy
104
+ expect(key.has_element?("test[2]")).to be_truthy
105
+ expect(key.has_element?("test[3]")).to be_truthy
106
+ expect(key.has_element?("test[4]")).to be_falsey
107
107
  end
108
108
 
109
109
  it "does not match on flag values" do
110
- key = CoffeeTable::Key.new("name", "key", {:option => "value", :option2 => "value2"}, @obj1, @obj2, @obj3)
111
- key.has_element?("option=value&amp;option2=value2").should be_false
110
+ key = CoffeeTable::Key.new({name: "name", block_key: "key", flags: {:option => "value", :option2 => "value2"}}, @obj1, @obj2, @obj3)
111
+ expect(key.has_element?("option=value&amp;option2=value2")).to be_falsey
112
112
 
113
113
  end
114
114
 
@@ -7,29 +7,28 @@ Coveralls.wear!
7
7
  require 'digest/md5'
8
8
  require 'spork'
9
9
  # require 'mock_redis'
10
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/spec/lib/sample_class')
11
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/spec/lib/sample_class_without_id')
10
+ require File.expand_path(File.dirname(__FILE__) + '/../spec/lib/sample_class.rb')
11
+ require File.expand_path(File.dirname(__FILE__) + '/../spec/lib/sample_class_without_id.rb')
12
12
 
13
13
 
14
14
  Spork.prefork do
15
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/lib/coffee_table.rb')
16
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/lib/coffee_table/block_missing_error.rb')
17
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/lib/coffee_table/invalid_object_error.rb')
18
- require File.expand_path(File.dirname(__FILE__) + '/../../coffee_table/lib/coffee_table/key.rb')
15
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/coffee_table.rb')
16
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/coffee_table/block_missing_error.rb')
17
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/coffee_table/invalid_object_error.rb')
18
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/coffee_table/key.rb')
19
19
  end
20
20
 
21
21
  Spork.each_run do
22
22
  RSpec.configure do |config|
23
23
  config.before(:each) {
24
24
 
25
-
26
- # redis = double(:redis)
27
- # Redis.stub(:new).and_return(MockRedis.new)
28
- CoffeeTable::Cache.new.expire_all
25
+ redis = CoffeeTable::Cache.new.redis
26
+ redis.keys.map{|k| redis.del k }
29
27
 
30
28
  }
31
29
 
32
30
  config.after(:each) {
31
+ # CoffeeTable::Cache.new.expire_all
33
32
  }
34
33
  end
35
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coffee_table
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.13
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stewart McKee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-15 00:00:00.000000000 Z
11
+ date: 2020-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec_junit_formatter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: redis
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +157,7 @@ executables: []
143
157
  extensions: []
144
158
  extra_rdoc_files: []
145
159
  files:
160
+ - ".circleci/config.yml"
146
161
  - ".gitignore"
147
162
  - ".rspec"
148
163
  - ".ruby-gemset"
@@ -185,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
200
  version: '0'
186
201
  requirements: []
187
202
  rubyforge_project: coffee_table
188
- rubygems_version: 2.6.12
203
+ rubygems_version: 2.7.8
189
204
  signing_key:
190
205
  specification_version: 4
191
206
  summary: Gem to manage cache stored in redis