gibbler 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|