mug 0.15.0 → 1.0.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
  SHA256:
3
- metadata.gz: 9ab045986d1359b99ba98c469e9c4411bd33a069f97ea5dc3115c51ad2aa5d5e
4
- data.tar.gz: b799f0beab81b16671f1db4bc02bc24220faf12b00937ea3080ea7bb17a1f340
3
+ metadata.gz: be11c66cdcdc22f4149f088221fd1072fc075fe6b83ea3001a4c1c7d7a7398ce
4
+ data.tar.gz: 9df03bc1da33bbaed659ed753a83dbce4e72670f894038e3290d7732c9f38062
5
5
  SHA512:
6
- metadata.gz: ec0dc68c7d86aeb4f6c648dd6756220c08054af4a2a3fd4770271d16268af0fb252a08c1b5214f2e5535d3af12b0fa4b178ebe8b0a833ec102bc0e767060dbb1
7
- data.tar.gz: 61f278ae9b172c11f9eb6e405427f9f6186af5609ae8f42367a625a3488707194321d411b46a1f44b28a3e2b2f3b499d8aa9176d7676c3eeb1fab4ee65e65128
6
+ metadata.gz: 0f5598b332bf113018a53b725e9811c7335b3bebd3cbd92368c25556ee2cfbf4236c101e4b9b186a9b74a41d38af27f08e12c3fafe7c4393cbd5fab087150091
7
+ data.tar.gz: ea4760031f9dae9856b1e627e76525e1ef87666ec7cca298589bd264e4c2ab87e100883b2c87f9b2345885a752a036088992f7a1ed598ac8a6f6a78ab81bf027
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/iterator'
20
21
  require_relative 'mug/iterator/for'
21
22
  require_relative 'mug/iterator/method'
22
23
  require_relative 'mug/loop-with'
@@ -1,2 +1,65 @@
1
- require_relative 'iterator/for'
2
- require_relative 'iterator/method'
1
+
2
+ #
3
+ # A special class of Enumerator that repeatedly yields values
4
+ # to a block.
5
+ #
6
+ # The initial yielded value is given in the constructor, but in
7
+ # subsequent iterations the result of the previous iteration is
8
+ # yielded.
9
+ #
10
+ # Example:
11
+ #
12
+ # 0.iter_for(:next).take(5) #=> [1,2,3,4,5]
13
+ #
14
+ class Iterator < Enumerator
15
+ #
16
+ # Creates a new Iterator object, which can be used as an
17
+ # Enumerable.
18
+ #
19
+ # In the first form, iteration is defined by the given block,
20
+ # to which the current object and any other +args+ are yielded.
21
+ #
22
+ # In the second, deprecated, form, a generated Iterator sends the
23
+ # given method with any +args+ to the iterand.
24
+ #
25
+ # Use of this form is discourages. Use Object#iter_for or
26
+ # Object#to_iter instead.
27
+ #
28
+ # @call-seq new(initial, *args) { |obj, *args| ... }
29
+ # @call-seq new(initial, method=:each, *args)
30
+ #
31
+ def initialize obj, *args
32
+ if block_given?
33
+ super() do |y|
34
+ loop do
35
+ y << (obj = yield obj, *args)
36
+ end
37
+ end
38
+ else
39
+ warn 'Iterator.new without a block is deprecated; use Object#to_iter'
40
+ args = [:each] if args.empty?
41
+ super() do |y|
42
+ loop do
43
+ y << (obj = obj.send(*args))
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ =begin
51
+ Copyright (c) 2013-2018, Matthew Kerwin <matthew@kerwin.net.au>
52
+
53
+ Permission to use, copy, modify, and/or distribute this software for any
54
+ purpose with or without fee is hereby granted, provided that the above
55
+ copyright notice and this permission notice appear in all copies.
56
+
57
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
58
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
59
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
60
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
61
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
62
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
63
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
64
+ =end
65
+
@@ -1,18 +1,20 @@
1
1
 
2
- require_relative '../iterator_c'
2
+ require_relative '../iterator'
3
3
 
4
4
  class Object
5
5
  #
6
6
  # Creates a new Iterator for the method named +meth+
7
7
  #
8
8
  def iter_for meth, *args
9
- Iterator.new self, meth, *args
9
+ Iterator.new(self) do |o|
10
+ o.send(meth, *args)
11
+ end
10
12
  end
11
13
  alias to_iter iter_for
12
14
  end
13
15
 
14
16
  =begin
