rspec-sleeping_king_studios 1.0.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +323 -0
  4. data/lib/rspec/sleeping_king_studios.rb +5 -0
  5. data/lib/rspec/sleeping_king_studios/matchers.rb +5 -0
  6. data/lib/rspec/sleeping_king_studios/matchers/active_model.rb +5 -0
  7. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors.rb +219 -0
  8. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/error_expectation.rb +60 -0
  9. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/message_expectation.rb +17 -0
  10. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/require.rb +7 -0
  11. data/lib/rspec/sleeping_king_studios/matchers/active_model/require.rb +8 -0
  12. data/lib/rspec/sleeping_king_studios/matchers/base_matcher.rb +43 -0
  13. data/lib/rspec/sleeping_king_studios/matchers/built_in.rb +5 -0
  14. data/lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of.rb +68 -0
  15. data/lib/rspec/sleeping_king_studios/matchers/built_in/include.rb +92 -0
  16. data/lib/rspec/sleeping_king_studios/matchers/built_in/require.rb +7 -0
  17. data/lib/rspec/sleeping_king_studios/matchers/built_in/respond_to.rb +187 -0
  18. data/lib/rspec/sleeping_king_studios/matchers/core.rb +5 -0
  19. data/lib/rspec/sleeping_king_studios/matchers/core/be_boolean.rb +41 -0
  20. data/lib/rspec/sleeping_king_studios/matchers/core/construct.rb +138 -0
  21. data/lib/rspec/sleeping_king_studios/matchers/core/have_property.rb +84 -0
  22. data/lib/rspec/sleeping_king_studios/matchers/core/have_reader.rb +76 -0
  23. data/lib/rspec/sleeping_king_studios/matchers/core/have_writer.rb +101 -0
  24. data/lib/rspec/sleeping_king_studios/matchers/core/require.rb +7 -0
  25. data/lib/rspec/sleeping_king_studios/matchers/meta.rb +5 -0
  26. data/lib/rspec/sleeping_king_studios/matchers/meta/fail_with_actual.rb +142 -0
  27. data/lib/rspec/sleeping_king_studios/matchers/meta/pass_with_actual.rb +96 -0
  28. data/lib/rspec/sleeping_king_studios/matchers/meta/require.rb +7 -0
  29. data/lib/rspec/sleeping_king_studios/matchers/require.rb +12 -0
  30. data/lib/rspec/sleeping_king_studios/matchers/shared/match_parameters.rb +69 -0
  31. data/lib/rspec/sleeping_king_studios/matchers/shared/require.rb +7 -0
  32. data/lib/rspec/sleeping_king_studios/mocks/custom_double.rb +13 -0
  33. data/lib/rspec/sleeping_king_studios/require.rb +7 -0
  34. data/lib/rspec/sleeping_king_studios/version.rb +7 -0
  35. metadata +151 -0
