diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-11-13 11:11:11 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-11-13 11:11:11 -0800 |
commit | 8f6ce1a17ea1d73c3becc16ece79046e113daf8e (patch) | |
tree | 6c6f78f12accdc433c64680d5d6117967b76c5c2 | |
parent | 9ad8d670ec53eab64f0e0f0a248c2b11ebd79cc8 (diff) | |
download | rails-8f6ce1a17ea1d73c3becc16ece79046e113daf8e.tar.gz rails-8f6ce1a17ea1d73c3becc16ece79046e113daf8e.tar.bz2 rails-8f6ce1a17ea1d73c3becc16ece79046e113daf8e.zip |
backporting Struct#to_h from ruby 2.0
-rw-r--r-- | activesupport/lib/active_support/core_ext/struct.rb | 6 | ||||
-rw-r--r-- | activesupport/test/core_ext/struct_test.rb | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/struct.rb b/activesupport/lib/active_support/core_ext/struct.rb new file mode 100644 index 0000000000..c2c30044f2 --- /dev/null +++ b/activesupport/lib/active_support/core_ext/struct.rb @@ -0,0 +1,6 @@ +# Backport of Struct#to_h from Ruby 2.0 +class Struct # :nodoc: + def to_h + Hash[members.zip(values)] + end +end unless Struct.instance_methods.include?(:to_h) diff --git a/activesupport/test/core_ext/struct_test.rb b/activesupport/test/core_ext/struct_test.rb new file mode 100644 index 0000000000..0dff7b32d2 --- /dev/null +++ b/activesupport/test/core_ext/struct_test.rb @@ -0,0 +1,10 @@ +require 'abstract_unit' +require 'active_support/core_ext/struct' + +class StructExt < ActiveSupport::TestCase + def test_to_h + x = Struct.new(:foo, :bar) + z = x.new(1, 2) + assert_equal({ foo: 1, bar: 2 }, z.to_h) + end +end |