Permalink
Browse files

add {Array|Hash|String}.try_convert

  • Loading branch information...
takahashim committed Nov 23, 2015
1 parent 625a3fe commit 621487a0cd8acc5bbec73c98ebbb23c519ba6e6d
@@ -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 @@ def index(val=NONE, &block)
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_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 @@ def self.[](*object)
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 @@
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]

0 comments on commit 621487a

Please sign in to comment.