Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Use encode_with for marshalling

  • Loading branch information...
commit 441118458d57011ee1b1f1dcfea558de462c6da9 1 parent 2efd780
@jonleighton jonleighton authored tenderlove committed
View
20 activerecord/lib/active_record/base.rb
@@ -870,6 +870,16 @@ def before_remove_const #:nodoc:
reset_scoped_methods
end
+ # Specifies how the record is loaded by +Marshal+.
+ #
+ # +_load+ sets an instance variable for each key in the hash it takes as input.
+ # Override this method if you require more complex marshalling.
+ def _load(data)
+ record = allocate
+ record.init_with(Marshal.load(data))
+ record
+ end
+
private
def relation #:nodoc:
@@ -1425,6 +1435,16 @@ def init_with(coder)
_run_initialize_callbacks
end
+ # Specifies how the record is dumped by +Marshal+.
+ #
+ # +_dump+ emits a marshalled hash which has been passed to +encode_with+. Override this
+ # method if you require more complex marshalling.
+ def _dump(level)
+ dump = {}
+ encode_with(dump)
+ Marshal.dump(dump)
+ end
+
# Returns a String, which Action Pack uses for constructing an URL to this
# object. The default implementation returns this record's id as a String,
# or nil if this record's unsaved.
View
7 activerecord/test/cases/base_test.rb
@@ -1503,4 +1503,11 @@ def test_default_scope_is_reset
ensure
Object.class_eval{ remove_const :UnloadablePost } if defined?(UnloadablePost)
end
+
+ def test_marshal_round_trip
+ expected = posts(:welcome)
+ actual = Marshal.load(Marshal.dump(expected))
+
+ assert_equal expected.attributes, actual.attributes
+ end
end
Please sign in to comment.
Something went wrong with that request. Please try again.