qb 0.3.25 → 0.4.0

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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/ansible.cfg +10 -1
  4. data/exe/.qb_interop_receive +3 -10
  5. data/exe/qb +8 -2
  6. data/lib/python/qb/__init__.py +6 -0
  7. data/{roles/qb/ruby/rspec/setup/tasks/persistence.yml → lib/python/qb/ansible/__init__.py} +0 -0
  8. data/lib/python/qb/ansible/modules/__init__.py +0 -0
  9. data/lib/python/qb/ansible/modules/docker/__init__.py +0 -0
  10. data/lib/python/qb/ansible/modules/docker/client.py +177 -0
  11. data/lib/python/qb/ansible/modules/docker/image_manager.py +754 -0
  12. data/lib/python/qb/ipc/__init__.py +0 -0
  13. data/lib/python/qb/ipc/stdio/__init__.py +99 -0
  14. data/lib/python/qb/ipc/stdio/logging.py +151 -0
  15. data/lib/qb.rb +3 -3
  16. data/lib/qb/ansible/cmds/playbook.rb +5 -14
  17. data/lib/qb/ansible/env.rb +36 -6
  18. data/lib/qb/ansible/module.rb +396 -152
  19. data/lib/qb/ansible/module/response.rb +195 -0
  20. data/lib/qb/ansible/modules.rb +42 -0
  21. data/lib/qb/ansible/modules/docker/image.rb +273 -0
  22. data/lib/qb/cli.rb +5 -18
  23. data/lib/qb/cli/run.rb +2 -2
  24. data/lib/qb/data.rb +22 -0
  25. data/lib/qb/data/immutable.rb +39 -0
  26. data/lib/qb/docker.rb +2 -0
  27. data/lib/qb/docker/cli.rb +430 -0
  28. data/lib/qb/docker/image.rb +207 -0
  29. data/lib/qb/docker/image/name.rb +309 -0
  30. data/lib/qb/docker/image/tag.rb +113 -0
  31. data/lib/qb/docker/repo.rb +0 -0
  32. data/lib/qb/errors.rb +17 -3
  33. data/lib/qb/execution.rb +83 -0
  34. data/lib/qb/ipc.rb +48 -0
  35. data/lib/qb/ipc/stdio.rb +32 -0
  36. data/lib/qb/ipc/stdio/client.rb +267 -0
  37. data/lib/qb/ipc/stdio/server.rb +229 -0
  38. data/lib/qb/ipc/stdio/server/in_service.rb +18 -0
  39. data/lib/qb/ipc/stdio/server/log_service.rb +168 -0
  40. data/lib/qb/ipc/stdio/server/out_service.rb +20 -0
  41. data/lib/qb/ipc/stdio/server/service.rb +229 -0
  42. data/lib/qb/options.rb +360 -502
  43. data/lib/qb/options/option.rb +293 -115
  44. data/lib/qb/options/option/option_parser_concern.rb +228 -0
  45. data/lib/qb/options/types.rb +73 -0
  46. data/lib/qb/package.rb +0 -1
  47. data/lib/qb/package/version.rb +179 -58
  48. data/lib/qb/package/version/from.rb +192 -51
  49. data/lib/qb/package/version/leveled.rb +1 -1
  50. data/lib/qb/path.rb +3 -2
  51. data/lib/qb/repo/git.rb +9 -85
  52. data/lib/qb/role/default_dir.rb +2 -2
  53. data/lib/qb/role/errors.rb +2 -8
  54. data/lib/qb/util.rb +1 -2
  55. data/lib/qb/util/bundler.rb +73 -43
  56. data/lib/qb/util/decorators.rb +99 -0
  57. data/lib/qb/util/interop.rb +7 -8
  58. data/lib/qb/util/resource.rb +12 -13
  59. data/lib/qb/version.rb +10 -0
  60. data/library/path_facts +5 -10
  61. data/library/qb.module.rb +105 -0
  62. data/library/stream +6 -26
  63. data/load/ansible/module/autorun.rb +25 -0
  64. data/load/ansible/module/script.rb +123 -0
  65. data/load/rebundle.rb +39 -0
  66. data/plugins/filter/dict_filters.py +56 -0
  67. data/plugins/{filter_plugins/path_plugins.py → filter/path_filters.py} +0 -0
  68. data/plugins/{filter_plugins/ruby_interop_plugins.py → filter/ruby_interop_filters.py} +1 -17
  69. data/plugins/{filter_plugins/string_plugins.py → filter/string_filters.py} +1 -20
  70. data/plugins/{filter_plugins/version_plugins.py → filter/version_filters.py} +3 -18
  71. data/plugins/{lookup_plugins/every.py → lookup/every_lookups.py} +0 -0
  72. data/plugins/{lookup_plugins/resolve.py → lookup/resolve_lookups.py} +0 -0
  73. data/plugins/{lookup_plugins/version.py → lookup/version_lookups.py} +0 -16
  74. data/plugins/test/dict_tests.py +36 -0
  75. data/plugins/test/string_tests.py +36 -0
  76. data/qb.gemspec +7 -3
  77. data/roles/nrser.rb/library/set_fact_with_ruby.rb +3 -9
  78. data/roles/nrser.state_mate/library/state +3 -17
  79. data/roles/qb/call/meta/qb.yml +1 -1
  80. data/roles/qb/dev/ref/repo/git/meta/qb.yml +1 -1
  81. data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/defaults/main.yml +1 -1
  82. data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/meta/main.yml +3 -2
  83. data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/meta/qb.yml +12 -7
  84. data/roles/qb/docker/mac/kubernetes/tasks/main.yml +45 -0
  85. data/roles/qb/git/check/clean/meta/qb.yml +1 -1
  86. data/roles/qb/git/ignore/meta/qb +10 -3
  87. data/roles/qb/git/submodule/update/library/git_submodule_update +17 -27
  88. data/roles/qb/github/pages/setup/meta/qb.yml +1 -1
  89. data/roles/qb/labs/atom/apm/meta/qb.yml +1 -1
  90. data/roles/qb/osx/git/change_case/meta/qb.yml +1 -1
  91. data/roles/qb/osx/notif/meta/qb.yml +1 -1
  92. data/roles/qb/pkg/bump/library/bump +4 -16
  93. data/roles/qb/role/qb/defaults/main.yml +2 -0
  94. data/roles/qb/role/qb/meta/qb.yml +10 -5
  95. data/roles/qb/role/qb/templates/qb.yml.j2 +7 -2
  96. data/roles/qb/role/templates/library/module.rb.j2 +12 -23
  97. data/roles/qb/role/templates/meta/main.yml.j2 +14 -1
  98. data/roles/qb/ruby/bundler/meta/qb.yml +1 -1
  99. data/roles/qb/ruby/dependency/meta/qb.yml +1 -1
  100. data/roles/qb/ruby/gem/bin_stubs/meta/qb.yml +1 -1
  101. data/roles/qb/ruby/gem/bin_stubs/templates/console +8 -2
  102. data/roles/qb/ruby/gem/build/meta/qb.yml +1 -1
  103. data/roles/qb/ruby/gem/new/meta/qb.yml +1 -1
  104. data/roles/qb/ruby/nrser/rspex/generate/meta/qb.yml +5 -5
  105. data/roles/qb/ruby/nrser/rspex/issue/meta/qb.yml +1 -1
  106. data/roles/qb/ruby/yard/clean/meta/qb.yml +1 -1
  107. data/roles/qb/ruby/yard/config/library/yard.get_output_dir +5 -15
  108. data/roles/qb/ruby/yard/config/meta/qb.yml +1 -1
  109. data/roles/qb/ruby/yard/setup/meta/qb.yml +1 -1
  110. metadata +71 -22
  111. data/lib/qb/ansible_module.rb +0 -5
  112. data/lib/qb/util/stdio.rb +0 -187
  113. data/roles/qb/ruby/rspec/setup/tasks/main.yml +0 -4
