Sha256: 0d04f8d066fea4e926069fab8b1efc78699545a383ecd6cd3bb90842a3bd7a78

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 KB

Contents

  # Use: it { should accept_nested_attributes_for(:association_name).and_accept({valid_values => true})
  #                                                                 .but_reject({ :reject_if_nil => nil })}

  RSpec::Matchers.define :accept_nested_attributes_for do |association|
    match do |model|
      @model = model
      @nested_att_present = model.respond_to?("#{association}_attributes=".to_sym)
      if @nested_att_present && @reject
        model.send("#{association}_attributes=".to_sym, [@reject])
        @reject_success = model.send("#{association}").empty?
      end
      if @nested_att_present && @accept
        model.send("#{association}_attributes=".to_sym, [@accept])
        @accept_success = ! (model.send("#{association}").empty?)
      end
      @nested_att_present && ( @reject.nil? || @reject_success) && ( @accept.nil? || @accept_success)
    end

    failure_message_for_should do
      messages = []
      messages << "expected #{@model.class} to accept nested attributes for #{association}" unless @nested_att_present
      unless @reject_success
        messages << "expected #{@model.class} to reject values #{@reject.inspect} for association #{association}"
      end
      unless @accept_success
        messages << "expected #{@model.class} to accept values #{@accept.inspect} for association #{association}"
      end
      messages.join(', ')
    end

    description do
      desc = "accept nested attributes for #{expected}"
      desc << ", but reject if attributes are #{@reject.inspect}" if @reject
    end

    chain :but_reject do |reject|
      @reject = reject
    end

    chain :and_accept do |accept|
      @accept = accept
    end
  end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
gaku-0.2.4 core/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.3 core/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.2 core/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.1 core/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.0 core/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb