Sha256: 42030e606aa69a7ea19e0cc5f6fe71b563bb9c021a967c9ada32ec30ff3d9ade

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

# encoding: utf-8

describe Assertion do

  let(:load_path) { Dir[File.expand_path "../*.yml", __FILE__] }

  around do |example|
    old_locale, I18n.locale = I18n.locale, :en
    old_path, I18n.load_path = I18n.load_path, load_path
    I18n.backend.load_translations

    example.run

    I18n.locale    = old_locale
    I18n.load_path = old_path
  end

  it "works" do
    IsMale = Assertion.about :name, :gender do
      gender == :male
    end

    IsAdult = Assertion.about :name, :age do
      age.to_i >= 18
    end

    jane = { name: "Jane", gender: :female, age: 19 }

    jane_is_a_male   = IsMale[jane]
    jane_is_a_female = IsMale.not[jane]
    jane_is_an_adult = IsAdult[jane]
    jane_is_a_child  = IsAdult.not[jane]

    jane_is_a_women  = jane_is_a_female & jane_is_an_adult
    expect(jane_is_a_women).to be_valid
    expect { jane_is_a_women.validate! }.not_to raise_error

    jane_is_a_boy = jane_is_a_male & jane_is_a_child
    expect(jane_is_a_boy).not_to be_valid
    expect(jane_is_a_boy.messages)
      .to eql ["Jane is a female", "Jane is an adult (age 19)"]
    expect { jane_is_a_boy.validate! }.to raise_error Assertion::InvalidError
  end

  after do
    Object.send :remove_const, :IsAdult
    Object.send :remove_const, :IsMale
  end

end # describe Assertion

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
assertion-0.0.1 spec/integration/assertion_spec.rb