Skip to content

Commit 1791253

Browse files
authored
Merge pull request #284 from brainspec/ar-type-yaml
Support YAML serialization for the custom AR type
2 parents d207627 + 40f8ac5 commit 1791253

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

lib/enumerize/activerecord.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,19 @@ def deserialize(value)
9090
def as_json(options = nil)
9191
{attr: @attr.name, subtype: @subtype}.as_json(options)
9292
end
93+
94+
def encode_with(coder)
95+
coder[:class_name] = @attr.klass.name
96+
coder[:attr_name] = @attr.name
97+
coder[:subtype] = @subtype
98+
end
99+
100+
def init_with(coder)
101+
initialize(
102+
coder[:class_name].constantize.enumerized_attributes[coder[:attr_name]],
103+
coder[:subtype]
104+
)
105+
end
93106
end
94107
end
95108
end

lib/enumerize/attribute.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Enumerize
22
class Attribute
3-
attr_reader :name, :values, :default_value, :i18n_scope
3+
attr_reader :klass, :name, :values, :default_value, :i18n_scope
44

55
def initialize(klass, name, options={})
66
raise ArgumentError, ':in option is required' unless options[:in]

test/activerecord_test.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,4 +517,9 @@ class InterestsRequiredUser < User
517517
type = User.type_for_attribute('status')
518518
type.as_json['attr'].must_equal 'status'
519519
end
520+
521+
it "doesn't break YAML serialization" do
522+
user = YAML.load(User.create(status: :blocked).to_yaml)
523+
user.status.must_equal 'blocked'
524+
end
520525
end

0 commit comments

Comments
 (0)