shoulda-matchers 1.0.0.beta2 → 1.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Appraisals +12 -0
 - data/Gemfile +1 -0
 - data/README.rdoc +12 -4
 - data/Rakefile +7 -2
 - data/lib/shoulda/matchers/action_controller/assign_to_matcher.rb +2 -2
 - data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +2 -2
 - data/lib/shoulda/matchers/action_mailer/have_sent_email.rb +135 -9
 - data/lib/shoulda/matchers/active_model.rb +33 -0
 - data/lib/shoulda/matchers/{active_record → active_model}/allow_mass_assignment_of_matcher.rb +23 -6
 - data/lib/shoulda/matchers/{active_record → active_model}/allow_value_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/ensure_inclusion_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/ensure_length_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/helpers.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validate_acceptance_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validate_format_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validate_numericality_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validate_presence_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validate_uniqueness_of_matcher.rb +1 -1
 - data/lib/shoulda/matchers/{active_record → active_model}/validation_matcher.rb +1 -1
 - data/lib/shoulda/matchers/active_record.rb +1 -19
 - data/lib/shoulda/matchers/active_record/association_matcher.rb +17 -1
 - data/lib/shoulda/matchers/integrations/rspec.rb +7 -0
 - data/lib/shoulda/matchers/integrations/test_unit.rb +14 -1
 - data/lib/shoulda/matchers/version.rb +1 -1
 - metadata +36 -48
 - data/Gemfile.lock +0 -134
 
    
        data/Appraisals
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -10,12 +10,22 @@ about using shoulda with Test::Unit. 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            === ActiveRecord Matchers
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            Matchers to test associations 
     | 
| 
      
 13 
     | 
    
         
            +
            Matchers to test associations:
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
              describe Post do
         
     | 
| 
       16 
16 
     | 
    
         
             
                it { should belong_to(:user) }
         
     | 
| 
       17 
17 
     | 
    
         
             
                it { should have_many(:tags).through(:taggings) }
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              describe User do
         
     | 
| 
      
 21 
     | 
    
         
            +
                it { should have_many(:posts) }
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            === ActiveModel Matchers
         
     | 
| 
       18 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
            Matchers to test validations and mass assignments:
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              describe Post do
         
     | 
| 
       19 
29 
     | 
    
         
             
                it { should validate_uniqueness_of(:title) }
         
     | 
| 
       20 
30 
     | 
    
         
             
                it { should validate_presence_of(:body).with_message(/wtf/) }
         
     | 
| 
       21 
31 
     | 
    
         
             
                it { should validate_presence_of(:title) }
         
     | 
| 
         @@ -23,8 +33,6 @@ Matchers to test associations and validations: 
     | 
|
| 
       23 
33 
     | 
    
         
             
              end
         
     | 
| 
       24 
34 
     | 
    
         | 
| 
       25 
35 
     | 
    
         
             
              describe User do
         
     | 
| 
       26 
     | 
    
         
            -
                it { should have_many(:posts) }
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
36 
     | 
    
         
             
                it { should_not allow_value("blah").for(:email) }
         
     | 
| 
       29 
37 
     | 
    
         
             
                it { should allow_value("a@b.com").for(:email) }
         
     | 
| 
       30 
38 
     | 
    
         
             
                it { should ensure_inclusion_of(:age).in_range(1..100) }
         
     | 
| 
         @@ -53,8 +61,8 @@ Matchers to test common patterns: 
     | 
|
| 
       53 
61 
     | 
    
         
             
            In Rails 3 and Bundler, add the following to your Gemfile:
         
     | 
| 
       54 
62 
     | 
    
         | 
| 
       55 
63 
     | 
    
         
             
              group :test do
         
     | 
| 
       56 
     | 
    
         
            -
                gem "shoulda-matchers"
         
     | 
| 
       57 
64 
     | 
    
         
             
                gem "rspec-rails"
         
     | 
| 
      
 65 
     | 
    
         
            +
                gem "shoulda-matchers"
         
     | 
| 
       58 
66 
     | 
    
         
             
              end
         
     | 
| 
       59 
67 
     | 
    
         | 
| 
       60 
68 
     | 
    
         
             
            Shoulda will automatically include matchers into the appropriate example groups.
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -5,6 +5,7 @@ require 'rake/rdoctask' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'rake/gempackagetask'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'rspec/core/rake_task'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'cucumber/rake/task'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'appraisal'
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            $LOAD_PATH.unshift("lib")
         
     | 
| 
       10 
11 
     | 
    
         
             
            require 'shoulda/matchers/version'
         
     | 
| 
         @@ -41,10 +42,14 @@ desc "Clean files generated by rake tasks" 
     | 
|
| 
       41 
42 
     | 
    
         
             
            task :clobber => [:clobber_rdoc, :clobber_package]
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
44 
     | 
    
         
             
            Cucumber::Rake::Task.new do |t|
         
     | 
| 
       44 
     | 
    
         
            -
              t.fork =  
     | 
| 
      
 45 
     | 
    
         
            +
              t.fork = false
         
     | 
| 
       45 
46 
     | 
    
         
             
              t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
         
     | 
| 
       46 
47 
     | 
    
         
             
            end
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
       48 
49 
     | 
    
         
             
            desc 'Default: run specs and cucumber features'
         
     | 
