Feature #15451 » ostruct-to_h-with-block.patch
NEWS | ||
---|---|---|
* Numeric#step now returns an instance of Enumerator::ArithmeticSequence
|
||
class rather than one of Enumerator class.
|
||
[OpenStruct]
|
||
[Modified methods]
|
||
* OpenStruct#to_h now maps keys and values to new keys and values
|
||
by the block if given. [Feature #15143]
|
||
[Proc]
|
||
[New methods]
|
lib/ostruct.rb | ||
---|---|---|
@table = @table.dup
|
||
end
|
||
#
|
||
# call-seq:
|
||
# ostruct.to_h -> hash
|
||
# ostruct.to_h {|name, value| block } -> hash
|
||
#
|
||
# Converts the OpenStruct to a hash with keys representing
|
||
# each attribute (as symbols) and their corresponding values.
|
||
#
|
||
# If a block is given, the results of the block on each pair of
|
||
# the receiver will be used as pairs.
|
||
#
|
||
# require "ostruct"
|
||
# data = OpenStruct.new("country" => "Australia", :capital => "Canberra")
|
||
# data.to_h # => {:country => "Australia", :capital => "Canberra" }
|
||
# data.to_h {|name, value| [name.to_s, value.upcase] }
|
||
# # => {"country" => "AUSTRALIA", "capital" => "CANBERRA" }
|
||
#
|
||
def to_h
|
||
@table.dup
|
||
if block_given?
|
||
@table.to_h{|key, value| yield key, value}
|
||
else
|
||
@table.dup
|
||
end
|
||
end
|
||
#
|
spec/ruby/library/openstruct/to_h_spec.rb | ||
---|---|---|
@to_h[:age] = 71
|
||
@os.age.should == 70
|
||
end
|
||
ruby_version_is "2.6" do
|
||
it "converts [key, value] pairs returned by the block to a hash" do
|
||
h = @os.to_h {|key, value| [key.to_s, value * 2]}
|
||
h.should == {"name" => "John SmithJohn Smith", "age" => 140, "pension" => 600}
|
||
end
|
||
end
|
||
end
|
test/ostruct/test_ostruct.rb | ||
---|---|---|
assert_equal(h, OpenStruct.new("name" => "John Smith", "age" => 70, pension: 300).to_h)
|
||
end
|
||
def test_to_h_with_block
|
||
os = OpenStruct.new("country" => "Australia", :capital => "Canberra")
|
||
assert_equal({"country" => "AUSTRALIA", "capital" => "CANBERRA" },
|
||
os.to_h {|name, value| [name.to_s, value.upcase]})
|
||
assert_equal("Australia", os.country)
|
||
end
|
||
def test_each_pair
|
||
h = {name: "John Smith", age: 70, pension: 300}
|
||
os = OpenStruct.new(h)
|