rspec-sleeping_king_studios 2.1.0 → 2.1.1.rc.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
  SHA1:
3
- metadata.gz: 9748e53c33ae330dafb6e3e9aa2a099cc6478602
4
- data.tar.gz: 55f4d5e8eb267c66cea63cbeb3a26c97c8b6eb1d
3
+ metadata.gz: 1649e39464b7d6dd962aeb7c4de50d2aea52c130
4
+ data.tar.gz: 9617e65ae0caf7522408525bc682ce07caabd7e9
5
5
  SHA512:
6
- metadata.gz: addb8e4d08c8e8aa7ae646533780c54336a1d863759265cf1626788c0b2b988cefb779a62f5e50a52ca9c40cff944f654aefb48a6915800d0d76bba1e219668a
7
- data.tar.gz: 8a42cc1162b4e4c3e8874973b00e2475c8aea4ae9f94be51f0fa0dbe337a0ee6841b166179a0b80c98e82f52f8d08fa0c5b9073cf245d3b01c72e09637fb8af3
6
+ metadata.gz: 5d57031970580753d83a7310cbead9b82bee16e3fd81e6e0141bdeb6df5c5fa18a2978c225ffd49f595e75b7bd1349180cd2f3acfa59e9ef062e871bf9e7034c
7
+ data.tar.gz: fa0dd5f37ac2f6e97c0b8fe82b0fb656e82ee5ab0160b3779ba5ab77c0250a5305a34fbed34b272345b46396650b9a2d4d6831bf2fc34a659985b0108e177e0f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.1
4
+
5
+ ### Concerns
6
+
7
+ #### `FocusExamples` Concern
8
+
9
+ Added module RSpec::SleepingKingStudios::Concerns::FocusExamples to create a shorthand for quickly focusing/skipping included shared example groups, e.g. `include_examples '...'` => `finclude_examples '...'`.
10
+
11
+ #### `WrapExamples` Concern
12
+
13
+ Ensured correct behavior when passing an empty keywords hash to a method with optional arguments.
14
+
15
+ ### Matchers
16
+
17
+ #### `respond_to` Matcher
18
+
19
+ Added methods `#with_any_keywords` and `#and_any_keywords`, which are both equivalent to the existing `#with_arbitrary_keywords`.
20
+
3
21
  ## 2.1.0
4
22
 
5
23
  ### Concerns
data/DEVELOPMENT.md CHANGED
@@ -2,8 +2,11 @@
2
2
 
3
3
  ## Tasks
4
4
 
5
+ - Resolve Aruba deprecation warnings.
6
+
5
7
  ### Planned Features
6
8
 
9
+ - Add `#with_any_keywords` alias to RespondToMatcher.
7
10
  - Add #have_constant matcher.
8
11
  - Add #have_predicate matcher.
9
12
  - Add shared examples for 'should have constant', 'should have immutable constant'
@@ -11,6 +14,8 @@
11
14
  - Add shared examples for 'should not have reader/writer'
12
15
  - Add shared examples for #belongs_to, #has_one, #has_many, #embedded_in, #embeds_one, #embeds_many.
13
16
  - Add shared examples for core ActiveModel validations.
17
+ - Add allow/expect(object).to alias_method(:my_method).to(:other_method)
18
+ - Add allow/expect(object).to delegate(:my_method).to(other_object[, :other_method])
14
19
 
15
20
  ### Maintenance
16
21
 
@@ -18,12 +23,16 @@
18
23
  - Refactor #respond_to, #be_constructible to use RSpec 3 method reflection.
19
24
  - Revisit failure messages for #respond_to, #be_constructible.
20
25
  - Pare down Cucumber features for matchers - repurpose as documentation/examples only.
21
- - - Ensure behavior of `#have_reader`, `#have_writer`, `#have_property` is consistent (non-compatible; needs version 3.0).
26
+ - Ensure behavior of `#have_reader`, `#have_writer`, `#have_property` is consistent (non-compatible; needs version 3.0).
22
27
 
23
28
  ### Icebox
24
29
 
25
30
  - Add alt doc test formatter - --format=list ? --format=documentation-list ?
26
31
  - Prints full expanded example name for each example
27
- - Add minimal test formatter - --format=smoke ? --format=librarian ?
32
+ - Add minimal test formatter - --format=smoke ? --format=librarian ? --format=quiet ?
28
33
  - Prints nothing for examples
29
34
  - Suppress STDOUT output? As configurable option for any formatted?
