must_be 1.0.1 → 1.0.2
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/ChangeLog.md +7 -0
- data/VERSION +1 -1
- data/lib/must_be/basic.rb +13 -13
- data/lib/must_be/containers.rb +19 -14
- data/lib/must_be/proxy.rb +2 -2
- data/lib/must_be.rb +50 -0
- data/must_be.gemspec +5 -3
- data/spec/must_be/containers_spec.rb +2 -6
- metadata +6 -4
data/ChangeLog.md
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.2
|
data/lib/must_be/basic.rb
CHANGED
@@ -6,14 +6,14 @@ module MustBe
|
|
6
6
|
|
7
7
|
def must_be(*cases)
|
8
8
|
unless cases.empty? ? self : MustBe.match_any_case?(self, cases)
|
9
|
-
must_notify(self,
|
9
|
+
must_notify(self, :must_be, cases, nil, ", but matches #{self.class}")
|
10
10
|
end
|
11
11
|
self
|
12
12
|
end
|
13
13
|
|
14
14
|
def must_not_be(*cases)
|
15
15
|
if cases.empty? ? self : MustBe.match_any_case?(self, cases)
|
16
|
-
must_notify(self,
|
16
|
+
must_notify(self, :must_not_be, cases, nil, ", but matches #{self.class}")
|
17
17
|
end
|
18
18
|
self
|
19
19
|
end
|
@@ -41,17 +41,17 @@ private
|
|
41
41
|
public
|
42
42
|
|
43
43
|
def must_be_a(*modules)
|
44
|
-
must_be_a__body(modules, :none?,
|
44
|
+
must_be_a__body(modules, :none?, :must_be_a)
|
45
45
|
end
|
46
46
|
|
47
47
|
def must_not_be_a(*modules)
|
48
|
-
must_be_a__body(modules, :any?,
|
48
|
+
must_be_a__body(modules, :any?, :must_not_be_a)
|
49
49
|
end
|
50
50
|
|
51
51
|
def must_be_in(*collection)
|
52
52
|
cs = collection.size == 1 ? collection[0] : collection
|
53
53
|
unless cs.include? self
|
54
|
-
must_notify(self,
|
54
|
+
must_notify(self, :must_be_in, collection)
|
55
55
|
end
|
56
56
|
self
|
57
57
|
end
|
@@ -59,34 +59,34 @@ public
|
|
59
59
|
def must_not_be_in(*collection)
|
60
60
|
cs = collection.size == 1 ? collection[0] : collection
|
61
61
|
if cs.include? self
|
62
|
-
must_notify(self,
|
62
|
+
must_notify(self, :must_not_be_in, collection)
|
63
63
|
end
|
64
64
|
self
|
65
65
|
end
|
66
66
|
|
67
67
|
def must_be_nil
|
68
|
-
must_notify(self,
|
68
|
+
must_notify(self, :must_be_nil) unless nil?
|
69
69
|
self
|
70
70
|
end
|
71
71
|
|
72
72
|
def must_not_be_nil
|
73
|
-
must_notify(self,
|
73
|
+
must_notify(self, :must_not_be_nil) if nil?
|
74
74
|
self
|
75
75
|
end
|
76
76
|
|
77
77
|
def must_be_true
|
78
|
-
must_notify(self,
|
78
|
+
must_notify(self, :must_be_true) unless self == true
|
79
79
|
self
|
80
80
|
end
|
81
81
|
|
82
82
|
def must_be_false
|
83
|
-
must_notify(self,
|
83
|
+
must_notify(self, :must_be_false) unless self == false
|
84
84
|
self
|
85
85
|
end
|
86
86
|
|
87
87
|
def must_be_boolean
|
88
88
|
unless self == true or self == false
|
89
|
-
must_notify(self,
|
89
|
+
must_notify(self, :must_be_boolean)
|
90
90
|
end
|
91
91
|
self
|
92
92
|
end
|
@@ -94,7 +94,7 @@ public
|
|
94
94
|
def must_be_close(expected, delta = 0.1)
|
95
95
|
difference = (self - expected).abs
|
96
96
|
unless difference < delta
|
97
|
-
must_notify(self,
|
97
|
+
must_notify(self, :must_be_close, [expected, delta], nil,
|
98
98
|
", difference is #{difference}")
|
99
99
|
end
|
100
100
|
self
|
@@ -102,7 +102,7 @@ public
|
|
102
102
|
|
103
103
|
def must_not_be_close(expected, delta = 0.1)
|
104
104
|
if (self - expected).abs < delta
|
105
|
-
must_notify(self,
|
105
|
+
must_notify(self, :must_not_be_close, [expected, delta])
|
106
106
|
end
|
107
107
|
self
|
108
108
|
end
|
data/lib/must_be/containers.rb
CHANGED
@@ -152,13 +152,15 @@ module MustBe
|
|
152
152
|
module ClassMethods
|
153
153
|
def must_check_contents_after(*methods)
|
154
154
|
methods.each do |method|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
155
|
+
module_eval %Q{
|
156
|
+
def #{method}(*args)
|
157
|
+
begin
|
158
|
+
super
|
159
|
+
ensure
|
160
|
+
must_check_contents
|
161
|
+
end
|
160
162
|
end
|
161
|
-
|
163
|
+
}
|
162
164
|
end
|
163
165
|
end
|
164
166
|
end
|
@@ -231,15 +233,18 @@ module MustBe
|
|
231
233
|
|
232
234
|
mutator_advice = Module.new
|
233
235
|
mod.instance_methods(false).each do |method_name|
|
234
|
-
mutator_advice.
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
236
|
+
mutator_advice.module_eval %Q{
|
237
|
+
def #{method_name}(*args, &block)
|
238
|
+
must_check(lambda { super(*args, &block) }) do |note|
|
239
|
+
note.prefix = nil
|
240
|
+
call_s = Note.new(self.class, #{method_name.inspect}, args,
|
241
|
+
block).message
|
242
|
+
call_s.sub!(".", "#")
|
243
|
+
note.prefix = "\#{must_only_ever_contain_prefix}\#{call_s}: "
|
244
|
+
note
|
245
|
+
end
|
241
246
|
end
|
242
|
-
|
247
|
+
}
|
243
248
|
end
|
244
249
|
mod.const_set(:MutatorAdvice, mutator_advice)
|
245
250
|
mod.instance_eval do
|
data/lib/must_be/proxy.rb
CHANGED
@@ -36,7 +36,7 @@ module MustBe
|
|
36
36
|
if message
|
37
37
|
must_notify(message)
|
38
38
|
else
|
39
|
-
must_notify(self,
|
39
|
+
must_notify(self, :must, nil, block)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
self
|
@@ -51,7 +51,7 @@ module MustBe
|
|
51
51
|
if message
|
52
52
|
must_notify(message)
|
53
53
|
else
|
54
|
-
must_notify(self,
|
54
|
+
must_notify(self, :must_not, nil, block)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
self
|
data/lib/must_be.rb
CHANGED
@@ -1,5 +1,55 @@
|
|
1
1
|
here = File.expand_path(File.dirname(__FILE__))
|
2
2
|
|
3
|
+
if RUBY_VERSION < "1.8.7"
|
4
|
+
unless :symbol.respond_to? :to_proc
|
5
|
+
class Symbol
|
6
|
+
def to_proc
|
7
|
+
Proc.new {|*args| args.shift.__send__ self, *args}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
unless "string".respond_to? :bytesize
|
13
|
+
class String
|
14
|
+
alias bytesize size
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
unless [].respond_to? :none?
|
19
|
+
class Array
|
20
|
+
def none?(&block)
|
21
|
+
not any?(&block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
unless [].respond_to? :drop_while
|
27
|
+
class Array
|
28
|
+
def drop_while
|
29
|
+
index = 0
|
30
|
+
index += 1 while yield(self[index])
|
31
|
+
self[index..-1]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
unless 3.respond_to? :odd?
|
37
|
+
class Fixnum
|
38
|
+
def odd?
|
39
|
+
self % 2 == 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
unless 3.respond_to? :even?
|
45
|
+
class Fixnum
|
46
|
+
def even?
|
47
|
+
self % 2 == 0
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
3
53
|
require here+'/must_be/core'
|
4
54
|
require here+'/must_be/basic'
|
5
55
|
require here+'/must_be/proxy'
|
data/must_be.gemspec
CHANGED
@@ -5,18 +5,20 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{must_be}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["William Taysom"]
|
12
|
-
s.date = %q{2010-09-
|
12
|
+
s.date = %q{2010-09-29}
|
13
13
|
s.description = %q{must_be provides runtime assertions which can easily be disabled in production environments. Likewise, the notifier can be customized to raise errors, log failure, enter the debugger, or anything else.}
|
14
14
|
s.email = %q{wtaysom@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
|
-
"
|
16
|
+
"ChangeLog.md",
|
17
|
+
"README.md"
|
17
18
|
]
|
18
19
|
s.files = [
|
19
20
|
".gitignore",
|
21
|
+
"ChangeLog.md",
|
20
22
|
"README.md",
|
21
23
|
"Rakefile",
|
22
24
|
"VERSION",
|
@@ -607,9 +607,7 @@ describe MustBe do
|
|
607
607
|
it "should notify if inserting a non-matching key" do
|
608
608
|
subject["six"] = 6
|
609
609
|
subject["six"].should == 6
|
610
|
-
should notify
|
611
|
-
" pair {\"six\"=>6} does not match"\
|
612
|
-
" [{Symbol=>Integer, Integer=>Symbol}] in container {\"six\"=>6}")
|
610
|
+
should notify
|
613
611
|
end
|
614
612
|
|
615
613
|
it "should notify if inserting a matching value" do
|
@@ -634,9 +632,7 @@ describe MustBe do
|
|
634
632
|
|
635
633
|
it "should notify if merged with an unacceptable hash" do
|
636
634
|
subject.merge!({3 => 1})
|
637
|
-
should notify
|
638
|
-
" pair {3=>1} does not match"\
|
639
|
-
" [{Symbol=>Integer, Integer=>Symbol}] in container {3=>1}")
|
635
|
+
should notify
|
640
636
|
end
|
641
637
|
|
642
638
|
it "should not notify if updated with an acceptable hash" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: must_be
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- William Taysom
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-29 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -26,9 +26,11 @@ executables: []
|
|
26
26
|
extensions: []
|
27
27
|
|
28
28
|
extra_rdoc_files:
|
29
|
+
- ChangeLog.md
|
29
30
|
- README.md
|
30
31
|
files:
|
31
32
|
- .gitignore
|
33
|
+
- ChangeLog.md
|
32
34
|
- README.md
|
33
35
|
- Rakefile
|
34
36
|
- VERSION
|