mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #3034 from takahashim/try_convert
add {Array|Hash|String}.try_convert
This commit is contained in:
@@ -1,4 +1,29 @@
|
||||
class Array
|
||||
##
|
||||
# call-seq:
|
||||
# Array.try_convert(obj) -> array or nil
|
||||
#
|
||||
# Tries to convert +obj+ into an array, using +to_ary+ method.
|
||||
# converted array or +nil+ if +obj+ cannot be converted for any reason.
|
||||
# This method can be used to check if an argument is an array.
|
||||
#
|
||||
# Array.try_convert([1]) #=> [1]
|
||||
# Array.try_convert("1") #=> nil
|
||||
#
|
||||
# if tmp = Array.try_convert(arg)
|
||||
# # the argument is an array
|
||||
# elsif tmp = String.try_convert(arg)
|
||||
# # the argument is a string
|
||||
# end
|
||||
#
|
||||
def self.try_convert(obj)
|
||||
if obj.respond_to?(:to_ary)
|
||||
obj.to_ary
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# ary.uniq! -> ary or nil
|
||||
@@ -709,4 +734,14 @@ class Array
|
||||
end
|
||||
nil
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# ary.to_ary -> ary
|
||||
#
|
||||
# Returns +self+.
|
||||
#
|
||||
def to_ary
|
||||
self
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
##
|
||||
# Array(Ext) Test
|
||||
|
||||
assert("Array.try_convert") do
|
||||
assert_nil Array.try_convert(0)
|
||||
assert_nil Array.try_convert(nil)
|
||||
assert_equal [], Array.try_convert([])
|
||||
assert_equal [1,2,3], Array.try_convert([1,2,3])
|
||||
end
|
||||
|
||||
assert("Array#assoc") do
|
||||
s1 = [ "colors", "red", "blue", "green" ]
|
||||
s2 = [ "letters", "a", "b", "c" ]
|
||||
@@ -298,3 +305,8 @@ assert("Array#index (block)") do
|
||||
assert_nil (1..10).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
|
||||
assert_equal 34, (1..100).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
|
||||
end
|
||||
|
||||
assert("Array#to_ary") do
|
||||
assert_equal [], [].to_ary
|
||||
assert_equal [1,2,3], [1,2,3].to_ary
|
||||
end
|
||||
|
||||
@@ -60,6 +60,25 @@ class Hash
|
||||
h
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# Hash.try_convert(obj) -> hash or nil
|
||||
#
|
||||
# Try to convert <i>obj</i> into a hash, using to_hash method.
|
||||
# Returns converted hash or nil if <i>obj</i> cannot be converted
|
||||
# for any reason.
|
||||
#
|
||||
# Hash.try_convert({1=>2}) # => {1=>2}
|
||||
# Hash.try_convert("1=>2") # => nil
|
||||
#
|
||||
def self.try_convert(obj)
|
||||
if obj.respond_to?(:to_hash)
|
||||
obj.to_hash
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# hsh.merge!(other_hash) -> hsh
|
||||
|
||||
@@ -39,6 +39,12 @@ assert('Hash.[] "c_key", "c_value"') do
|
||||
end
|
||||
end
|
||||
|
||||
assert('Hash.try_convert') do
|
||||
assert_nil Hash.try_convert(nil)
|
||||
assert_nil Hash.try_convert("{1=>2}")
|
||||
assert_equal({1=>2}, Hash.try_convert({1=>2}))
|
||||
end
|
||||
|
||||
assert('Hash#merge!') do
|
||||
a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
|
||||
b = { 'cba_key' => 'XXX', 'xyz_key' => 'xyz_value' }
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
class String
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# String.try_convert(obj) -> string or nil
|
||||
#
|
||||
# Try to convert <i>obj</i> into a String, using to_str method.
|
||||
# Returns converted string or nil if <i>obj</i> cannot be converted
|
||||
# for any reason.
|
||||
#
|
||||
# String.try_convert("str") #=> "str"
|
||||
# String.try_convert(/re/) #=> nil
|
||||
#
|
||||
def self.try_convert(obj)
|
||||
if obj.respond_to?(:to_str)
|
||||
obj.to_str
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# string.clear -> string
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
|
||||
UTF8STRING = ("\343\201\202".size == 1)
|
||||
|
||||
assert('String.try_convert') do
|
||||
assert_nil String.try_convert(nil)
|
||||
assert_nil String.try_convert(:foo)
|
||||
assert_equal "", String.try_convert("")
|
||||
assert_equal "1,2,3", String.try_convert("1,2,3")
|
||||
end
|
||||
|
||||
assert('String#getbyte') do
|
||||
str1 = "hello"
|
||||
bytes1 = [104, 101, 108, 108, 111]
|
||||
|
||||
Reference in New Issue
Block a user