summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-02-07 23:52:08 +0900
committerKOBAYASHI Shuji <[email protected]>2019-02-07 23:52:08 +0900
commite846db709f2ce879a91dcc4c90b7f348020ff6b0 (patch)
tree9e8461a184b50eecd676ca38087b60641f69e18b
parent156641515cade4018c2551d5da70054d10dabf39 (diff)
downloadmruby-e846db709f2ce879a91dcc4c90b7f348020ff6b0.tar.gz
mruby-e846db709f2ce879a91dcc4c90b7f348020ff6b0.zip
Fix `Enumerator#(initialize|inspect)` for `nil`/`false`
-rw-r--r--mrbgems/mruby-enumerator/mrblib/enumerator.rb12
-rw-r--r--mrbgems/mruby-enumerator/test/enumerator.rb13
2 files changed, 13 insertions, 12 deletions
diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb
index cbf53974a..143f2b74f 100644
--- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb
+++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb
@@ -109,11 +109,11 @@ class Enumerator
#
# p fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
#
- def initialize(obj=nil, meth=:each, *args, &block)
+ def initialize(obj=NONE, meth=:each, *args, &block)
if block
obj = Generator.new(&block)
- else
- raise ArgumentError unless obj
+ elsif obj == NONE
+ raise ArgumentError, "wrong number of arguments (given 0, expected 1+)"
end
if @obj and !self.respond_to?(meth)
raise NoMethodError, "undefined method #{meth}"
@@ -221,13 +221,11 @@ class Enumerator
end
def inspect
- return "#<#{self.class}: uninitialized>" unless @obj
-
if @args && @args.size > 0
args = @args.join(", ")
- "#<#{self.class}: #{@obj}:#{@meth}(#{args})>"
+ "#<#{self.class}: #{@obj.inspect}:#{@meth}(#{args})>"
else
- "#<#{self.class}: #{@obj}:#{@meth}>"
+ "#<#{self.class}: #{@obj.inspect}:#{@meth}>"
end
end
diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb
index f3bd1bdba..0d2a95292 100644
--- a/mrbgems/mruby-enumerator/test/enumerator.rb
+++ b/mrbgems/mruby-enumerator/test/enumerator.rb
@@ -21,6 +21,7 @@ assert 'Enumerator.new' do
assert_equal [1,2,3], @obj.to_enum(:foo, 1,2,3).to_a
assert_equal [1,2,3], Enumerator.new(@obj, :foo, 1,2,3).to_a
assert_equal [1,2,3], Enumerator.new { |y| i = 0; loop { y << (i += 1) } }.take(3)
+ assert_equal [], Enumerator.new(false, :__id__).to_a
assert_raise(ArgumentError) { Enumerator.new }
assert_raise(ArgumentError) { @obj.to_enum }
@@ -92,11 +93,13 @@ end
assert 'Enumerator#inspect' do
e = (0..10).each
- assert_equal("#<Enumerator: 0..10:each>", e.inspect)
- e = Enumerator.new("FooObject", :foo, 1)
- assert_equal("#<Enumerator: FooObject:foo(1)>", e.inspect)
- e = Enumerator.new("FooObject", :foo, 1, 2, 3)
- assert_equal("#<Enumerator: FooObject:foo(1, 2, 3)>", e.inspect)
+ assert_equal('#<Enumerator: 0..10:each>', e.inspect)
+ e = Enumerator.new('FooObject', :foo, 1)
+ assert_equal('#<Enumerator: "FooObject":foo(1)>', e.inspect)
+ e = Enumerator.new('FooObject', :foo, 1, 2, 3)
+ assert_equal('#<Enumerator: "FooObject":foo(1, 2, 3)>', e.inspect)
+ e = Enumerator.new(nil, :to_s)
+ assert_equal('#<Enumerator: nil:to_s>', e.inspect)
end
assert 'Enumerator#each' do