Skip to content

Commit

Permalink
Fully marshal AR::Base objects. Fixes #2431.
Browse files Browse the repository at this point in the history
  • Loading branch information
jonleighton committed Aug 8, 2011
1 parent dd944cb commit c202c10
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 21 deletions.
21 changes: 0 additions & 21 deletions activerecord/lib/active_record/base.rb
Expand Up @@ -940,17 +940,6 @@ def before_remove_const #:nodoc:
self.current_scope = nil
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


# Finder methods must instantiate through this method to work with the
# single-table inheritance model that makes it possible to create
# objects of different types from the same table.
Expand Down Expand Up @@ -1602,16 +1591,6 @@ def init_with(coder)
self
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.
Expand Down
13 changes: 13 additions & 0 deletions activerecord/test/cases/base_test.rb
Expand Up @@ -1812,6 +1812,19 @@ def test_marshal_round_trip
assert_equal expected.attributes, actual.attributes
end

def test_marshal_new_record_round_trip
post = Marshal.load(Marshal.dump(Post.new))
assert post.new_record?, "should be a new record"
end

def test_marshalling_with_associations
post = Post.new
post.comments.build
post = Marshal.load(Marshal.dump(post))

assert_equal 1, post.comments.length
end

def test_attribute_names
assert_equal ["id", "type", "ruby_type", "firm_id", "firm_name", "name", "client_of", "rating", "account_id"],
Company.attribute_names
Expand Down

0 comments on commit c202c10

Please sign in to comment.