rspec-rails 3.8.3 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b76ee007b0ff4daff8f82e2465b9113cab486c9c70f5d9a6e70640f978c36d8d
4
- data.tar.gz: a1b3441077b5535eeba867fdebebccfc1839e4a4b7a41c6294511c37f178152d
3
+ metadata.gz: 6934e8851e24fed0bb722beb1fcfc8542dfbadf4d43578e9b85eee97d916322e
4
+ data.tar.gz: 459693e70621a4a4698d3103783e45ac99e21605ff7d10a292458c6972d54249
5
5
  SHA512:
6
- metadata.gz: 70976f62f63a766f1db09c523f9565f21dc023e29a1e4f27874d09614d7cf26313a7b6e44a2007220668eafb06f3fce8640ead665970d46fee0453a1f6fe5172
7
- data.tar.gz: 1170e6543f4d19dec09c3e754d78ea9807aa7ec17156637dc79a4c3bf192d7306052b1d42e671c03475482d80d22f623dc9f8ceea492eebf5aa590864f86e557
6
+ metadata.gz: 4b484534eb48a22a631f217760f2d983d2c4338131df0be2dc71f7b34933031ad8536a03cdcad7624a1e4d450ae374ad157e82995684965f2adff34bcae8d82d
7
+ data.tar.gz: 494a45f44892e9093ee1e9327163dd3a32ab88a4fb42600b8207031b36afaad30d250ce782e01b66f64fb937ee08bdd0114a17bb150ce335adbd1a21354f447a
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,25 @@
1
+ ### Development
2
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.9.0...master)
3
+
4
+ ### 3.9.0 / 2019-10-08
5
+ [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.8.2...v3.9.0)
6
+
7
+ Enhancements
8
+
9
+ * Use `__dir__` instead of `__FILE__` in generated `rails_helper.rb` where
10
+ supported. (OKURA Masafumi, #2048)
11
+ * Add `have_enqueued` matcher as a "super" matcher to the `ActiveJob` matchers
12
+ making it easier to match on `ActiveJob` delivered emails. (Joel Lubrano, #2047)
13
+ * Add generator for system specs on Rails 5.1 and above. (Andrzej Sliwa, #1933)
14
+ * Add generator for generator specs. (@ConSou, #2085)
15
+ * Add option to generate routes when generating controller specs. (David Revelo, #2134)
16
+
17
+ Bug Fixes:
18
+
19
+ * Make the `ActiveJob` matchers fail when multiple jobs are queued for negated
20
+ matches. e.g. `expect { job; job; }.to_not have_enqueued_job.
21
+ (Emric Istanful, #2069)
22
+
1
23
  ### 3.8.3 / 2019-10-03
2
24
  [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.8.2...master)
3
25
 
@@ -60,6 +82,7 @@ Bug Fixes:
60
82
  (Laurent Cobos, #1943)
61
83
  * Allow custom template resolvers in view specs. (@ahorek, #1941)
62
84
 
85
+
63
86
  ### 3.7.2 / 2017-11-20
64
87
  [Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.7.1...v3.7.2)
65
88
 
@@ -0,0 +1,24 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class GeneratorsGenerator < Base
7
+ class_option :generator_specs, :type => :boolean, :default => false, :desc => "Generate generator specs"
8
+
9
+ def generate_generator_spec
10
+ return unless options[:generator_specs]
11
+
12
+ template template_name, File.join('spec/generator', class_path, filename)
13
+ end
14
+
15
+ def template_name
16
+ 'generator_spec.rb'
17
+ end
18
+
19
+ def filename
20
+ "#{table_name}_generator_spec.rb"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:generator) %> do
4
+
5
+ pending "add some scenarios (or delete) #{__FILE__}"
6
+ end
@@ -1,7 +1,11 @@
1
1
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
2
  require 'spec_helper'
3
3
  ENV['RAILS_ENV'] ||= 'test'
4
+ <% if RUBY_VERSION >= '2.0.0' %>
5
+ require File.expand_path('../config/environment', __dir__)
6
+ <% else %>
4
7
  require File.expand_path('../../config/environment', __FILE__)
8
+ <% end %>
5
9
  # Prevent database truncation if the environment is production
6
10
  abort("The Rails environment is running in production mode!") if Rails.env.production?
7
11
  require 'rspec/rails'
@@ -0,0 +1,26 @@
1
+ require 'generators/rspec'
2
+
3
+ if ::Rails::VERSION::STRING >= '5.1'
4
+ module Rspec
5
+ module Generators
6
+ # @private
7
+ class SystemGenerator < Base
8
+ class_option :system_specs, :type => :boolean, :default => true, :desc => "Generate system specs"
9
+
10
+ def generate_system_spec
11
+ return unless options[:system_specs]
12
+
13
+ template template_name, File.join('spec/system', class_path, filename)
14
+ end
15
+
16
+ def template_name
17
+ 'system_spec.rb'
18
+ end
19
+
20
+ def filename
21
+ "#{table_name}_spec.rb"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:system) %> do
4
+ before do
5
+ driven_by(:rack_test)
6
+ end
7
+
8
+ pending "add some scenarios (or delete) #{__FILE__}"
9
+ end
@@ -11,6 +11,7 @@ module RSpec
11
11
  end
12
12
  end
13
13
 
14
+ require 'rspec/rails/matchers/base_matcher'
14
15
  require 'rspec/rails/matchers/have_rendered'
15
16
  require 'rspec/rails/matchers/redirect_to'
16
17
  require 'rspec/rails/matchers/routing_matchers'
@@ -10,7 +10,7 @@ module RSpec
10
10
  module ActiveJob
11
11
  # rubocop: disable Style/ClassLength
12
12
  # @private
13
- class Base < RSpec::Matchers::BuiltIn::BaseMatcher
13
+ class Base < RSpec::Rails::Matchers::BaseMatcher
14
14
  def initialize
15
15
  @args = []
16
16
  @queue = nil
@@ -0,0 +1,184 @@
1
+ module RSpec
2
+ module Rails
3
+ module Matchers
4
+ # @ api private
5
+ class BaseMatcher
6
+ include RSpec::Matchers::Composable
7
+
8
+ # @api private
9
+ # Used to detect when no arg is passed to `initialize`.
10
+ # `nil` cannot be used because it's a valid value to pass.
11
+ UNDEFINED = Object.new.freeze
12
+
13
+ # @private
14
+ attr_reader :actual, :expected, :rescued_exception
15
+
16
+ # @private
17
+ attr_writer :matcher_name
18
+
19
+ def initialize(expected = UNDEFINED)
20
+ @expected = expected unless UNDEFINED.equal?(expected)
21
+ end
22
+
23
+ # @api private
24
+ # Indicates if the match is successful. Delegates to `match`, which
25
+ # should be defined on a subclass. Takes care of consistently
26
+ # initializing the `actual` attribute.
27
+ def matches?(actual)
28
+ @actual = actual
29
+ match(expected, actual)
30
+ end
31
+
32
+ # @api private
33
+ # Used to wrap a block of code that will indicate failure by
34
+ # raising one of the named exceptions.
35
+ #
36
+ # This is used by rspec-rails for some of its matchers that
37
+ # wrap rails' assertions.
38
+ def match_unless_raises(*exceptions)
39
+ exceptions.unshift Exception if exceptions.empty?
40
+ begin
41
+ yield
42
+ true
43
+ rescue *exceptions => @rescued_exception
44
+ false
45
+ end
46
+ end
47
+
48
+ # @api private
49
+ # Generates a description using {RSpec::Matchers::EnglishPhrasing}.
50
+ # @return [String]
51
+ def description
52
+ desc = RSpec::Matchers::EnglishPhrasing.split_words(self.class.matcher_name)
53
+ desc << RSpec::Matchers::EnglishPhrasing.list(@expected) if defined?(@expected)
54
+ desc
55
+ end
56
+
57
+ # @api private
58
+ # Matchers are not diffable by default. Override this to make your
59
+ # subclass diffable.
60
+ def diffable?
61
+ false
62
+ end
63
+
64
+ # @api private
65
+ # Most matchers are value matchers (i.e. meant to work with `expect(value)`)
66
+ # rather than block matchers (i.e. meant to work with `expect { }`), so
67
+ # this defaults to false. Block matchers must override this to return true.
68
+ def supports_block_expectations?
69
+ false
70
+ end
71
+
72
+ # @api private
73
+ def expects_call_stack_jump?
74
+ false
75
+ end
76
+
77
+ # @private
78
+ def expected_formatted
79
+ RSpec::Support::ObjectFormatter.format(@expected)
80
+ end
81
+
82
+ # @private
83
+ def actual_formatted
84
+ RSpec::Support::ObjectFormatter.format(@actual)
85
+ end
86
+
87
+ # @private
88
+ def self.matcher_name
89
+ @matcher_name ||= underscore(name.split('::').last)
90
+ end
91
+
92
+ # @private
93
+ def matcher_name
94
+ if defined?(@matcher_name)
95
+ @matcher_name
96
+ else
97
+ self.class.matcher_name
98
+ end
99
+ end
100
+
101
+ # @private
102
+ # Borrowed from ActiveSupport.
103
+ def self.underscore(camel_cased_word)
104
+ word = camel_cased_word.to_s.dup
105
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
106
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
107
+ word.tr!('-', '_')
108
+ word.downcase!
109
+ word
110
+ end
111
+ private_class_method :underscore
112
+
113
+ private
114
+
115
+ def assert_ivars(*expected_ivars)
116
+ return unless (expected_ivars - present_ivars).any?
117
+ ivar_list = RSpec::Matchers::EnglishPhrasing.list(expected_ivars)
118
+ raise "#{self.class.name} needs to supply#{ivar_list}"
119
+ end
120
+
121
+ if RUBY_VERSION.to_f < 1.9
122
+ # :nocov:
123
+ def present_ivars
124
+ instance_variables.map(&:to_sym)
125
+ end
126
+ # :nocov:
127
+ else
128
+ alias present_ivars instance_variables
129
+ end
130
+
131
+ # @private
132
+ module HashFormatting
133
+ # `{ :a => 5, :b => 2 }.inspect` produces:
134
+ #
135
+ # {:a=>5, :b=>2}
136
+ #
137
+ # ...but it looks much better as:
138
+ #
139
+ # {:a => 5, :b => 2}
140
+ #
141
+ # This is idempotent and safe to run on a string multiple times.
142
+ def improve_hash_formatting(inspect_string)
143
+ inspect_string.gsub(/(\S)=>(\S)/, '\1 => \2')
144
+ end
145
+ module_function :improve_hash_formatting
146
+ end
147
+
148
+ include HashFormatting
149
+
150
+ # @api private
151
+ # Provides default implementations of failure messages, based on the `description`.
152
+ module DefaultFailureMessages
153
+ # @api private
154
+ # Provides a good generic failure message. Based on `description`.
155
+ # When subclassing, if you are not satisfied with this failure message
156
+ # you often only need to override `description`.
157
+ # @return [String]
158
+ def failure_message
159
+ "expected #{description_of @actual} to #{description}".dup
160
+ end
161
+
162
+ # @api private
163
+ # Provides a good generic negative failure message. Based on `description`.
164
+ # When subclassing, if you are not satisfied with this failure message
165
+ # you often only need to override `description`.
166
+ # @return [String]
167
+ def failure_message_when_negated
168
+ "expected #{description_of @actual} not to #{description}".dup
169
+ end
170
+
171
+ # @private
172
+ def self.has_default_failure_messages?(matcher)
173
+ matcher.method(:failure_message).owner == self &&
174
+ matcher.method(:failure_message_when_negated).owner == self
175
+ rescue NameError
176
+ false
177
+ end
178
+ end
179
+
180
+ include DefaultFailureMessages
181
+ end
182
+ end
183
+ end
184
+ end
@@ -6,7 +6,7 @@ module RSpec
6
6
  # Matcher class for `be_a_new`. Should not be instantiated directly.
7
7
  #
8
8
  # @see RSpec::Rails::Matchers#be_a_new
9
- class BeANew < RSpec::Matchers::BuiltIn::BaseMatcher
9
+ class BeANew < RSpec::Rails::Matchers::BaseMatcher
10
10
  # @private
11
11
  def initialize(expected)
12
12
  @expected = expected
@@ -2,7 +2,7 @@ module RSpec
2
2
  module Rails
3
3
  module Matchers
4
4
  # @private
5
- class BeANewRecord < RSpec::Matchers::BuiltIn::BaseMatcher
5
+ class BeANewRecord < RSpec::Rails::Matchers::BaseMatcher
6
6
  def matches?(actual)
7
7
  actual.new_record?
8
8
  end
@@ -0,0 +1,174 @@
1
+ require "rspec/mocks"
2
+ require "rspec/rails/matchers/active_job"
3
+
4
+ module RSpec
5
+ module Rails
6
+ module Matchers
7
+ # Matcher class for `have_enqueued_mail`. Should not be instantiated directly.
8
+ #
9
+ # rubocop: disable Style/ClassLength
10
+ # @private
11
+ # @see RSpec::Rails::Matchers#have_enqueued_mail
12
+ class HaveEnqueuedMail < ActiveJob::HaveEnqueuedJob
13
+ MAILER_JOB_METHOD = 'deliver_now'.freeze
14
+
15
+ include RSpec::Mocks::ExampleMethods
16
+
17
+ def initialize(mailer_class, method_name)
18
+ super(mailer_job)
19
+ @mailer_class = mailer_class
20
+ @method_name = method_name
21
+ @mail_args = []
22
+ @args = mailer_args
23
+ end
24
+
25
+ def description
26
+ "enqueues #{@mailer_class.name}.#{@method_name}"
27
+ end
28
+
29
+ def with(*args, &block)
30
+ @mail_args = args
31
+ block.nil? ? super(*mailer_args) : super(*mailer_args, &yield_mail_args(block))
32
+ end
33
+
34
+ def matches?(block)
35
+ raise ArgumentError, 'have_enqueued_mail and enqueue_mail only work with block arguments' unless block.respond_to?(:call)
36
+ check_active_job_adapter
37
+ super
38
+ end
39
+
40
+ def failure_message
41
+ "expected to enqueue #{base_message}".tap do |msg|
42
+ msg << "\n#{unmatching_mail_jobs_message}" if unmatching_mail_jobs.any?
43
+ end
44
+ end
45
+
46
+ def failure_message_when_negated
47
+ "expected not to enqueue #{base_message}"
48
+ end
49
+
50
+ private
51
+
52
+ def base_message
53
+ "#{@mailer_class.name}.#{@method_name}".tap do |msg|
54
+ msg << " #{expected_count_message}"
55
+ msg << " with #{@mail_args}," if @mail_args.any?
56
+ msg << " on queue #{@queue}," if @queue
57
+ msg << " at #{@at.inspect}," if @at
58
+ msg << " but enqueued #{@matching_jobs.size}"
59
+ end
60
+ end
61
+
62
+ def expected_count_message
63
+ "#{message_expectation_modifier} #{@expected_number} #{@expected_number == 1 ? 'time' : 'times'}"
64
+ end
65
+
66
+ def mailer_args
67
+ if @mail_args.any?
68
+ base_mailer_args + @mail_args
69
+ else
70
+ mailer_method_arity = @mailer_class.instance_method(@method_name).arity
71
+
72
+ number_of_args = if mailer_method_arity < 0
73
+ (mailer_method_arity + 1).abs
74
+ else
75
+ mailer_method_arity
76
+ end
77
+
78
+ base_mailer_args + Array.new(number_of_args) { anything }
79
+ end
80
+ end
81
+
82
+ def base_mailer_args
83
+ [@mailer_class.name, @method_name.to_s, MAILER_JOB_METHOD]
84
+ end
85
+
86
+ def yield_mail_args(block)
87
+ Proc.new { |*job_args| block.call(*(job_args - base_mailer_args)) }
88
+ end
89
+
90
+ def check_active_job_adapter
91
+ return if ::ActiveJob::QueueAdapters::TestAdapter === ::ActiveJob::Base.queue_adapter
92
+ raise StandardError, "To use HaveEnqueuedMail matcher set `ActiveJob::Base.queue_adapter = :test`"
93
+ end
94
+
95
+ def unmatching_mail_jobs
96
+ @unmatching_jobs.select do |job|
97
+ job[:job] == mailer_job
98
+ end
99
+ end
100
+
101
+ def unmatching_mail_jobs_message
102
+ msg = "Queued deliveries:"
103
+
104
+ unmatching_mail_jobs.each do |job|
105
+ msg << "\n #{mail_job_message(job)}"
106
+ end
107
+
108
+ msg
109
+ end
110
+
111
+ def mail_job_message(job)
112
+ mailer_method = job[:args][0..1].join('.')
113
+
114
+ mailer_args = job[:args][3..-1]
115
+ msg_parts = []
116
+ msg_parts << "with #{mailer_args}" if mailer_args.any?
117
+ msg_parts << "on queue #{job[:queue]}" if job[:queue] && job[:queue] != 'mailers'
118
+ msg_parts << "at #{Time.at(job[:at])}" if job[:at]
119
+
120
+ "#{mailer_method} #{msg_parts.join(', ')}".strip
121
+ end
122
+
123
+ def mailer_job
124
+ ActionMailer::DeliveryJob
125
+ end
126
+ end
127
+ # rubocop: enable Style/ClassLength
128
+
129
+ # @api public
130
+ # Passes if an email has been enqueued inside block.
131
+ # May chain with to specify expected arguments.
132
+ # May chain at_least, at_most or exactly to specify a number of times.
133
+ # May chain at to specify a send time.
134
+ # May chain on_queue to specify a queue.
135
+ #
136
+ # @example
137
+ # expect {
138
+ # MyMailer.welcome(user).deliver_later
139
+ # }.to have_enqueued_mail(MyMailer, :welcome)
140
+ #
141
+ # # Using alias
142
+ # expect {
143
+ # MyMailer.welcome(user).deliver_later
144
+ # }.to enqueue_mail(MyMailer, :welcome)
145
+ #
146
+ # expect {
147
+ # MyMailer.welcome(user).deliver_later
148
+ # }.to have_enqueued_mail(MyMailer, :welcome).with(user)
149
+ #
150
+ # expect {
151
+ # MyMailer.welcome(user).deliver_later
152
+ # MyMailer.welcome(user).deliver_later
153
+ # }.to have_enqueued_mail(MyMailer, :welcome).at_least(:once)
154
+ #
155
+ # expect {
156
+ # MyMailer.welcome(user).deliver_later
157
+ # }.to have_enqueued_mail(MyMailer, :welcome).at_most(:twice)
158
+ #
159
+ # expect {
160
+ # MyMailer.welcome(user).deliver_later(wait_until: Date.tomorrow.noon)
161
+ # }.to have_enqueued_mail(MyMailer, :welcome).at(Date.tomorrow.noon)
162
+ #
163
+ # expect {
164
+ # MyMailer.welcome(user).deliver_later(queue: :urgent_mail)
165
+ # }.to have_enqueued_mail(MyMailer, :welcome).on_queue(:urgent_mail)
166
+ def have_enqueued_mail(mailer_class, mail_method_name)
167
+ HaveEnqueuedMail.new(mailer_class, mail_method_name)
168
+ end
169
+ alias_method :have_enqueued_email, :have_enqueued_mail
170
+ alias_method :enqueue_mail, :have_enqueued_mail
171
+ alias_method :enqueue_email, :have_enqueued_mail
172
+ end
173
+ end
174
+ end
@@ -73,7 +73,7 @@ module RSpec
73
73
  # expect(response).to have_http_status(404)
74
74
  #
75
75
  # @see RSpec::Rails::Matchers.have_http_status
76
- class NumericCode < RSpec::Matchers::BuiltIn::BaseMatcher
76
+ class NumericCode < RSpec::Rails::Matchers::BaseMatcher
77
77
  include HaveHttpStatus
78
78
 
79
79
  def initialize(code)
@@ -124,7 +124,7 @@ module RSpec
124
124
  #
125
125
  # @see RSpec::Rails::Matchers.have_http_status
126
126
  # @see https://github.com/rack/rack/blob/master/lib/rack/utils.rb `Rack::Utils::SYMBOL_TO_STATUS_CODE`
127
- class SymbolicStatus < RSpec::Matchers::BuiltIn::BaseMatcher
127
+ class SymbolicStatus < RSpec::Rails::Matchers::BaseMatcher
128
128
  include HaveHttpStatus
129
129
 
130
130
  def initialize(status)
@@ -236,7 +236,7 @@ module RSpec
236
236
  #
237
237
  # @see RSpec::Rails::Matchers.have_http_status
238
238
  # @see ActionDispatch::TestResponse
239
- class GenericStatus < RSpec::Matchers::BuiltIn::BaseMatcher
239
+ class GenericStatus < RSpec::Rails::Matchers::BaseMatcher
240
240
  include HaveHttpStatus
241
241
 
242
242
  # @return [Array<Symbol>] of status codes which represent a HTTP status
@@ -289,20 +289,11 @@ module RSpec
289
289
 
290
290
  protected
291
291
 
292
- if 5 < ::Rails::VERSION::MAJOR ||
293
- (::Rails::VERSION::MAJOR == 5 && 2 <= ::Rails::VERSION::MINOR)
294
- RESPONSE_METHODS = {
295
- :success => 'successful',
296
- :error => 'server_error',
297
- :missing => 'not_found'
298
- }.freeze
299
- else
300
- RESPONSE_METHODS = {
301
- :successful => 'success',
302
- :server_error => 'error',
303
- :not_found => 'missing'
304
- }.freeze
305
- end
292
+ RESPONSE_METHODS = {
293
+ :success => 'successful',
294
+ :error => 'server_error',
295
+ :missing => 'not_found'
296
+ }.freeze
306
297
 
307
298
  def check_expected_status(test_response, expected)
308
299
  test_response.send(
@@ -4,7 +4,7 @@ module RSpec
4
4
  # Matcher for template rendering.
5
5
  module RenderTemplate
6
6
  # @private
7
- class RenderTemplateMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
7
+ class RenderTemplateMatcher < RSpec::Rails::Matchers::BaseMatcher
8
8
  def initialize(scope, expected, message = nil)
9
9
  @expected = Symbol === expected ? expected.to_s : expected
10
10
  @message = message
@@ -4,7 +4,7 @@ module RSpec
4
4
  # Matcher for redirects.
5
5
  module RedirectTo
6
6
  # @private
7
- class RedirectTo < RSpec::Matchers::BuiltIn::BaseMatcher
7
+ class RedirectTo < RSpec::Rails::Matchers::BaseMatcher
8
8
  def initialize(scope, expected)
9
9
  @expected = expected
10
10
  @scope = scope
@@ -6,7 +6,7 @@ module RSpec
6
6
  extend RSpec::Matchers::DSL
7
7
 
8
8
  # @private
9
- class RouteToMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
9
+ class RouteToMatcher < RSpec::Rails::Matchers::BaseMatcher
10
10
  def initialize(scope, *expected)
11
11
  @scope = scope
12
12
  @expected = expected[1] || {}
@@ -63,7 +63,7 @@ module RSpec
63
63
  end
64
64
 
65
65
  # @private
66
- class BeRoutableMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
66
+ class BeRoutableMatcher < RSpec::Rails::Matchers::BaseMatcher
67
67
  def initialize(scope)
68
68
  @scope = scope
69
69
  end
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec Rails.
4
4
  module Version
5
5
  # Current version of RSpec Rails, in semantic versioning format.
6
- STRING = '3.8.3'
6
+ STRING = '3.9.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.3
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chelimsky
@@ -44,7 +44,7 @@ cert_chain:
44
44
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
45
45
  F3MdtaDehhjC
46
46
  -----END CERTIFICATE-----
47
- date: 2019-10-09 00:00:00.000000000 Z
47
+ date: 2019-10-08 00:00:00.000000000 Z
48
48
  dependencies:
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: activesupport
@@ -94,56 +94,56 @@ dependencies:
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 3.8.0
97
+ version: 3.9.0
98
98
  type: :runtime
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 3.8.0
104
+ version: 3.9.0
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: rspec-expectations
107
107
  requirement: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 3.8.0
111
+ version: 3.9.0
112
112
  type: :runtime
113
113
  prerelease: false
114
114
  version_requirements: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: 3.8.0
118
+ version: 3.9.0
119
119
  - !ruby/object:Gem::Dependency
120
120
  name: rspec-mocks
121
121
  requirement: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: 3.8.0
125
+ version: 3.9.0
126
126
  type: :runtime
127
127
  prerelease: false
128
128
  version_requirements: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: 3.8.0
132
+ version: 3.9.0
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: rspec-support
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: 3.8.0
139
+ version: 3.9.0
140
140
  type: :runtime
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: 3.8.0
146
+ version: 3.9.0
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: cucumber
149
149
  requirement: !ruby/object:Gem::Requirement
@@ -205,6 +205,8 @@ files:
205
205
  - lib/generators/rspec/feature/feature_generator.rb
206
206
  - lib/generators/rspec/feature/templates/feature_singular_spec.rb
207
207
  - lib/generators/rspec/feature/templates/feature_spec.rb
208
+ - lib/generators/rspec/generators/generator_generator.rb
209
+ - lib/generators/rspec/generators/templates/generator_spec.rb
208
210
  - lib/generators/rspec/helper/helper_generator.rb
209
211
  - lib/generators/rspec/helper/templates/helper_spec.rb
210
212
  - lib/generators/rspec/install/install_generator.rb
@@ -231,6 +233,8 @@ files:
231
233
  - lib/generators/rspec/scaffold/templates/new_spec.rb
232
234
  - lib/generators/rspec/scaffold/templates/routing_spec.rb
233
235
  - lib/generators/rspec/scaffold/templates/show_spec.rb
236
+ - lib/generators/rspec/system/system_generator.rb
237
+ - lib/generators/rspec/system/templates/system_spec.rb
234
238
  - lib/generators/rspec/view/templates/view_spec.rb
235
239
  - lib/generators/rspec/view/view_generator.rb
236
240
  - lib/rspec-rails.rb
@@ -258,9 +262,11 @@ files:
258
262
  - lib/rspec/rails/fixture_support.rb
259
263
  - lib/rspec/rails/matchers.rb
260
264
  - lib/rspec/rails/matchers/active_job.rb
265
+ - lib/rspec/rails/matchers/base_matcher.rb
261
266
  - lib/rspec/rails/matchers/be_a_new.rb
262
267
  - lib/rspec/rails/matchers/be_new_record.rb
263
268
  - lib/rspec/rails/matchers/be_valid.rb
269
+ - lib/rspec/rails/matchers/have_enqueued_mail.rb
264
270
  - lib/rspec/rails/matchers/have_http_status.rb
265
271
  - lib/rspec/rails/matchers/have_rendered.rb
266
272
  - lib/rspec/rails/matchers/redirect_to.rb
@@ -278,7 +284,7 @@ licenses:
278
284
  - MIT
279
285
  metadata:
280
286
  bug_tracker_uri: https://github.com/rspec/rspec-rails/issues
281
- changelog_uri: https://github.com/rspec/rspec-rails/blob/v3.8.3/Changelog.md
287
+ changelog_uri: https://github.com/rspec/rspec-rails/blob/v3.9.0/Changelog.md
282
288
  documentation_uri: https://rspec.info/documentation/
283
289
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
284
290
  source_code_uri: https://github.com/rspec/rspec-rails
metadata.gz.sig CHANGED
Binary file