Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. # Use: it { should accept_nested_attributes_for(:association_name).and_accept({valid_values => true}).but_reject({ :reject_if_nil => nil })}
  2. RSpec::Matchers.define :accept_nested_attributes_for do |association|
  3. match do |model|
  4. @model = model
  5. @nested_att_present = model.respond_to?("#{association}_attributes=".to_sym)
  6. if @nested_att_present && @reject
  7. model.send("#{association}_attributes=".to_sym,[@reject])
  8. @reject_success = model.send("#{association}").empty?
  9. end
  10. model.send("#{association}").clear
  11. if @nested_att_present && @accept
  12. model.send("#{association}_attributes=".to_sym,[@accept])
  13. @accept_success = ! (model.send("#{association}").empty?)
  14. end
  15. @nested_att_present && ( @reject.nil? || @reject_success ) && ( @accept.nil? || @accept_success )
  16. end
  17.  
  18. failure_message_for_should do
  19. messages = []
  20. messages << "accept nested attributes for #{association}" unless @nested_att_present
  21. messages << "reject values #{@reject.inspect} for association #{association}" unless @reject_success
  22. messages << "accept values #{@accept.inspect} for association #{association}" unless @accept_success
  23. "expected #{@model.class} to " + messages.join(", ")
  24. end
  25.  
  26. description do
  27. desc = "accept nested attributes for #{expected}"
  28. if @reject
  29. desc << ", but reject if attributes are #{@reject.inspect}"
  30. end
  31. end
  32.  
  33. chain :but_reject do |reject|
  34. @reject = reject
  35. end
  36.  
  37. chain :and_accept do |accept|
  38. @accept = accept
  39. end
  40. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement