must 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -49,6 +49,7 @@ Duck Methods
49
49
  duck(".foo") : same above
50
50
  duck("#foo") : check whether object has "foo" instance method. (tested only in class/module)
51
51
  duck?(...) : acts same as "duck", but this returns a just boolean
52
+ duck!("foo") : if foo exists, call it. otherwise raises Invalid
52
53
 
53
54
 
54
55
  Struct Methods
data/lib/must/rule.rb CHANGED
@@ -89,6 +89,16 @@ module Must
89
89
  end
90
90
  end
91
91
 
92
+ def duck!(method_name, &block)
93
+ if duck?(method_name)
94
+ @object.__send__(method_name)
95
+ elsif block_given?
96
+ block.call
97
+ else
98
+ raise Invalid, "#{method_name} is not defined"
99
+ end
100
+ end
101
+
92
102
  def struct?(target)
93
103
  Must::StructInfo.new(@object).same?(target)
94
104
  end
data/lib/must/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Must
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
data/test/duck_test.rb CHANGED
@@ -80,4 +80,18 @@ class DuckTest < Test::Unit::TestCase
80
80
  assert_equal false, ClassFoo.must.duck?("#bar")
81
81
  assert_equal false, ModuleFoo.must.duck?("#bar")
82
82
  end
83
+
84
+ def test_duck_bang
85
+ assert_equal "1", 1.must.duck!("to_s")
86
+ end
87
+
88
+ def test_duck_bang_raises_if_not_defined
89
+ assert_raise(Must::Invalid) {
90
+ ClassFoo.must.duck!("foo")
91
+ }
92
+ end
93
+
94
+ def test_duck_bang_calls_block_if_not_defined
95
+ assert_equal 2, 1.must.duck!("to_xxx") { 2 }
96
+ end
83
97
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: must
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 6
10
- version: 0.2.6
9
+ - 7
10
+ version: 0.2.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - maiha
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-13 00:00:00 +09:00
18
+ date: 2012-04-27 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies: []
21
21