@@ -1,23 +1,13 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  #!/usr/bin/env ruby
4
2
  # WANT_JSON
5
3
 
6
- # init bundler in dev env
7
- if ENV['QB_DEV_ENV']
8
- ENV.each {|k, v|
9
- if k.start_with? 'QB_DEV_ENV_'
10
- ENV[k.sub('QB_DEV_ENV_', '')] = v
11
- end
12
- }
13
- require 'bundler/setup'
14
- end
4
+ # Load QB's Ansible module autorun harness
5
+ load ENV['QB_AM_AUTORUN_PATH']
15
6
 
16
7
  require 'qb'
17
8
  require 'cmds'
18
9
  require 'nrser'
19
10
 
20
- using NRSER
21
11
 
22
12
  class GitSubmoduleUpdate < QB::Ansible::Module
23
13
  def main_dir
@@ -46,7 +36,7 @@ class GitSubmoduleUpdate < QB::Ansible::Module
46
36
  detached: detached?(dir),
47
37
  dirty: dirty?(dir),
48
38
  }
49
- }.tap {|subs| QB.debug submodules: subs}
39
+ }.tap { |subs| logger.debug payload: { submodules: subs } }
50
40
  end
51
41
 
52
42
  def dirty? repo_dir
@@ -85,7 +75,7 @@ class GitSubmoduleUpdate < QB::Ansible::Module
85
75
  end