@@ -0,0 +1,7 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/core/require.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/require'
4
+
5
+ module RSpec::SleepingKingStudios::Matchers
6
+ module Core; end
7
+ end # module
@@ -0,0 +1,5 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/meta.rb
2
+
3
+ Dir[File.join File.dirname(__FILE__), 'meta', '*.rb'].each do |file|
4
+ require file
5
+ end # end each
@@ -0,0 +1,142 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/rspec/fail_with_actual.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/base_matcher'
4
+ require 'rspec/sleeping_king_studios/matchers/meta/require'
5
+
6
+ module RSpec::SleepingKingStudios::Matchers::Meta
7
+ # Matcher for testing whether an RSpec matcher will fail with a given actual
8
+ # object, and return the specified failure message if the matcher is called
9
+ # via expect#to.
10
+ #
11
+ # @note Do not use this matcher with expect#not_to to verify that a matcher
12
+ # will pass with a given actual object; use the #pass_with_actual matcher
13
+ # instead.
14
+ #
15
+ # @see RSpec::SleepingKingStudios::Matchers::Meta::PassWithActualMatcher
16
+ #
17
+ # @since 1.0.0
18
+ class FailWithActualMatcher < RSpec::SleepingKingStudios::Matchers::BaseMatcher
19
+ # @param [Object] expected the actual object to check the matcher against
20
+ def initialize expected
21
+ super
22
+ @expected = expected
23
+ end # method initialize
24
+
25
+ # Checks if the matcher evaluates to false with the expected object. If a
26
+ # message expectation is set, checks the value of
27
+ # #failure_message_for_should against the expected message.
28
+ #
29
+ # @param [Object] actual the RSpec matcher to check; should respond to
30
+ # :matches? and :failure_message_for_should, as a minimum
31
+ #
32
+ # @return [Boolean] true if the matcher evaluates to false and the
33
+ # matcher's #failure_message_for_should matches the expected message
34
+ # (if any); otherwise false
35
+ def matches? actual
36
+ super
37
+ return false if @matches = @actual.matches?(@expected)
38
+
39
+ if @message.is_a? Regexp
40
+ !!(@actual.failure_message_for_should =~ @message)
41
+ elsif @message
42
+ @actual.failure_message_for_should == @message.to_s
43
+ else
44
+ true
45
+ end # if-elsif-else
46
+ end # method matches?
47
+
48
+ def failure_message_for_should
49
+ if @matches
50
+ "expected #{@actual} not to match #{@expected}"
51
+ else
52
+ message_text = @message.is_a?(Regexp) ? @message.inspect : @message.to_s
53
+
54
+ "expected message#{@message.is_a?(Regexp) ? " matching" : ""}:\n#{
55
+ message_text.lines.map { |line| "#{" " * 2}#{line}" }.join
56
+ }\nreceived message:\n#{
57
+ @actual.failure_message_for_should.lines.map { |line| "#{" " * 2}#{line}" }.join
58
+ }"
59
+ end # if-else
60
+ end # method failure_message_for_should
61
+
62
+ # @see BaseMatcher#failure_message_for_should_not
63
+ def failure_message_for_should_not
64
+ "failure: testing positive condition with negative matcher\n~> use the :pass_with_actual matcher instead"
65
+ end # method failure_message_for_should_not
66
+
67
+ # The expected failure message for should when the matcher is called via
68
+ # expect#to.
69
+ #
70
+ # @return [String, nil] the expected message if one has been defined;
71
+ # otherwise nil
72
+ attr_reader :message
73
+
74
+ # Sets up a message expectation. When the matcher is called with the
75
+ # provided actual object, the matcher's failure_message_for_should
76
+ # message is compared to the provided message.
77
+ #
78
+ # @param [String, Regexp] message the message to compare
79
+ #
80
+ # @return [FailWithActualMatcher] self
81
+ def with_message message
82
+ @message = message
83
+ self
84
+ end # method with_message
85
+ end # class
86
+ end # module
87
+
88
+ module RSpec::SleepingKingStudios::Matchers
89
+ # @see RSpec::SleepingKingStudios::Matchers::Meta::FailWithActualMatcher#matches?
90
+ def fail_with_actual expected
91
+ Meta::FailWithActualMatcher.new expected
92
+ end # method fail_with_actual
93
+ end # module
94
+
95
+ =begin
96
+ RSpec::Matchers.define :fail_with_actual do |actual|
97
+ match do |matcher|
98
+ @matcher = matcher
99
+ @actual = actual
100
+
101
+ next false if @matches = @matcher.matches?(@actual)
102
+
103
+ text = @matcher.failure_message_for_should
104
+ if @message.is_a? Regexp
105
+ !!(text =~ @message)
106
+ elsif @message
107
+ text == @message.to_s
108
+ else
109
+ true
110
+ end # if-elsif-else
111
+ end # match
112
+
113
+ failure_message_for_should do
114
+ if @matches = @matcher.matches?(@actual)
115
+ "expected #{@matcher} not to match #{@actual}"
116
+ else
117
+ message_text = @message.is_a?(Regexp) ? @message.inspect : @message.to_s
118
+
119
+ "expected message#{@message.is_a?(Regexp) ? " matching" : ""}:\n#{
120
+ message_text.lines.map { |line| "#{" " * 2}#{line}" }.join
121
+ }\nreceived message:\n#{
122
+ @matcher.failure_message_for_should.lines.map { |line| "#{" " * 2}#{line}" }.join
123
+ }"
124
+ end # if-else
125
+ end # method failure_message_for_should
126
+
127
+ failure_message_for_should_not do
128
+ "failure: testing positive condition with negative matcher\n~> use the :pass_with_actual matcher instead"
129
+ end # method failure_message_for_should_not
130
+
131
+ def message
132
+ @message
133
+ end # reader message
134
+
135
+ # The text of the tested matcher's :failure_message_for_should, when the
136
+ # tested matcher correctly fails to match the actual object.
137
+ def with_message message
138
+ @message = message
139
+ self
140
+ end # method with_message
141
+ end # matcher pass
142
+ =end
@@ -0,0 +1,96 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/meta/pass_with_actual.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/base_matcher'
4
+ require 'rspec/sleeping_king_studios/matchers/meta/require'
5
+
6
+ module RSpec::SleepingKingStudios::Matchers::Meta
7
+ # Matcher for testing whether an RSpec matcher will pass with a given actual
8
+ # object, and return the specified failure message if the matcher is called
9
+ # via expect#not_to.
10
+ #
11
+ # @note Do not use this matcher with expect#not_to to verify that a matcher
12
+ # will fail with a given actual object; use the #fail_with_actual matcher
13
+ # instead.
14
+ #
15
+ # @see RSpec::SleepingKingStudios::Matchers::Meta::FailWithActualMatcher
16
+ #
17
+ # @since 1.0.0
18
+ class PassWithActualMatcher < RSpec::SleepingKingStudios::Matchers::BaseMatcher
19
+ # @param [Object] expected the actual object to check the matcher against
20
+ def initialize expected
21
+ super
22
+ @expected = expected
23
+ end # method initialize
24
+
25
+ # Checks if the matcher evaluates to true with the expected object. If a
26
+ # message expectation is set, checks the value of
27
+ # #failure_message_for_should_not against the expected message.
28
+ #
29
+ # @param [Object] actual the RSpec matcher to check; should respond to
30
+ # :matches? and :failure_message_for_should_not, as a minimum
31
+ #
32
+ # @return [Boolean] true if the matcher evaluates to true and the matcher's
33
+ # #failure_message_for_should_not matches the expected message (if any);
34
+ # otherwise false
35
+ def matches? actual
36
+ super
37
+ return false unless @matches = @actual.matches?(@expected)
38
+
39
+ if @message.is_a? Regexp
40
+ !!(@actual.failure_message_for_should_not =~ @message)
41
+ elsif @message
42
+ @actual.failure_message_for_should_not == @message.to_s
43
+ else
44
+ true
45
+ end # if-elsif-else
46
+ end # method matches?
47
+
48
+ # @see BaseMatcher#failure_message_for_should_not
49
+ def failure_message_for_should
50
+ if @matches
51
+ message_text = @message.is_a?(Regexp) ? @message.inspect : @message.to_s
52
+
53
+ "expected message#{@message.is_a?(Regexp) ? " matching" : ""}:\n#{
54
+ message_text.lines.map { |line| "#{" " * 2}#{line}" }.join
55
+ }\nreceived message:\n#{
56
+ @actual.failure_message_for_should_not.lines.map { |line| "#{" " * 2}#{line}" }.join
57
+ }"
58
+ else
59
+ failure_message = @actual.failure_message_for_should
60
+ failure_message = failure_message.lines.map { |line| "#{" " * 4}#{line}" }.join("\n")
61
+ "expected #{@actual} to match #{@expected}\n message:\n#{failure_message}"
62
+ end # if-else
63
+ end # method failure_message_for_should
64
+
65
+ # @see BaseMatcher#failure_message_for_should_not
66
+ def failure_message_for_should_not
67
+ "failure: testing negative condition with positive matcher\n~> use the :fail_with_actual matcher instead"
68
+ end # method failure_message_for_should_not
69
+
70
+ # The expected failure message for should_not when the matcher is called
71
+ # via expect#not_to.
72
+ #
73
+ # @return [String, nil] the expected message if one has been defined;
74
+ # otherwise nil
75
+ attr_reader :message
76
+
77
+ # Sets up a message expectation. When the matcher is called with the
78
+ # provided actual object, the matcher's failure_message_for_should_not
79
+ # message is compared to the provided message.
80
+ #
81
+ # @param [String, Regexp] message the message to compare
82
+ #
83
+ # @return [PassWithActualMatcher] self
84
+ def with_message message
85
+ @message = message
86
+ self
87
+ end # method with_message
88
+ end # class
89
+ end # module
90
+
91
+ module RSpec::SleepingKingStudios::Matchers
92
+ # @see RSpec::SleepingKingStudios::Matchers::Meta::PassWithActualMatcher#matches?
93
+ def pass_with_actual expected
94
+ Meta::PassWithActualMatcher.new expected
95
+ end # method pass_with_actual
96
+ end # module
@@ -0,0 +1,7 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/meta/require.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/require'
4
+
5
+ module RSpec::SleepingKingStudios::Matchers
6
+ module Meta; end
7
+ end # module
@@ -0,0 +1,12 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/require.rb
2
+
3
+ require 'rspec/sleeping_king_studios/require'
4
+
5
+ module RSpec::SleepingKingStudios
6
+ # Custom matchers for use with RSpec::Expectations.
7
+ module Matchers; end
8
+ end # module
9
+
10
+ RSpec.configure do |config|
11
+ config.include RSpec::SleepingKingStudios::Matchers
12
+ end # configuration
@@ -0,0 +1,69 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/shared/parameters_matcher.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/shared/require'
4
+
5
+ module RSpec::SleepingKingStudios::Matchers::Shared
6
+ # Helper methods for checking the parameters and keywords (Ruby 2.0 only) of
7
+ # a method.
8
+ module MatchParameters
9
+ # Checks whether the method accepts the specified number or range of
10
+ # arguments.
11
+ #
12
+ # @param [Method] method the method to check
13
+ # @param [Integer, Range] arity the expected number or range of parameters
14
+ #
15
+ # @return [Boolean] true if the method accepts the specified number or both
16
+ # the specified minimum and maximum number of parameters; otherwise false
17
+ def check_method_arity method, arity
18
+ parameters = method.parameters
19
+ required = parameters.count { |type, | :req == type }
20
+ optional = parameters.count { |type, | :opt == type }
21
+ variadic = parameters.count { |type, | :rest == type }
22
+
23
+ min, max = arity.is_a?(Range) ?
24
+ [arity.begin, arity.end] :
25
+ [arity, arity]
26
+
27
+ if min < required
28
+ return { :not_enough_args => { arity: min, count: required } }
29
+ elsif 0 == variadic && max > required + optional
30
+ return { :too_many_args => { arity: max, count: required + optional } }
31
+ end # if
32
+
33
+ nil
34
+ end # method check_method_arity
35
+
36
+ # Checks whether the method accepts the specified keywords.
37
+ #
38
+ # @param [Method] method the method to check
39
+ # @param [Array<String, Symbol>] keywords the expected keywords
40
+ #
41
+ # @return [Boolean] true if the method accepts the specified keywords;
42
+ # otherwise false
43
+ def check_method_keywords method, keywords
44
+ return nil unless RUBY_VERSION >= "2.0.0"
45
+
46
+ parameters = method.parameters
47
+ return nil if 0 < parameters.count { |type, _| :keyrest == type }
48
+
49
+ mismatch = []
50
+ keywords.each do |keyword|
51
+ mismatch << keyword unless parameters.include?([:key, keyword])
52
+ end # each
53
+
54
+ mismatch.empty? ? nil : { :unexpected_keywords => mismatch }
55
+ end # method check_method_keywords
56
+
57
+ # Checks whether the method expects a block.
58
+ #
59
+ # @param [Method] method the method to check
60
+ #
61
+ # @return [Boolean] true if the method expects a block argument; otherwise
62
+ # false
63
+ def check_method_block method
64
+ 0 == method.parameters.count { |type, | :block == type } ? { :expected_block => true } : nil
65
+ end # method check_method_block
66
+
67
+ private :check_method_arity, :check_method_block, :check_method_keywords
68
+ end # module
69
+ end # module
@@ -0,0 +1,7 @@
1
+ # lib/rspec/sleeping_king_studios/matchers/shared/require.rb
2
+
3
+ require 'rspec/sleeping_king_studios/matchers/require'
4
+
5
+ module RSpec::SleepingKingStudios::Matchers
6
+ module Shared; end
7
+ end # module
@@ -0,0 +1,13 @@
1
+ # lib/rspec/sleeping_king_studios/mocks/custom_double.rb
2
+
3
+ module RSpec
4
+ module Mocks
5
+ module ExampleMethods
6
+ def custom_double(*args, &block)
7
+ args << {} unless Hash === args.last
8
+ args.last[:__declared_as] = "Custom Double"
9
+ Class.new(&block).new.tap { |obj| RSpec::Mocks::TestDouble.extend_onto obj, *args }
10
+ end # method
11
+ end # module
12
+ end # module
13
+ end # module
@@ -0,0 +1,7 @@
1
+ # lib/rspec/sleeping_king_studios/require.rb
2
+
3
+ require 'rspec/core'
4
+
5
+ module RSpec
6
+ module SleepingKingStudios; end
7
+ end # module
@@ -0,0 +1,7 @@
1
+ # lib/rspec/sleeping_king_studios/version.rb
2
+
3
+ module RSpec
4
+ module SleepingKingStudios
5
+ VERSION = '1.0.0.rc.2'
6
+ end # module
7
+ end # module
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rspec-sleeping_king_studios
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc.2
5
+ platform: ruby
6
+ authors:
7
+ - Rob "Merlin" Smith
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.14'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: factory_girl
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '4.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '4.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fuubar
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: |2
84
+ A collection of RSpec patches and custom matchers. The features can be
85
+ included individually or by category. For more information, check out the
86
+ README.
87
+ email:
88
+ - merlin@sleepingkingstudios.com
89
+ executables: []
90
+ extensions: []
91
+ extra_rdoc_files: []
92
+ files:
93
+ - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/error_expectation.rb
94
+ - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/message_expectation.rb
95
+ - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/require.rb
96
+ - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors.rb
97
+ - lib/rspec/sleeping_king_studios/matchers/active_model/require.rb
98
+ - lib/rspec/sleeping_king_studios/matchers/active_model.rb
99
+ - lib/rspec/sleeping_king_studios/matchers/base_matcher.rb
100
+ - lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of.rb
101
+ - lib/rspec/sleeping_king_studios/matchers/built_in/include.rb
102
+ - lib/rspec/sleeping_king_studios/matchers/built_in/require.rb
103
+ - lib/rspec/sleeping_king_studios/matchers/built_in/respond_to.rb
104
+ - lib/rspec/sleeping_king_studios/matchers/built_in.rb
105
+ - lib/rspec/sleeping_king_studios/matchers/core/be_boolean.rb
106
+ - lib/rspec/sleeping_king_studios/matchers/core/construct.rb
107
+ - lib/rspec/sleeping_king_studios/matchers/core/have_property.rb
108
+ - lib/rspec/sleeping_king_studios/matchers/core/have_reader.rb
109
+ - lib/rspec/sleeping_king_studios/matchers/core/have_writer.rb
110
+ - lib/rspec/sleeping_king_studios/matchers/core/require.rb
111
+ - lib/rspec/sleeping_king_studios/matchers/core.rb
112
+ - lib/rspec/sleeping_king_studios/matchers/meta/fail_with_actual.rb
113
+ - lib/rspec/sleeping_king_studios/matchers/meta/pass_with_actual.rb
114
+ - lib/rspec/sleeping_king_studios/matchers/meta/require.rb
115
+ - lib/rspec/sleeping_king_studios/matchers/meta.rb
116
+ - lib/rspec/sleeping_king_studios/matchers/require.rb
117
+ - lib/rspec/sleeping_king_studios/matchers/shared/match_parameters.rb
118
+ - lib/rspec/sleeping_king_studios/matchers/shared/require.rb
119
+ - lib/rspec/sleeping_king_studios/matchers.rb
120
+ - lib/rspec/sleeping_king_studios/mocks/custom_double.rb
121
+ - lib/rspec/sleeping_king_studios/require.rb
122
+ - lib/rspec/sleeping_king_studios/version.rb
123
+ - lib/rspec/sleeping_king_studios.rb
124
+ - LICENSE
125
+ - README.md
126
+ homepage: http://sleepingkingstudios.com
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>'
142
+ - !ruby/object:Gem::Version
143
+ version: 1.3.1
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.0.3
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: A collection of RSpec patches and custom matchers.
150
+ test_files: []
151
+ has_rdoc: