fuby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +29 -0
  7. data/Rakefile +8 -0
  8. data/VERSION +1 -0
  9. data/fuby.gemspec +21 -0
  10. data/lib/fuby.rb +1 -0
  11. data/lib/fuby/abbreviation.rb +20 -0
  12. data/lib/fuby/alias_method.rb +13 -0
  13. data/lib/fuby/all.rb +11 -0
  14. data/lib/fuby/and.rb +9 -0
  15. data/lib/fuby/any.rb +11 -0
  16. data/lib/fuby/attributes.rb +17 -0
  17. data/lib/fuby/bind.rb +21 -0
  18. data/lib/fuby/class_attributes.rb +39 -0
  19. data/lib/fuby/deep.rb +1 -0
  20. data/lib/fuby/deep_each.rb +14 -0
  21. data/lib/fuby/define_instance_method.rb +18 -0
  22. data/lib/fuby/define_missing_method.rb +36 -0
  23. data/lib/fuby/define_object_method.rb +18 -0
  24. data/lib/fuby/define_tok.rb +11 -0
  25. data/lib/fuby/descendants.rb +15 -0
  26. data/lib/fuby/dimension.rb +23 -0
  27. data/lib/fuby/drop.rb +20 -0
  28. data/lib/fuby/drop_until.rb +18 -0
  29. data/lib/fuby/drop_while.rb +15 -0
  30. data/lib/fuby/each.rb +2 -0
  31. data/lib/fuby/each_with_index_or_key.rb +19 -0
  32. data/lib/fuby/eql.rb +1 -0
  33. data/lib/fuby/eql_componentwise.rb +13 -0
  34. data/lib/fuby/equivalence.rb +13 -0
  35. data/lib/fuby/eval.rb +54 -0
  36. data/lib/fuby/extend.rb +13 -0
  37. data/lib/fuby/format.rb +9 -0
  38. data/lib/fuby/include.rb +13 -0
  39. data/lib/fuby/index_or_key.rb +19 -0
  40. data/lib/fuby/instance_attributes.rb +39 -0
  41. data/lib/fuby/intercept.rb +27 -0
  42. data/lib/fuby/invert.rb +16 -0
  43. data/lib/fuby/longest_common.rb +16 -0
  44. data/lib/fuby/matches.rb +11 -0
  45. data/lib/fuby/matches_componentwise.rb +11 -0
  46. data/lib/fuby/matches_part_of.rb +16 -0
  47. data/lib/fuby/matches_prefix_of.rb +11 -0
  48. data/lib/fuby/matches_suffix_of.rb +13 -0
  49. data/lib/fuby/member.rb +11 -0
  50. data/lib/fuby/merge.rb +20 -0
  51. data/lib/fuby/merge_css.rb +32 -0
  52. data/lib/fuby/method_added_as.rb +1 -0
  53. data/lib/fuby/method_added_as_binary_operator.rb +16 -0
  54. data/lib/fuby/method_added_as_filter.rb +19 -0
  55. data/lib/fuby/new.rb +16 -0
  56. data/lib/fuby/not.rb +25 -0
  57. data/lib/fuby/opposite.rb +29 -0
  58. data/lib/fuby/or.rb +9 -0
  59. data/lib/fuby/otherwise.rb +18 -0
  60. data/lib/fuby/part_of.rb +16 -0
  61. data/lib/fuby/plus.rb +10 -0
  62. data/lib/fuby/pop.rb +11 -0
  63. data/lib/fuby/pop_if.rb +15 -0
  64. data/lib/fuby/pop_options.rb +15 -0
  65. data/lib/fuby/pop_unless.rb +11 -0
  66. data/lib/fuby/pop_until.rb +11 -0
  67. data/lib/fuby/pop_while.rb +11 -0
  68. data/lib/fuby/prefix_of.rb +14 -0
  69. data/lib/fuby/prefixes.rb +11 -0
  70. data/lib/fuby/prepend.rb +11 -0
  71. data/lib/fuby/private.rb +11 -0
  72. data/lib/fuby/protected.rb +11 -0
  73. data/lib/fuby/public.rb +11 -0
  74. data/lib/fuby/push.rb +1 -0
  75. data/lib/fuby/push_options.rb +9 -0
  76. data/lib/fuby/random.rb +31 -0
  77. data/lib/fuby/self_and_descendants.rb +15 -0
  78. data/lib/fuby/shift.rb +11 -0
  79. data/lib/fuby/shift_if.rb +12 -0
  80. data/lib/fuby/shift_options.rb +11 -0
  81. data/lib/fuby/shift_unless.rb +12 -0
  82. data/lib/fuby/shift_until.rb +12 -0
  83. data/lib/fuby/shift_while.rb +16 -0
  84. data/lib/fuby/splat.rb +11 -0
  85. data/lib/fuby/strip.rb +24 -0
  86. data/lib/fuby/subclass.rb +22 -0
  87. data/lib/fuby/submodule.rb +22 -0
  88. data/lib/fuby/suffix_of.rb +19 -0
  89. data/lib/fuby/suffixes.rb +11 -0
  90. data/lib/fuby/take.rb +20 -0
  91. data/lib/fuby/take_until.rb +17 -0
  92. data/lib/fuby/take_while.rb +14 -0
  93. data/lib/fuby/tap.rb +28 -0
  94. data/lib/fuby/to.rb +1 -0
  95. data/lib/fuby/to_boolean.rb +32 -0
  96. data/lib/fuby/to_camel_case.rb +32 -0
  97. data/lib/fuby/to_case.rb +1 -0
  98. data/lib/fuby/to_components.rb +33 -0
  99. data/lib/fuby/to_dash_case.rb +28 -0
  100. data/lib/fuby/to_hash.rb +25 -0
  101. data/lib/fuby/to_pred.rb +7 -0
  102. data/lib/fuby/to_proc.rb +45 -0
  103. data/lib/fuby/to_regexp.rb +38 -0
  104. data/lib/fuby/to_snake_case.rb +28 -0
  105. data/lib/fuby/to_tok.rb +27 -0
  106. data/lib/fuby/tok.rb +2 -0
  107. data/lib/fuby/tok_arity.rb +18 -0
  108. data/lib/fuby/tok_direction.rb +16 -0
  109. data/lib/fuby/tok_parity.rb +11 -0
  110. data/lib/fuby/tok_side.rb +11 -0
  111. data/lib/fuby/try.rb +73 -0
  112. data/lib/fuby/try_each.rb +25 -0
  113. data/lib/fuby/try_eval.rb +19 -0
  114. data/lib/fuby/try_exec.rb +15 -0
  115. data/lib/fuby/unabbreviation.rb +17 -0
  116. data/lib/fuby/unshift.rb +1 -0
  117. data/lib/fuby/unshift_options.rb +11 -0
  118. data/lib/fuby/uuid.rb +28 -0
  119. data/test/fuby/abbreviation.rb +25 -0
  120. data/test/fuby/alias_method.rb +29 -0
  121. data/test/fuby/all.rb +15 -0
  122. data/test/fuby/and.rb +14 -0
  123. data/test/fuby/any.rb +15 -0
  124. data/test/fuby/attributes.rb +0 -0
  125. data/test/fuby/bind.rb +17 -0
  126. data/test/fuby/class_attributes.rb +0 -0
  127. data/test/fuby/deep.rb +0 -0
  128. data/test/fuby/deep_each.rb +0 -0
  129. data/test/fuby/define_missing_method.rb +33 -0
  130. data/test/fuby/define_tok.rb +0 -0
  131. data/test/fuby/descendants.rb +0 -0
  132. data/test/fuby/dimension.rb +0 -0
  133. data/test/fuby/drop.rb +28 -0
  134. data/test/fuby/drop_until.rb +26 -0
  135. data/test/fuby/drop_while.rb +26 -0
  136. data/test/fuby/each.rb +0 -0
  137. data/test/fuby/each_with_index_or_key.rb +22 -0
  138. data/test/fuby/eql.rb +0 -0
  139. data/test/fuby/eql_componentwise.rb +0 -0
  140. data/test/fuby/equivalence.rb +0 -0
  141. data/test/fuby/eval.rb +0 -0
  142. data/test/fuby/extend.rb +20 -0
  143. data/test/fuby/format.rb +0 -0
  144. data/test/fuby/include.rb +20 -0
  145. data/test/fuby/index_or_key.rb +0 -0
  146. data/test/fuby/instance_attributes.rb +0 -0
  147. data/test/fuby/intercept.rb +16 -0
  148. data/test/fuby/invert.rb +0 -0
  149. data/test/fuby/longest_common.rb +0 -0
  150. data/test/fuby/matches.rb +0 -0
  151. data/test/fuby/matches_componentwise.rb +0 -0
  152. data/test/fuby/matches_prefix_of.rb +0 -0
  153. data/test/fuby/matches_suffix_of.rb +0 -0
  154. data/test/fuby/member.rb +0 -0
  155. data/test/fuby/merge.rb +0 -0
  156. data/test/fuby/merge_css.rb +0 -0
  157. data/test/fuby/method_added_as.rb +0 -0
  158. data/test/fuby/method_added_as_binary_operator.rb +20 -0
  159. data/test/fuby/method_added_as_filter.rb +28 -0
  160. data/test/fuby/new.rb +3 -0
  161. data/test/fuby/not.rb +0 -0
  162. data/test/fuby/opposite.rb +0 -0
  163. data/test/fuby/or.rb +19 -0
  164. data/test/fuby/otherwise.rb +30 -0
  165. data/test/fuby/part_of.rb +0 -0
  166. data/test/fuby/plus.rb +0 -0
  167. data/test/fuby/pop.rb +0 -0
  168. data/test/fuby/pop_if.rb +31 -0
  169. data/test/fuby/pop_options.rb +31 -0
  170. data/test/fuby/pop_unless.rb +0 -0
  171. data/test/fuby/pop_until.rb +0 -0
  172. data/test/fuby/pop_while.rb +0 -0
  173. data/test/fuby/prefix_of.rb +0 -0
  174. data/test/fuby/prefixes.rb +13 -0
  175. data/test/fuby/prepend.rb +34 -0
  176. data/test/fuby/private.rb +0 -0
  177. data/test/fuby/protected.rb +0 -0
  178. data/test/fuby/public.rb +0 -0
  179. data/test/fuby/push.rb +0 -0
  180. data/test/fuby/push_options.rb +32 -0
  181. data/test/fuby/random.rb +0 -0
  182. data/test/fuby/self_and_descendants.rb +0 -0
  183. data/test/fuby/shift.rb +0 -0
  184. data/test/fuby/shift_if.rb +0 -0
  185. data/test/fuby/shift_options.rb +0 -0
  186. data/test/fuby/shift_unless.rb +0 -0
  187. data/test/fuby/shift_until.rb +0 -0
  188. data/test/fuby/shift_while.rb +0 -0
  189. data/test/fuby/splat.rb +0 -0
  190. data/test/fuby/strip.rb +0 -0
  191. data/test/fuby/submodule.rb +15 -0
  192. data/test/fuby/suffix_of.rb +0 -0
  193. data/test/fuby/suffixes.rb +13 -0
  194. data/test/fuby/take.rb +0 -0
  195. data/test/fuby/take_until.rb +0 -0
  196. data/test/fuby/take_while.rb +0 -0
  197. data/test/fuby/tap.rb +58 -0
  198. data/test/fuby/to_boolean.rb +31 -0
  199. data/test/fuby/to_camel_case.rb +15 -0
  200. data/test/fuby/to_components.rb +0 -0
  201. data/test/fuby/to_dash_case.rb +15 -0
  202. data/test/fuby/to_hash.rb +23 -0
  203. data/test/fuby/to_pred.rb +25 -0
  204. data/test/fuby/to_proc.rb +56 -0
  205. data/test/fuby/to_regexp.rb +38 -0
  206. data/test/fuby/to_snake_case.rb +15 -0
  207. data/test/fuby/to_tok.rb +0 -0
  208. data/test/fuby/tok.rb +0 -0
  209. data/test/fuby/tok_arity.rb +0 -0
  210. data/test/fuby/tok_direction.rb +0 -0
  211. data/test/fuby/tok_parity.rb +0 -0
  212. data/test/fuby/tok_side.rb +0 -0
  213. data/test/fuby/try.rb +52 -0
  214. data/test/fuby/try_each.rb +30 -0
  215. data/test/fuby/try_eval.rb +34 -0
  216. data/test/fuby/try_exec.rb +0 -0
  217. data/test/fuby/unabbreviation.rb +25 -0
  218. data/test/fuby/unshift.rb +0 -0
  219. data/test/fuby/unshift_options.rb +0 -0
  220. data/test/fuby/uuid.rb +31 -0
  221. data/test/fuby/version.rb +0 -0
  222. metadata +369 -0