86
76
 
87
77
  def attach! submodule
88
- QB.debug "attaching submodule #{ submodule[:rel_dir] }..."
78
+ logger.debug "attaching submodule #{ submodule[:rel_dir] }..."
89
79
 
90
80
  branch_heads = branch_heads_for_commit submodule
91
81
  branch_head = nil
@@ -107,17 +97,17 @@ class GitSubmoduleUpdate < QB::Ansible::Module
107
97
  return false
108
98
 
109
99
  when 1
110
- QB.debug "commit is head of only one branch: #{ branch_heads[0][:ref] }"
100
+ logger.debug "commit is head of only one branch: #{ branch_heads[0][:ref] }"
111
101
  branch_head = branch_heads[0]
112
102
 
113
103
  else
114
- QB.debug "commit is head of multiple branches..."
104
+ logger.debug "commit is head of multiple branches..."
115
105
 
116
106
  local = branch_heads.select {|bh| bh[:ref].start_with? 'refs/heads'}
117
107
 
118
108
  case local.length
119
109
  when 0
120
- QB.debug "commit is head of multiple remote branches..."
110
+ logger.debug "commit is head of multiple remote branches..."
121
111
 
122
112
  # see if one is master
123
113
  branch_head = branch_heads.find {|bh| bh[:ref].end_with? 'master'}
@@ -133,15 +123,15 @@ class GitSubmoduleUpdate < QB::Ansible::Module
133
123
  return false
134
124
  end
135
125
 
136
- QB.debug "commit is head of local master, using that."
126
+ logger.debug "commit is head of local master, using that."
137
127
 
138
128
  when 1
139
- QB.debug "the commit is head of one local branch, using it."
129
+ logger.debug "the commit is head of one local branch, using it."
140
130
 
141
131
  branch_head = local[0]
142
132
 
143
133
  else
144
- QB.debug "the commit heads multiple local branches..."
134
+ logger.debug "the commit heads multiple local branches..."
145
135
 
146
136
  # again, see if one is master
147
137
  branch_head = local.find {|b| b[:ref].end_with? 'master'}
@@ -157,28 +147,30 @@ class GitSubmoduleUpdate < QB::Ansible::Module
157
147
  return false
158
148
  end
159
149
 
160
- QB.debug "commit is head of remote master, using that."
150
+ logger.debug "commit is head of remote master, using that."
161
151
  end # case local.length
162
152
  end # case branch_heads.length
163
153
 
164
- QB.debug "attaching #{ submodule[:rel_dir] } to #{ branch_head[:ref] }..."
154
+ logger.debug \
155
+ "attaching #{ submodule[:rel_dir] } to #{ branch_head[:ref] }..."
165
156
 
166
157
  branch = branch_head[:ref].split('/')[-1]
167
158
 
168
159
  Dir.chdir submodule[:dir] do
169
- QB.debug "checking out branch #{ branch } for #{ submodule[:rel_dir] }..."
160
+ logger.debug \
161
+ "checking out branch #{ branch } for #{ submodule[:rel_dir] }..."
170
162
 
171
163
  Cmds! "git checkout <%= branch %>", branch: branch
172
164
 
173
165
  # do a pull if the head was on the remote
174
166
  if branch_head[:ref].start_with? 'refs/remotes'
175
- QB.debug "commit is head of remote branch, pulling..."
167
+ logger.debug "commit is head of remote branch, pulling..."
176
168
 
177
169
  Cmds! "git pull origin <%= branch %>", branch: branch
178
170
  end
179
171
  end
180
172
 
181
- QB.debug "attached."
173
+ logger.debug "attached."
182
174
  @changed = true