15
- Copyright (c) 2013-2017, Matthew Kerwin <matthew@kerwin.net.au>
17
+ Copyright (c) 2013-2018, Matthew Kerwin <matthew@kerwin.net.au>
16
18
 
17
19
  Permission to use, copy, modify, and/or distribute this software for any
18
20
  purpose with or without fee is hereby granted, provided that the above
@@ -1,5 +1,5 @@
1
1
 
2
- require_relative '../iterator_c'
2
+ require_relative '../iterator'
3
3
 
4
4
  class Method
5
5
  #
@@ -7,12 +7,14 @@ class Method
7
7
  # on this method's receiver.
8
8
  #
9
9
  def to_iter *args
10
- Iterator.new receiver, name, *args
10
+ Iterator.new(receiver) do |o|
11
+ o.send(name, *args)
12
+ end
11
13
  end
12
14
  end
13
15
 
14
16
  =begin
15
- Copyright (c) 2013, Matthew Kerwin <matthew@kerwin.net.au>
17
+ Copyright (c) 2013-2018, Matthew Kerwin <matthew@kerwin.net.au>
16
18
 
17
19
  Permission to use, copy, modify, and/or distribute this software for any
18
20
  purpose with or without fee is hereby granted, provided that the above
@@ -5,14 +5,14 @@ require_relative '../lib/mug/iterator/for'
5
5
  class IterForTest < Test::Unit::TestCase
6
6
  def test_iter_for
7
7
  # Test on Integer#next => Integer
8
- assert_equal([0, 1, 2, 3, 4], 0.iter_for(:next).take(5))
8
+ assert_equal([1, 2, 3, 4, 5], 0.iter_for(:next).take(5))
9
9
  # Test on String#succ => String
10
- assert_equal(%w[a b c d e f g h i j], 'a'.iter_for(:succ).take(10))
10
+ assert_equal(%w[b c d e f g h i j k], 'a'.iter_for(:succ).take(10))
11
11
  # Test on Integer#inspect => String#inspect => String
12
- assert_equal([1, "1", "\"1\""], 1.iter_for(:inspect).take(3))
12
+ assert_equal(["1", "\"1\""], 1.iter_for(:inspect).take(2))
13
13
  end
14
14
  def test_iter_for_args
15
15
  # Test with a parameter
16
- assert_equal([0, 2, 4, 6, 8], 0.iter_for(:+, 2).take(5))
16
+ assert_equal([2, 4, 6, 8, 10], 0.iter_for(:+, 2).take(5))
17
17
  end
18
18
  end
@@ -5,14 +5,14 @@ require_relative '../lib/mug/iterator/method'
5
5
  class MethodToIterTest < Test::Unit::TestCase
6
6
  def test_to_iter
7
7
  # Test on Integer#next => Integer
8
- assert_equal([0, 1, 2, 3, 4], 0.method(:next).to_iter.take(5))
8
+ assert_equal([1, 2, 3, 4, 5], 0.method(:next).to_iter.take(5))
9
9
  # Test on String#succ => String
10
- assert_equal(%w[a b c d e f g h i j], 'a'.method(:succ).to_iter.take(10))
10
+ assert_equal(%w[b c d e f g h i j k], 'a'.method(:succ).to_iter.take(10))
11
11
  # Test on Integer#inspect => String#inspect => String
12
- assert_equal([1, "1", "\"1\""], 1.method(:inspect).to_iter.take(3))
12
+ assert_equal(["1", "\"1\""], 1.method(:inspect).to_iter.take(2))
13
13
  end
14
14
  def test_iter_for_args
15
15
  # Test with a parameter
16
- assert_equal([0, 2, 4, 6, 8], 0.method(:+).to_iter(2).take(5))
16
+ assert_equal([2, 4, 6, 8, 10], 0.method(:+).to_iter(2).take(5))
17
17
  end
18
18
  end
@@ -0,0 +1,17 @@
1
+ require 'test/unit'
2
+ $VERBOSE = true
3
+
4
+ require_relative '../lib/mug/iterator'
5
+ class IteratorTest < Test::Unit::TestCase
6
+ def test_iterator
7
+ iter = Iterator.new(0, 1) do |o, x|
8
+ o + x
9
+ end
10
+ assert_equal([1,2,3,4,5], iter.take(5))
11
+ end
12
+ def test_iterator2
13
+ # TODO: assert that this calls 'warn'?
14
+ iter = Iterator.new(0, :+, 1)
15
+ assert_equal([1,2,3,4,5], iter.take(5))
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Kerwin
@@ -53,7 +53,6 @@ files:
53
53
  - lib/mug/iterator.rb
