Sha256: 64cfc4de9eff8772bee2c6f49dddc58b8fbf105411491d223bf90f1e87e7266a

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

require 'spec_helper'
require 'dentaku/ast/functions/pluck'
require 'dentaku'

describe Dentaku::AST::Pluck do
  let(:calculator) { Dentaku::Calculator.new }

  it 'operates on each value in an array' do
    result = Dentaku('PLUCK(users, age)', users: [
      {name: "Bob",  age: 44},
      {name: "Jane", age: 27}
    ])
    expect(result).to eq([44, 27])
  end

  it 'allows specifying a default for missing values' do
    result = Dentaku!('PLUCK(users, age, -1)', users: [
      {name: "Bob"},
      {name: "Jane", age: 27}
    ])
    expect(result).to eq([-1, 27])
  end

  it 'returns nil if pluck key is missing from a hash' do
    result = Dentaku!('PLUCK(users, age)', users: [
      {name: "Bob"},
      {name: "Jane", age: 27}
    ])
    expect(result).to eq([nil, 27])
  end

  it 'works with an empty array' do
    result = Dentaku('PLUCK(users, age)', users: [])
    expect(result).to eq([])
  end

  it 'raises argument error if a string is passed as identifier' do
    expect do Dentaku.evaluate!('PLUCK(users, "age")', users: [
      {name: "Bob",  age: 44},
      {name: "Jane", age: 27}
    ]) end.to raise_error(Dentaku::ParseError, 'PLUCK() requires second argument to be an identifier')
  end

  it 'raises argument error if a non array of hashes is passed as collection' do
    expect { calculator.evaluate!('PLUCK({1, 2, 3}, age)') }.to raise_error(
      Dentaku::ArgumentError, 'PLUCK() requires first argument to be an array of hashes'
    )
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dentaku-3.5.4 spec/ast/pluck_spec.rb