data/test/fuby/and.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'fuby/and'
2
+
3
+ using Fuby
4
+
5
+ describe Hash do
6
+ describe "& that" do
7
+ it "creates a new hash by intersecting `self` and `that`" do
8
+
9
+ ({ a:1 } & { b:2 }).must_equal Hash.new
10
+ ({ a:1, b:2 } & { b:2, c:3 }).must_equal b:2
11
+
12
+ end
13
+ end
14
+ end
data/test/fuby/any.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'fuby/any'
2
+
3
+ using Fuby
4
+
5
+ describe Enumerable do
6
+ describe "any?" do
7
+ it "the behaviour of `any?` is modified in order to allow object (as well as Proc) arguments" do
8
+
9
+ [1, 2, 3].any?.must_be_instance_of Method
10
+ [1, 2, 3].any?.call(String).must_equal false
11
+ [1, 2, 3].any?(Integer).must_equal true
12
+
13
+ end
14
+ end
15
+ end
File without changes
data/test/fuby/bind.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'fuby/bind'
2
+
3
+ using Fuby
4
+
5
+ describe Proc do
6
+ describe "bind receiver" do
7
+ it "binds self to the given receiver" do
8
+
9
+ foo = -> { self }
10
+ bar = {}
11
+ qux = foo.bind bar
12
+ qux.must_be_instance_of Method
13
+ qux.call.must_equal bar
14
+
15
+ end
16
+ end
17
+ end
File without changes
data/test/fuby/deep.rb ADDED
File without changes
File without changes
@@ -0,0 +1,33 @@
1
+ require 'fuby/define_missing_method'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "define_missing_method pattern, &block" do
7
+ it "defines a missing_method handler for keys matching the given pattern" do
8
+
9
+ class A
10
+
11
+ define_missing_method /any/ do
12
+ 5
13
+ end
14
+
15
+ define_missing_method /all/ do
16
+ 5
17
+ end
18
+
19
+ end
20
+
21
+ A.new.many.must_equal 5
22
+ A.new.respond_to?(:zany).must_equal true
23
+ A.new.respond_to?(:mall).must_equal true
24
+
25
+ end
26
+ it "prepends any matched anonymous groups" do
27
+
28
+ class A
29
+ end
30
+
31
+ end
32
+ end
33
+ end
File without changes
File without changes
File without changes
data/test/fuby/drop.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'fuby/drop'
2
+
3
+ using Fuby
4
+
5
+ describe Array do
6
+ describe "drop number = 1" do
7
+ it "returns a new array dropping the initial number elements" do
8
+
9
+ xs = [1, 2, 3, :four]
10
+
11
+ xs.drop.must_equal [2, 3, :four]
12
+ xs.drop(2).must_equal [3, :four]
13
+
14
+ end
15
+ end
16
+ describe "drop! predicate = Proc.new" do
17
+ it "dropping the initial elements that don't match the given predicate, returning self" do
18
+
19
+ xs = [1, 2, 3, :four]
20
+
21
+ xs.drop!.must_equal xs
22
+ xs.must_equal [2, 3, :four]
23
+ xs.drop! 2
24
+ xs.must_equal [:four]
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ # require 'fuby/drop_until'
2
+
3
+ # using Fuby
4
+
5
+ # describe Array do
6
+ # describe "drop_until predicate = Proc.new" do
7
+ # it "returns a new array dropping the initial elements that don't match the given predicate" do
8
+
9
+ # xs = [1, 2, 3, :four]
10
+
11
+ # xs.drop_until { false }.must_equal []
12
+ # xs.drop_until(Symbol).must_equal [:four]
13
+
14
+ # end
15
+ # end
16
+ # describe "drop_until! predicate = Proc.new" do
17
+ # it "dropping the initial elements that don't match the given predicate, returning self" do
18
+
19
+ # xs = [1, 2, 3, :four]
20
+
21
+ # xs.drop_until!(Symbol).must_equal xs
22
+ # xs.must_equal [:four]
23
+
24
+ # end
25
+ # end
26
+ # end
@@ -0,0 +1,26 @@
1
+ # require 'fuby/drop_while'
2
+
3
+ # using Fuby
4
+
5
+ # describe Array do
6
+ # describe "drop_while predicate = Proc.new" do
7
+ # it "returns a new array dropping the initial elements matching the given predicate" do
8
+
9
+ # xs = [1, 2, 3, :four]
10
+
11
+ # xs.drop_while { true }.must_equal []
12
+ # xs.drop_while(Integer).must_equal [:four]
13
+
14
+ # end
15
+ # end
16
+ # describe "drop_while! predicate = Proc.new" do
17
+ # it "dropping the initial elements matching the given predicate, returning self" do
18
+
19
+ # xs = [1, 2, 3, :four]
20
+
21
+ # xs.drop_while!(Integer).must_equal xs
22
+ # xs.must_equal [:four]
23
+
24
+ # end
25
+ # end
26
+ # end
data/test/fuby/each.rb ADDED
File without changes
@@ -0,0 +1,22 @@
1
+ require 'fuby/each_with_index_or_key'
2
+
3
+ using Fuby
4
+
5
+ describe Array do
6
+ describe "each_with_index_or_key &block" do
7
+ it "is equivalent to each_with_index" do
8
+
9
+ [1, 2, 3].each_with_index_or_key.to_a.must_equal [[1, 0], [2, 1], [3, 2]]
10
+
11
+ end
12
+ end
13
+ end
14
+ describe Hash do
15
+ describe "each_with_index_or_key &block" do
16
+ it "enumerates self with a block taking the element and key as arguments" do
17
+
18
+ { a:1, b:2 }.each_with_index_or_key.to_a.must_equal [[1, :a], [2, :b]]
19
+
20
+ end
21
+ end
22
+ end
data/test/fuby/eql.rb ADDED
File without changes
File without changes
File without changes
data/test/fuby/eval.rb ADDED
File without changes
@@ -0,0 +1,20 @@
1
+ require 'fuby/extend'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "extend &block" do
7
+ it "creates and extends a module based on the given &block" do
8
+
9
+ o = Object.new
10
+ o.extend! do
11
+
12
+ def foo
13
+ end
14
+
15
+ end
16
+ o.must_respond_to :foo
17
+
18
+ end
19
+ end
20
+ end
File without changes
@@ -0,0 +1,20 @@
1
+ require 'fuby/include'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "include &block" do
7
+ it "creates and includes a module based on the given &block" do
8
+
9
+ c = Class.new
10
+ c.include! do
11
+
12
+ def foo
13
+ end
14
+
15
+ end
16
+ c.new.must_respond_to :foo
17
+
18
+ end
19
+ end
20
+ end
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ require 'fuby/intercept'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "intercept &block" do
7
+ it "creates a proxy of self, with method_missing defined from the given &block" do
8
+
9
+ object = {}
10
+ object.intercept { |key, *sig, &blk| self }.foo.must_equal object
11
+ object.intercept { |key, *sig, &blk| key }.foo.must_equal :foo
12
+ object.intercept { |key, *sig, &blk| sig }.foo(1, 2, 3).must_equal [1, 2, 3]
13
+
14
+ end
15
+ end
16
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,20 @@
1
+ require 'fuby/method_added_as_binary_operator'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "method_added_as_binary_operator *names" do
7
+ it "redefines the referenced methods as binary operators, allowing currying of the second argument" do
8
+
9
+ class Array
10
+ method_added_as_binary_operator :push
11
+ end
12
+
13
+ xs = [1, 2, 3]
14
+ xs.push.must_be_instance_of Method
15
+ xs.push.call 4
16
+ xs.must_equal [1, 2, 3, 4]
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'fuby/method_added_as_filter'
2
+
3
+ using Fuby
4
+
5
+ describe Module do
6
+ describe "method_added_as_filter *names" do
7
+ it "redefines the referenced methods as filter methods" do
8
+
9
+ m = Module.new do
10
+
11
+ def foo &pred
12
+ [1, 2, 3].select &pred
13
+ end
14
+
15
+ method_added_as_filter :foo
16
+
17
+ end
18
+
19
+ c = Class.new
20
+ c.send :include, m
21
+ c.new.must_respond_to :foo
22
+
23
+ c.new.foo { |i| i < 3 }.must_equal [1, 2]
24
+ c.new.foo(Integer).must_equal [1, 2, 3]
25
+
26
+ end
27
+ end
28
+ end
data/test/fuby/new.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'fuby/new'
2
+
3
+ using Fuby
data/test/fuby/not.rb ADDED
File without changes
File without changes
data/test/fuby/or.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'fuby/or'
2
+
3
+ using Fuby
4
+
5
+ describe Hash do
6
+ describe "| that" do
7
+ it "creates a new hash by merging `self` into `that`" do
8
+
9
+ ({ a:1 } | { b:2 }).must_equal a:1, b:2
10
+
11
+ end
12
+ it "should preserve key order" do
13
+
14
+ ({ a:1 } | { b:2 }).keys.first.must_equal :a
15
+ ({ b:2 } | { a:1 }).keys.first.must_equal :b
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ require 'fuby/otherwise'
2
+
3
+ using Fuby
4
+
5
+ describe Object do
6
+ describe 'otherwise(that, &block)' do
7
+ it "returns self" do
8
+
9
+ 5.otherwise(6).must_be_same_as 5
10
+
11
+ end
12
+ end
13
+
14
+ end
15
+ describe NilClass do
16
+ describe 'otherwise(that)' do
17
+ it "returns that" do
18
+
19
+ nil.otherwise(5).must_be_same_as 5
20
+
21
+ end
22
+ end
23
+ describe 'otherwise{that}' do
24
+ it "returns that" do
25
+
26
+ nil.otherwise{5}.must_be_same_as 5
27
+
28
+ end
29
+ end
30
+ end
File without changes
data/test/fuby/plus.rb ADDED
File without changes
data/test/fuby/pop.rb ADDED
File without changes
@@ -0,0 +1,31 @@
1
+ require 'fuby/to_boolean'
2
+
3
+ using Fuby
4
+
5
+ describe Numeric do
6
+ describe "to_boolean" do
7
+ it "converts self to a boolean according to the common interpretation" do
8
+
9
+ 0.to_boolean.must_equal false
10
+ 1.to_boolean.must_equal true
11
+ +0.1.to_boolean.must_equal true
12
+ -0.1.to_boolean.must_equal false
13
+ end
14
+ end
15
+ end
16
+
17
+ describe String do
18
+ describe "to_boolean" do
19
+ it "converts self to a boolean according to the common interpretation" do
20
+
21
+ "1".to_boolean.must_equal true
22
+ "t".to_boolean.must_equal true
23
+ "true".to_boolean.must_equal true
24
+ "TRUE".to_boolean.must_equal true
25
+ "yes".to_boolean.must_equal true
26
+ "y".to_boolean.must_equal true
27
+ "goo".to_boolean.must_equal false
28
+
29
+ end
30
+ end
31
+ end