bogo 0.2.2 → 0.2.4
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/CHANGELOG.md +3 -0
- data/bogo.gemspec +1 -0
- data/lib/bogo/memoization.rb +15 -13
- data/lib/bogo/version.rb +1 -1
- metadata +17 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4504cb2673dd897223ce5fae70b1ceb64d515695
|
|
4
|
+
data.tar.gz: ff417d3db98419a0a5a03f19b953268294f44920
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 119543ee94889f8c3d7b48132506e454e8a8753c37e5e9e15c2bf45d9d5c37e3aee4bc3a71d8ae5373bbc703b31d9376de34f39c36755d61754dd6354b5e681d
|
|
7
|
+
data.tar.gz: 3e6c60c90577c10871e5a1930c88d125c9a4ad7031615be7cbe2967e565258971eaab03745caa506569e36f8ce0fa23ad5c8673e5756030bd76eed80b9703b3a
|
data/CHANGELOG.md
CHANGED
data/bogo.gemspec
CHANGED
|
@@ -14,5 +14,6 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.add_runtime_dependency 'multi_json'
|
|
15
15
|
s.add_development_dependency 'pry'
|
|
16
16
|
s.add_development_dependency 'minitest'
|
|
17
|
+
s.add_development_dependency 'rake', '~> 10'
|
|
17
18
|
s.files = Dir['lib/**/*'] + %w(bogo.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
|
|
18
19
|
end
|
data/lib/bogo/memoization.rb
CHANGED
|
@@ -4,6 +4,11 @@ module Bogo
|
|
|
4
4
|
# Memoization helpers
|
|
5
5
|
module Memoization
|
|
6
6
|
|
|
7
|
+
# Lock for providing exclusive access
|
|
8
|
+
EXCLUSIVE_LOCK = Mutex.new
|
|
9
|
+
# Holder for global memoization items
|
|
10
|
+
GLOBAL_MEMOS = Smash.new
|
|
11
|
+
|
|
7
12
|
class << self
|
|
8
13
|
|
|
9
14
|
# Clean up isolated memoizations
|
|
@@ -29,8 +34,8 @@ module Bogo
|
|
|
29
34
|
#
|
|
30
35
|
# @return [nil]
|
|
31
36
|
def clear_global!
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
EXCLUSIVE_LOCK.synchronize do
|
|
38
|
+
GLOBAL_MEMOS.clear
|
|
34
39
|
end
|
|
35
40
|
end
|
|
36
41
|
|
|
@@ -48,12 +53,11 @@ module Bogo
|
|
|
48
53
|
key = "#{self.object_id}_#{key}"
|
|
49
54
|
end
|
|
50
55
|
if(direct == :global)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
$bogo_memoization[key] = yield
|
|
56
|
+
EXCLUSIVE_LOCK.synchronize do
|
|
57
|
+
unless(GLOBAL_MEMOS.has_key?(key))
|
|
58
|
+
GLOBAL_MEMOS[key] = yield
|
|
55
59
|
end
|
|
56
|
-
|
|
60
|
+
GLOBAL_MEMOS[key]
|
|
57
61
|
end
|
|
58
62
|
else
|
|
59
63
|
unless(_memo.has_key?(key))
|
|
@@ -82,9 +86,8 @@ module Bogo
|
|
|
82
86
|
key = "#{self.object_id}_#{key}"
|
|
83
87
|
end
|
|
84
88
|
if(direct == :global)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
$bogo_memoization.key?(key)
|
|
89
|
+
EXCLUSIVE_LOCK.synchronize do
|
|
90
|
+
GLOBAL_MEMOS.key?(key)
|
|
88
91
|
end
|
|
89
92
|
else
|
|
90
93
|
_memo.key?(key)
|
|
@@ -101,9 +104,8 @@ module Bogo
|
|
|
101
104
|
key = "#{self.object_id}_#{key}"
|
|
102
105
|
end
|
|
103
106
|
if(direct == :global)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
$bogo_memoization.delete(key)
|
|
107
|
+
EXCLUSIVE_LOCK.synchronize do
|
|
108
|
+
GLOBAL_MEMOS.delete(key)
|
|
107
109
|
end
|
|
108
110
|
else
|
|
109
111
|
_memo.delete(key)
|
data/lib/bogo/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bogo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Roberts
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-03-
|
|
11
|
+
date: 2016-03-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: hashie
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rake
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '10'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '10'
|
|
69
83
|
description: Helper libraries
|
|
70
84
|
email: code@chrisroberts.org
|
|
71
85
|
executables: []
|
|
@@ -109,9 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
109
123
|
version: '0'
|
|
110
124
|
requirements: []
|
|
111
125
|
rubyforge_project:
|
|
112
|
-
rubygems_version: 2.
|
|
126
|
+
rubygems_version: 2.5.1
|
|
113
127
|
signing_key:
|
|
114
128
|
specification_version: 4
|
|
115
129
|
summary: Helper libraries
|
|
116
130
|
test_files: []
|
|
117
|
-
has_rdoc:
|