35
+ - Add DSL for shared_examples-heavy specs?
36
+ - #should(name) => include_examples "should #{name}"
37
+ - #with(name) => wrap_context "with #{name}"
38
+ - #when(name) => wrap_context "when #{name}"
data/README.md CHANGED
@@ -46,6 +46,45 @@ This option is used with the RSpec matcher examples (see Examples, below), and d
46
46
 
47
47
  RSpec::SleepingKingStudios defines a few concerns that can be included in or extended into modules or example groups for additional functionality.
48
48
 
49
+ ### Focus Examples
50
+
51
+ require 'rspec/sleeping_king_studios/concerns/focus_examples'
52
+
53
+ RSpec.describe String do
54
+ extend RSpec::SleepingKingStudios::Concerns::WrapExamples
55
+
56
+ shared_examples 'should be a greeting' do
57
+ it { expect(salutation).to be =~ /greeting/i }
58
+ end # shared_examples
59
+
60
+ shared_examples 'should greet the user by name' do
61
+ it { expect(salutation).to match user.name }
62
+ end # shared_examples
63
+
64
+ let(:salutation) { 'Greetings, programs!' }
65
+
66
+ # Focused example groups are always run when config.filter_run :focus is
67
+ # set to true.
68
+ finclude_examples 'should be a greeting'
69
+
70
+ # Skipped example groups are marked as pending and never run.
71
+ xinclude_examples 'should greet the user by name'
72
+ end # describe
73
+
74
+ A shorthand for focusing or skipping included shared example groups with a single keystroke, e.g. `include_examples '...'` => `finclude_examples '...'`.
75
+
76
+ A simplified syntax for re-using shared context or examples without having to explicitly wrap them in `describe` blocks or allowing memoized values or callbacks to change the containing context. In the example above, if the programmer had used the standard `include_context` instead, the first expectation would have failed, as the value of :quote would have been overwritten.
77
+
78
+ *Important Note:* Do not use these methods with example groups that have side effects, e.g. that define a memoized `#let` helper or a `#before` block that is intended to modify the behavior of sibling examples. Wrapping the example group in a `describe` block breaks that relationship. Best practice is to use the `#wrap_examples` method to safely encapsulate example groups with side effects, and the `#fwrap_examples` method to automatically focus such groups.
79
+
80
+ #### `::finclude_examples`
81
+
82
+ (also `::finclude_context`) A shortcut for focusing the example group by wrapping it in a `describe` block, similar to the built-in `fit` and `fdescribe` methods.
83
+
84
+ #### `::xinclude_examples`
85
+
86
+ (also `::xinclude_context`) A shortcut for skipping the example group by wrapping it in a `describe` block, similar to the built-in `xit` and `xdescribe` methods.
87
+
49
88
  ### Shared Example Groups
50
89
 
51
90
  require 'rspec/sleeping_king_studios/concerns/shared_example_group'
@@ -196,15 +235,18 @@ Now has additional chaining functionality to validate the number of arguments ac
196
235
  expect(instance).to respond_to(:foo).with(2..3).arguments.and_a_block
197
236
 
198
237
  # With keyword arguments.
199
- expect(instance).to respond_to(:foo).with(0, :bar, :baz)
238
+ expect(instance).to respond_to(:foo).with_keywords(:bar, :baz)
239
+
240
+ # With both arguments and keywords.
241
+ expect(instance).to respond_to(:foo).with(2).arguments.and_keywords(:bar, :baz)
200
242
 
201
243
  **Chaining:**
202
244
 
203
- * **`#with`:** Expects at most one Integer or Range argument, and zero or more Symbol arguments corresponding to optional keywords. Verifies that the method accepts that keyword, or has a variadic keyword of the form `**params`. As of 2.1.0 and required keywords, verifies that all required keywords are provided.
245
+ * **`#with`:** Expects at most one Integer or Range argument, and zero or more Symbol arguments corresponding to optional keywords. Verifies that the method accepts that keyword, or has a variadic keyword of the form `**kwargs`. As of 2.1.0 and required keywords, verifies that all required keywords are provided.
204
246
  * **`#with_unlimited_arguments`:** (also `and_unlimited_arguments`) No parameters. Verifies that the method accepts any number of arguments via a variadic argument of the form `*args`.
205
247
  * **`#with_a_block`:** (also `and_a_block`) No parameters. Verifies that the method requires a block argument of the form `&my_argument`. _Important note:_ A negative result _does not_ mean the method cannot accept a block, merely that it does not require one. Also, _does not_ check whether the block is called or yielded.