54
54
  - lib/mug/iterator/for.rb
55
55
  - lib/mug/iterator/method.rb
56
- - lib/mug/iterator_c.rb
57
56
  - lib/mug/loop-with.rb
58
57
  - lib/mug/main.rb
59
58
  - lib/mug/matchdata.rb
@@ -91,6 +90,7 @@ files:
91
90
  - test/test-hashwhen.rb
92
91
  - test/test-iterator-for.rb
93
92
  - test/test-iterator-method.rb
93
+ - test/test-iterator.rb
94
94
  - test/test-loop-with.rb
95
95
  - test/test-matchdata_each.rb
96
96
  - test/test-matchdata_hash.rb
@@ -127,36 +127,37 @@ signing_key:
127
127
  specification_version: 4
128
128
  summary: 'MUG: Matty''s Ultimate Gem'
129
129
  test_files:
130
- - test/test-enumerable-hash-like.rb
131
- - test/test-clamp.rb
132
- - test/test-array-delete_all.rb
130
+ - test/test-fragile-method-chain.rb
131
+ - test/test-maybe.rb
132
+ - test/test-hashop.rb
133
+ - test/test-not.rb
134
+ - test/test-loop-with.rb
135
+ - test/test-counts.rb
136
+ - test/test-array-minus.rb
137
+ - test/test-affix.rb
138
+ - test/test-bool.rb
139
+ - test/test-alias.rb
133
140
  - test/test-rexproc.rb
141
+ - test/test-hashmerge.rb
142
+ - test/test-array-samples.rb
134
143
  - test/test-tau.rb
135
- - test/test-matchdata_each.rb
136
- - test/test-alias.rb
144
+ - test/test-apply.rb
145
+ - test/test-any-and-all.rb
146
+ - test/test-clamp.rb
147
+ - test/test-iterator-for.rb
137
148
  - test/test-bittest.rb
138
149
  - test/test-hashwhen.rb
150
+ - test/test-negativity.rb
151
+ - test/test-array-delete_all.rb
152
+ - test/test-iterator.rb
139
153
  - test/test-matchdata_hash.rb
140
- - test/test-not.rb
141
- - test/test-array-extend.rb
142
- - test/test-iterator-for.rb
143
- - test/test-top.rb
144
- - test/test-and-or.rb
145
- - test/test-array-to_proc.rb
146
- - test/test-affix.rb
147
- - test/test-hashmerge.rb
148
- - test/test-any-and-all.rb
149
154
  - test/test-self.rb
150
- - test/test-time.rb
151
- - test/test-counts.rb
152
- - test/test-negativity.rb
153
- - test/test-bool.rb
155
+ - test/test-and-or.rb
154
156
  - test/test-hashmap.rb
155
- - test/test-loop-with.rb
156
- - test/test-maybe.rb
157
- - test/test-array-samples.rb
158
- - test/test-hashop.rb
157
+ - test/test-enumerable-hash-like.rb
158
+ - test/test-time.rb
159
+ - test/test-matchdata_each.rb
159
160
  - test/test-iterator-method.rb
160
- - test/test-apply.rb
161
- - test/test-array-minus.rb
162
- - test/test-fragile-method-chain.rb
161
+ - test/test-array-extend.rb
162
+ - test/test-top.rb
163
+ - test/test-array-to_proc.rb
@@ -1,44 +0,0 @@
1
-
2
- #
3
- # A special class of Enumerator that repeatedly invokes a method.
4
- #
5
- # Initially the method is send to the given +obj+, but subsequent
6
- # invocations are sent to the result of the previous invocation.
7
- #
8
- # Example:
9
- #
10
- # 0.iter_for(:next).take(5) #=> [0,1,2,3,4]
11
- #
12
- class Iterator < Enumerator
13
- #
14
- # Creates a new Iterator for method +meth+, to be
15
- # called initially on object +obj+.
16
- #
17
- # All method calls will have +args+ as parameters.
18
- #
19
- def initialize obj, meth, *args
20
- super() do |y|
21
- loop do
22
- y << obj
23
- obj = obj.send(meth, *args)
24
- end
25
- end
26
- end
27
- end
28
-
29
- =begin
30
- Copyright (c) 2013, Matthew Kerwin <matthew@kerwin.net.au>
31
-
32
- Permission to use, copy, modify, and/or distribute this software for any
33
- purpose with or without fee is hereby granted, provided that the above
34
- copyright notice and this permission notice appear in all copies.
35
-
36
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
37
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
38
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
39
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
40
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
41
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
42
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
43
- =end
44
-