Sha256: a40941e23c4135b5b7dad613b6dc496c0931ba786e1cb6bd9af2d0125e699864

Contents?: true

Size: 1.54 KB

Versions: 7

Compression:

Stored size: 1.54 KB

Contents

require 'spec_helper'

describe ROM::Relation::Composite do
  include_context 'users and tasks'

  let(:users) { rom.relation(:users) }

  let(:name_list) { proc { |r| r.map { |t| t[:name] } } }
  let(:upcaser) { proc { |r| r.map(&:upcase) } }

  before do
    setup.relation(:users) do
      def by_name(name)
        restrict(name: name)
      end

      def sorted(other)
        other.sort_by { |t| t[:name] }
      end
    end
  end

  describe '#call' do
    it 'sends a relation through mappers' do
      relation = users >> name_list >> upcaser
      loaded = relation.call

      expect(loaded.source).to eql(users.relation)
      expect(loaded).to match_array(%w(JANE JOE))
    end

    it 'sends a relation through another relation' do
      relation = users >> users.sorted
      loaded = relation.call

      expect(loaded.source).to eql(users.relation)
      expect(loaded).to match_array([
        { name: 'Jane', email: 'jane@doe.org' },
        { name: 'Joe', email: 'joe@doe.org' }
      ])
    end
  end

  describe '#each' do
    let(:relation) { users >> name_list >> upcaser }

    it 'calls and iterates' do
      result = []
      relation.each { |object| result << object }
      expect(result).to match_array(%w(JANE JOE))
    end

    it 'returns enumerator if block is not provided' do
      expect(relation.each.to_a).to match_array(%w(JANE JOE))
    end
  end

  describe '#first' do
    let(:relation) { users >> name_list >> upcaser }

    it 'calls and returns the first object' do
      expect(relation.first).to eql('JOE')
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rom-0.6.2 spec/unit/rom/relation/composite_spec.rb
rom-0.6.1 spec/unit/rom/relation/composite_spec.rb
rom-0.6.0 spec/unit/rom/relation/composite_spec.rb
rom-0.6.0.rc1 spec/unit/rom/relation/composite_spec.rb
rom-0.6.0.beta3 spec/unit/rom/relation/composite_spec.rb
rom-0.6.0.beta2 spec/unit/rom/relation/composite_spec.rb
rom-0.6.0.beta1 spec/unit/rom/relation/composite_spec.rb