206
- * **`#with_keywords`:** (also `and_keywords`) Expects one or more String or Symbol arguments. Verifies that the method accepts each provided keyword or has a variadic keyword of the form `**params`. As of 2.1.0 and required keywords, verifies that all required keywords are provided.
207
- * **`#with_arbitrary_keywords`:** (also `and_arbitrary_keywords`) No parameters. Verifies that the method accepts any keyword arguments via a variadic keyword of the form `**params`.
248
+ * **`#with_keywords`:** (also `and_keywords`) Expects one or more String or Symbol arguments. Verifies that the method accepts each provided keyword or has a variadic keyword of the form `**kwargs`. As of 2.1.0 and required keywords, verifies that all required keywords are provided.
249
+ * **`#with_any_keywords`:** (also `and_any_keywords`, `and_arbitrary_keywords`, `and_arbitrary_keywords`) No parameters. Verifies that the method accepts any keyword arguments via a variadic keyword of the form `**kwargs`.
208
250
 
209
251
  ### Core
210
252
 
@@ -0,0 +1,70 @@
1
+ # lib/rspec/sleeping_king_studios/concerns/focus_examples.rb
2
+
3
+ require 'rspec/sleeping_king_studios/concerns'
4
+
5
+ module RSpec::SleepingKingStudios::Concerns
6
+ # Convenience methods for automatically focusing or skipping shared example
7
+ # groups.
8
+ module FocusExamples
9
+ # Includes the specified shared example group and wraps it inside an
10
+ # `fdescribe` block named "(focused)". If the spec runner is set to run only
11
+ # focused specs, this will ensure that the wrapped example group is run.
12
+ #
13
+ # @param [String] name The name of the shared example group to be wrapped.
14
+ # @param [Array] args Optional array of arguments that are passed on to
15
+ # the shared example group.
16
+ # @param [Hash] kwargs Optional hash of keyword arguments that are passed
17
+ # on to the shared example group.
18
+ #
19
+ # @yield Optional block that is passed on to the shared example group.
20
+ #
21
+ # @note Do not use this method with example groups that have side effects,
22
+ # e.g. define a memoized `#let` helper or a `#before` block that is
23
+ # intended to modify the behavior of sibling examples. Wrapping the
24
+ # example group in a `describe` block breaks that relationship. Best
25
+ # practice is to use the `#wrap_examples` method to safely encapsulate
26
+ # example groups with side effects, and the `#fwrap_examples` method to
27
+ # automatically focus such groups.
28
+ def finclude_examples name, *args, **kwargs, &block
29
+ fdescribe '(focused)' do
30
+ if kwargs.empty?
31
+ include_examples name, *args, &block
32
+ else
33
+ include_examples name, *args, **kwargs, &block
34
+ end # if-else
35
+ end # describe
36
+ end # method wrap_examples
37
+ alias_method :finclude_context, :finclude_examples
38
+
39
+ # Includes the specified shared example group and wraps it inside an
40
+ # `xdescribe` block named "(skipped)". This will ensure that the wrapped
41
+ # example group is not run.
42
+ #
43
+ # @param [String] name The name of the shared example group to be wrapped.
44
+ # @param [Array] args Optional array of arguments that are passed on to
45
+ # the shared example group.
46
+ # @param [Hash] kwargs Optional hash of keyword arguments that are passed
47
+ # on to the shared example group.
48
+ #
49
+ # @yield Optional block that is passed on to the shared example group.
50
+ #
51
+ # @note Do not use this method with example groups that have side effects,
52
+ # e.g. define a memoized `#let` helper or a `#before` block that is
53
+ # intended to modify the behavior of sibling examples. Wrapping the
54
+ # example group in a `describe` block breaks that relationship. Best
55
+ # practice is to use the `#wrap_examples` method to safely encapsulate
56
+ # example groups with side effects, and the `#xwrap_examples` method to
57
+ # automatically skip such groups.
58
+ # groups.
59
+ def xinclude_examples name, *args, **kwargs, &block
60
+ xdescribe '(focused)' do
61
+ if kwargs.empty?
62
+ include_examples name, *args, &block
63
+ else
64
+ include_examples name, *args, **kwargs, &block
65
+ end # if-else
66
+ end # describe
67
+ end # method xinclude_examples
68
+ alias_method :xinclude_context, :xinclude_examples
69
+ end # module
70
+ end # module
@@ -5,8 +5,6 @@ require 'rspec/sleeping_king_studios/concerns'
5
5
  module RSpec::SleepingKingStudios::Concerns
6
6
  # Methods for encapsulating shared example groups to include contexts or
