fail-fast 1.0.0 → 1.1.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/History.txt +5 -0
- data/README.rdoc +5 -1
- data/lib/fail_fast.rb +13 -1
- data/spec/fail_fast_spec.rb +71 -0
- metadata +5 -25
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -51,7 +51,11 @@ FailFast is a collection of assertion methods intended for lightweight contract
|
|
51
51
|
try { assert_keys(h, :foo, :bar) } # => {:foo=>1, :bar=>2, :baz=>nil}
|
52
52
|
try { assert_keys(h, :baz) } # => "<Assertion Failure>"
|
53
53
|
try { assert_keys(h, :buz) } # => "<Assertion Failure>"
|
54
|
-
|
54
|
+
|
55
|
+
# Assert that an object is hash-like and has only the given keys
|
56
|
+
h = {:foo => 1, :bar => nil}
|
57
|
+
try { assert_keys(h, :foo, :bar) } # => {:foo => 1, :bar => nil}
|
58
|
+
try { assert_keys(h, :foo) } # => "<Assertion Failure>"
|
55
59
|
|
56
60
|
== REQUIREMENTS:
|
57
61
|
|
data/lib/fail_fast.rb
CHANGED
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
module FailFast
|
5
|
-
VERSION = '1.
|
5
|
+
VERSION = '1.1.0'
|
6
6
|
|
7
7
|
class AssertionFailureError < Exception
|
8
8
|
end
|
@@ -48,6 +48,18 @@ module FailFast
|
|
48
48
|
hash
|
49
49
|
end
|
50
50
|
|
51
|
+
# Assert that +hash+ exists, responds to #[], and has no keys other than
|
52
|
+
# +keys+. Returns +hash+.
|
53
|
+
def assert_only_keys(hash, *keys)
|
54
|
+
assert_exists(hash)
|
55
|
+
assert(hash.respond_to?(:[]))
|
56
|
+
values = hash.inject([]) { |vals, (k, v)|
|
57
|
+
assert(keys.include?(k)); vals << hash[k]
|
58
|
+
}
|
59
|
+
assert(yield(*values)) if block_given?
|
60
|
+
hash
|
61
|
+
end
|
62
|
+
|
51
63
|
# Assert that +object+ responds to +messages+. Returns +object+.
|
52
64
|
def assert_respond_to(object, *messages)
|
53
65
|
messages.each do |message|
|
data/spec/fail_fast_spec.rb
CHANGED
@@ -277,6 +277,77 @@ describe FailFast::Assertions, "#assert_keys" do
|
|
277
277
|
end
|
278
278
|
end
|
279
279
|
|
280
|
+
describe FailFast::Assertions, "#assert_only_keys" do
|
281
|
+
|
282
|
+
include FailFast::Assertions
|
283
|
+
|
284
|
+
def do_assertion(*args, &block)
|
285
|
+
assert_only_keys(*args, &block)
|
286
|
+
end
|
287
|
+
|
288
|
+
def do_success(&block)
|
289
|
+
assert_only_keys({:foo => true}, :foo, &block)
|
290
|
+
end
|
291
|
+
|
292
|
+
def do_failure(&block)
|
293
|
+
assert_only_keys({:foo, :bar}, :foo, &block)
|
294
|
+
end
|
295
|
+
|
296
|
+
it_should_behave_like "any assertion"
|
297
|
+
it_should_behave_like "an assertion taking a block"
|
298
|
+
|
299
|
+
it "should fail if an unspecified key is present" do
|
300
|
+
lambda { assert_only_keys({:bar => true}, :foo) }.
|
301
|
+
should raise_error(FailFast::AssertionFailureError)
|
302
|
+
end
|
303
|
+
|
304
|
+
it "should fail if the given hash is nil" do
|
305
|
+
lambda do
|
306
|
+
assert_only_keys(nil)
|
307
|
+
end.should raise_error(FailFast::AssertionFailureError)
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should fail if given something unlike a hash" do
|
311
|
+
lambda do
|
312
|
+
assert_only_keys(true)
|
313
|
+
end.should raise_error(FailFast::AssertionFailureError)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "should always fail if no keys are given" do
|
317
|
+
lambda do
|
318
|
+
assert_only_keys({:foo => true, :bar => nil})
|
319
|
+
end.should raise_error(FailFast::AssertionFailureError)
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should yield values of keys which are present" do
|
323
|
+
did_yield = false
|
324
|
+
assert_only_keys({:foo => 23}, :foo, :bar) do |x, y|
|
325
|
+
did_yield = true
|
326
|
+
x.should == 23
|
327
|
+
y.should be_nil
|
328
|
+
true
|
329
|
+
end
|
330
|
+
did_yield.should be_true
|
331
|
+
end
|
332
|
+
|
333
|
+
it "should yield nothing if a key is wrong" do
|
334
|
+
begin
|
335
|
+
did_yield = false
|
336
|
+
assert_only_keys({:foo => 23, :baz => 32}, :foo, :bar) do |x, y|
|
337
|
+
did_yield = true
|
338
|
+
end
|
339
|
+
rescue FailFast::AssertionFailureError
|
340
|
+
did_yield.should be_false
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
it "should return the hash" do
|
345
|
+
@hash = { :buz => 42 }
|
346
|
+
assert_only_keys(@hash, :buz).should equal(@hash)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
|
280
351
|
describe FailFast::Assertions, "#assert_respond_to" do
|
281
352
|
include FailFast::Assertions
|
282
353
|
|
metadata
CHANGED
@@ -1,35 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fail-fast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avdi Grimm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
- |
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDKDCCAhCgAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQ0wCwYDVQQDDARhdmRp
|
14
|
-
MRQwEgYKCZImiZPyLGQBGRYEYXZkaTETMBEGCgmSJomT8ixkARkWA29yZzAeFw0w
|
15
|
-
ODExMjYwMzQwMTBaFw0wOTExMjYwMzQwMTBaMDoxDTALBgNVBAMMBGF2ZGkxFDAS
|
16
|
-
BgoJkiaJk/IsZAEZFgRhdmRpMRMwEQYKCZImiZPyLGQBGRYDb3JnMIIBIjANBgkq
|
17
|
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxp+TCbzj+cyaiE1xAqxO+irHbdNF+9y4
|
18
|
-
rZF3gCs0wfIcqeKDIvlks7FvH0Qj6yiAj8YHUgmuLORat2IBLBmX/G+G0Z2L6MLs
|
19
|
-
bNwx4YpbTW1cwOFVENSWwNjsvY68/I/EpAeRdtiskG/J33TDxi427dyBDSHsrQ8J
|
20
|
-
4oC24EnKwsTOdHwkEaDEmZJQeo5ienR7dalAwIPCIm4tA41kbilLVpMVp0f1hn5o
|
21
|
-
cVFYZgJFOdNnggVO9B/0/doQhxvC4Jdj2XeoOdIkjul1VjCeF+s+i/PhnKk/Y0++
|
22
|
-
/9fBCqzfFHYay5TOtTLDlzc7WoN5NBtKChn1gG0AnD+mJ4EnjvgTIQIDAQABozkw
|
23
|
-
NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUen5OQUuU+3P6OyVZ
|
24
|
-
NsrtAIO7DQcwDQYJKoZIhvcNAQEFBQADggEBAGwXuO2cpDc9m8iJmmbSjnDhhQYL
|
25
|
-
OssAG5bMy88JnrD+KufXA4BKvLTLkNtTSaNFvL74+FSIK8VwCUpEyn8rsYi3s6N8
|
26
|
-
/f5+5LDg19Jm6dmkRgFGQjF8cW0PheDtlY0Ywo+wdUhD+LFH+2VanZNx2dz6IjSh
|
27
|
-
A0uvcb+roaNG70ESPvoJO4PZFCkrgS2QE9TwnhRLi1DONaGmbMYWSZku4tHFEu+R
|
28
|
-
B/QQd37jgRGtEcplcoMaoCOqAvlIu6QkQt4X3jVhNGqeF2Wgmb1QXEF8cH/hqX4T
|
29
|
-
NNbtubu/GbyYwC2cb3Clh5gMrAYS765Q8U2aySfRySAFaQyPub+h0uVWkIc=
|
30
|
-
-----END CERTIFICATE-----
|
10
|
+
cert_chain: []
|
31
11
|
|
32
|
-
date:
|
12
|
+
date: 2009-07-19 00:00:00 -04:00
|
33
13
|
default_executable:
|
34
14
|
dependencies:
|
35
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,7 +20,7 @@ dependencies:
|
|
40
20
|
requirements:
|
41
21
|
- - ">="
|
42
22
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.
|
23
|
+
version: 1.3.0
|
44
24
|
version:
|
45
25
|
- !ruby/object:Gem::Dependency
|
46
26
|
name: hoe
|
@@ -109,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
89
|
requirements: []
|
110
90
|
|
111
91
|
rubyforge_project: fail-fast
|
112
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.3.1
|
113
93
|
signing_key:
|
114
94
|
specification_version: 2
|
115
95
|
summary: FailFast is a collection of assertion methods intended for lightweight contract checking.
|
data.tar.gz.sig
DELETED
Binary file
|
metadata.gz.sig
DELETED
Binary file
|