mug 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mug.rb +1 -0
  3. data/lib/mug/iff.rb +37 -0
  4. data/test/test-iff.rb +54 -0
  5. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be11c66cdcdc22f4149f088221fd1072fc075fe6b83ea3001a4c1c7d7a7398ce
4
- data.tar.gz: 9df03bc1da33bbaed659ed753a83dbce4e72670f894038e3290d7732c9f38062
3
+ metadata.gz: 330eebe01439970eeb98b02f25580aa4b33335c3a3d7abe0994c378c8171d5eb
4
+ data.tar.gz: aaa14057580d8ed7a51a575c9eb8820de6a9507724ad953791e596a3a96fd3d7
5
5
  SHA512:
6
- metadata.gz: 0f5598b332bf113018a53b725e9811c7335b3bebd3cbd92368c25556ee2cfbf4236c101e4b9b186a9b74a41d38af27f08e12c3fafe7c4393cbd5fab087150091
7
- data.tar.gz: ea4760031f9dae9856b1e627e76525e1ef87666ec7cca298589bd264e4c2ab87e100883b2c87f9b2345885a752a036088992f7a1ed598ac8a6f6a78ab81bf027
6
+ metadata.gz: ea3615b7990f7bfd2505985c3ae8ecea789390904fb4a136973c3e211c764a32861c4d2dfb8b1691b4c64ac09fcc184b902a612f6d988cab61c0137724d019d2
7
+ data.tar.gz: 295e43e6f35e73a2b7cf2fe79dc99466ddd4f0624c1c83f400e5bdbe6665a3ff99559a367bcf9ea3e8d771689c6c0161fc1d533988baceb255212f3520d96166
data/lib/mug.rb CHANGED
@@ -17,6 +17,7 @@ require_relative 'mug/hash/map'
17
17
  require_relative 'mug/hash/merge'
18
18
  require_relative 'mug/hash/operations'
19
19
  require_relative 'mug/hash/when'
20
+ require_relative 'mug/iff'
20
21
  require_relative 'mug/iterator'
21
22
  require_relative 'mug/iterator/for'
22
23
  require_relative 'mug/iterator/method'
@@ -0,0 +1,37 @@
1
+
2
+ class Object
3
+
4
+ ##
5
+ # Test for logical equivalence.
6
+ #
7
+ # Returns true if +condition+ and +obj+ are either
8
+ # both truthy, or both falsey.
9
+ #
10
+ def iff? *condition
11
+ if condition.length == 1
12
+ cond = condition[0]
13
+ elsif condition.empty? && block_given?
14
+ cond = yield
15
+ else
16
+ raise ArgumentError, "wrong number of arguments (given #{condition.length}, expected 1)"
17
+ end
18
+ cond ? !!self : !self
19
+ end
20
+
21
+ end
22
+
23
+ =begin
24
+ Copyright (c) 2018, Matthew Kerwin <matthew@kerwin.net.au>
25
+
26
+ Permission to use, copy, modify, and/or distribute this software for any
27
+ purpose with or without fee is hereby granted, provided that the above
28
+ copyright notice and this permission notice appear in all copies.
29
+
30
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
31
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
32
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
33
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
34
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
35
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
36
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
37
+ =end
@@ -0,0 +1,54 @@
1
+ require 'test/unit'
2
+ $VERBOSE = true
3
+
4
+ require_relative '../lib/mug/iff'
5
+ class Test_iff < Test::Unit::TestCase
6
+
7
+ def test_iff
8
+ truthy = [true, 1, Object.new]
9
+ falsey = [false, nil]
10
+
11
+ truthy.each do |cond|
12
+ truthy.each do |obj|
13
+ assert( obj.iff?(cond) )
14
+ end
15
+ falsey.each do |obj|
16
+ assert( !( obj.iff?(cond) ) )
17
+ end
18
+ end
19
+
20
+ falsey.each do |cond|
21
+ truthy.each do |obj|
22
+ assert( !( obj.iff?(cond) ) )
23
+ end
24
+ falsey.each do |obj|
25
+ assert( obj.iff?(cond) )
26
+ end
27
+ end
28
+ end
29
+
30
+ def test_iff_block
31
+ truthy = [true, 1, Object.new]
32
+ falsey = [false, nil]
33
+
34
+ truthy.each do |cond|
35
+ truthy.each do |obj|
36
+ assert( obj.iff? do cond; end )
37
+ end
38
+ falsey.each do |obj|
39
+ assert( !( obj.iff? do cond; end ) )
40
+ end
41
+ end
42
+
43
+ falsey.each do |cond|
44
+ truthy.each do |obj|
45
+ assert( !( obj.iff? do cond; end ) )
46
+ end
47
+ falsey.each do |obj|
48
+ assert( obj.iff? do cond; end )
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mug
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Kerwin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-20 00:00:00.000000000 Z
11
+ date: 2018-07-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  == MUG: Matty's Ultimate Gem
@@ -50,6 +50,7 @@ files:
50
50
  - lib/mug/hash/when.rb
51
51
  - lib/mug/hashmap.rb
52
52
  - lib/mug/hashop.rb
53
+ - lib/mug/iff.rb
53
54
  - lib/mug/iterator.rb
54
55
  - lib/mug/iterator/for.rb
55
56
  - lib/mug/iterator/method.rb
@@ -88,6 +89,7 @@ files:
88
89
  - test/test-hashmerge.rb
89
90
  - test/test-hashop.rb
90
91
  - test/test-hashwhen.rb
92
+ - test/test-iff.rb
91
93
  - test/test-iterator-for.rb
92
94
  - test/test-iterator-method.rb
93
95
  - test/test-iterator.rb
@@ -134,6 +136,7 @@ test_files:
134
136
  - test/test-loop-with.rb
135
137
  - test/test-counts.rb
136
138
  - test/test-array-minus.rb
139
+ - test/test-iff.rb
137
140
  - test/test-affix.rb
138
141
  - test/test-bool.rb
139
142
  - test/test-alias.rb