Sha256: e120d3213d8742c202cd7edbc20ac0346704ae5d70faca870d77beaec293e36a

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

require "spec_helper"

feature "Map objects", %q{
   In order to map object
   as a lib user
   I want to map object from an input object to an output object and reverse
} do

  given(:mapper){
    Yaoc::ObjectMapper.new(load_result_object_class, dump_result_object_class).tap do |mapper|
      mapper.add_mapping do
        fetcher :public_send
        reverse_fetcher :public_send
        rule to: :name,
             converter: ->(source, result){ result.merge({name:  "#{source[:name]} Hello World"}) },
             reverse_converter: ->(source, result){ result.merge({name: source.name}) }
        rule to: :role, from: :fullrolename
        rule to: :id
      end
    end
  }

  given(:load_result_object_class) {
    Struct.new(:id, :name, :role) do
      include Equalizer.new(:id, :name, :role)

      def initialize(params={})
        super()

        params.each do |attr, value|
          self.public_send("#{attr}=", value)
        end if params
      end

    end
  }

  given(:dump_result_object_class) {
    Struct.new(:id, :name, :fullrolename) do
      include Equalizer.new(:id, :name, :fullrolename)

      def initialize(params={})
        super()

        params.each do |attr, value|
          self.public_send("#{attr}=", value)
        end if params
      end

    end
  }

  given(:input_hash){
    dump_result_object
  }

  given(:load_result_object){
    load_result_object_class.new({id: 1, name: "paul", role: "admin"})
  }

  given(:dump_result_object){
    dump_result_object_class.new({id: 1, name: "paul", fullrolename: "admin"})
  }

  scenario "creates an result object from an input_object" do
    load_result_object.name += " Hello World"

    expect(mapper.load(input_hash)).to eq load_result_object
  end

  scenario "dumps an result object as result object" do
    expect(mapper.dump(load_result_object)).to eq dump_result_object
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
yaoc-0.0.2 spec/acceptance/map_objects_spec.rb