7
7
  # examples without affecting the surrounding context.
8
- #
9
- # @examples
10
8
  module WrapExamples
11
9
  # Includes the specified shared example group and wraps it inside a
12
10
  # `describe` block. If a block is provided, it is evaluated in the
@@ -22,7 +20,11 @@ module RSpec::SleepingKingStudios::Concerns
22
20
  # block, such as additional examples or memoized values.
23
21
  def wrap_examples name, *args, **kwargs, &block
24
22
  describe name do
25
- include_examples name, *args, **kwargs
23
+ if kwargs.empty?
24
+ include_examples name, *args
25
+ else
26
+ include_examples name, *args, **kwargs
27
+ end # if-else
26
28
 
27
29
  instance_eval(&block) if block_given?
28
30
  end # describe
@@ -43,7 +45,11 @@ module RSpec::SleepingKingStudios::Concerns
43
45
  # block, such as additional examples or memoized values.
44
46
  def fwrap_examples name, *args, **kwargs, &block
45
47
  fdescribe name do
46
- include_examples name, *args, **kwargs
48
+ if kwargs.empty?
49
+ include_examples name, *args
50
+ else
51
+ include_examples name, *args, **kwargs
52
+ end # if-else
47
53
 
48
54
  instance_eval(&block) if block_given?
49
55
  end # describe
@@ -66,13 +72,15 @@ module RSpec::SleepingKingStudios::Concerns
66
72
  # block, such as additional examples or memoized values.
67
73
  def xwrap_examples name, *args, **kwargs, &block
68
74
  xdescribe name do
69
- include_examples name, *args, **kwargs
75
+ if kwargs.empty?
76
+ include_examples name, *args
77
+ else
78
+ include_examples name, *args, **kwargs
79
+ end # if-else
70
80
 
71
81
  instance_eval(&block) if block_given?
72
82
  end # describe
73
83
  end # method fwrap_examples
74
84
  alias_method :xwrap_context, :xwrap_examples
75
-
76
-
77
85
  end # module
78
86
  end # module
@@ -94,6 +94,8 @@ module RSpec::SleepingKingStudios::Matchers::BuiltIn
94
94
  self
95
95
  end # method with_arbitrary_keywords
96
96
  alias_method :and_arbitrary_keywords, :with_arbitrary_keywords
97
+ alias_method :with_any_keywords, :with_arbitrary_keywords
98
+ alias_method :and_any_keywords, :with_any_keywords
97
99
 
98
100
  # Adds a block expectation. The actual object will only match a block
99
101
  # expectation if it expects a parameter of the form &block.
@@ -13,11 +13,11 @@ module RSpec
13
13
  # Minor version.
14
14
  MINOR = 1
15
15
  # Patch version.
16
- PATCH = 0
16
+ PATCH = 1
17
17
  # Prerelease version.
18
- PRERELEASE = nil
18
+ PRERELEASE = 'rc'
19
19
  # Build metadata.
20
- BUILD = nil
20
+ BUILD = 0
21
21
 
22
22
  # Generates the gem version string from the Version constants.
23
23
  def self.to_gem_version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-sleeping_king_studios
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob "Merlin" Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-02 00:00:00.000000000 Z
11
+ date: 2016-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '0.1'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 0.1.2
36
+ version: 0.1.3
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0.1'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.1.2
46
+ version: 0.1.3
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: appraisal
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +184,7 @@ files:
184
184
  - lib/rspec/sleeping_king_studios/all.rb
185
185
  - lib/rspec/sleeping_king_studios/concerns.rb
186
186
  - lib/rspec/sleeping_king_studios/concerns/all.rb
187
+ - lib/rspec/sleeping_king_studios/concerns/focus_examples.rb
187
188
  - lib/rspec/sleeping_king_studios/concerns/shared_example_group.rb
188
189
  - lib/rspec/sleeping_king_studios/concerns/wrap_examples.rb
189
190
  - lib/rspec/sleeping_king_studios/configuration.rb
@@ -229,12 +230,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
229
230
  version: '0'
230
231
  required_rubygems_version: !ruby/object:Gem::Requirement
231
232
  requirements:
232
- - - ">="
233
+ - - ">"
233
234
  - !ruby/object:Gem::Version
234
- version: '0'
235
+ version: 1.3.1
235
236
  requirements: []
236
237
  rubyforge_project:
237
- rubygems_version: 2.4.6
238
+ rubygems_version: 2.5.1
238
239
  signing_key:
239
240
  specification_version: 4
240
241
  summary: A collection of RSpec patches and custom matchers.