183
175
  true
184
176
  end
@@ -193,5 +185,3 @@ class GitSubmoduleUpdate < QB::Ansible::Module
193
185
  nil
194
186
  end
195
187
  end
196
-
197
- GitSubmoduleUpdate.new.run
@@ -11,7 +11,7 @@ description: null
11
11
  # generalize in the future.
12
12
  requirements:
13
13
  gems:
14
- qb: ~> 0.3.0
14
+ qb: '>= 0.3.0'
15
15
 
16
16
  # prefix for role variables
17
17
  var_prefix: null
@@ -15,7 +15,7 @@ description: >-
15
15
  # Gemspec-style requirements. Right now only `.gems.qb` is used.
16
16
  requirements:
17
17
  gems:
18
- qb: ~> 0.3.0
18
+ qb: '>= 0.3.0'
19
19
 
20
20
  # Prefix for role variables
21
21
  var_prefix: pkg
@@ -12,7 +12,7 @@ description: >-
12
12
  # generalize in the future.
13
13
  requirements:
14
14
  gems:
15
- qb: ~> 0.3.0
15
+ qb: '>= 0.3.0'
16
16
 
17
17
  # prefix for role variables
18
18
  var_prefix: null
@@ -11,7 +11,7 @@ description: null
11
11
  # generalize in the future.
12
12
  requirements:
13
13
  gems:
14
- qb: ~> 0.3.0
14
+ qb: '>= 0.3.0'
15
15
 
16
16
  # prefix for role variables
17
17
  var_prefix: osx_notif
@@ -1,15 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # WANT_JSON
3
3
 
4
- # init bundler in dev env
5
- if ENV['QB_DEV_ENV']
6
- ENV.each {|k, v|
7
- if k.start_with? 'QB_DEV_ENV_'
8
- ENV[k.sub('QB_DEV_ENV_', '')] = v
9
- end
10
- }
11
- require 'bundler/setup'
12
- end
4
+ # Load QB's Ansible module autorun harness
5
+ load ENV['QB_AM_AUTORUN_PATH']
13
6
 
14
7
  require 'json'
15
8
  require 'pathname'
@@ -17,9 +10,6 @@ require 'pathname'
17
10
  require 'qb'
18
11
  require 'cmds'
19
12
  require 'nrser'
20
- require 'nrser/refinements'
21
-
22
- using NRSER
23
13
 
24
14
  class Version
25
15
  # raw version string if available (version was read from file or whatever),
@@ -91,7 +81,7 @@ class Version
91
81
  end # Version
92
82
 
93
83
 
94
- # abstract base class for bumpers - classes that implement reading and
84
+ # abstract base class for bumpers - classes that implement reading and
95
85
  # writing Version objects to a package directory.
96
86
  class Bumper
97
87
  # absolute path to the root directory of the package.
@@ -205,7 +195,7 @@ class Bump < QB::Ansible::Module
205
195
  end # #next_rc
206
196
 
207
197
 
208
- def bump_rc
198
+ def bump_rc
209
199
  @next_version = @bumper.bump! prerelease: ['rc', next_rc]
210
200
  @next_version_formatted = @bumper.class.format @next_version
211
201
 
@@ -268,5 +258,3 @@ class Bump < QB::Ansible::Module
268
258
  end
269
259
 
270
260
  end # Bump
271
-
272
- Bump.new.run
@@ -4,3 +4,5 @@
4
4
  # default the encapsulated qb.role's `role-dest` to `qb_dir` so we can be
5
5
  # sure to be able to use it here... not sure if needed.
6
6
  role_dest: "{{ qb_dir }}"
7
+
8
+ qb_role_default_dir: null
@@ -5,11 +5,16 @@
5
5
  #
6
6
 
7
7
  # prefix for role variables
8
- var_prefix: null
8
+ var_prefix: qb_role
9
9
 
10
- # how to get a default for `dir` if it's not provided as the
10
+ # how to get a default for `dir` if it's not provided as the
11
11
  default_dir: null
12
12
 
13
- options:
14
- - include: qb/role
15
- as: false
13
+ options:
14
+ - include: qb/role
15
+ as: false
16
+
17
+ - name: default_dir
18
+ description: >-
19
+ Optional `default_dir` value for QB metadata (meta/qb.yml).
20
+ type: default_dir
@@ -15,7 +15,12 @@ description: >-
15
15
  # Gemspec-style requirements. Right now only `.gems.qb` is used.
