gibbler 0.6.2 → 0.6.3
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.
- data/CHANGES.txt +8 -0
- data/gibbler.gemspec +1 -1
- data/lib/gibbler/digest.rb +39 -3
- data/lib/gibbler/history.rb +6 -6
- data/lib/gibbler/object.rb +9 -5
- data/lib/gibbler.rb +12 -12
- data/tryouts/05_gibbler_digest_tryouts.rb +6 -1
- data/tryouts/10_basic_tryouts.rb +6 -6
- data/tryouts/80_performance_tryouts.rb +2 -2
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
GIBBLER, CHANGES
|
2
2
|
|
3
3
|
|
4
|
+
#### 0.6.3 (2009-09-30) #################################
|
5
|
+
|
6
|
+
* FIXED: Won't save digest to cache if the object is frozen
|
7
|
+
* CHANGE: Renamed __gibbler_cache to gibbler_cache (with backwards compatability)
|
8
|
+
* CHANGE: Gibbler::Digest#== now returns true only for exact matches
|
9
|
+
* ADDED: Gibbler::Digest#shorter, Gibbler::Digest#tiny, Gibbler::Digest#===
|
10
|
+
|
11
|
+
|
4
12
|
#### 0.6.2 (2009-09-15) #################################
|
5
13
|
|
6
14
|
* FIXED: Enforce specific string format for Time objects. Fixes
|
data/gibbler.gemspec
CHANGED
data/lib/gibbler/digest.rb
CHANGED
@@ -17,11 +17,47 @@ class Gibbler::Digest < String
|
|
17
17
|
self[0..7]
|
18
18
|
end
|
19
19
|
|
20
|
+
# Returns the first 6 characters of itself (the digest).
|
21
|
+
#
|
22
|
+
# e.g.
|
23
|
+
#
|
24
|
+
# "kimmy".gibbler # => c8027100ecc54945ab15ddac529230e38b1ba6a1
|
25
|
+
# "kimmy".gibbler.tiny # => c80271
|
26
|
+
#
|
27
|
+
def shorter
|
28
|
+
self[0..5]
|
29
|
+
end
|
20
30
|
|
21
|
-
|
22
|
-
|
23
|
-
|
31
|
+
# Returns the first 4 characters of itself (the digest).
|
32
|
+
#
|
33
|
+
# e.g.
|
34
|
+
#
|
35
|
+
# "kimmy".gibbler # => c8027100ecc54945ab15ddac529230e38b1ba6a1
|
36
|
+
# "kimmy".gibbler.tiny # => c802
|
37
|
+
#
|
38
|
+
def tiny
|
39
|
+
self[0..3]
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns true when +ali+ matches +self+
|
43
|
+
#
|
44
|
+
# "kimmy".gibbler == "c8027100ecc54945ab15ddac529230e38b1ba6a1" # => true
|
45
|
+
# "kimmy".gibbler == "c8027100" # => false
|
46
|
+
#
|
47
|
+
def ==(ali)
|
48
|
+
return true if self.to_s == ali.to_s
|
24
49
|
false
|
25
50
|
end
|
26
51
|
|
52
|
+
# Returns true when +g+ matches one of: +self+, +short+, +shorter+, +tiny+
|
53
|
+
#
|
54
|
+
# "kimmy".gibbler === "c8027100ecc54945ab15ddac529230e38b1ba6a1" # => true
|
55
|
+
# "kimmy".gibbler === "c8027100" # => true
|
56
|
+
# "kimmy".gibbler === "c80271" # => true
|
57
|
+
# "kimmy".gibbler === "c802" # => true
|
58
|
+
#
|
59
|
+
def ===(g)
|
60
|
+
return true if [to_s, short, shorter, tiny].member?(g.to_s)
|
61
|
+
false
|
62
|
+
end
|
27
63
|
end
|
data/lib/gibbler/history.rb
CHANGED
@@ -112,16 +112,16 @@ module Gibbler
|
|
112
112
|
g = gibbler_find_long g
|
113
113
|
|
114
114
|
# Do nothing if the given digest matches the current gibble.
|
115
|
-
# NOTE: We use __gibbler b/c it doesn't update self.
|
115
|
+
# NOTE: We use __gibbler b/c it doesn't update self.gibbler_cache.
|
116
116
|
unless self.__gibbler == g
|
117
117
|
@@mutex.synchronize {
|
118
118
|
# Always make sure self.gibbler_digest is a Gibbler::Digest
|
119
|
-
self.
|
119
|
+
self.gibbler_cache = g.is_a?(Gibbler::Digest) ? g : Gibbler::Digest.new(g)
|
120
120
|
self.__gibbler_revert!
|
121
121
|
}
|
122
122
|
end
|
123
123
|
|
124
|
-
self.
|
124
|
+
self.gibbler_cache
|
125
125
|
end
|
126
126
|
|
127
127
|
# Is the given digest +g+ contained in the history for this object?
|
@@ -150,7 +150,7 @@ class Hash
|
|
150
150
|
include Gibbler::History
|
151
151
|
def __gibbler_revert!
|
152
152
|
self.clear
|
153
|
-
self.merge! self.gibbler_object(self.
|
153
|
+
self.merge! self.gibbler_object(self.gibbler_cache)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -158,7 +158,7 @@ class Array
|
|
158
158
|
include Gibbler::History
|
159
159
|
def __gibbler_revert!
|
160
160
|
self.clear
|
161
|
-
self.push *(self.gibbler_object self.
|
161
|
+
self.push *(self.gibbler_object self.gibbler_cache)
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -166,7 +166,7 @@ class String
|
|
166
166
|
include Gibbler::History
|
167
167
|
def __gibbler_revert!
|
168
168
|
self.clear
|
169
|
-
self << (self.gibbler_object self.
|
169
|
+
self << (self.gibbler_object self.gibbler_cache)
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
data/lib/gibbler/object.rb
CHANGED
@@ -6,7 +6,9 @@ module Gibbler
|
|
6
6
|
|
7
7
|
def self.included(obj)
|
8
8
|
obj.extend Attic
|
9
|
-
obj.attic :
|
9
|
+
obj.attic :gibbler_cache
|
10
|
+
# Backwards compatibility for <= 0.6.2
|
11
|
+
obj.send :alias_method, :__gibbler_cache, :gibbler_cache
|
10
12
|
end
|
11
13
|
|
12
14
|
# Calculates a digest for the current object instance.
|
@@ -15,18 +17,20 @@ module Gibbler
|
|
15
17
|
# on the digest type.
|
16
18
|
def gibbler
|
17
19
|
gibbler_debug :GIBBLER, self.class, self
|
18
|
-
|
20
|
+
digest = Gibbler::Digest.new self.__gibbler
|
21
|
+
self.gibbler_cache = digest unless self.frozen?
|
22
|
+
digest
|
19
23
|
end
|
20
24
|
|
21
25
|
# Has this object been modified?
|
22
26
|
#
|
23
27
|
# This method compares the return value from digest with the
|
24
28
|
# previous value returned by gibbler (the value is stored in
|
25
|
-
# the attic as <tt>
|
29
|
+
# the attic as <tt>gibbler_cache</tt>).
|
26
30
|
# See Attic[http://github.com/delano/attic]
|
27
31
|
def gibbled?
|
28
|
-
self.
|
29
|
-
was, now = self.
|
32
|
+
self.gibbler_cache ||= self.gibbler
|
33
|
+
was, now = self.gibbler_cache.clone, self.gibbler
|
30
34
|
gibbler_debug :gibbled?, was, now
|
31
35
|
was != now
|
32
36
|
end
|
data/lib/gibbler.rb
CHANGED
@@ -13,7 +13,7 @@ module Gibbler
|
|
13
13
|
#include Attic
|
14
14
|
extend Attic
|
15
15
|
|
16
|
-
VERSION = "0.6.
|
16
|
+
VERSION = "0.6.3"
|
17
17
|
|
18
18
|
require 'gibbler/object'
|
19
19
|
require 'gibbler/digest'
|
@@ -85,7 +85,7 @@ module Gibbler
|
|
85
85
|
|
86
86
|
def self.included(obj)
|
87
87
|
obj.extend Attic
|
88
|
-
obj.attic :
|
88
|
+
obj.attic :gibbler_cache
|
89
89
|
end
|
90
90
|
|
91
91
|
# Creates a digest for the current state of self.
|
@@ -103,7 +103,7 @@ module Gibbler
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def __gibbler_revert!
|
106
|
-
state = self.gibbler_object self.
|
106
|
+
state = self.gibbler_object self.gibbler_cache
|
107
107
|
state.instance_variables do |n|
|
108
108
|
v = state.instance_variable_get n
|
109
109
|
self.instance_variable_set v
|
@@ -132,7 +132,7 @@ module Gibbler
|
|
132
132
|
|
133
133
|
def self.included(obj)
|
134
134
|
obj.extend Attic
|
135
|
-
obj.attic :
|
135
|
+
obj.attic :gibbler_cache
|
136
136
|
end
|
137
137
|
|
138
138
|
# Creates a digest for the current state of self.
|
@@ -167,7 +167,7 @@ module Gibbler
|
|
167
167
|
|
168
168
|
def self.included(obj)
|
169
169
|
obj.extend Attic
|
170
|
-
obj.attic :
|
170
|
+
obj.attic :gibbler_cache
|
171
171
|
end
|
172
172
|
|
173
173
|
# Creates a digest for the current state of self.
|
@@ -207,7 +207,7 @@ module Gibbler
|
|
207
207
|
|
208
208
|
def self.included(obj)
|
209
209
|
obj.extend Attic
|
210
|
-
obj.attic :
|
210
|
+
obj.attic :gibbler_cache
|
211
211
|
end
|
212
212
|
|
213
213
|
# Creates a digest for the current state of self.
|
@@ -246,7 +246,7 @@ module Gibbler
|
|
246
246
|
|
247
247
|
def self.included(obj)
|
248
248
|
obj.extend Attic
|
249
|
-
obj.attic :
|
249
|
+
obj.attic :gibbler_cache
|
250
250
|
end
|
251
251
|
|
252
252
|
# Creates a digest for the current state of self.
|
@@ -277,7 +277,7 @@ module Gibbler
|
|
277
277
|
|
278
278
|
def self.included(obj)
|
279
279
|
obj.extend Attic
|
280
|
-
obj.attic :
|
280
|
+
obj.attic :gibbler_cache
|
281
281
|
end
|
282
282
|
|
283
283
|
# Creates a digest for the current state of self.
|
@@ -308,7 +308,7 @@ module Gibbler
|
|
308
308
|
|
309
309
|
def self.included(obj)
|
310
310
|
obj.extend Attic
|
311
|
-
obj.attic :
|
311
|
+
obj.attic :gibbler_cache
|
312
312
|
end
|
313
313
|
|
314
314
|
# Creates a digest for the current state of self.
|
@@ -341,7 +341,7 @@ module Gibbler
|
|
341
341
|
|
342
342
|
def self.included(obj)
|
343
343
|
obj.extend Attic
|
344
|
-
obj.attic :
|
344
|
+
obj.attic :gibbler_cache
|
345
345
|
end
|
346
346
|
|
347
347
|
# Creates a digest for the current state of self.
|
@@ -367,7 +367,7 @@ module Gibbler
|
|
367
367
|
|
368
368
|
def self.included(obj)
|
369
369
|
obj.extend Attic
|
370
|
-
obj.attic :
|
370
|
+
obj.attic :gibbler_cache
|
371
371
|
end
|
372
372
|
|
373
373
|
# Creates a digest for the current state of self.
|
@@ -402,7 +402,7 @@ module Gibbler
|
|
402
402
|
|
403
403
|
def self.included(obj)
|
404
404
|
obj.extend Attic
|
405
|
-
obj.attic :
|
405
|
+
obj.attic :gibbler_cache
|
406
406
|
end
|
407
407
|
|
408
408
|
# Creates a digest for the current state of self.
|
@@ -18,9 +18,14 @@ tryouts "All methods" do
|
|
18
18
|
Gibbler::Digest.new("1234567890").short
|
19
19
|
end
|
20
20
|
|
21
|
-
drill "
|
21
|
+
drill "== is strict (only exact matches)", false do
|
22
22
|
Gibbler::Digest.new("1234567890") == "12345678"
|
23
23
|
end
|
24
|
+
|
25
|
+
drill "=== is relaxed (allows partial matches)", true do
|
26
|
+
Gibbler::Digest.new("1234567890") === "12345678"
|
27
|
+
end
|
28
|
+
|
24
29
|
|
25
30
|
end
|
26
31
|
|
data/tryouts/10_basic_tryouts.rb
CHANGED
@@ -80,7 +80,7 @@ tryouts "Basic syntax with SHA1" do
|
|
80
80
|
a, b = :something, :anything
|
81
81
|
a.gibbler
|
82
82
|
b.gibbler
|
83
|
-
[a.
|
83
|
+
[a.gibbler_cache.short, b.gibbler_cache.short]
|
84
84
|
end
|
85
85
|
|
86
86
|
dream ["ce0c7694", "c13b2f02"]
|
@@ -88,18 +88,18 @@ tryouts "Basic syntax with SHA1" do
|
|
88
88
|
a, b = 'something', 'anything'
|
89
89
|
a.gibbler
|
90
90
|
b.gibbler
|
91
|
-
[a.
|
91
|
+
[a.gibbler_cache.short, b.gibbler_cache.short]
|
92
92
|
end
|
93
93
|
|
94
|
-
drill "Symbol has list of attic vars", [:
|
94
|
+
drill "Symbol has list of attic vars", [:gibbler_cache] do
|
95
95
|
Symbol.attic_vars
|
96
96
|
end
|
97
97
|
|
98
|
-
drill "String has list of attic vars", [:
|
98
|
+
drill "String has list of attic vars", [:gibbler_cache] do
|
99
99
|
String.attic_vars
|
100
100
|
end
|
101
101
|
|
102
|
-
drill "Hash has list of attic vars", [:
|
102
|
+
drill "Hash has list of attic vars", [:gibbler_cache] do
|
103
103
|
Hash.attic_vars
|
104
104
|
end
|
105
105
|
|
@@ -134,7 +134,7 @@ tryouts "Basic syntax with SHA1" do
|
|
134
134
|
#stash :gstring_methods, Gibbler::String.methods.sort
|
135
135
|
#stash :class_methods, a.class.methods.sort
|
136
136
|
stash :ivars, a.instance_variables
|
137
|
-
a.
|
137
|
+
a.gibbler_cache
|
138
138
|
end
|
139
139
|
|
140
140
|
end
|
@@ -16,7 +16,7 @@ tryouts "Speed", :benchmark do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
|
19
|
-
dream :mean, 0.21
|
19
|
+
# dream :mean, 0.21
|
20
20
|
drill "Array#gibbler", 5 do
|
21
21
|
@@array.gibbler
|
22
22
|
end
|
@@ -25,7 +25,7 @@ tryouts "Speed", :benchmark do
|
|
25
25
|
@@hash.hash
|
26
26
|
end
|
27
27
|
|
28
|
-
dream :mean, 1.4
|
28
|
+
# dream :mean, 1.4
|
29
29
|
drill "Hash#gibbler", 5 do
|
30
30
|
@@hash.gibbler
|
31
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gibbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-30 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|