safebool 0.0.1 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00e164b8268e6072b5e8c6653d6894a0849d05f8
4
- data.tar.gz: 958ff5957be5ff0fb40b77cbc3046fad3489d65e
3
+ metadata.gz: 49890c47adb87fba1069508825a740bd74ebbf3f
4
+ data.tar.gz: b29817d48444282a920610adc1ab79f56a3f926b
5
5
  SHA512:
6
- metadata.gz: b8fd8ee08af9acbdfa90ca77ba5ff759e84bd67d5846d706225261994f38ba0604d4082843584ad57a359999cb4b5d5469fc76802a592ec4525c6924fdf16c13
7
- data.tar.gz: 75865ab6eec156c23775359764933fafbfb50fd39735068dd77cbccfdb3b00e63850e4a01f1a1d341cad387cf539a691d66f8416250860c5fe1a001f2bbca59d
6
+ metadata.gz: 83a6120727830d700d61e9b79933f372d353767f533b8b2ae5562c75996702e9871ab844f19dacd25faacbe8827dae6bc65879e6e2a2306379cabe32c9f2332d
7
+ data.tar.gz: 236b0f27a9ddf40a7b7ae8ee77b0596c8e1a323e919c1112be22ab3a093ad15cce268596bababd9936d1807158b2eff547d0ce8d50c5c60c9a2276a0b2ead323
@@ -5,3 +5,5 @@ README.md
5
5
  Rakefile
6
6
  lib/safebool.rb
7
7
  lib/safebool/version.rb
8
+ test/helper.rb
9
+ test/test_bool.rb
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- # Safe Bool Type - `Bool()`, `to_b`, `to_bool`, `bool?`, `false?`, `true?`, `true.is_a?(Bool)==true`, `false.is_a?(Bool)==true`, and More
2
+ # Safe Bool Type - `Bool()`, `to_b`, `to_bool`, and More
3
3
 
4
4
 
5
5
  safebool gem / library - safe bool(ean) type adds `Bool()`, `to_b`, `to_bool`, `bool?`, `false?`, `true?`, `true.is_a?(Bool)==true`, `false.is_a?(Bool)==true`, and more
