Sha256: eed43bb4d75174e169180f1d21675d69f7341d74990e214830c69f684df155e2

Contents?: true

Size: 1.58 KB

Versions: 25

Compression:

Stored size: 1.58 KB

Contents

RSpec.describe Dry::Validation::Schema, 'defining schema context with option API' do
  shared_context 'valid schema with :db option' do
    before do
      DB = [{ email: 'jane@doe' }]
    end

    after do
      Object.send(:remove_const, :DB)
    end

    it 'uses external dependency set by option with a default value' do
      expect(schema.db).to be(DB)

      expect(schema.(email: 'jade@doe', contact: { email: 'jade2@doe' })).to be_success
      expect(schema.(email: 'jane@doe', contact: { email: 'jane2@doe' })).to be_failure
      expect(schema.(email: 'jade@doe', contact: { email: 'jane@doe' })).to be_failure
    end
  end


  context 'with a default value' do
    subject(:schema) do
      Dry::Validation.Schema do
        configure do
          option :db, -> { DB }

          def unique?(name, value)
            db.none? { |item| item[name] == value }
          end
        end

        required(:email).filled(unique?: :email)

        required(:contact).schema do
          required(:email).filled(unique?: :email)
        end
      end
    end

    include_context 'valid schema with :db option'
  end

  context 'without a default value' do
    subject(:schema) do
      Dry::Validation.Schema do
        configure do
          option :db

          def unique?(name, value)
            db.none? { |item| item[name] == value }
          end
        end

        required(:email).filled(unique?: :email)

        required(:contact).schema do
          required(:email).filled(unique?: :email)
        end
      end.with(db: DB)
    end

    include_context 'valid schema with :db option'
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
dry-validation-0.13.3 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.13.2 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.13.1 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.11.2 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.12.3 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.13.0 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.12.2 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.12.1 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.12.0 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.11.1 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.11.0 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.7 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.6 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.5 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.4 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.3 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.2 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.1 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.10.0 spec/integration/schema/option_with_default_spec.rb
dry-validation-0.9.5 spec/integration/schema/option_with_default_spec.rb