Skip to content

Instantly share code, notes, and snippets.

@cee-dub
Forked from zbrock/gist:615961
Created October 13, 2010 06:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save cee-dub/623589 to your computer and use it in GitHub Desktop.
Save cee-dub/623589 to your computer and use it in GitHub Desktop.
def should_be_a_subset(superset, records_selected_by_scope, &condition)
flunk "Your superset is empty" if superset.empty?
flunk "Your scope did not select any records" if records_selected_by_scope.empty?
records_selected_by_block, records_excluded_by_block = superset.partition(&condition)
flunk "Your test condition did not select any records" if records_selected_by_block.empty?
flunk "Your test condition did not exclude any records" if records_excluded_by_block.empty?
records_selected_by_scope.map(&:id).should =~ records_selected_by_block.map(&:id)
end
@readysetawesome
Copy link

Examples become even more readable if you make a custom matcher out of this:

RSpec::Matchers.define :be_a_subset_of do |superset, condition|
  match do |subset|
    should_be_a_subset(superset, subset, &condition)
  end
end

usage:

User.registered.should be_a_subset_of(User.all, lambda {|u| !u.registered_at.nil? })

@seako
Copy link

seako commented Nov 24, 2013

i was inspired by this post to make an analogous matcher for ordering scopes

https://gist.github.com/seako/7632799

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment