We came across an issue where we created a ClassKit instance from a hash, then used that same hash elsewhere to write data to a Redis cache. This was in turn calling Marshal.dump(hash) but that failed with a TypeError: can't dump hash with default proc.
Here's a test case to illustrate this:
class Foo
extend ClassKit
attr_accessor_type :bar
end
data = { bar: 'bar' }
data.default_proc
# => nil
Marshal.dump(data)
# => "\x04\b{\x06:\bbarI\"\bbar\x06:\x06ET"
helper = ClassKit::Helper.new
foo = helper.from_hash(hash: data, klass: Foo)
foo.bar
# => 'bar'
data.default_proc
# => #<Proc:0x007fb811104368@/path/to/gems/hash_kit-0.5.4/lib/hash_kit/helper.rb:11>
Marshal.dump(data)
# => TypeError: can't dump hash with default proc
This seems to be caused by the from_hash method calling HashKit::indifferent! on the hash parameter: https://github.com/Sage/class_kit/blob/master/lib/class_kit/helper.rb#L54
Would a possible fix be to create a copy of the hash before calling Hashkit::indifferent!?