lock_and_cache 4.0.4 → 4.0.5
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 +4 -4
- data/.travis.yml +2 -1
- data/CHANGELOG +14 -0
- data/benchmarks/allowed_in_keys.rb +87 -0
- data/lib/lock_and_cache/key.rb +19 -2
- data/lib/lock_and_cache/version.rb +1 -1
- data/spec/lock_and_cache/key_spec.rb +15 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c01496db7fee2406fdd535409a2ef112969f9243
|
4
|
+
data.tar.gz: becfd8a7f466108d3f592bfe7c8f51e92fcb2a8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d401e8f1d206a4496fd911a863d8ad78ac2aa4354e94d3a608c428667adbdd92fe5d3870ad4f4913a8c90183a9776ddba90ed931ea4fea705ffbb14e953a39e6
|
7
|
+
data.tar.gz: 85a4e1bf664f77d1bf4ea4d6d186593e288ffe488578db96d4090f16bee36b9a2c79fea3bd271b9b64ad3dfae9b68d3c34c9557615f2b343bf67eef1c757f079
|
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'date'
|
3
|
+
require 'benchmark/ips'
|
4
|
+
|
5
|
+
ALLOWED_IN_KEYS = [
|
6
|
+
::String,
|
7
|
+
::Symbol,
|
8
|
+
::Numeric,
|
9
|
+
::TrueClass,
|
10
|
+
::FalseClass,
|
11
|
+
::NilClass,
|
12
|
+
::Integer,
|
13
|
+
::Float,
|
14
|
+
::Date,
|
15
|
+
::DateTime,
|
16
|
+
::Time,
|
17
|
+
].to_set
|
18
|
+
parts = RUBY_VERSION.split('.').map(&:to_i)
|
19
|
+
unless parts[0] >= 2 and parts[1] >= 4
|
20
|
+
ALLOWED_IN_KEYS << ::Fixnum
|
21
|
+
ALLOWED_IN_KEYS << ::Bignum
|
22
|
+
end
|
23
|
+
|
24
|
+
EXAMPLES = [
|
25
|
+
'hi',
|
26
|
+
:there,
|
27
|
+
123,
|
28
|
+
123.54,
|
29
|
+
1e99,
|
30
|
+
123456789 ** 2,
|
31
|
+
1e999,
|
32
|
+
true,
|
33
|
+
false,
|
34
|
+
nil,
|
35
|
+
Date.new(2015,1,1),
|
36
|
+
Time.now,
|
37
|
+
DateTime.now,
|
38
|
+
Mutex,
|
39
|
+
Mutex.new,
|
40
|
+
Benchmark,
|
41
|
+
{ hi: :world },
|
42
|
+
[[]],
|
43
|
+
Fixnum,
|
44
|
+
Struct,
|
45
|
+
Struct.new(:a),
|
46
|
+
Struct.new(:a).new(123)
|
47
|
+
]
|
48
|
+
EXAMPLES.each do |example|
|
49
|
+
puts "#{example} -> #{example.class}"
|
50
|
+
end
|
51
|
+
|
52
|
+
puts
|
53
|
+
|
54
|
+
[
|
55
|
+
Date.new(2015,1,1),
|
56
|
+
Time.now,
|
57
|
+
DateTime.now,
|
58
|
+
].each do |x|
|
59
|
+
puts x.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
puts
|
63
|
+
|
64
|
+
EXAMPLES.each do |example|
|
65
|
+
a = ALLOWED_IN_KEYS.any? { |thing| example.is_a?(thing) }
|
66
|
+
b = ALLOWED_IN_KEYS.include? example.class
|
67
|
+
unless a == b
|
68
|
+
raise "#{example.inspect}: #{a.inspect} vs #{b.inspect}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
Benchmark.ips do |x|
|
73
|
+
x.report("any") do
|
74
|
+
example = EXAMPLES.sample
|
75
|
+
y = ALLOWED_IN_KEYS.any? { |thing| example.is_a?(thing) }
|
76
|
+
a = 1
|
77
|
+
y
|
78
|
+
end
|
79
|
+
|
80
|
+
x.report("include") do
|
81
|
+
example = EXAMPLES.sample
|
82
|
+
y = ALLOWED_IN_KEYS.include? example.class
|
83
|
+
a = 1
|
84
|
+
y
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
data/lib/lock_and_cache/key.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
module LockAndCache
|
2
4
|
# @private
|
3
5
|
class Key
|
@@ -22,8 +24,11 @@ module LockAndCache
|
|
22
24
|
#
|
23
25
|
# Recursively extract id from obj. Calls #lock_and_cache_key if available, otherwise #id
|
24
26
|
def extract_obj_id(obj)
|
25
|
-
|
27
|
+
klass = obj.class
|
28
|
+
if ALLOWED_IN_KEYS.include?(klass)
|
26
29
|
obj
|
30
|
+
elsif DATE.include?(klass)
|
31
|
+
obj.to_s
|
27
32
|
elsif obj.respond_to?(:lock_and_cache_key)
|
28
33
|
extract_obj_id obj.lock_and_cache_key
|
29
34
|
elsif obj.respond_to?(:id)
|
@@ -43,7 +48,19 @@ module LockAndCache
|
|
43
48
|
::TrueClass,
|
44
49
|
::FalseClass,
|
45
50
|
::NilClass,
|
46
|
-
|
51
|
+
::Integer,
|
52
|
+
::Float,
|
53
|
+
].to_set
|
54
|
+
parts = ::RUBY_VERSION.split('.').map(&:to_i)
|
55
|
+
unless parts[0] >= 2 and parts[1] >= 4
|
56
|
+
ALLOWED_IN_KEYS << ::Fixnum
|
57
|
+
ALLOWED_IN_KEYS << ::Bignum
|
58
|
+
end
|
59
|
+
DATE = [
|
60
|
+
::Date,
|
61
|
+
::DateTime,
|
62
|
+
::Time,
|
63
|
+
].to_set
|
47
64
|
METHOD_NAME_IN_CALLER = /in `([^']+)'/
|
48
65
|
|
49
66
|
attr_reader :context
|
@@ -21,13 +21,23 @@ describe LockAndCache::Key do
|
|
21
21
|
expect(described_class.new(a: 1).send(:parts)).to eq(described_class.new([[:a, 1]]).send(:parts))
|
22
22
|
end
|
23
23
|
|
24
|
+
now = Time.now
|
25
|
+
today = Date.today
|
24
26
|
{
|
25
27
|
[1] => [1],
|
26
|
-
[
|
27
|
-
[[
|
28
|
-
[[
|
29
|
-
[[
|
30
|
-
|
28
|
+
['you'] => ['you'],
|
29
|
+
[['you']] => [['you']],
|
30
|
+
[['you'], "person"] => [['you'], "person"],
|
31
|
+
[['you'], {:silly=>:person}] => [['you'], [[:silly, :person]] ],
|
32
|
+
[now] => [now.to_s],
|
33
|
+
[[now]] => [[now.to_s]],
|
34
|
+
[today] => [today.to_s],
|
35
|
+
[[today]] => [[today.to_s]],
|
36
|
+
{ hi: 'you' } => [[:hi, 'you']],
|
37
|
+
{ hi: 123 } => [[:hi, 123]],
|
38
|
+
{ hi: 123.0 } => [[:hi, 123.0]],
|
39
|
+
{ hi: now } => [[:hi, now.to_s]],
|
40
|
+
{ hi: today } => [[:hi, today.to_s]],
|
31
41
|
[KeyTestId.new] => ['id'],
|
32
42
|
[[KeyTestId.new]] => [['id']],
|
33
43
|
{ a: KeyTestId.new } => [[:a, "id"]],
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lock_and_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seamus Abshere
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- LICENSE.txt
|
168
168
|
- README.md
|
169
169
|
- Rakefile
|
170
|
+
- benchmarks/allowed_in_keys.rb
|
170
171
|
- lib/lock_and_cache.rb
|
171
172
|
- lib/lock_and_cache/action.rb
|
172
173
|
- lib/lock_and_cache/key.rb
|
@@ -195,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
196
|
version: '0'
|
196
197
|
requirements: []
|
197
198
|
rubyforge_project:
|
198
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.6.8
|
199
200
|
signing_key:
|
200
201
|
specification_version: 4
|
201
202
|
summary: Lock and cache methods.
|
@@ -203,4 +204,3 @@ test_files:
|
|
203
204
|
- spec/lock_and_cache/key_spec.rb
|
204
205
|
- spec/lock_and_cache_spec.rb
|
205
206
|
- spec/spec_helper.rb
|
206
|
-
has_rdoc:
|