Sha256: 49bedb91984d8234aaa23241a8276d04ba4c03bf11d33d28be4611c9b5f99ec5

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 KB

Contents

require 'spec_helper'

describe 'Transproc::Function' do
  describe '#>>' do
    it 'composes named functions' do
      f1 = t(:symbolize_keys)
      f2 = t(:rename_keys, user_name: :name)

      f3 = f1 >> f2

      expect(f3.to_ast).to eql(
        [
          :symbolize_keys, [],
          [
            :rename_keys, [user_name: :name]
          ]
        ]
      )

      expect(f3['user_name' => 'Jane']).to eql(name: 'Jane')

      f4 = f3 >> t(:nest, :details, [:name])

      expect(f4.to_ast).to eql(
        [
          :symbolize_keys, [],
          [
            :rename_keys, [user_name: :name]
          ],
          [
            :nest, [:details, [:name]]
          ]
        ]
      )

      expect(f4['user_name' => 'Jane']).to eql(details: { name: 'Jane' })
    end

    it 'composes anonymous functions' do
      # TODO: Use Transproc -> (v) { v.to_s } after release of jruby-9k
      f1 = Transproc proc { |v, m| v * m }, 2
      f2 = Transproc proc(&:to_s)

      f3 = f1 >> f2

      expect(f3.to_ast).to eql(
        [
          f1.fn, [2],
          [
            f2.fn, []
          ]
        ]
      )
    end

    it 'plays well with registered compositions' do
      Transproc.register(:user_names, t(:symbolize_keys) + t(:rename_keys, user_name: :name))
      f = t(:user_names)

      expect(f['user_name' => 'Jane']).to eql(name: 'Jane')
      expect(f.to_ast).to eql(
        [
          :symbolize_keys, [],
          [
            :rename_keys, [user_name: :name]
          ]
        ]
      )
    end

    it 'plays well with registered functions' do
      Transproc.register(:to_s, t(:to_string))
      f = t(:to_s)

      expect(f[:ok]).to eql('ok')
      expect(f.to_ast).to eql([:to_string, []])
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
transproc-0.2.4 spec/unit/function_spec.rb
transproc-0.2.3 spec/unit/function_spec.rb
transproc-0.2.2 spec/unit/function_spec.rb
transproc-0.2.1 spec/unit/function_spec.rb