Sha256: 4fc4fb447e58b67dc855d0650afad9a74607317ed7f602f19f117fb5287c30d5

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

require "spec_helper"

module CustomYamlSerializer
  extend PaperTrail::Serializers::YAML

  def self.load(string)
    parsed_value = super(string)
    if parsed_value.is_a?(Hash)
      parsed_value.reject { |k, v| (k.blank? || v.blank?) }
    else
      parsed_value
    end
  end

  def self.dump(object)
    object.is_a?(Hash) ? super(object.reject { |_k, v| v.nil? }) : super
  end
end

RSpec.describe CustomYamlSerializer do
  let(:word_hash) {
    {
      "key1" => ::FFaker::Lorem.word,
      "key2" => nil,
      "tkey" => nil,
      "" => "foo"
    }
  }

  context(".load") do
    it("deserializes YAML to Ruby, removing pairs with blank keys or values") do
      expect(described_class.load(word_hash.to_yaml)).to eq(
        word_hash.reject { |k, v| (k.blank? || v.blank?) }
      )
    end
  end

  context(".dump") do
    it("serializes Ruby to YAML, removing pairs with nil values") do
      expect(described_class.dump(word_hash)).to eq(
        word_hash.reject { |_k, v| v.nil? }.to_yaml
      )
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
paper_trail-7.1.0 spec/paper_trail/serializers/custom_yaml_serializer_spec.rb
paper_trail-7.0.3 spec/paper_trail/serializers/custom_yaml_serializer_spec.rb