16
16
  requirements:
17
17
  gems:
18
- qb: ~> 0.3.0
18
+ # Role options taking advantage of the {NRSER::Types} system require
19
+ # QB 0.4.
20
+ #
21
+ # TODO Change this to `>= 0.4.0` when 0.4.0 is released.
22
+ #
23
+ qb: '>= 0.4.0.dev'
19
24
 
20
25
  # Prefix for role variables
21
26
  var_prefix: {{ role_namespaceless }}
@@ -24,7 +29,7 @@ var_prefix: {{ role_namespaceless }}
24
29
  #
25
30
  # @see http://www.rubydoc.info/gems/qb/file/doc/qb_roles/metadata/default_dir.md
26
31
  #
27
- default_dir: null # means use *must* provide `DIRECTORY` arg
32
+ default_dir: {{ qb_role_default_dir | to_json }}
28
33
 
29
34
  # If `true`, QB will ensure `DIRECTORY` exists before starting the play.
30
35
  mkdir: false
@@ -1,45 +1,34 @@
1
1
  #!/usr/bin/env ruby
2
2
  # WANT_JSON
3
3
 
4
- # init bundler in dev env
5
- if ENV['QB_DEV_ENV']
6
- ENV.each {|k, v|
7
- if k.start_with? 'QB_DEV_ENV_'
8
- ENV[k.sub('QB_DEV_ENV_', '')] = v
9
- end
10
- }
11
- require 'bundler/setup'
12
- end
13
-
14
- require 'qb'
15
- require 'nrser'
4
+ # Load QB's Ansible module autorun harness
5
+ load ENV['QB_AM_AUTORUN_PATH']
16
6
 
17
7
  class {{ role_module_class }} < QB::Ansible::Module
18
- # define arg names to NRSER::Types::Type instances here and they
19
- # will be type checked and set as @<name>
20
- #
21
- # example:
22
- #
23
- # arg :x, NRSER::Types.array(String)
8
+
9
+ # Arguments
10
+ # ==========================================================================
24
11
  #
25
- # will check that the input json has a key named 'x' and that it's value
26
- # is an Array of String instances, then set it's value as `@x`.
12
+ # Define arguments using the {NRSER::Props} system.
27
13
  #
28
14
 
29
- # entry point for the module. invoked by {\#run}.
15
+ # Execution
16
+ # ==========================================================================
17
+
18
+ # Entry point for the module. invoked by {\#run}.
30
19
  #
31
20
  # @return [nil | {Symbol => #to_json}]
32
21
  # when returning:
33
22
  #
34
23
  # - `nil`: module will successfully exit with no additional changes.
35
24
  #
36
- # - `{Symbol => #to_json}`: Hash will be merged over @facts that
25
+ # - `{Symbol => #to_json}`: Hash will be merged over @facts that
37
26
  # are returned by the module to be set in the Ansible runtime and
38
27
  # the module will exit successfully.
39
28
  #
40
29
  def main
41
30
  return nil
42
31
  end # #main
32
+
43
33
  end # {{ role_module_class }}
44
34
 
45
- {{ role_module_class }}.new.run
@@ -3,7 +3,20 @@
3
3
  # Ansible metadata for `{{ role_role_name }}` role
4
4
  ##############################################################################
5
5
 
6
- allow_duplicates: yes
6
+ # `no` means duplicate invocations with the *same* parameters (vars) will not
7
+ # be run.
8
+ #
9
+ # This is *usually* what you want for idempotent roles: if roles A
10
+ # and B both want a resource R in a particular state, they can both include
11
+ # or depend on a role C that accepts that state as paramters and C will be
12
+ # run only once.
13
+ #
14
+ # However, non-idemptent roles - say one that logs message - will want to set
15
+ # this value to `yes`.
16
+ #
17
+ # https://docs.ansible.com/ansible/devel/user_guide/playbooks_reuse_roles.html#role-duplication-and-execution
18
+ #
19
+ allow_duplicates: no
7
20
 
8
21
  dependencies: []
9
22
  # - role: role-name
@@ -11,7 +11,7 @@ description: null
11
11
  # generalize in the future.
12
12
  requirements:
13
13
  gems:
14
- qb: ~> 0.3.0
14
+ qb: '>= 0.3.0'
15
15
 
