module Golden::YamlCoderConcern

Public Instance Methods

assert_valid_value(obj, action:) click to toggle source
# File lib/golden/active_model_concerns/yaml_coder_concern.rb, line 28
def assert_valid_value(obj, action:)
  return if obj.nil? || obj.is_a?(self)

  error = %(
    can't #{action}: was supposed to be a #{name},
    but was a #{obj.class.name}. -- #{obj.inspect}
  ).gsub(/\s+/, ' ').strip

  if ::Object.const_defined? 'ActiveRecord'
    raise ::ActiveRecord::SerializationTypeMismatch, error
  else
    raise ::Golden::Objects::Error, error
  end
end
dump(obj) click to toggle source
# File lib/golden/active_model_concerns/yaml_coder_concern.rb, line 15
def dump(obj)
  return if obj.nil?

  if obj.respond_to? :to_h
    YAML.dump obj.to_h
  else
    assert_valid_value(obj, action: 'dump')
    YAML.dump obj
  end
end
load(yaml) click to toggle source
# File lib/golden/active_model_concerns/yaml_coder_concern.rb, line 10
def load(yaml)
  obj = YAML.safe_load(yaml, [Symbol]) if yaml.is_a?(String) && /^---/.match?(yaml)
  obj.is_a?(Hash) ? new(obj || {}) : obj
end