gibbler 0.6.3 → 0.7.0
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 +23 -0
- data/README.rdoc +30 -17
- data/gibbler.gemspec +6 -1
- data/lib/gibbler/aliases.rb +5 -3
- data/lib/gibbler/object.rb +23 -6
- data/lib/gibbler.rb +27 -117
- data/tryouts/02_compat_tryouts.rb +25 -0
- data/tryouts/10_basic_tryouts.rb +10 -1
- data/tryouts/14_extended_tryouts.rb +97 -0
- data/tryouts/15_file_tryouts.rb +47 -0
- data/tryouts/16_uri_tryouts.rb +41 -0
- data/tryouts/20_time_tryouts.rb +35 -0
- data/tryouts/90_alias_tryouts.rb +5 -0
- metadata +7 -2
data/CHANGES.txt
CHANGED
@@ -1,6 +1,29 @@
|
|
1
1
|
GIBBLER, CHANGES
|
2
2
|
|
3
3
|
|
4
|
+
#### 0.7.0 (2009-10-07) #################################
|
5
|
+
|
6
|
+
NOTE: Digest calculation for Proc objects has changed. Procs
|
7
|
+
or objects containing Procs will have different digests than
|
8
|
+
those created in previous releases.
|
9
|
+
|
10
|
+
* CHANGE: Proc digests are now based on the values of obj.class
|
11
|
+
and obj.name (if available).
|
12
|
+
|
13
|
+
|
14
|
+
#### 0.6.4 (2009-10-07) #################################
|
15
|
+
|
16
|
+
* FIXED: Now using correct superclass for DateTime (Date)
|
17
|
+
* CHANGE: aliases.rb will now require gibbler so you don't need to specify both.
|
18
|
+
i.e. require 'gibbler'
|
19
|
+
require 'gibbler/aliases'
|
20
|
+
* CHANGE: Gibbler::Object#gibbler returns the value of gibbler_cache when
|
21
|
+
the object is frozen, without calculation.
|
22
|
+
* ADDED: Gibbler::Object#freeze to create digest before freezing.
|
23
|
+
* ADDED: Out of the box support for Regexp (Gibbler::String)
|
24
|
+
* ADDED: Gibbler::Object#digest_cache alias for gibbler_cache
|
25
|
+
|
26
|
+
|
4
27
|
#### 0.6.3 (2009-09-30) #################################
|
5
28
|
|
6
29
|
* FIXED: Won't save digest to cache if the object is frozen
|
data/README.rdoc
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
= Gibbler - v0.
|
1
|
+
= Gibbler - v0.7 ALPHA
|
2
2
|
|
3
3
|
Git-like hashes and history for Ruby objects for Ruby 1.8, 1.9 and JRuby.
|
4
4
|
|
5
|
-
<b>NOTE: Digests changed in the 0.6 release for Class, Module, and Proc objects. See "News" below for more info.</b>
|
6
|
-
|
7
5
|
Check out the screencast[http://www.rubypulse.com/episode-0.3-gibbler.html] created by Alex Peuchert.
|
8
6
|
|
7
|
+
=== Important Information Regarding Your Digests
|
8
|
+
|
9
|
+
<i>Digest calculation changed in the 0.7 release for Proc objects. See "News" below for more info.</i>
|
10
|
+
|
9
11
|
|
10
12
|
== Example 1 -- Basic Usage
|
11
13
|
|
@@ -70,8 +72,7 @@ http://delano.github.com/gibbler/img/whoababy.gif
|
|
70
72
|
== Example 3 -- Method Aliases
|
71
73
|
|
72
74
|
If you have control over the namespaces of your objects, you can use the method aliases to tighten up your code a bit. The "gibbler" and "gibbled?" methods can be accessed via "digest" and "changed?", respectively. (The reason they're not enabled by default is to avoid conflicts.)
|
73
|
-
|
74
|
-
require 'gibbler'
|
75
|
+
|
75
76
|
require 'gibbler/aliases'
|
76
77
|
|
77
78
|
"kimmy".digest # => c8027100ecc54945ab15ddac529230e38b1ba6a1
|
@@ -84,11 +85,9 @@ If you have control over the namespaces of your objects, you can use the method
|
|
84
85
|
|
85
86
|
|
86
87
|
The history methods also have aliases which remove the "gibbler_".
|
87
|
-
|
88
|
-
require 'gibbler'
|
89
|
-
require 'gibbler/history'
|
90
|
-
require 'gibbler/aliases'
|
91
88
|
|
89
|
+
require 'gibbler/aliases'
|
90
|
+
require 'gibbler/history'
|
92
91
|
|
93
92
|
a = { :magic => :original }
|
94
93
|
a.commit
|
@@ -121,18 +120,36 @@ If you want to support all Ruby objects, add the following to your application:
|
|
121
120
|
|
122
121
|
Gibbler::String creates a digest based on the name of the class and the output of the to_s method. This is a reasonable default for most objects however any object that includes the object address in to_s (e.g. "Object:0x0x4ac9f0...") will produce unreliable digests (because the address can change).
|
123
122
|
|
123
|
+
As of 0.7 all Proc objects have the same digest: <tt>12075835e94be34438376cd7a54c8db7e746f15d</tt>.
|
124
|
+
|
124
125
|
|
125
126
|
== ALPHA Notice
|
126
127
|
|
127
|
-
This code is
|
128
|
+
This code is fresh so the interface may change. Some things to keep in mind:
|
128
129
|
|
129
130
|
* Gibbler history is not suitable for very large objects since it keeps complete copies of the object in memory. This is a very early implementation of this feature so don't rely on it for production code.
|
130
|
-
* Digest calculation may change between
|
131
|
-
*
|
131
|
+
* Digest calculation may change between minor releases (e.g. 0.6 to 0.7, etc)
|
132
|
+
* Don't forget to enjoy what you do!
|
132
133
|
|
133
134
|
|
134
135
|
== News
|
135
136
|
|
137
|
+
=== 2009-10-07: Digest calculation for Proc objects has changed.
|
138
|
+
|
139
|
+
Proc digests are now based on the name of the class and the value of Proc#name (if available). Procs or objects containing Procs will have different digests than those created in previous releases.
|
140
|
+
|
141
|
+
After much deliberation, I realized that Gibbler cares about the data and not the code. Procs are code, but a reference to a Proc in an instance variable is data. With this change all Proc objects have the same digest. This decision has the side benefit of increasing compatibility between Ruby 1.8, 1.9 & JRuby.
|
142
|
+
|
143
|
+
This is the only change between 0.6.4 and 0.7.0 so if you prefer the previous calculation for Procs you can find it in that version.
|
144
|
+
|
145
|
+
Happy Digesting!
|
146
|
+
|
147
|
+
=== 2009-10-07: Support for freezing and Regexp
|
148
|
+
|
149
|
+
In 0.6.4, all Gibbler objects will create a new digest when <tt>obj.freeze</tt> is called. All subsequent calls to <tt>obj.gibbler</tt> will return the most recent digest without having to run the calculation again.
|
150
|
+
|
151
|
+
I've also added support for Regexp out of the box.
|
152
|
+
|
136
153
|
=== 2009-07-20: Digest change for instances of Class, Module, and Proc
|
137
154
|
|
138
155
|
Digest calculation has changed for Class, Module, and Proc objects. Digests created with Gibbler 0.5.x and earlier will not match the ones created by 0.6.
|
@@ -142,15 +159,11 @@ Digest calculation has changed for Class, Module, and Proc objects. Digests crea
|
|
142
159
|
|
143
160
|
Also note that this change affects the digests for Hashes and Arrays that contain instances of Class, Module, or Proc.
|
144
161
|
|
145
|
-
=== 2009-07-17: Improved support for Symbol and Fixnum
|
146
|
-
|
147
|
-
With the upgrade to Attic 0.4, the gibbled? method and object history is now available for Symbol and Fixnum objects.
|
148
|
-
|
149
162
|
|
150
163
|
== Known Issues
|
151
164
|
|
152
165
|
* gibbler or gibbled? must be called at least once before gibbled? will be able to return a useful value (otherwise there is no previous digest value to compare to)
|
153
|
-
* Digests for Bignum objects are different between Ruby
|
166
|
+
* Digests for Bignum objects are different between Ruby and JRuby. Does anyone know why?
|
154
167
|
* Digests for Proc objects are different between Ruby 1.8 and 1.9 because Proc.arity returns different values and 1.8 has no lambda? method.
|
155
168
|
|
156
169
|
|
data/gibbler.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "gibbler"
|
3
3
|
s.rubyforge_project = "gibbler"
|
4
|
-
s.version = "0.
|
4
|
+
s.version = "0.7.0"
|
5
5
|
s.summary = "Gibbler: Git-like hashes for Ruby objects"
|
6
6
|
s.description = s.summary
|
7
7
|
s.author = "Delano Mandelbaum"
|
@@ -41,9 +41,14 @@
|
|
41
41
|
lib/gibbler/mixins/string.rb
|
42
42
|
lib/gibbler/object.rb
|
43
43
|
tryouts/01_mixins_tryouts.rb
|
44
|
+
tryouts/02_compat_tryouts.rb
|
44
45
|
tryouts/05_gibbler_digest_tryouts.rb
|
45
46
|
tryouts/10_basic_tryouts.rb
|
46
47
|
tryouts/11_basic_sha256_tryouts.rb
|
48
|
+
tryouts/14_extended_tryouts.rb
|
49
|
+
tryouts/15_file_tryouts.rb
|
50
|
+
tryouts/16_uri_tryouts.rb
|
51
|
+
tryouts/20_time_tryouts.rb
|
47
52
|
tryouts/50_history_tryouts.rb
|
48
53
|
tryouts/51_hash_history_tryouts.rb
|
49
54
|
tryouts/52_array_history_tryouts.rb
|
data/lib/gibbler/aliases.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
|
2
|
+
require 'gibbler'
|
2
3
|
|
3
4
|
module Gibbler
|
4
5
|
|
5
|
-
|
6
6
|
module Object
|
7
|
-
alias :digest
|
8
|
-
alias :changed?
|
7
|
+
alias :digest :gibbler
|
8
|
+
alias :changed? :gibbled?
|
9
|
+
# The cache is in the Attic.
|
10
|
+
def digest_cache; gibbler_cache; end
|
9
11
|
end
|
10
12
|
|
11
13
|
#--
|
data/lib/gibbler/object.rb
CHANGED
@@ -14,12 +14,21 @@ module Gibbler
|
|
14
14
|
# Calculates a digest for the current object instance.
|
15
15
|
# Objects that are a kind of Hash or Array are processed
|
16
16
|
# recursively. The length of the returned String depends
|
17
|
-
# on the digest type.
|
17
|
+
# on the digest type. Also stores the value in the attic.
|
18
|
+
#
|
19
|
+
# obj.gibbler # => a5b1191a
|
20
|
+
# obj.gibbler_cache # => a5b1191a
|
21
|
+
#
|
22
|
+
# Calling gibbler_cache returns the most recent digest
|
23
|
+
# without calculation.
|
24
|
+
#
|
25
|
+
# If the object is frozen, this will return the value of
|
26
|
+
# <tt>gibbler_cache</tt>.
|
27
|
+
#
|
18
28
|
def gibbler
|
19
29
|
gibbler_debug :GIBBLER, self.class, self
|
20
|
-
|
21
|
-
self.gibbler_cache =
|
22
|
-
digest
|
30
|
+
return self.gibbler_cache if self.frozen?
|
31
|
+
self.gibbler_cache = Gibbler::Digest.new self.__gibbler
|
23
32
|
end
|
24
33
|
|
25
34
|
# Has this object been modified?
|
@@ -42,7 +51,7 @@ module Gibbler
|
|
42
51
|
|
43
52
|
# Creates a digest for the current state of self based on:
|
44
53
|
# * Object#class
|
45
|
-
# * Length of Object#name ||
|
54
|
+
# * Length of Object#name || 0
|
46
55
|
# * Object#name || ''
|
47
56
|
#
|
48
57
|
# e.g. Digest::SHA1.hexdigest "Class:6:Object" #=>
|
@@ -52,11 +61,19 @@ module Gibbler
|
|
52
61
|
#
|
53
62
|
def __gibbler(h=self)
|
54
63
|
klass = h.class
|
55
|
-
nom = h.name
|
64
|
+
nom = h.name if h.respond_to?(:name)
|
65
|
+
nom ||= ''
|
56
66
|
a = Gibbler.digest '%s:%s:%s' % [klass, nom.size, nom]
|
57
67
|
gibbler_debug klass, a, [klass, nom.size, nom]
|
58
68
|
a
|
59
69
|
end
|
70
|
+
|
71
|
+
# A simple override on Object#freeze to create a digest
|
72
|
+
# before the object is frozen. Once the object is frozen
|
73
|
+
# <tt>obj.gibbler</tt> will return the cached value with
|
74
|
+
# out calculation.
|
75
|
+
def freeze() self.gibbler; super; self end
|
76
|
+
|
60
77
|
end
|
61
78
|
|
62
79
|
end
|
data/lib/gibbler.rb
CHANGED
@@ -1,22 +1,18 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
local_libs.each { |dir| $:.unshift File.join(File.dirname(__FILE__), '..', '..', dir, 'lib') }
|
4
|
-
|
5
|
-
require 'digest/sha1'
|
2
|
+
require 'thread'
|
6
3
|
require 'attic'
|
4
|
+
require 'digest/sha1'
|
7
5
|
|
8
6
|
# = Gibbler
|
9
7
|
#
|
10
8
|
# "Hola, Tanneritos"
|
11
9
|
#
|
12
10
|
module Gibbler
|
13
|
-
#include Attic
|
14
|
-
extend Attic
|
15
11
|
|
16
|
-
VERSION = "0.
|
12
|
+
VERSION = "0.7.0"
|
17
13
|
|
18
|
-
require 'gibbler/object'
|
19
14
|
require 'gibbler/digest'
|
15
|
+
require 'gibbler/object'
|
20
16
|
require 'gibbler/mixins'
|
21
17
|
|
22
18
|
class Error < RuntimeError
|
@@ -225,40 +221,6 @@ module Gibbler
|
|
225
221
|
end
|
226
222
|
end
|
227
223
|
|
228
|
-
# Return the digest for <tt>class:arity:binding</tt>, where:
|
229
|
-
# * class is the current class name (e.g. Proc)
|
230
|
-
# * arity is the value returned by <tt>Proc#arity</tt>
|
231
|
-
# * value of lambda? if available (Ruby 1.9) or false otherwise
|
232
|
-
#
|
233
|
-
# This method can be used by any subclass of Proc.
|
234
|
-
#
|
235
|
-
# NOTE: This is named "Block" because for some reason if this is
|
236
|
-
# named "Proc" (as in Gibbler::Proc) and the Rye library is also
|
237
|
-
# required, a runtime error is raised (Ruby 1.9.1 only):
|
238
|
-
#
|
239
|
-
# undefined method `new' for Gibbler::Proc:Module
|
240
|
-
# /usr/local/lib/ruby/1.9.1/tempfile.rb:169:in `callback'
|
241
|
-
# /usr/local/lib/ruby/1.9.1/tempfile.rb:61:in `initialize'
|
242
|
-
# /Users/delano/Projects/opensource/rye/lib/rye.rb:210:in `new'
|
243
|
-
#
|
244
|
-
module Block
|
245
|
-
include Gibbler::Object
|
246
|
-
|
247
|
-
def self.included(obj)
|
248
|
-
obj.extend Attic
|
249
|
-
obj.attic :gibbler_cache
|
250
|
-
end
|
251
|
-
|
252
|
-
# Creates a digest for the current state of self.
|
253
|
-
def __gibbler(h=self)
|
254
|
-
klass = h.class
|
255
|
-
is_lambda = h.respond_to?(:lambda?) ? h.lambda? : false
|
256
|
-
a = Gibbler.digest '%s:%s:%s' % [klass, h.arity, is_lambda]
|
257
|
-
gibbler_debug klass, a, [klass, h.arity, is_lambda]
|
258
|
-
a
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
224
|
# Creates a digest based on: <tt>CLASS:LENGTH:TIME</tt>.
|
263
225
|
# Times are calculated based on the equivalent time in UTC.
|
264
226
|
# e.g.
|
@@ -439,84 +401,32 @@ module Gibbler
|
|
439
401
|
|
440
402
|
end
|
441
403
|
|
442
|
-
class
|
443
|
-
|
444
|
-
end
|
445
|
-
|
446
|
-
class
|
447
|
-
|
448
|
-
end
|
449
|
-
|
450
|
-
class
|
451
|
-
|
452
|
-
end
|
453
|
-
|
454
|
-
class String
|
455
|
-
|
456
|
-
end
|
457
|
-
|
458
|
-
class
|
459
|
-
|
460
|
-
end
|
461
|
-
|
462
|
-
class Class
|
463
|
-
include Gibbler::Object
|
464
|
-
end
|
465
|
-
|
466
|
-
class Module
|
467
|
-
include Gibbler::Object
|
468
|
-
end
|
469
|
-
|
470
|
-
class Fixnum
|
471
|
-
include Gibbler::String
|
472
|
-
end
|
473
|
-
|
474
|
-
class Bignum
|
475
|
-
include Gibbler::String
|
476
|
-
end
|
477
|
-
|
478
|
-
class TrueClass
|
479
|
-
include Gibbler::String
|
480
|
-
end
|
481
|
-
|
482
|
-
class FalseClass
|
483
|
-
include Gibbler::String
|
484
|
-
end
|
485
|
-
|
486
|
-
class Float
|
487
|
-
include Gibbler::String
|
488
|
-
end
|
489
|
-
|
490
|
-
class Time
|
491
|
-
include Gibbler::Time
|
492
|
-
end
|
493
|
-
|
494
|
-
class Date
|
495
|
-
include Gibbler::String
|
496
|
-
end
|
404
|
+
class NilClass; include Gibbler::Nil; end
|
405
|
+
class Class; include Gibbler::Object; end
|
406
|
+
class Module; include Gibbler::Object; end
|
407
|
+
class Proc; include Gibbler::Object; end
|
408
|
+
class String; include Gibbler::String; end
|
409
|
+
class Regexp; include Gibbler::String; end
|
410
|
+
class Fixnum; include Gibbler::String; end
|
411
|
+
class Bignum; include Gibbler::String; end
|
412
|
+
class TrueClass; include Gibbler::String; end
|
413
|
+
class FalseClass; include Gibbler::String; end
|
414
|
+
class Float; include Gibbler::String; end
|
415
|
+
class Symbol; include Gibbler::String; end
|
416
|
+
class Date; include Gibbler::String; end
|
417
|
+
class Hash; include Gibbler::Hash; end
|
418
|
+
class Array; include Gibbler::Array; end
|
419
|
+
class Time; include Gibbler::Time; end
|
420
|
+
class DateTime < Date; include Gibbler::DateTime; end
|
421
|
+
class Range; include Gibbler::Range; end
|
422
|
+
class File; include Gibbler::File; end
|
423
|
+
class TempFile; include Gibbler::File; end
|
497
424
|
|
498
|
-
|
499
|
-
|
500
|
-
end
|
425
|
+
# URI::Generic must be included towards the
|
426
|
+
# end b/c it runs Object#freeze statically.
|
427
|
+
module URI; class Generic; include Gibbler::String; end; end
|
501
428
|
|
502
|
-
class Range
|
503
|
-
include Gibbler::Range
|
504
|
-
end
|
505
429
|
|
506
|
-
class NilClass
|
507
|
-
include Gibbler::Nil
|
508
|
-
end
|
509
430
|
|
510
|
-
module URI
|
511
|
-
class Generic
|
512
|
-
include Gibbler::String
|
513
|
-
end
|
514
|
-
end
|
515
431
|
|
516
|
-
class File
|
517
|
-
include Gibbler::File
|
518
|
-
end
|
519
432
|
|
520
|
-
class TempFile
|
521
|
-
include Gibbler::File
|
522
|
-
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
library :gibbler, 'lib'
|
3
|
+
|
4
|
+
group "Gibbler::Digest"
|
5
|
+
|
6
|
+
tryouts "Backwards compatability" do
|
7
|
+
|
8
|
+
dream true
|
9
|
+
drill "Gibbler Objects have gibbler_cache method" do
|
10
|
+
"kimmy".respond_to? :gibbler_cache
|
11
|
+
end
|
12
|
+
|
13
|
+
dream true
|
14
|
+
drill "Gibbler Objects have __gibbler_cache method" do
|
15
|
+
"kimmy".respond_to? :__gibbler_cache
|
16
|
+
end
|
17
|
+
|
18
|
+
dream true
|
19
|
+
drill "__gibbler_cache returns the same value as gibbler_cache" do
|
20
|
+
a = "kimmy" and a.gibbler
|
21
|
+
a.__gibbler_cache == a.gibbler_cache
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
data/tryouts/10_basic_tryouts.rb
CHANGED
@@ -39,7 +39,7 @@ tryouts "Basic syntax with SHA1" do
|
|
39
39
|
1
|
40
40
|
end
|
41
41
|
|
42
|
-
dream :gibbler, '
|
42
|
+
dream :gibbler, '608256db120251843843bba57e9b2c7adb7342aa'
|
43
43
|
drill "Bignum instance" do
|
44
44
|
100000000000
|
45
45
|
end
|
@@ -103,6 +103,15 @@ tryouts "Basic syntax with SHA1" do
|
|
103
103
|
Hash.attic_vars
|
104
104
|
end
|
105
105
|
|
106
|
+
drill "Freezing an object will update the digest", true do
|
107
|
+
a = { :a => 1 }
|
108
|
+
pre = a.gibbler;
|
109
|
+
a[:a] = 2
|
110
|
+
post = a.freeze.gibbler
|
111
|
+
stash :pre, pre
|
112
|
+
stash :post, post
|
113
|
+
pre != post && post == a.gibbler_cache
|
114
|
+
end
|
106
115
|
|
107
116
|
dream :gibbler, "6ea546919dc4caa2bab69799b71d48810a1b48fa"
|
108
117
|
drill "works on arbitrary objects" do
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
library :gibbler, 'lib'
|
3
|
+
group "Gibbler Gazette"
|
4
|
+
|
5
|
+
Gibbler.enable_debug if Tryouts.verbose > 3
|
6
|
+
Gibbler.digest_type = Digest::SHA1
|
7
|
+
|
8
|
+
tryouts "Extended object tryouts" do
|
9
|
+
|
10
|
+
dream :gibbler, 'f2b0150c84c5c834406ec9cdec989a0fa938b4ad'
|
11
|
+
drill "true can gibbler", true
|
12
|
+
|
13
|
+
dream :gibbler, 'abee839edf5f9c101c505c28987ca35c31c7fc8d'
|
14
|
+
drill "false can gibbler", false
|
15
|
+
|
16
|
+
dream :gibbler, '583fb214ec50d2c4a123cc52de0c65e801d13516'
|
17
|
+
drill "TrueClass can gibbler", TrueClass
|
18
|
+
|
19
|
+
dream :gibbler, '11f262be475ddf38a25888e9f6ec82f384a7c58b'
|
20
|
+
drill "FalseClass can gibbler", FalseClass
|
21
|
+
|
22
|
+
dream :gibbler, '25ac269ae3ef18cdb4143ad02ca315afb5026de9'
|
23
|
+
drill "Class can gibbler", Class
|
24
|
+
|
25
|
+
dream :gibbler, '5620e4a8b10ec6830fece61d33f5d3e9a349b4c2'
|
26
|
+
drill "Object can gibbler", Object
|
27
|
+
|
28
|
+
dream :gibbler, '083feec632e6cd5347e3fb3c7048365c3a0d710e'
|
29
|
+
drill "Class instance can gibbler", Class.new
|
30
|
+
|
31
|
+
dream :gibbler, '7295241e929ffd7cc974cf8d4481291e070937fc'
|
32
|
+
drill "Module can gibbler", Module
|
33
|
+
|
34
|
+
dream :gibbler, '6b5a192fd377dfc5c2828a3ad6105b68b6db33d5'
|
35
|
+
drill "Module instance can gibbler", Module.new
|
36
|
+
|
37
|
+
dream :gibbler, '8640f7abcbcb80e3825ed827bf36819e26119e16'
|
38
|
+
drill "Proc can gibbler", Proc
|
39
|
+
|
40
|
+
dream :gibbler, 'd73ae2a7bc2058b05dbc1952d8abf004167109e0'
|
41
|
+
drill "Range instance (..) can gibbler", 1..100
|
42
|
+
|
43
|
+
dream :gibbler, '46c8a7d0163144819c440bf6734a8101cd72c04a'
|
44
|
+
drill "Range instance (...) can gibbler", 1...100
|
45
|
+
|
46
|
+
drill "Range (..) doesn't equal range (...)", true do
|
47
|
+
('a'..'e').gibbler != ('a'...'e').gibbler
|
48
|
+
end
|
49
|
+
|
50
|
+
dream '06fdf26b2a64e90cd35ea9162d9cc48c9f6bb13c'
|
51
|
+
drill "nil has a gibbler", nil.gibbler
|
52
|
+
|
53
|
+
|
54
|
+
dream :gibbler, '7295241e929ffd7cc974cf8d4481291e070937fc'
|
55
|
+
drill "Module can gibbler", Module
|
56
|
+
|
57
|
+
dream :gibbler, '6b5a192fd377dfc5c2828a3ad6105b68b6db33d5'
|
58
|
+
drill "Module instance can gibbler", Module.new
|
59
|
+
|
60
|
+
dream :gibbler, '25ac269ae3ef18cdb4143ad02ca315afb5026de9'
|
61
|
+
drill "Class can gibbler", Class
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
tryouts "Proc" do
|
67
|
+
|
68
|
+
setup do
|
69
|
+
class ::MyProc < Proc; end
|
70
|
+
end
|
71
|
+
|
72
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
73
|
+
drill "Proc.new can gibbler", Proc.new() { }
|
74
|
+
|
75
|
+
dream :gibbler, '8640f7abcbcb80e3825ed827bf36819e26119e16'
|
76
|
+
drill "Proc can gibbler", Proc
|
77
|
+
|
78
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
79
|
+
drill "proc can gibbler", proc {}
|
80
|
+
|
81
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
82
|
+
drill "lambda can gibbler", lambda {}
|
83
|
+
|
84
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
85
|
+
drill "lambda gibbler is not aware of arity", lambda { |v| }
|
86
|
+
|
87
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
88
|
+
drill "proc gibbler is not aware of arity", proc { |v| }
|
89
|
+
|
90
|
+
dream :gibbler, '12075835e94be34438376cd7a54c8db7e746f15d'
|
91
|
+
drill "Proc gibbler is not aware of proc payload", proc { |v| 1; }
|
92
|
+
|
93
|
+
dream :gibbler, "c979a45653acaddcb9c1581a7de49c94ac96e128"
|
94
|
+
drill "MyProc has a different digest" do
|
95
|
+
MyProc.new() { }
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
library :gibbler, 'lib'
|
4
|
+
group "Gibbler Gazette"
|
5
|
+
|
6
|
+
Gibbler.enable_debug if Tryouts.verbose > 3
|
7
|
+
Gibbler.digest_type = Digest::SHA1
|
8
|
+
|
9
|
+
tryouts "File object tryouts" do
|
10
|
+
set :tempfile, "tryouts-9000-awesome.txt"
|
11
|
+
|
12
|
+
clean do
|
13
|
+
File.unlink tempfile if File.exists? tempfile
|
14
|
+
end
|
15
|
+
|
16
|
+
dream :gibbler, '33027386bd95e91efc4711648d488519062d828f'
|
17
|
+
drill "File can gibbler" do
|
18
|
+
path = File.join(File.dirname(__FILE__), '..', 'CHANGES.txt')
|
19
|
+
File.new(File.expand_path(path))
|
20
|
+
end
|
21
|
+
|
22
|
+
dream :gibbler, '4c131b7e5f9e7b841b4501d2d002785d3730ae19'
|
23
|
+
drill "Gibbler is different for each path" do
|
24
|
+
path = File.join(File.dirname(__FILE__), '..', 'README.rdoc')
|
25
|
+
File.new(File.expand_path(path))
|
26
|
+
end
|
27
|
+
|
28
|
+
## JRuby doesn't like to use File.new with directories
|
29
|
+
##dream :gibbler, '92cbcb7de73d7748b28d9e911f461013de34410f'
|
30
|
+
##drill "File gibbler cares about trailing slash (/tmp/)", File.new(__FILE__)
|
31
|
+
|
32
|
+
dream :respond_to?, :gibbler
|
33
|
+
drill "TempFile can gibbler", Tempfile.new('gibbler')
|
34
|
+
|
35
|
+
drill "TempFile digests change", false do
|
36
|
+
Tempfile.new('gibbler').gibbler == Tempfile.new('gibbler').gibbler
|
37
|
+
end
|
38
|
+
|
39
|
+
dream :gibbler, '6d93f752fc23f36bffa5ddf9ee97d04be82efbdb'
|
40
|
+
drill "File doesn't care about file contents" do
|
41
|
+
f = File.open tempfile, 'w'
|
42
|
+
f.puts "World's Finest Number: " << "#{rand}"
|
43
|
+
f.close
|
44
|
+
stash :file_contents, File.read(tempfile)
|
45
|
+
File.new tempfile
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
library :gibbler, 'lib'
|
4
|
+
group "Gibbler Gazette"
|
5
|
+
|
6
|
+
Gibbler.enable_debug if Tryouts.verbose > 3
|
7
|
+
Gibbler.digest_type = Digest::SHA1
|
8
|
+
|
9
|
+
tryouts "URI object tryouts" do
|
10
|
+
|
11
|
+
dream :gibbler, "9efe60a5db66aecf9b5fb8655b0bab0fcc7bd0c5"
|
12
|
+
drill "URI::HTTP can gibbler" do
|
13
|
+
uri = URI.parse "http://localhost:3114/spaceship"
|
14
|
+
uri
|
15
|
+
end
|
16
|
+
|
17
|
+
dream :gibbler, "b75d3c34e60d6feafa796ddbb51e45710f6b106d"
|
18
|
+
drill "URI::HTTPS can gibbler" do
|
19
|
+
uri = URI.parse "https://localhost:3114/spaceship"
|
20
|
+
uri
|
21
|
+
end
|
22
|
+
|
23
|
+
dream :gibbler, "191b0072b95ca0c79ed75e6deb5b28562dd9e5b9"
|
24
|
+
drill "URI::HTTP is trailing slash sensitive" do
|
25
|
+
uri = URI.parse "http://localhost:3114/spaceship/"
|
26
|
+
uri
|
27
|
+
end
|
28
|
+
|
29
|
+
dream :gibbler, "d378372934326947113489d1f36f4853bef90a65"
|
30
|
+
drill "URI::Generic can gibbler" do
|
31
|
+
uri = URI.parse "localhost:3114/spaceship"
|
32
|
+
uri
|
33
|
+
end
|
34
|
+
|
35
|
+
dream :gibbler, "9d0543b31afebac9e8d38c56a0cf12070779f790"
|
36
|
+
drill "URI::FTP can gibbler" do
|
37
|
+
uri = URI.parse "ftp://localhost:3114/spaceship"
|
38
|
+
uri
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
library :gibbler, 'lib'
|
4
|
+
group "Gibbler Gazette"
|
5
|
+
|
6
|
+
Gibbler.enable_debug if Tryouts.verbose > 3
|
7
|
+
Gibbler.digest_type = Digest::SHA1
|
8
|
+
|
9
|
+
tryouts "Time tryouts" do
|
10
|
+
|
11
|
+
dream :gibbler, 'c8403fc35481fdf7f6f4a0e7262b1c9610bdebaa'
|
12
|
+
drill "Date instance can gibbler", Date.parse('2009-08-25')
|
13
|
+
|
14
|
+
dream :gibbler, '73b4635fc63b8dd32b622776201f98a37478be90'
|
15
|
+
drill "Time instance can gibbler", Time.parse('2009-08-25 16:43:53 UTC')
|
16
|
+
|
17
|
+
dream :gibbler, 'd35546d6517c02f2a219ecfa2261a5274d217cb7'
|
18
|
+
drill "Time instance can gibbler with single digit values" do
|
19
|
+
Time.parse('2009-01-01 01:01:01 UTC')
|
20
|
+
end
|
21
|
+
|
22
|
+
dream :gibbler, 'ad64c7694a50becf55c53485dce5d0013ff65785'
|
23
|
+
drill "DateTime instance can gibbler", DateTime.parse('2009-08-25T17:00:40+00:00')
|
24
|
+
|
25
|
+
dream Time.parse('2009-08-25 12:43:53 -04:00').gibbler
|
26
|
+
drill "Time digest is based on UTC" do
|
27
|
+
Time.parse('2009-08-25 16:43:53 UTC').gibbler
|
28
|
+
end
|
29
|
+
|
30
|
+
dream DateTime.parse('2009-08-25T13:00:40-04:00').gibbler
|
31
|
+
drill "DateTime digest is based on UTC" do
|
32
|
+
DateTime.parse('2009-08-25T17:00:40+00:00').gibbler
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/tryouts/90_alias_tryouts.rb
CHANGED
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.
|
4
|
+
version: 0.7.0
|
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-
|
12
|
+
date: 2009-10-07 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -45,9 +45,14 @@ files:
|
|
45
45
|
- lib/gibbler/mixins/string.rb
|
46
46
|
- lib/gibbler/object.rb
|
47
47
|
- tryouts/01_mixins_tryouts.rb
|
48
|
+
- tryouts/02_compat_tryouts.rb
|
48
49
|
- tryouts/05_gibbler_digest_tryouts.rb
|
49
50
|
- tryouts/10_basic_tryouts.rb
|
50
51
|
- tryouts/11_basic_sha256_tryouts.rb
|
52
|
+
- tryouts/14_extended_tryouts.rb
|
53
|
+
- tryouts/15_file_tryouts.rb
|
54
|
+
- tryouts/16_uri_tryouts.rb
|
55
|
+
- tryouts/20_time_tryouts.rb
|
51
56
|
- tryouts/50_history_tryouts.rb
|
52
57
|
- tryouts/51_hash_history_tryouts.rb
|
53
58
|
- tryouts/52_array_history_tryouts.rb
|