16
16
  # prefix for role variables
17
17
  var_prefix: null
@@ -15,7 +15,7 @@ description: >-
15
15
  # Gemspec-style requirements. Right now only `.gems.qb` is used.
16
16
  requirements:
17
17
  gems:
18
- qb: ~> 0.3.0
18
+ qb: '>= 0.3.0'
19
19
 
20
20
  # Prefix for role variables
21
21
  var_prefix: dependency
@@ -12,7 +12,7 @@ description: >-
12
12
  # generalize in the future.
13
13
  requirements:
14
14
  gems:
15
- qb: ~> 0.3.0
15
+ qb: '>= 0.3.0'
16
16
 
17
17
  # prefix for role variables
18
18
  var_prefix: false
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
3
+ # So that this script can be called from places other than the Gemfile dir,
4
+ # like when it's in `//dev/bin/console` and the Gemfile is at `//dev/Gemfile`
5
+ Dir.chdir __dir__ do
6
+ require "bundler/setup"
7
+ end
4
8
 
5
9
  # Load `nrser` gem and use refinements if it's available
6
10
  begin
@@ -9,11 +13,13 @@ rescue LoadError => error
9
13
  puts "WARN -- Failed to load `nrser` gem."
10
14
  puts "WARN -- Add it do your dependencies or edit #{ __FILE__ }"
11
15
  else
12
- using NRSER
16
+ require 'nrser/refinements/types'
13
17
  using NRSER::Types
14
18
  end
15
19
 
20
+ {% if qb_gem_info is defined %}
16
21
  require '{{ qb_gem_info.name }}'
22
+ {% endif %}
17
23
 
18
24
  # You can add fixtures and/or initialization code here to make experimenting
19
25
  # with your gem easier. You can also use a different console, if you like.
@@ -13,7 +13,7 @@ description: Build an installable `.gem` file from a source directory.
13
13
  # generalize in the future.
14
14
  requirements:
15
15
  gems:
16
- qb: ~> 0.3.0
16
+ qb: '>= 0.3.0'
17
17
 
18
18
  # prefix for role variables
19
19
  var_prefix: gem_build
@@ -12,7 +12,7 @@ description: >-
12
12
  # generalize in the future.
13
13
  requirements:
14
14
  gems:
15
- qb: ~> 0.3.0
15
+ qb: '>= 0.3.0'
16
16
 
17
17
  # prefix for role variables
18
18
  var_prefix: gem
@@ -11,7 +11,7 @@ description: null
11
11
  # generalize in the future.
12
12
  requirements:
13
13
  gems:
14
- qb: ~> 0.3.0
14
+ qb: '>= 0.3.0'
15
15
 
16
16
  # prefix for role variables
17
17
  var_prefix: false # Don't prefix variables
@@ -33,11 +33,11 @@ var_prefix: false # Don't prefix variables
33
33
  # - cwd
34
34
  # - use the directory the `qb` command is invoked form.
35
35
  # - {exe: PATH}
36
- # - invoke an executable, passing a JSON serialization of the options
36
+ # - invoke an executable, passing a JSON serialization of the options
37
37
  # mapping their CLI names to values. path can be relative to role
38
38
  # directory.
39
39
  # - {find_up: FILENAME}
40
- # - starting at the current directory and climbing up to parent
40
+ # - starting at the current directory and climbing up to parent
41
41
  # directories, use the first one that contains FILENAME. error
42
42
  # if none is found.
43
43
  default_dir: null
@@ -45,7 +45,7 @@ default_dir: null
45
45
  # If `true`, QB will ensure the default dir exists before starting the play.
46
46
  #
47
47
  # For legacy reasons, this defaults to `true` if not present, but we want to
48
- # default declare it as `false` here so new roles can turn it on only if
48
+ # default declare it as `false` here so new roles can turn it on only if
49
49
  # they need it.
50
50
  #
51
51
  mkdir: false
@@ -76,7 +76,7 @@ options:
76
76
  - name: require
77
77
  description: >-
78
78
  Explicitly specify files to require at the top of spec files.
79
- When not provided, will add all `<spec_dir>/*_helper.rb` files that
79
+ When not provided, will add all `<spec_dir>/*_helper.rb` files that
80
80
  are NOT auto-required via `<gem_root>/.rspec`.
81
81
  required: false
82
82
  type: list