Sha256: 0b53f84c39ff224b44335dd8e2ad00337478d2f90902ccbf988de83fa3a5ddec

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

require 'spec_helper'

describe 'Mapper definition DSL' do
  include_context 'users and tasks'

  let(:header) { mapper.header }

  describe 'folded relation mapper' do
    before do
      setup.relation(:tasks) do
        def with_users
          join(users)
        end
      end

      setup.relation(:users) do
        def with_tasks
          join(tasks)
        end
      end
    end

    let(:rom) { setup.finalize }
    let(:actual) do
      rom.relation(:users).with_tasks.map_with(:users).to_a
    end

    it 'groups all attributes and folds the first key' do
      setup.mappers do
        define(:users) do
          fold tasks: [:title, :priority]
        end
      end

      expect(actual).to eql [
        { name: 'Joe', email: 'joe@doe.org', tasks: ['be nice', 'sleep well'] },
        { name: 'Jane', email: 'jane@doe.org', tasks: ['be cool'] }
      ]
    end

    it 'is sensitive to the order of keys' do
      setup.mappers do
        define(:users) do
          fold priorities: [:priority, :title]
        end
      end

      expect(actual).to eql [
        { name: 'Joe', email: 'joe@doe.org', priorities: [1, 2] },
        { name: 'Jane', email: 'jane@doe.org', priorities: [2] }
      ]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-0.7.1 spec/integration/mappers/fold_spec.rb