| 
       49 
     | 
    
         
            -
            task :default => [: 
     | 
| 
      
 50 
     | 
    
         
            +
            task :default => [:all]
         
     | 
| 
       50 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
            desc 'Test the plugin under all supported Rails versions.'
         
     | 
| 
      
 53 
     | 
    
         
            +
            task :all => ["appraisal:cleanup", "appraisal:install"] do |t|
         
     | 
| 
      
 54 
     | 
    
         
            +
              exec('rake appraisal spec cucumber')
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -82,8 +82,8 @@ module Shoulda # :nodoc: 
     | 
|
| 
       82 
82 
     | 
    
         
             
                      else
         
     | 
| 
       83 
83 
     | 
    
         
             
                        @failure_message =
         
     | 
| 
       84 
84 
     | 
    
         
             
                          "Expected action to assign a kind of #{@expected_class} " <<
         
     | 
| 
       85 
     | 
    
         
            -
                          "for #{@variable}, but got #{ 
     | 
| 
       86 
     | 
    
         
            -
                          "(#{ 
     | 
| 
      
 85 
     | 
    
         
            +
                          "for #{@variable}, but got #{assigned_value.inspect} " <<
         
     | 
| 
      
 86 
     | 
    
         
            +
                          "(#{assigned_value.class.name})"
         
     | 
| 
       87 
87 
     | 
    
         
             
                        false
         
     | 
| 
       88 
88 
     | 
    
         
             
                      end
         
     | 
| 
       89 
89 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -57,12 +57,12 @@ module Shoulda # :nodoc: 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                    def string_value_matches?
         
     | 
| 
       59 
59 
     | 
    
         
             
                      return true unless String === @value
         
     | 
| 
       60 
     | 
    
         
            -
                      flash.values.any? {|value| value == @value }
         
     | 
| 
      
 60 
     | 
    
         
            +
                      flash.to_hash.values.any? {|value| value == @value }
         
     | 
| 
       61 
61 
     | 
    
         
             
                    end
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
63 
     | 
    
         
             
                    def regexp_value_matches?
         
     | 
| 
       64 
64 
     | 
    
         
             
                      return true unless Regexp === @value
         
     | 
| 
       65 
     | 
    
         
            -
                      flash.values.any? {|value| value =~ @value }
         
     | 
| 
      
 65 
     | 
    
         
            +
                      flash.to_hash.values.any? {|value| value =~ @value }
         
     | 
| 
       66 
66 
     | 
    
         
             
                    end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
                    def flash
         
     | 
| 
         @@ -8,45 +8,103 @@ module Shoulda # :nodoc: 
     | 
|
| 
       8 
8 
     | 
    
         
             
                  #   it { should have_sent_email.from('do-not-reply@example.com') }
         
     | 
| 
       9 
9 
     | 
    
         
             
                  #   it { should have_sent_email.with_body(/is spam\./) }
         
     | 
| 
       10 
10 
     | 
    
         
             
                  #   it { should have_sent_email.to('myself@me.com') }
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #   it { should have_sent_email.with_part('text/html', /HTML spam/) }
         
     | 
| 
       11 
12 
     | 
    
         
             
                  #   it { should have_sent_email.with_subject(/spam/).
         
     | 
| 
       12 
13 
     | 
    
         
             
                  #                               from('do-not-reply@example.com').
         
     | 
| 
       13 
14 
     | 
    
         
             
                  #                               with_body(/spam/).
         
     | 
| 
       14 
15 
     | 
    
         
             
                  #                               to('myself@me.com') }
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # Use values of instance variables
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #   it {should have_sent_email.to {@user.email} }
         
     | 
| 
       15 
19 
     | 
    
         
             
                  def have_sent_email
         
     | 
| 
       16 
     | 
    
         
            -
                    HaveSentEmailMatcher.new
         
     | 
| 
      
 20 
     | 
    
         
            +
                    HaveSentEmailMatcher.new(self)
         
     | 
| 
       17 
21 
     | 
    
         
             
                  end
         
     | 
| 
       18 
22 
     | 
    
         | 
| 
       19 
23 
     | 
    
         
             
                  class HaveSentEmailMatcher # :nodoc:
         
     | 
| 
       20 
24 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                    def initialize
         
     | 
| 
      
 25 
     | 
    
         
            +
                    def initialize(context)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      @context = context
         
     | 
| 
       22 
27 
     | 
    
         
             
                    end
         
     | 
| 
       23 
28 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                    def  
     | 
| 
      
 29 
     | 
    
         
            +
                    def in_context(context)
         
     | 
| 
      
 30 
     | 
    
         
            +
                      @context = context
         
     | 
| 
      
 31 
     | 
    
         
            +
                      self
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    def with_subject(email_subject = nil, &block)
         
     | 
| 
       25 
35 
     | 
    
         
             
                      @email_subject = email_subject
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @email_subject_block = block
         
     | 
| 
       26 
37 
     | 
    
         
             
                      self
         
     | 
| 
       27 
38 
     | 
    
         
             
                    end
         
     | 
| 
       28 
39 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                    def from(sender)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    def from(sender = nil, &block)
         
     | 
| 
       30 
41 
     | 
    
         
             
                      @sender = sender
         
     | 
| 
      
 42 
     | 
    
         
            +
                      @sender_block = block
         
     | 
| 
       31 
43 
     | 
    
         
             
                      self
         
     | 
| 
       32 
44 
     | 
    
         
             
                    end
         
     | 
| 
       33 
45 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                    def with_body(body)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    def with_body(body = nil, &block)
         
     | 
| 
       35 
47 
     | 
    
         
             
                      @body = body
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @body_block = block
         
     | 
| 
      
 49 
     | 
    
         
            +
                      self
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    def with_part(content_type, body = nil, &block)
         
     | 
| 
      
 53 
     | 
    
         
            +
                      @parts ||= []
         
     | 
| 
      
 54 
     | 
    
         
            +
                      @parts << [/#{Regexp.escape(content_type)}/, body, content_type]
         
     | 
| 
      
 55 
     | 
    
         
            +
                      @parts_blocks ||= []
         
     | 
| 
      
 56 
     | 
    
         
            +
                      @parts_blocks << block
         
     | 
| 
       36 
57 
     | 
    
         
             
                      self
         
     | 
| 
       37 
58 
     | 
    
         
             
                    end
         
     | 
| 
       38 
59 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                    def to(recipient)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    def to(recipient = nil, &block)
         
     | 
| 
       40 
61 
     | 
    
         
             
                      @recipient = recipient
         
     | 
| 
      
 62 
     | 
    
         
            +
                      @recipient_block = block
         
     | 
| 
      
 63 
     | 
    
         
            +
                      self
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    def cc(recipient = nil, &block)
         
     | 
| 
      
 67 
     | 
    
         
            +
                      @cc = recipient
         
     | 
| 
      
 68 
     | 
    
         
            +
                      @cc_block = block
         
     | 
| 
      
 69 
     | 
    
         
            +
                      self
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                    def with_cc(recipients = nil, &block)
         
     | 
| 
      
 73 
     | 
    
         
            +
                      @cc_recipients = recipients
         
     | 
| 
      
 74 
     | 
    
         
            +
                      @cc_recipients_block = block
         
     | 
| 
      
 75 
     | 
    
         
            +
                      self
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    def bcc(recipient = nil, &block)
         
     | 
| 
      
 79 
     | 
    
         
            +
                      @bcc = recipient
         
     | 
| 
      
 80 
     | 
    
         
            +
                      @bcc_block = block
         
     | 
| 
      
 81 
     | 
    
         
            +
                      self
         
     | 
| 
      
 82 
     | 
    
         
            +
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    def with_bcc(recipients = nil, &block)
         
     | 
| 
      
 85 
     | 
    
         
            +
                      @bcc_recipients = recipients
         
     | 
| 
      
 86 
     | 
    
         
            +
                      @bcc_recipients_block = block
         
     | 
| 
      
 87 
     | 
    
         
            +
                      self
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    def multipart(flag = true)
         
     | 
| 
      
 91 
     | 
    
         
            +
                      @multipart = !!flag
         
     | 
| 
       41 
92 
     | 
    
         
             
                      self
         
     | 
| 
       42 
93 
     | 
    
         
             
                    end
         
     | 
| 
       43 
94 
     | 
    
         | 
| 
       44 
95 
     | 
    
         
             
                    def matches?(subject)
         
     | 
| 
      
 96 
     | 
    
         
            +
                      normalize_blocks
         
     | 
| 
       45 
97 
     | 
    
         
             
                      ::ActionMailer::Base.deliveries.each do |mail|
         
     | 
| 
       46 
98 
     | 
    
         
             
                        @subject_failed = !regexp_or_string_match(mail.subject, @email_subject) if @email_subject
         
     | 
| 
       47 
     | 
    
         
            -
                        @ 
     | 
| 
      
 99 
     | 
    
         
            +
                        @parts_failed = !parts_match(mail, @parts) if @parts
         
     | 
| 
      
 100 
     | 
    
         
            +
                        @body_failed = !body_match(mail, @body) if @body
         
     | 
| 
       48 
101 
     | 
    
         
             
                        @sender_failed = !regexp_or_string_match_in_array(mail.from, @sender) if @sender
         
     | 
| 
       49 
102 
     | 
    
         
             
                        @recipient_failed = !regexp_or_string_match_in_array(mail.to, @recipient) if @recipient
         
     | 
| 
      
 103 
     | 
    
         
            +
                        @cc_failed = !regexp_or_string_match_in_array(mail.cc, @cc) if @cc
         
     | 
| 
      
 104 
     | 
    
         
            +
                        @cc_recipients_failed = !match_array_in_array(mail.cc, @cc_recipients) if @cc_recipients
         
     | 
| 
      
 105 
     | 
    
         
            +
                        @bcc_failed = !regexp_or_string_match_in_array(mail.bcc, @bcc) if @bcc
         
     | 
| 
      
 106 
     | 
    
         
            +
                        @bcc_recipients_failed = !match_array_in_array(mail.bcc, @bcc_recipients) if @bcc_recipients
         
     | 
| 
      
 107 
     | 
    
         
            +
                        @multipart_failed = (mail.multipart? != @multipart) if defined?(@multipart)
         
     | 
| 
       50 
108 
     | 
    
         
             
                        return true unless anything_failed?
         
     | 
| 
       51 
109 
     | 
    
         
             
                      end
         
     | 
| 
       52 
110 
     | 
    
         | 
| 
         @@ -65,8 +123,15 @@ module Shoulda # :nodoc: 
     | 
|
| 
       65 
123 
     | 
    
         
             
                      description  = "send an email"
         
     | 
| 
       66 
124 
     | 
    
         
             
                      description << " with a subject of #{@email_subject.inspect}" if @email_subject
         
     | 
| 
       67 
125 
     | 
    
         
             
                      description << " containing #{@body.inspect}" if @body
         
     | 
| 
      
 126 
     | 
    
         
            +
                      @parts.each do |_, body, content_type|
         
     | 
| 
      
 127 
     | 
    
         
            +
                        description << " having a #{content_type} part containing #{body.inspect}"
         
     | 
| 
      
 128 
     | 
    
         
            +
                      end if @parts
         
     | 
| 
       68 
129 
     | 
    
         
             
                      description << " from #{@sender.inspect}" if @sender
         
     | 
| 
       69 
130 
     | 
    
         
             
                      description << " to #{@recipient.inspect}" if @recipient
         
     | 
| 
      
 131 
     | 
    
         
            +
                      description << " cc #{@cc.inspect}" if @cc
         
     | 
| 
      
 132 
     | 
    
         
            +
                      description << " with cc #{@cc_recipients.inspect}" if @cc_recipients
         
     | 
| 
      
 133 
     | 
    
         
            +
                      description << " bcc #{@bcc.inspect}" if @bcc
         
     | 
| 
      
 134 
     | 
    
         
            +
                      description << " with bcc #{@bcc_recipients.inspect}" if @bcc_recipients
         
     | 
| 
       70 
135 
     | 
    
         
             
                      description
         
     | 
| 
       71 
136 
     | 
    
         
             
                    end
         
     | 
| 
       72 
137 
     | 
    
         | 
| 
         @@ -76,8 +141,16 @@ module Shoulda # :nodoc: 
     | 
|
| 
       76 
141 
     | 
    
         
             
                      expectation = "sent email"
         
     | 
| 
       77 
142 
     | 
    
         
             
                      expectation << " with subject #{@email_subject.inspect}" if @subject_failed
         
     | 
| 
       78 
143 
     | 
    
         
             
                      expectation << " with body #{@body.inspect}" if @body_failed
         
     | 
| 
      
 144 
     | 
    
         
            +
                      @parts.each do |_, body, content_type|
         
     | 
| 
      
 145 
     | 
    
         
            +
                        expectation << " with a #{content_type} part containing #{body}"
         
     | 
| 
      
 146 
     | 
    
         
            +
                      end if @parts && @parts_failed
         
     | 
| 
       79 
147 
     | 
    
         
             
                      expectation << " from #{@sender.inspect}" if @sender_failed
         
     | 
| 
       80 
148 
     | 
    
         
             
                      expectation << " to #{@recipient.inspect}" if @recipient_failed
         
     | 
| 
      
 149 
     | 
    
         
            +
                      expectation << " cc #{@cc.inspect}" if @cc_failed
         
     | 
| 
      
 150 
     | 
    
         
            +
                      expectation << " with cc #{@cc_recipients.inspect}" if @cc_recipients_failed
         
     | 
| 
      
 151 
     | 
    
         
            +
                      expectation << " bcc #{@bcc.inspect}" if @bcc_failed
         
     | 
| 
      
 152 
     | 
    
         
            +
                      expectation << " with bcc #{@bcc_recipients.inspect}" if @bcc_recipients_failed
         
     | 
| 
      
 153 
     | 
    
         
            +
                      expectation << " #{'not ' if !@multipart}being multipart" if @multipart_failed
         
     | 
| 
       81 
154 
     | 
    
         
             
                      expectation << "\nDeliveries:\n#{inspect_deliveries}"
         
     | 
| 
       82 
155 
     | 
    
         
             
                    end
         
     | 
| 
       83 
156 
     | 
    
         | 
| 
         @@ -88,7 +161,26 @@ module Shoulda # :nodoc: 
     | 
|
| 
       88 
161 
     | 
    
         
             
                    end
         
     | 
| 
       89 
162 
     | 
    
         | 
| 
       90 
163 
     | 
    
         
             
                    def anything_failed?
         
     | 
| 
       91 
     | 
    
         
            -
                      @subject_failed || @body_failed || @sender_failed || @recipient_failed
         
     | 
| 
      
 164 
     | 
    
         
            +
                      @subject_failed || @body_failed || @sender_failed || @recipient_failed ||
         
     | 
| 
      
 165 
     | 
    
         
            +
                        @cc_failed || @cc_recipients_failed || @bcc_failed || @bcc_recipients_failed ||
         
     | 
| 
      
 166 
     | 
    
         
            +
                        @parts_failed || @multipart_failed
         
     | 
| 
      
 167 
     | 
    
         
            +
                    end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                    def normalize_blocks
         
     | 
| 
      
 170 
     | 
    
         
            +
                      @email_subject = @context.instance_eval(&@email_subject_block) if @email_subject_block
         
     | 
| 
      
 171 
     | 
    
         
            +
                      @sender = @context.instance_eval(&@sender_block) if @sender_block
         
     | 
| 
      
 172 
     | 
    
         
            +
                      @body = @context.instance_eval(&@body_block) if @body_block
         
     | 
| 
      
 173 
     | 
    
         
            +
                      @recipient = @context.instance_eval(&@recipient_block) if @recipient_block
         
     | 
| 
      
 174 
     | 
    
         
            +
                      @cc = @context.instance_eval(&@cc_block) if @cc_block
         
     | 
| 
      
 175 
     | 
    
         
            +
                      @cc_recipients = @context.instance_eval(&@cc_recipients_block) if @cc_recipients_block
         
     | 
| 
      
 176 
     | 
    
         
            +
                      @bcc = @context.instance_eval(&@bcc_block) if @bcc_block
         
     | 
| 
      
 177 
     | 
    
         
            +
                      @bcc_recipients = @context.instance_eval(&@bcc_recipients_block) if @bcc_recipients_block
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                      if @parts
         
     | 
| 
      
 180 
     | 
    
         
            +
                        @parts.each_with_index do |part, i|
         
     | 
| 
      
 181 
     | 
    
         
            +
                          part[1] = @context.instance_eval(&@parts_blocks[i]) if @parts_blocks[i]
         
     | 
| 
      
 182 
     | 
    
         
            +
                        end
         
     | 
| 
      
 183 
     | 
    
         
            +
                      end
         
     | 
| 
       92 
184 
     | 
    
         
             
                    end
         
     | 
| 
       93 
185 
     | 
    
         | 
| 
       94 
186 
     | 
    
         
             
                    def regexp_or_string_match(a_string, a_regexp_or_string)
         
     | 
| 
         @@ -108,8 +200,42 @@ module Shoulda # :nodoc: 
     | 
|
| 
       108 
200 
     | 
    
         
             
                        an_array.include?(a_regexp_or_string)
         
     | 
| 
       109 
201 
     | 
    
         
             
                      end
         
     | 
| 
       110 
202 
     | 
    
         
             
                    end
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
                    def match_array_in_array(target_array, match_array)
         
     | 
| 
      
 205 
     | 
    
         
            +
                      target_array.sort!
         
     | 
| 
      
 206 
     | 
    
         
            +
                      match_array.sort!
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                      target_array.each_cons(match_array.size).include? match_array
         
     | 
| 
      
 209 
     | 
    
         
            +
                    end
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
                    def body_match(mail, a_regexp_or_string)
         
     | 
| 
      
 212 
     | 
    
         
            +
                      # Mail objects instantiated by ActionMailer3 return a blank
         
     | 
| 
      
 213 
     | 
    
         
            +
                      # body if the e-mail is multipart. TMail concatenates the
         
     | 
| 
      
 214 
     | 
    
         
            +
                      # String representation of each part instead.
         
     | 
| 
      
 215 
     | 
    
         
            +
                      if mail.body.blank? && mail.multipart?
         
     | 
| 
      
 216 
     | 
    
         
            +
                        part_match(mail, /^text\//, a_regexp_or_string)
         
     | 
| 
      
 217 
     | 
    
         
            +
                      else
         
     | 
| 
      
 218 
     | 
    
         
            +
                        regexp_or_string_match(mail.body, a_regexp_or_string)
         
     | 
| 
      
 219 
     | 
    
         
            +
                      end
         
     | 
| 
      
 220 
     | 
    
         
            +
                    end
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
                    def parts_match(mail, parts)
         
     | 
| 
      
 223 
     | 
    
         
            +
                      return false if mail.parts.empty?
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                      parts.all? do |content_type, match, _|
         
     | 
| 
      
 226 
     | 
    
         
            +
                        part_match(mail, content_type, match)
         
     | 
| 
      
 227 
     | 
    
         
            +
                      end
         
     | 
| 
      
 228 
     | 
    
         
            +
                    end
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                    def part_match(mail, content_type, a_regexp_or_string)
         
     | 
| 
      
 231 
     | 
    
         
            +
                      matching = mail.parts.select {|p| p.content_type =~ content_type}
         
     | 
| 
      
 232 
     | 
    
         
            +
                      return false if matching.empty?
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
                      matching.all? do |part|
         
     | 
| 
      
 235 
     | 
    
         
            +
                        regexp_or_string_match(part.body, a_regexp_or_string)
         
     | 
| 
      
 236 
     | 
    
         
            +
                      end
         
     | 
| 
      
 237 
     | 
    
         
            +
                    end
         
     | 
| 
       111 
238 
     | 
    
         
             
                  end
         
     | 
| 
       112 
239 
     | 
    
         
             
                end
         
     | 
| 
       113 
240 
     | 
    
         
             
              end
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
241 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/helpers'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validation_matcher'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/allow_value_matcher'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/ensure_length_of_matcher'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/ensure_inclusion_of_matcher'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validate_presence_of_matcher'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validate_format_of_matcher'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validate_uniqueness_of_matcher'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validate_acceptance_of_matcher'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/validate_numericality_of_matcher'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'shoulda/matchers/active_model/allow_mass_assignment_of_matcher'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            module Shoulda
         
     | 
| 
      
 15 
     | 
    
         
            +
              module Matchers
         
     | 
| 
      
 16 
     | 
    
         
            +
                # = Matchers for your active record models
         
     | 
| 
      
 17 
     | 
    
         
            +
                #
         
     | 
| 
      
 18 
     | 
    
         
            +
                # These matchers will test most of the validations of ActiveModel::Validations.
         
     | 
| 
      
 19 
     | 
    
         
            +
                #
         
     | 
| 
      
 20 
     | 
    
         
            +
                #   describe User do
         
     | 
| 
      
 21 
     | 
    
         
            +
                #     it { should validate_presence_of(:name) }
         
     | 
| 
      
 22 
     | 
    
         
            +
                #     it { should validate_presence_of(:phone_number) }
         
     | 
| 
      
 23 
     | 
    
         
            +
                #     %w(abcd 1234).each do |value|
         
     | 
| 
      
 24 
     | 
    
         
            +
                #       it { should_not allow_value(value).for(:phone_number) }
         
     | 
| 
      
 25 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 26 
     | 
    
         
            +
                #     it { should allow_value("(123) 456-7890").for(:phone_number) }
         
     | 
| 
      
 27 
     | 
    
         
            +
                #     it { should_not allow_mass_assignment_of(:password) }
         
     | 
| 
      
 28 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 29 
     | 
    
         
            +
                #
         
     | 
| 
      
 30 
     | 
    
         
            +
                module ActiveModel
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/shoulda/matchers/{active_record → active_model}/allow_mass_assignment_of_matcher.rb
    RENAMED
    
    | 
         @@ -1,12 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Shoulda # :nodoc:
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Matchers
         
     | 
| 
       3 
     | 
    
         
            -
                module  
     | 
| 
      
 3 
     | 
    
         
            +
                module ActiveModel # :nodoc:
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                  # Ensures that the attribute can be set on mass update.
         
     | 
| 
       6 
6 
     | 
    
         
             
                  #
         
     | 
| 
       7 
7 
     | 
    
         
             
                  #   it { should_not allow_mass_assignment_of(:password) }
         
     | 
| 
       8 
8 
     | 
    
         
             
                  #   it { should allow_mass_assignment_of(:first_name) }
         
     | 
| 
       9 
9 
     | 
    
         
             
                  #
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # In Rails 3.1 you can check role as well:
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #   it { should allow_mass_assigment_of(:first_name).as(:admin) }
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #
         
     | 
| 
       10 
14 
     | 
    
         
             
                  def allow_mass_assignment_of(value)
         
     | 
| 
       11 
15 
     | 
    
         
             
                    AllowMassAssignmentOfMatcher.new(value)
         
     | 
| 
       12 
16 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -17,8 +21,15 @@ module Shoulda # :nodoc: 
     | 
|
| 
       17 
21 
     | 
    
         
             
                      @attribute = attribute.to_s
         
     | 
| 
       18 
22 
     | 
    
         
             
                    end
         
     | 
| 
       19 
23 
     | 
    
         | 
| 
      
 24 
     | 
    
         
            +
                    def as(role)
         
     | 
| 
      
 25 
     | 
    
         
            +
                      raise "You can specify role only in Rails 3.1 or greater" unless rails_3_1?
         
     | 
| 
      
 26 
     | 
    
         
            +
                      @role = role
         
     | 
| 
      
 27 
     | 
    
         
            +
                      self
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
       20 
30 
     | 
    
         
             
                    def matches?(subject)
         
     | 
| 
       21 
31 
     | 
    
         
             
                      @subject = subject
         
     | 
| 
      
 32 
     | 
    
         
            +
                      @role ||= :default
         
     | 
| 
       22 
33 
     | 
    
         
             
                      if attr_mass_assignable?
         
     | 
| 
       23 
34 
     | 
    
         
             
                        if whitelisting?
         
     | 
| 
       24 
35 
     | 
    
         
             
                          @negative_failure_message = "#{@attribute} was made accessible"
         
     | 
| 
         @@ -61,14 +72,18 @@ module Shoulda # :nodoc: 
     | 
|
| 
       61 
72 
     | 
    
         
             
                    end
         
     | 
| 
       62 
73 
     | 
    
         | 
| 
       63 
74 
     | 
    
         
             
                    def whitelisting?
         
     | 
| 
       64 
     | 
    
         
            -
                       
     | 
| 
      
 75 
     | 
    
         
            +
                      authorizer.kind_of?(::ActiveModel::MassAssignmentSecurity::WhiteList)
         
     | 
| 
       65 
76 
     | 
    
         
             
                    end
         
     | 
| 
       66 
77 
     | 
    
         | 
| 
       67 
78 
     | 
    
         
             
                    def attr_mass_assignable?
         
     | 
| 
       68 
     | 
    
         
            -
                       
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
      
 79 
     | 
    
         
            +
                      !authorizer.deny?(@attribute)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                    def authorizer
         
     | 
| 
      
 83 
     | 
    
         
            +
                      if rails_3_1?
         
     | 
| 
      
 84 
     | 
    
         
            +
                        @subject.class.active_authorizer[@role]
         
     | 
| 
       70 
85 
     | 
    
         
             
                      else
         
     | 
| 
       71 
     | 
    
         
            -
                         
     | 
| 
      
 86 
     | 
    
         
            +
                        @subject.class.active_authorizer
         
     | 
| 
       72 
87 
     | 
    
         
             
                      end
         
     | 
| 
       73 
88 
     | 
    
         
             
                    end
         
     | 
| 
       74 
89 
     | 
    
         | 
| 
         @@ -76,8 +91,10 @@ module Shoulda # :nodoc: 
     | 
|
| 
       76 
91 
     | 
    
         
             
                      @subject.class.name
         
     | 
| 
       77 
92 
     | 
    
         
             
                    end
         
     | 
| 
       78 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                    def rails_3_1?
         
     | 
| 
      
 95 
     | 
    
         
            +
                      ::ActiveModel::VERSION::MAJOR == 3 && ::ActiveModel::VERSION::MINOR >= 1
         
     | 
| 
      
 96 
     | 
    
         
            +
                    end
         
     | 
| 
       79 
97 
     | 
    
         
             
                  end
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
98 
     | 
    
         
             
                end
         
     | 
| 
       82 
99 
     | 
    
         
             
              end
         
     | 
| 
       83 
100 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,35 +1,17 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/helpers'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validation_matcher'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/allow_value_matcher'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/ensure_length_of_matcher'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/ensure_inclusion_of_matcher'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validate_presence_of_matcher'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validate_format_of_matcher'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validate_uniqueness_of_matcher'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validate_acceptance_of_matcher'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/validate_numericality_of_matcher'
         
     | 
| 
       11 
1 
     | 
    
         
             
            require 'shoulda/matchers/active_record/association_matcher'
         
     | 
| 
       12 
2 
     | 
    
         
             
            require 'shoulda/matchers/active_record/have_db_column_matcher'
         
     | 
| 
       13 
3 
     | 
    
         
             
            require 'shoulda/matchers/active_record/have_db_index_matcher'
         
     | 
| 
       14 
4 
     | 
    
         
             
            require 'shoulda/matchers/active_record/have_readonly_attribute_matcher'
         
     | 
| 
       15 
     | 
    
         
            -
            require 'shoulda/matchers/active_record/allow_mass_assignment_of_matcher'
         
     | 
| 
       16 
5 
     | 
    
         | 
| 
       17 
6 
     | 
    
         | 
| 
       18 
7 
     | 
    
         
             
            module Shoulda
         
     | 
| 
       19 
8 
     | 
    
         
             
              module Matchers
         
     | 
| 
       20 
9 
     | 
    
         
             
                # = Matchers for your active record models
         
     | 
| 
       21 
10 
     | 
    
         
             
                #
         
     | 
| 
       22 
     | 
    
         
            -
                # These matchers will test  
     | 
| 
      
 11 
     | 
    
         
            +
                # These matchers will test the associations for your
         
     | 
| 
       23 
12 
     | 
    
         
             
                # ActiveRecord models.
         
     | 
| 
       24 
13 
     | 
    
         
             
                #
         
     | 
| 
       25 
14 
     | 
    
         
             
                #   describe User do
         
     | 
| 
       26 
     | 
    
         
            -
                #     it { should validate_presence_of(:name) }
         
     | 
| 
       27 
     | 
    
         
            -
                #     it { should validate_presence_of(:phone_number) }
         
     | 
| 
       28 
     | 
    
         
            -
                #     %w(abcd 1234).each do |value|
         
     | 
| 
       29 
     | 
    
         
            -
                #       it { should_not allow_value(value).for(:phone_number) }
         
     | 
| 
       30 
     | 
    
         
            -
                #     end
         
     | 
| 
       31 
     | 
    
         
            -
                #     it { should allow_value("(123) 456-7890").for(:phone_number) }
         
     | 
| 
       32 
     | 
    
         
            -
                #     it { should_not allow_mass_assignment_of(:password) }
         
     | 
| 
       33 
15 
     | 
    
         
             
                #     it { should have_one(:profile) }
         
     | 
| 
       34 
16 
     | 
    
         
             
                #     it { should have_many(:dogs) }
         
     | 
| 
       35 
17 
     | 
    
         
             
                #     it { should have_many(:messes).through(:dogs) }
         
     | 
| 
         @@ -68,6 +68,11 @@ module Shoulda # :nodoc: 
     | 
|
| 
       68 
68 
     | 
    
         
             
                      self
         
     | 
| 
       69 
69 
     | 
    
         
             
                    end
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                    def order(order)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      @order = order
         
     | 
| 
      
 73 
     | 
    
         
            +
                      self
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end        
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
       71 
76 
     | 
    
         
             
                    def matches?(subject)
         
     | 
| 
       72 
77 
     | 
    
         
             
                      @subject = subject
         
     | 
| 
       73 
78 
     | 
    
         
             
                      association_exists? &&
         
     | 
| 
         @@ -75,6 +80,7 @@ module Shoulda # :nodoc: 
     | 
|
| 
       75 
80 
     | 
    
         
             
                        foreign_key_exists? &&
         
     | 
| 
       76 
81 
     | 
    
         
             
                        through_association_valid? &&
         
     | 
| 
       77 
82 
     | 
    
         
             
                        dependent_correct? &&
         
     | 
| 
      
 83 
     | 
    
         
            +
                        order_correct? &&
         
     | 
| 
       78 
84 
     | 
    
         
             
                        join_table_exists?
         
     | 
| 
       79 
85 
     | 
    
         
             
                    end
         
     | 
| 
       80 
86 
     | 
    
         | 
| 
         @@ -90,6 +96,7 @@ module Shoulda # :nodoc: 
     | 
|
| 
       90 
96 
     | 
    
         
             
                      description = "#{macro_description} #{@name}"
         
     | 
| 
       91 
97 
     | 
    
         
             
                      description += " through #{@through}" if @through
         
     | 
| 
       92 
98 
     | 
    
         
             
                      description += " dependent => #{@dependent}" if @dependent
         
     | 
| 
      
 99 
     | 
    
         
            +
                      description += " order => #{@order}" if @order
         
     | 
| 
       93 
100 
     | 
    
         
             
                      description
         
     | 
| 
       94 
101 
     | 
    
         
             
                    end
         
     | 
| 
       95 
102 
     | 
    
         | 
| 
         @@ -159,6 +166,15 @@ module Shoulda # :nodoc: 
     | 
|
| 
       159 
166 
     | 
    
         
             
                      end
         
     | 
| 
       160 
167 
     | 
    
         
             
                    end
         
     | 
| 
       161 
168 
     | 
    
         | 
| 
      
 169 
     | 
    
         
            +
                    def order_correct?
         
     | 
| 
      
 170 
     | 
    
         
            +
                      if @order.nil? || @order.to_s == reflection.options[:order].to_s
         
     | 
| 
      
 171 
     | 
    
         
            +
                        true
         
     | 
| 
      
 172 
     | 
    
         
            +
                      else
         
     | 
| 
      
 173 
     | 
    
         
            +
                        @missing = "#{@name} should be ordered by #{@order}"
         
     | 
| 
      
 174 
     | 
    
         
            +
                        false
         
     | 
| 
      
 175 
     | 
    
         
            +
                      end
         
     | 
| 
      
 176 
     | 
    
         
            +
                    end        
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
       162 
178 
     | 
    
         
             
                    def join_table_exists?
         
     | 
| 
       163 
179 
     | 
    
         
             
                      if @macro != :has_and_belongs_to_many ||
         
     | 
| 
       164 
180 
     | 
    
         
             
                          ::ActiveRecord::Base.connection.tables.include?(join_table.to_s)
         
     | 
| 
         @@ -191,7 +207,7 @@ module Shoulda # :nodoc: 
     | 
|
| 
       191 
207 
     | 
    
         
             
                    end
         
     | 
| 
       192 
208 
     | 
    
         | 
| 
       193 
209 
     | 
    
         
             
                    def foreign_key
         
     | 
| 
       194 
     | 
    
         
            -
                      reflection.primary_key_name
         
     | 
| 
      
 210 
     | 
    
         
            +
                      reflection.respond_to?(:foreign_key) ? reflection.foreign_key : reflection.primary_key_name
         
     | 
| 
       195 
211 
     | 
    
         
             
                    end
         
     | 
| 
       196 
212 
     | 
    
         | 
| 
       197 
213 
     | 
    
         
             
                    def through?
         
     | 
| 
         @@ -2,8 +2,15 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            if defined?(::ActiveRecord)
         
     | 
| 
       4 
4 
     | 
    
         
             
              require 'shoulda/matchers/active_record'
         
     | 
| 
      
 5 
     | 
    
         
            +
              require 'shoulda/matchers/active_model'
         
     | 
| 
       5 
6 
     | 
    
         
             
              module RSpec::Matchers
         
     | 
| 
       6 
7 
     | 
    
         
             
                include Shoulda::Matchers::ActiveRecord
         
     | 
| 
      
 8 
     | 
    
         
            +
                include Shoulda::Matchers::ActiveModel
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
            elsif defined?(::ActiveModel)
         
     | 
| 
      
 11 
     | 
    
         
            +
              require 'shoulda/matchers/active_model'
         
     | 
| 
      
 12 
     | 
    
         
            +
              module RSpec::Matchers
         
     | 
| 
      
 13 
     | 
    
         
            +
                include Shoulda::Matchers::ActiveModel
         
     | 
| 
       7 
14 
     | 
    
         
             
              end
         
     | 
| 
       8 
15 
     | 
    
         
             
            end
         
     | 
| 
       9 
16 
     | 
    
         | 
| 
         @@ -28,14 +28,27 @@ end 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            if defined?(ActiveRecord)
         
     | 
| 
       30 
30 
     | 
    
         
             
              require 'shoulda/matchers/active_record'
         
     | 
| 
      
 31 
     | 
    
         
            +
              require 'shoulda/matchers/active_model'
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
              module Test
         
     | 
| 
       33 
34 
     | 
    
         
             
                module Unit
         
     | 
| 
       34 
35 
     | 
    
         
             
                  class TestCase
         
     | 
| 
       35 
36 
     | 
    
         
             
                    include Shoulda::Matchers::ActiveRecord
         
     | 
| 
       36 
37 
     | 
    
         
             
                    extend Shoulda::Matchers::ActiveRecord
         
     | 
| 
      
 38 
     | 
    
         
            +
                    include Shoulda::Matchers::ActiveModel
         
     | 
| 
      
 39 
     | 
    
         
            +
                    extend Shoulda::Matchers::ActiveModel
         
     | 
| 
       37 
40 
     | 
    
         
             
                  end
         
     | 
| 
       38 
41 
     | 
    
         
             
                end
         
     | 
| 
       39 
42 
     | 
    
         
             
              end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
            elsif defined?(ActiveModel)
         
     | 
| 
      
 44 
     | 
    
         
            +
              require 'shoulda/matchers/active_model'
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
      
 46 
     | 
    
         
            +
              module Test
         
     | 
| 
      
 47 
     | 
    
         
            +
                module Unit
         
     | 
| 
      
 48 
     | 
    
         
            +
                  class TestCase
         
     | 
| 
      
 49 
     | 
    
         
            +
                    include Shoulda::Matchers::ActiveModel
         
     | 
| 
      
 50 
     | 
    
         
            +
                    extend Shoulda::Matchers::ActiveModel
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            name: shoulda-matchers
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
4 
     | 
    
         
             
              prerelease: 6
         
     | 
| 
       5 
     | 
    
         
            -
              version: 1.0.0. 
     | 
| 
      
 5 
     | 
    
         
            +
              version: 1.0.0.beta3
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Tammer Saleh
         
     | 
| 
         @@ -10,90 +10,80 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            - Ryan McGeary
         
     | 
| 
       11 
11 
     | 
    
         
             
            - Dan Croak
         
     | 
| 
       12 
12 
     | 
    
         
             
            - Matt Jankowski
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Stafford Brunk
         
     | 
| 
       13 
14 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       14 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       15 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            date: 2011- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-07-18 00:00:00 -04:00
         
     | 
| 
       18 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       19 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
     | 
    
         
            -
              name:  
     | 
| 
      
 22 
     | 
    
         
            +
              name: sqlite3-ruby
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       22 
24 
     | 
    
         
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
       23 
25 
     | 
    
         
             
                none: false
         
     | 
| 
       24 
26 
     | 
    
         
             
                requirements: 
         
     | 
| 
       25 
     | 
    
         
            -
                - -  
     | 
| 
      
 27 
     | 
    
         
            +
                - - ~>
         
     | 
| 
       26 
28 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       27 
     | 
    
         
            -
                    version: 3. 
     | 
| 
      
 29 
     | 
    
         
            +
                    version: 1.3.2
         
     | 
| 
       28 
30 
     | 
    
         
             
              type: :development
         
     | 
| 
       29 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       30 
31 
     | 
    
         
             
              version_requirements: *id001
         
     | 
| 
       31 
32 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       32 
     | 
    
         
            -
              name:  
     | 
| 
      
 33 
     | 
    
         
            +
              name: mocha
         
     | 
| 
      
 34 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       33 
35 
     | 
    
         
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
       34 
36 
     | 
    
         
             
                none: false
         
     | 
| 
       35 
37 
     | 
    
         
             
                requirements: 
         
     | 
| 
       36 
38 
     | 
    
         
             
                - - ~>
         
     | 
| 
       37 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       38 
     | 
    
         
            -
                    version:  
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 0.9.10
         
     | 
| 
       39 
41 
     | 
    
         
             
              type: :development
         
     | 
| 
       40 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       41 
42 
     | 
    
         
             
              version_requirements: *id002
         
     | 
| 
       42 
43 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       43 
     | 
    
         
            -
              name:  
     | 
| 
      
 44 
     | 
    
         
            +
              name: rspec-rails
         
     | 
| 
      
 45 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       44 
46 
     | 
    
         
             
              requirement: &id003 !ruby/object:Gem::Requirement 
         
     | 
| 
       45 
47 
     | 
    
         
             
                none: false
         
     | 
| 
       46 
48 
     | 
    
         
             
                requirements: 
         
     | 
| 
       47 
49 
     | 
    
         
             
                - - ~>
         
     | 
| 
       48 
50 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       49 
     | 
    
         
            -
                    version:  
     | 
| 
      
 51 
     | 
    
         
            +
                    version: 2.6.1.beta1
         
     | 
| 
       50 
52 
     | 
    
         
             
              type: :development
         
     | 
| 
       51 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       52 
53 
     | 
    
         
             
              version_requirements: *id003
         
     | 
| 
       53 
54 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       54 
     | 
    
         
            -
              name:  
     | 
| 
      
 55 
     | 
    
         
            +
              name: cucumber
         
     | 
| 
      
 56 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       55 
57 
     | 
    
         
             
              requirement: &id004 !ruby/object:Gem::Requirement 
         
     | 
| 
       56 
58 
     | 
    
         
             
                none: false
         
     | 
| 
       57 
59 
     | 
    
         
             
                requirements: 
         
     | 
| 
       58 
60 
     | 
    
         
             
                - - ~>
         
     | 
| 
       59 
61 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       60 
     | 
    
         
            -
                    version:  
     | 
| 
      
 62 
     | 
    
         
            +
                    version: 0.10.0
         
     | 
| 
       61 
63 
     | 
    
         
             
              type: :development
         
     | 
| 
       62 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       63 
64 
     | 
    
         
             
              version_requirements: *id004
         
     | 
| 
       64 
65 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       65 
     | 
    
         
            -
              name:  
     | 
| 
      
 66 
     | 
    
         
            +
              name: appraisal
         
     | 
| 
      
 67 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       66 
68 
     | 
    
         
             
              requirement: &id005 !ruby/object:Gem::Requirement 
         
     | 
| 
       67 
69 
     | 
    
         
             
                none: false
         
     | 
| 
       68 
70 
     | 
    
         
             
                requirements: 
         
     | 
| 
       69 
71 
     | 
    
         
             
                - - ~>
         
     | 
| 
       70 
72 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       71 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 73 
     | 
    
         
            +
                    version: 0.3.4
         
     | 
| 
       72 
74 
     | 
    
         
             
              type: :development
         
     | 
| 
       73 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       74 
75 
     | 
    
         
             
              version_requirements: *id005
         
     | 
| 
       75 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       76 
     | 
    
         
            -
              name: aruba
         
     | 
| 
       77 
     | 
    
         
            -
              requirement: &id006 !ruby/object:Gem::Requirement 
         
     | 
| 
       78 
     | 
    
         
            -
                none: false
         
     | 
| 
       79 
     | 
    
         
            -
                requirements: 
         
     | 
| 
       80 
     | 
    
         
            -
                - - ~>
         
     | 
| 
       81 
     | 
    
         
            -
                  - !ruby/object:Gem::Version 
         
     | 
| 
       82 
     | 
    
         
            -
                    version: 0.2.7
         
     | 
| 
       83 
     | 
    
         
            -
              type: :development
         
     | 
| 
       84 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       85 
     | 
    
         
            -
              version_requirements: *id006
         
     | 
| 
       86 
76 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       87 
77 
     | 
    
         
             
              name: ruby-debug19
         
     | 
| 
       88 
     | 
    
         
            -
               
     | 
| 
      
 78 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 79 
     | 
    
         
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         
     | 
| 
       89 
80 
     | 
    
         
             
                none: false
         
     | 
| 
       90 
81 
     | 
    
         
             
                requirements: 
         
     | 
| 
       91 
82 
     | 
    
         
             
                - - ~>
         
     | 
| 
       92 
83 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       93 
84 
     | 
    
         
             
                    version: 0.11.6
         
     | 
| 
       94 
85 
     | 
    
         
             
              type: :development
         
     | 
| 
       95 
     | 
    
         
            -
               
     | 
| 
       96 
     | 
    
         
            -
              version_requirements: *id007
         
     | 
| 
      
 86 
     | 
    
         
            +
              version_requirements: *id006
         
     | 
| 
       97 
87 
     | 
    
         
             
            description: Making tests easy on the fingers and eyes
         
     | 
| 
       98 
88 
     | 
    
         
             
            email: support@thoughtbot.com
         
     | 
| 
       99 
89 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -104,9 +94,9 @@ extra_rdoc_files: 
     | 
|
| 
       104 
94 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       105 
95 
     | 
    
         
             
            - CONTRIBUTION_GUIDELINES.rdoc
         
     | 
| 
       106 
96 
     | 
    
         
             
            files: 
         
     | 
| 
      
 97 
     | 
    
         
            +
            - Appraisals
         
     | 
| 
       107 
98 
     | 
    
         
             
            - CONTRIBUTION_GUIDELINES.rdoc
         
     | 
| 
       108 
99 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       109 
     | 
    
         
            -
            - Gemfile.lock
         
     | 
| 
       110 
100 
     | 
    
         
             
            - MIT-LICENSE
         
     | 
| 
       111 
101 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       112 
102 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
         @@ -123,21 +113,22 @@ files: 
     | 
|
| 
       123 
113 
     | 
    
         
             
            - lib/shoulda/matchers/action_controller.rb
         
     | 
| 
       124 
114 
     | 
    
         
             
            - lib/shoulda/matchers/action_mailer/have_sent_email.rb
         
     | 
| 
       125 
115 
     | 
    
         
             
            - lib/shoulda/matchers/action_mailer.rb
         
     | 
| 
       126 
     | 
    
         
            -
            - lib/shoulda/matchers/ 
     | 
| 
       127 
     | 
    
         
            -
            - lib/shoulda/matchers/ 
     | 
| 
      
 116 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb
         
     | 
| 
      
 117 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/allow_value_matcher.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb
         
     | 
| 
      
 120 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/helpers.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validate_format_of_matcher.rb
         
     | 
| 
      
 123 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb
         
     | 
| 
      
 124 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb
         
     | 
| 
      
 125 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb
         
     | 
| 
      
 126 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model/validation_matcher.rb
         
     | 
| 
      
 127 
     | 
    
         
            +
            - lib/shoulda/matchers/active_model.rb
         
     | 
| 
       128 
128 
     | 
    
         
             
            - lib/shoulda/matchers/active_record/association_matcher.rb
         
     | 
| 
       129 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/ensure_inclusion_of_matcher.rb
         
     | 
| 
       130 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/ensure_length_of_matcher.rb
         
     | 
| 
       131 
129 
     | 
    
         
             
            - lib/shoulda/matchers/active_record/have_db_column_matcher.rb
         
     | 
| 
       132 
130 
     | 
    
         
             
            - lib/shoulda/matchers/active_record/have_db_index_matcher.rb
         
     | 
| 
       133 
131 
     | 
    
         
             
            - lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb
         
     | 
| 
       134 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/helpers.rb
         
     | 
| 
       135 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validate_acceptance_of_matcher.rb
         
     | 
| 
       136 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validate_format_of_matcher.rb
         
     | 
| 
       137 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validate_numericality_of_matcher.rb
         
     | 
| 
       138 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validate_presence_of_matcher.rb
         
     | 
| 
       139 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb
         
     | 
| 
       140 
     | 
    
         
            -
            - lib/shoulda/matchers/active_record/validation_matcher.rb
         
     | 
| 
       141 
132 
     | 
    
         
             
            - lib/shoulda/matchers/active_record.rb
         
     | 
| 
       142 
133 
     | 
    
         
             
            - lib/shoulda/matchers/assertion_error.rb
         
     | 
| 
       143 
134 
     | 
    
         
             
            - lib/shoulda/matchers/integrations/rspec.rb
         
     | 
| 
         @@ -161,9 +152,6 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       161 
152 
     | 
    
         
             
              requirements: 
         
     | 
| 
       162 
153 
     | 
    
         
             
              - - ">="
         
     | 
| 
       163 
154 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       164 
     | 
    
         
            -
                  hash: 3667913558593923355
         
     | 
| 
       165 
     | 
    
         
            -
                  segments: 
         
     | 
| 
       166 
     | 
    
         
            -
                  - 0
         
     | 
| 
       167 
155 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       168 
156 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       169 
157 
     | 
    
         
             
              none: false
         
     | 
| 
         @@ -174,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       174 
162 
     | 
    
         
             
            requirements: []
         
     | 
| 
       175 
163 
     | 
    
         | 
| 
       176 
164 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       177 
     | 
    
         
            -
            rubygems_version: 1.6. 
     | 
| 
      
 165 
     | 
    
         
            +
            rubygems_version: 1.6.2
         
     | 
| 
       178 
166 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       179 
167 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       180 
168 
     | 
    
         
             
            summary: Making tests easy on the fingers and eyes
         
     | 
    
        data/Gemfile.lock
    DELETED
    
    | 
         @@ -1,134 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            PATH
         
     | 
| 
       2 
     | 
    
         
            -
              remote: .
         
     | 
| 
       3 
     | 
    
         
            -
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                shoulda-matchers (1.0.0.beta2)
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            GEM
         
     | 
| 
       7 
     | 
    
         
            -
              remote: http://rubygems.org/
         
     | 
| 
       8 
     | 
    
         
            -
              specs:
         
     | 
| 
       9 
     | 
    
         
            -
                abstract (1.0.0)
         
     | 
| 
       10 
     | 
    
         
            -
                actionmailer (3.0.3)
         
     | 
| 
       11 
     | 
    
         
            -
                  actionpack (= 3.0.3)
         
     | 
| 
       12 
     | 
    
         
            -
                  mail (~> 2.2.9)
         
     | 
| 
       13 
     | 
    
         
            -
                actionpack (3.0.3)
         
     | 
| 
       14 
     | 
    
         
            -
                  activemodel (= 3.0.3)
         
     | 
| 
       15 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       16 
     | 
    
         
            -
                  builder (~> 2.1.2)
         
     | 
| 
       17 
     | 
    
         
            -
                  erubis (~> 2.6.6)
         
     | 
| 
       18 
     | 
    
         
            -
                  i18n (~> 0.4)
         
     | 
| 
       19 
     | 
    
         
            -
                  rack (~> 1.2.1)
         
     | 
| 
       20 
     | 
    
         
            -
                  rack-mount (~> 0.6.13)
         
     | 
| 
       21 
     | 
    
         
            -
                  rack-test (~> 0.5.6)
         
     | 
| 
       22 
     | 
    
         
            -
                  tzinfo (~> 0.3.23)
         
     | 
| 
       23 
     | 
    
         
            -
                activemodel (3.0.3)
         
     | 
| 
       24 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       25 
     | 
    
         
            -
                  builder (~> 2.1.2)
         
     | 
| 
       26 
     | 
    
         
            -
                  i18n (~> 0.4)
         
     | 
| 
       27 
     | 
    
         
            -
                activerecord (3.0.3)
         
     | 
| 
       28 
     | 
    
         
            -
                  activemodel (= 3.0.3)
         
     | 
| 
       29 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       30 
     | 
    
         
            -
                  arel (~> 2.0.2)
         
     | 
| 
       31 
     | 
    
         
            -
                  tzinfo (~> 0.3.23)
         
     | 
| 
       32 
     | 
    
         
            -
                activeresource (3.0.3)
         
     | 
| 
       33 
     | 
    
         
            -
                  activemodel (= 3.0.3)
         
     | 
| 
       34 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       35 
     | 
    
         
            -
                activesupport (3.0.3)
         
     | 
| 
       36 
     | 
    
         
            -
                archive-tar-minitar (0.5.2)
         
     | 
| 
       37 
     | 
    
         
            -
                arel (2.0.8)
         
     | 
| 
       38 
     | 
    
         
            -
                aruba (0.2.8)
         
     | 
| 
       39 
     | 
    
         
            -
                  childprocess (~> 0.1.6)
         
     | 
| 
       40 
     | 
    
         
            -
                  cucumber (~> 0.10.0)
         
     | 
| 
       41 
     | 
    
         
            -
                  rspec (~> 2.3.0)
         
     | 
| 
       42 
     | 
    
         
            -
                builder (2.1.2)
         
     | 
| 
       43 
     | 
    
         
            -
                childprocess (0.1.6)
         
     | 
| 
       44 
     | 
    
         
            -
                  ffi (~> 0.6.3)
         
     | 
| 
       45 
     | 
    
         
            -
                columnize (0.3.2)
         
     | 
| 
       46 
     | 
    
         
            -
                cucumber (0.10.0)
         
     | 
| 
       47 
     | 
    
         
            -
                  builder (>= 2.1.2)
         
     | 
| 
       48 
     | 
    
         
            -
                  diff-lcs (~> 1.1.2)
         
     | 
| 
       49 
     | 
    
         
            -
                  gherkin (~> 2.3.2)
         
     | 
| 
       50 
     | 
    
         
            -
                  json (~> 1.4.6)
         
     | 
| 
       51 
     | 
    
         
            -
                  term-ansicolor (~> 1.0.5)
         
     | 
| 
       52 
     | 
    
         
            -
                diff-lcs (1.1.2)
         
     | 
| 
       53 
     | 
    
         
            -
                erubis (2.6.6)
         
     | 
| 
       54 
     | 
    
         
            -
                  abstract (>= 1.0.0)
         
     | 
| 
       55 
     | 
    
         
            -
                ffi (0.6.3)
         
     | 
| 
       56 
     | 
    
         
            -
                  rake (>= 0.8.7)
         
     | 
| 
       57 
     | 
    
         
            -
                gherkin (2.3.3)
         
     | 
| 
       58 
     | 
    
         
            -
                  json (~> 1.4.6)
         
     | 
| 
       59 
     | 
    
         
            -
                i18n (0.5.0)
         
     | 
| 
       60 
     | 
    
         
            -
                json (1.4.6)
         
     | 
| 
       61 
     | 
    
         
            -
                linecache19 (0.5.11)
         
     | 
| 
       62 
     | 
    
         
            -
                  ruby_core_source (>= 0.1.4)
         
     | 
| 
       63 
     | 
    
         
            -
                mail (2.2.15)
         
     | 
| 
       64 
     | 
    
         
            -
                  activesupport (>= 2.3.6)
         
     | 
| 
       65 
     | 
    
         
            -
                  i18n (>= 0.4.0)
         
     | 
| 
       66 
     | 
    
         
            -
                  mime-types (~> 1.16)
         
     | 
| 
       67 
     | 
    
         
            -
                  treetop (~> 1.4.8)
         
     | 
| 
       68 
     | 
    
         
            -
                mime-types (1.16)
         
     | 
| 
       69 
     | 
    
         
            -
                mocha (0.9.10)
         
     | 
| 
       70 
     | 
    
         
            -
                  rake
         
     | 
| 
       71 
     | 
    
         
            -
                polyglot (0.3.1)
         
     | 
| 
       72 
     | 
    
         
            -
                rack (1.2.1)
         
     | 
| 
       73 
     | 
    
         
            -
                rack-mount (0.6.13)
         
     | 
| 
       74 
     | 
    
         
            -
                  rack (>= 1.0.0)
         
     | 
| 
       75 
     | 
    
         
            -
                rack-test (0.5.7)
         
     | 
| 
       76 
     | 
    
         
            -
                  rack (>= 1.0)
         
     | 
| 
       77 
     | 
    
         
            -
                rails (3.0.3)
         
     | 
| 
       78 
     | 
    
         
            -
                  actionmailer (= 3.0.3)
         
     | 
| 
       79 
     | 
    
         
            -
                  actionpack (= 3.0.3)
         
     | 
| 
       80 
     | 
    
         
            -
                  activerecord (= 3.0.3)
         
     | 
| 
       81 
     | 
    
         
            -
                  activeresource (= 3.0.3)
         
     | 
| 
       82 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       83 
     | 
    
         
            -
                  bundler (~> 1.0)
         
     | 
| 
       84 
     | 
    
         
            -
                  railties (= 3.0.3)
         
     | 
| 
       85 
     | 
    
         
            -
                railties (3.0.3)
         
     | 
| 
       86 
     | 
    
         
            -
                  actionpack (= 3.0.3)
         
     | 
| 
       87 
     | 
    
         
            -
                  activesupport (= 3.0.3)
         
     | 
| 
       88 
     | 
    
         
            -
                  rake (>= 0.8.7)
         
     | 
| 
       89 
     | 
    
         
            -
                  thor (~> 0.14.4)
         
     | 
| 
       90 
     | 
    
         
            -
                rake (0.8.7)
         
     | 
| 
       91 
     | 
    
         
            -
                rspec (2.3.0)
         
     | 
| 
       92 
     | 
    
         
            -
                  rspec-core (~> 2.3.0)
         
     | 
| 
       93 
     | 
    
         
            -
                  rspec-expectations (~> 2.3.0)
         
     | 
| 
       94 
     | 
    
         
            -
                  rspec-mocks (~> 2.3.0)
         
     | 
| 
       95 
     | 
    
         
            -
                rspec-core (2.3.1)
         
     | 
| 
       96 
     | 
    
         
            -
                rspec-expectations (2.3.0)
         
     | 
| 
       97 
     | 
    
         
            -
                  diff-lcs (~> 1.1.2)
         
     | 
| 
       98 
     | 
    
         
            -
                rspec-mocks (2.3.0)
         
     | 
| 
       99 
     | 
    
         
            -
                rspec-rails (2.3.1)
         
     | 
| 
       100 
     | 
    
         
            -
                  actionpack (~> 3.0)
         
     | 
| 
       101 
     | 
    
         
            -
                  activesupport (~> 3.0)
         
     | 
| 
       102 
     | 
    
         
            -
                  railties (~> 3.0)
         
     | 
| 
       103 
     | 
    
         
            -
                  rspec (~> 2.3.0)
         
     | 
| 
       104 
     | 
    
         
            -
                ruby-debug-base19 (0.11.24)
         
     | 
| 
       105 
     | 
    
         
            -
                  columnize (>= 0.3.1)
         
     | 
| 
       106 
     | 
    
         
            -
                  linecache19 (>= 0.5.11)
         
     | 
| 
       107 
     | 
    
         
            -
                  ruby_core_source (>= 0.1.4)
         
     | 
| 
       108 
     | 
    
         
            -
                ruby-debug19 (0.11.6)
         
     | 
| 
       109 
     | 
    
         
            -
                  columnize (>= 0.3.1)
         
     | 
| 
       110 
     | 
    
         
            -
                  linecache19 (>= 0.5.11)
         
     | 
| 
       111 
     | 
    
         
            -
                  ruby-debug-base19 (>= 0.11.19)
         
     | 
| 
       112 
     | 
    
         
            -
                ruby_core_source (0.1.4)
         
     | 
| 
       113 
     | 
    
         
            -
                  archive-tar-minitar (>= 0.5.2)
         
     | 
| 
       114 
     | 
    
         
            -
                sqlite3 (1.3.3)
         
     | 
| 
       115 
     | 
    
         
            -
                sqlite3-ruby (1.3.3)
         
     | 
| 
       116 
     | 
    
         
            -
                  sqlite3 (>= 1.3.3)
         
     | 
| 
       117 
     | 
    
         
            -
                term-ansicolor (1.0.5)
         
     | 
| 
       118 
     | 
    
         
            -
                thor (0.14.6)
         
     | 
| 
       119 
     | 
    
         
            -
                treetop (1.4.9)
         
     | 
| 
       120 
     | 
    
         
            -
                  polyglot (>= 0.3.1)
         
     | 
| 
       121 
     | 
    
         
            -
                tzinfo (0.3.24)
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
            PLATFORMS
         
     | 
| 
       124 
     | 
    
         
            -
              ruby
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
            DEPENDENCIES
         
     | 
| 
       127 
     | 
    
         
            -
              aruba (~> 0.2.7)
         
     | 
| 
       128 
     | 
    
         
            -
              cucumber (~> 0.10.0)
         
     | 
| 
       129 
     | 
    
         
            -
              mocha (~> 0.9.10)
         
     | 
| 
       130 
     | 
    
         
            -
              rails (= 3.0.3)
         
     | 
| 
       131 
     | 
    
         
            -
              rspec-rails (~> 2.3.0)
         
     | 
| 
       132 
     | 
    
         
            -
              ruby-debug19 (~> 0.11.6)
         
     | 
| 
       133 
     | 
    
         
            -
              shoulda-matchers!
         
     | 
| 
       134 
     | 
    
         
            -
              sqlite3-ruby (~> 1.3.2)
         
     |