@@ -11,9 +11,83 @@ safebool gem / library - safe bool(ean) type adds `Bool()`, `to_b`, `to_bool`, `
11
11
  * rdoc :: [rubydoc.info/gems/safebool](http://rubydoc.info/gems/safebool)
12
12
 
13
13
 
14
+
15
+ ## Why `Bool` in Ruby?
16
+
17
+
18
+ ``` ruby
19
+ false.class #=> FalseClass
20
+ true.class #=> TrueClass
21
+ false.is_a?(Bool) #=> NameError: uninitialized constant Bool
22
+ true.is_a?(Bool) #=> NameError: uninitialized constant Bool
23
+ true.class.ancestors #=> [TrueClass, Object, Kernel, BasicObject]
24
+ false.class.ancestors #=> [TrueClass, Object, Kernel, BasicObject]
25
+
26
+ # -or-
27
+
28
+ "true".to_b #=> NoMethodError: undefined method `to_b' for String
29
+ 1.to_b #=> NoMethodError: undefined method `to_b' for Integer
30
+ Bool("true") #=> NoMethodError: undefined method `Bool' for Kernel
31
+ Bool(1) #=> NoMethodError: undefined method `Bool' for Kernel
32
+ ...
33
+ ```
34
+
35
+ Why? Why not? Discuss.
36
+
37
+
38
+
14
39
  ## Usage
15
40
 
16
- To be done
41
+ ``` ruby
42
+ false.is_a?(Bool) #=> true
43
+ true.is_a?(Bool) #=> true
44
+ true.class.ancestors #=> [TrueClass, Bool, Object, Kernel, BasicObject]
45
+ false.class.ancestors #=> [TrueClass, Bool, Object, Kernel, BasicObject]
46
+
47
+ # -or-
48
+
49
+ "true".to_b #=> true
50
+ 1.to_b #=> true
51
+ Bool("true") #=> true
52
+ Bool(1) #=> true
53
+
54
+ "false".to_b #=> false
55
+ 0.to_b #=> false
56
+ Bool("false") #=> false
57
+ Bool(0) #=> false
58
+
59
+ ...
60
+ ```
61
+
62
+
63
+ More methods added to `Kernel` include `bool?`, `false?`, `true?`.
64
+ Example:
65
+
66
+
67
+ ``` ruby
68
+ # bool? - returns true if object class is TrueClass or FalseClass, otherwise false
69
+
70
+ true.bool? #=> true
71
+ false.bool? #=> true
72
+ nil.bool? #=> false
73
+
74
+ # false? - returns true if object class is FalseClass, otherwise false
75
+
76
+ false.false? #=> true
77
+ true.false? #=> false
78
+ nil.false? #=> false
79
+
80
+ # true? - returns true is object class is TrueClass, otherwise false
81
+
82
+ true.true? #=> true
83
+ false.true? #=> false
84
+ nil.true? #=> false
85
+ ```
86
+
87
+ And some more.
88
+ See the [`safebool.rb`](https://github.com/s6ruby/safebool/blob/master/lib/safebool.rb) source.
89
+
90
+
17
91
 
18
92
 
19
93
  ## License
@@ -6,5 +6,107 @@ require 'pp'
6
6
  require 'safebool/version' # note: let version always go first
7
7
 
8
8
 
9
+ module Bool
10
+ def self.zero() false; end ## note: false.frozen? == true by default
11
+
12
+ def to_b() self; end
13
+ def to_bool() self; end
14
+ end # module Bool
15
+
16
+
17
+ class FalseClass
18
+ include Bool ## "hack" - enables false.is_a?(Bool)
19
+
20
+ def zero?() true; end
21
+ end
22
+
23
+ class TrueClass
24
+ include Bool ## "hack" - enables true.is_a?(Bool)
25
+
26
+ def zero?() false; end
27
+ end
28
+
29
+
30
+
31
+
32
+
33
+
34
+ module Kernel
35
+
36
+ ######
37
+ ## Returns true if object class is TrueClass or FalseClass, otherwise false.
38
+ ##
39
+ ## true.bool? #=> true
40
+ ## false.bool? #=> true
41
+ ## nil.bool? #=> false
42
+ def bool?() self.class == TrueClass || self.class == FalseClass; end ## todo/discuss: use "shortcut" self == true || self == false - why? why not?
43
+
44
+ #########
45
+ ## Returns true if object class is FalseClass, otherwise false.
46
+ ##
47
+ ## false.false? #=> true
48
+ ## true.false? #=> false
49
+ ## nil.false? #=> false
50
+ def false?() self.class == FalseClass; end ## todo/discuss: use "shortcut" self == false - why? why not?
51
+
52
+ ############
53
+ ## Returns true is object class is TrueClass, otherwise false.
54
+ ##
55
+ ## true.true? #=> true
56
+ ## false.true? #=> false
57
+ ## nil.true? #=> false
58
+ def true?() self.class == TrueClass; end ## todo/discuss: use "shortcut" self == true - why? why not?
59
+
60
+
61
+ #####
62
+ # default "explicit" conversion to bool for all objects
63
+ def to_b() self ? true : false; end
64
+
65
+
66
+ ### "global" conversion function / method
67
+ def Bool( o )
68
+ ## todo/discuss: check convention
69
+ ## only (explicit) convert if to_bool present - why? why not?
70
+ ## - check to_int/to_str/etc.
71
+ if o.respond_to?( :to_bool )
72
+ o.to_bool
73
+ elsif o.respond_to?( :to_b )
74
+ o.to_b
75
+ else
76
+ raise TypeError.new( "cannot convert >#{o.class.inspect}< to Bool; method to_bool or to_b expected")
77
+ end
78
+ end
79
+ end
80
+
81
+
82
+
83
+
84
+ class String
85
+ def to_b
86
+ case self.downcase.strip
87
+ when 'true', 'yes', 'on', 't', 'y', '1'
88
+ return true
89
+ ## when 'nil', 'null' # todo/discuss - add why? why not?
90
+ ## return nil
91
+ else
92
+ return false
93
+ end
94
+ end
95
+ alias_method :to_bool, :to_b
96
+ end
97
+
98
+
99
+ class Symbol
100
+ def to_b() to_s.to_b; end
101
+ alias_method :to_bool, :to_b
102
+ end
103
+
104
+ class Numeric
105
+ def to_b() self == 0 ? false : true; end
106
+ alias_method :to_bool, :to_b
107
+ end
108
+
109
+
110
+
9
111
 
10
112
  puts SaferBool.banner ## say hello
@@ -9,8 +9,8 @@
9
9
  module SaferBool
10
10
 
11
11
  MAJOR = 0
12
- MINOR = 0
13
- PATCH = 1
12
+ MINOR = 1
13
+ PATCH = 0
14
14
  VERSION = [MAJOR,MINOR,PATCH].join('.')
15
15
 
16
16
  def self.version
@@ -0,0 +1,8 @@
1
+ ## minitest setup
2
+
3
+ require 'minitest/autorun'
4
+
5
+
6
+ ## our own code
7
+
8
+ require 'safebool'
@@ -0,0 +1,96 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_bool.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+
11
+ class TestBool < MiniTest::Test
12
+
13
+ def test_bool
14
+ assert_equal true, false.is_a?(Bool)
15
+ assert_equal true, false.false?
16
+ assert_equal false, false.true?
17
+ assert_equal true, false.bool?
18
+ assert_equal false, false.to_b
19
+
20
+ assert_equal true, true.is_a?(Bool)
21
+ assert_equal true, true.true?
22
+ assert_equal false, true.false?
23
+ assert_equal true, true.bool?
24
+ assert_equal true, true.to_b
25
+ end
26
+
27
+ def test_nil
28
+ assert_equal false, nil.to_b
29
+ assert_equal false, Bool(nil)
30
+
31
+ assert_equal false, nil.false?
32
+ assert_equal false, nil.true?
33
+ assert_equal false, nil.bool?
34
+ end
35
+
36
+ def test_string
37
+ assert_equal false, "true".false?
38
+ assert_equal false, "true".true?
39
+ assert_equal false, "true".bool?
40
+
41
+ assert_equal true, "true".to_b
42
+ assert_equal true, "yes".to_b
43
+ assert_equal true, "on".to_b
44
+ assert_equal true, "t".to_b
45
+ assert_equal true, "y".to_b
46
+ assert_equal true, "1".to_b
47
+
48
+ assert_equal true, "TRUE".to_b
49
+ assert_equal true, "YES".to_b
50
+ assert_equal true, "ON".to_b
51
+ assert_equal true, "T".to_b
52
+ assert_equal true, "Y".to_b
53
+
54
+ assert_equal true, Bool("true")
55
+ assert_equal true, Bool("yes")
56
+ assert_equal true, Bool("on")
57
+ assert_equal true, Bool("t")
58
+ assert_equal true, Bool("y")
59
+ assert_equal true, Bool("1")
60
+ end
61
+
62
+ def test_symbol
63
+ assert_equal false, :true.false?
64
+ assert_equal false, :true.true?
65
+ assert_equal false, :true.bool?
66
+
67
+ assert_equal true, :true.to_b
68
+ assert_equal true, :yes.to_b
69
+ assert_equal true, :on.to_b
70
+ assert_equal true, :t.to_b
71
+ assert_equal true, :y.to_b
72
+ assert_equal true, :"1".to_b
73
+
74
+ assert_equal true, Bool(:true)
75
+ assert_equal true, Bool(:yes)
76
+ assert_equal true, Bool(:on)
77
+ assert_equal true, Bool(:t)
78
+ assert_equal true, Bool(:y)
79
+ assert_equal true, Bool(:"1")
80
+ end
81
+
82
+
83
+ def test_integer
84
+ assert_equal false, 1.false?
85
+ assert_equal false, 1.true?
86
+ assert_equal false, 1.bool?
87
+
88
+ assert_equal false, 0.to_b
89
+ assert_equal true, 1.to_b
90
+ assert_equal true, 2.to_b
91
+
92
+ assert_equal false, Bool(0)
93
+ assert_equal true, Bool(1)
94
+ assert_equal true, Bool(2)
95
+ end
96
+ end # class TestBool
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safebool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
@@ -56,6 +56,8 @@ files:
56
56
  - Rakefile
57
57
  - lib/safebool.rb
58
58
  - lib/safebool/version.rb
59
+ - test/helper.rb
60
+ - test/test_bool.rb
59
61
  homepage: https://github.com/s6ruby/safebool
60
62
  licenses:
61
63
  - Public Domain