qb 0.3.11 → 0.3.12

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: d1678a4a6dfc757aecb5af77047d7297a904fb31
4
- data.tar.gz: 3625a1a8927af9408f0a86bf835f3036edd232e8
3
+ metadata.gz: cad865997a7d3c28a43696a18d61845343640f57
4
+ data.tar.gz: 862f3381e5233eb4958e534beeeeb6e8713f70b5
5
5
  SHA512:
6
- metadata.gz: 41154f9bdd64ad770b27dec333ab1a17eb972ac3611518b2a79e945ab35b0f8e19ab4a41fadea8a3e54731ec3c030216ccf4f61b1eee70d445b6f1b28ea14e81
7
- data.tar.gz: 3a123e89b2ea5b62b67b6ba07b4296f9d1a5288cb99a30effd91d58a393e902de16c0d2fd5d4d96a5151857ab367a2b99ac43b791e151140beeba3dc7609a976
6
+ metadata.gz: e84892a7b62dad0a3f7d4dfb4a5aa5dd5c865a3412ef8b6f1e1f70ada799e61b3f7397511a8e3aa6275c3927ff0c32c21fd1aae179bc6551689d2251db047275
7
+ data.tar.gz: c40a7c516e791e845d335ad3a8aa31dfc8537c3a5f7d72010cd28f1e2bd4dc04fe40c829fd600f974e72ec3f27e035dce51fbd3e1d06744c1b3b9c00a34db310
@@ -0,0 +1,147 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from __future__ import (absolute_import, division, print_function)
4
+ __metaclass__ = type
5
+
6
+ import re
7
+
8
+
9
+
10
+ # Constants
11
+ # ============================================================================
12
+
13
+ # Regular expression to split strings into their module namespace pieces by
14
+ # `::` (Ruby) or `.` (Python, Javascript).
15
+ #
16
+ NAMESPACE_SPLIT_RE = re.compile(r'(?:\:\:)|\.|\#')
17
+
18
+
19
+ # Functions
20
+ # ============================================================================
21
+
22
+ def words(string):
23
+ '''break a string into words
24
+
25
+ >>> words('git_submodule_update')
26
+ ['git', 'submodule', 'update']
27
+
28
+ >>> words("qb.DoSomething")
29
+ ['qb', 'Do', 'Something']
30
+
31
+ >>> words("TestGem::SomeClass")
32
+ ['Test', 'Gem', 'Some', 'Class']
33
+
34
+ >>> words("MyAPIClass")
35
+ ['My', 'API', 'Class']
36
+
37
+ >>> words('ThisIsAName')
38
+ ['This', 'Is', 'A', 'Name']
39
+
40
+ >>> words('404Error')
41
+ ['404', 'Error']
42
+
43
+ >>> words('MyPackageV1')
44
+ ['My', 'Package', 'V', '1']
45
+
46
+ # Don't work with doctest I guess..?
47
+ # >>> [print(_) for _ in words(u'中文')]
48
+ # [u'中文']
49
+ '''
50
+
51
+ consumers = [
52
+ [tag, [re.compile(pattern, re.U) for pattern in patterns]]
53
+ for tag, patterns in
54
+ [
55
+ ['break', [r'([\W\_]+)']],
56
+ ['lower_case', [r'([a-z]+)']],
57
+ ['capitalized', [r'([A-Z][a-z]+)']],
58
+ ['acronym', [
59
+ r'([A-Z]+)[A-Z][a-z]',
60
+ r'([A-Z]+)[0-9]',
61
+ r'([A-Z]+)\z',
62
+ ]],
63
+ ['number', [r'([0-9]+)']],
64
+ ['other', [r'([^0-9a-zA-Z]+)']],
65
+ ]
66
+ ]
67
+
68
+ def find(remaining):
69
+ for tag, exps in consumers:
70
+ for exp in exps:
71
+ # print("matching %s %s %s" % (tag, exp, remaining))
72
+ match = exp.match(remaining)
73
+ if match:
74
+ # print("matched %s! %s" % (tag, match.group(0)))
75
+ return [tag, exp, match]
76
+ raise StandardError("bad string: %s" % remaining)
77
+
78
+ index = 0
79
+ results = []
80
+ remaining = string
81
+
82
+ while len(remaining) > 0:
83
+ [tag, exp, match] = find(remaining)
84
+ if tag != 'break':
85
+ results.append(remaining[:match.end(1)])
86
+ remaining = remaining[match.end(1):]
87
+
88
+ return results
89
+
90
+
91
+ def snake(name):
92
+ '''
93
+ Turn a name into underscore-separated lower case.
94
+
95
+ >>> snake('git_submodule_update')
96
+ 'git_submodule_update'
97
+
98
+ >>> snake("qb.DoSomething")
99
+ 'qb_do_something'
100
+
101
+ >>> snake("TestGem::SomeClass")
102
+ 'test_gem_some_class'
103
+
104
+ >>> snake("MyAPIClass")
105
+ 'my_api_class'
106
+
107
+ >>> snake('ThisIsAName')
108
+ 'this_is_a_name'
109
+
110
+ >>> snake('404Error')
111
+ '404_error'
112
+
113
+ >>> snake('MyPackageV1')
114
+ 'my_package_v_1'
115
+
116
+ '''
117
+ return '_'.join([part.lower() for part in words(name)])
118
+
119
+
120
+ def filepath(name):
121
+ '''
122
+ Turn a name into a file path.
123
+
124
+ >>> filepath('TestGem::SomeClass')
125
+ 'test_gem/some_class'
126
+
127
+ >>> filepath('TestGem::SomeClass#that_method')
128
+ 'test_gem/some_class/that_method'
129
+
130
+ # TODO
131
+ # >>> filepath("TestGem::SomeClass How to do something")
132
+ # 'test_gem/some_class/how_to_do_something'
133
+
134
+ >>> filepath('qb.strings.filepath')
135
+ 'qb/strings/filepath'
136
+
137
+ '''
138
+ namespaces = NAMESPACE_SPLIT_RE.split(name)
139
+ snaked = [snake(words_) for words_ in namespaces]
140
+ joined = "/".join(snaked)
141
+ return joined
142
+
143
+
144
+ # testing - call camel_case on first cli arg and print result
145
+ if __name__ == '__main__':
146
+ import doctest
147
+ doctest.testmod()
@@ -52,6 +52,20 @@ class QB::GitHub::Issue < QB::GitHub::Resource
52
52
  def self.find_by repo_id:, number:
53
53
  new QB::GitHub::API.client.issue( repo_id.path, number )
54
54
  end # .find
55
+
56
+
57
+
58
+ # @todo Document list method.
59
+ #
60
+ # @param [type] arg_name
61
+ # @todo Add name param description.
62
+ #
63
+ # @return [return_type]
64
+ # @todo Document return value.
65
+ #
66
+ def self.list arg_name
67
+ # method body
68
+ end # .list
55
69
 
56
70
 
57
71
 
@@ -4,7 +4,7 @@ module QB
4
4
 
5
5
  GEM_NAME = 'qb'
6
6
 
7
- VERSION = "0.3.11"
7
+ VERSION = "0.3.12"
8
8
 
9
9
  MIN_ANSIBLE_VERSION = Gem::Version.new '2.1.2'
10
10
 
@@ -17,14 +17,41 @@
17
17
  # https://stackoverflow.com/questions/35139025/can-not-handle-attributeerror-module-object-has-no-attribute-maketrans
18
18
  #
19
19
 
20
+
21
+ # Imports
22
+ # ============================================================================
23
+
20
24
  from __future__ import (absolute_import, division, print_function)
21
25
  __metaclass__ = type
22
26
 
23
27
  import sys
24
28
  import re
29
+ import os
25
30
 
26
31
  from ansible.errors import AnsibleError
27
32
 
33
+
34
+ # Project Imports Setup
35
+ # ----------------------------------------------------------------------------
36
+
37
+ PROJECT_ROOT = os.path.realpath(
38
+ os.path.join(
39
+ os.path.dirname(os.path.realpath(__file__)), # //plugins/filter_plugins
40
+ '..', # //plugins
41
+ '..', # //
42
+ )
43
+ )
44
+
45
+ LIB_PYTHON_DIR = os.path.join( PROJECT_ROOT, 'lib', 'python' )
46
+
47
+ if not (LIB_PYTHON_DIR in sys.path):
48
+ sys.path.insert(0, LIB_PYTHON_DIR)
49
+
50
+ # Now we can import from `//lib/python`...
51
+
52
+ import qb.strings
53
+
54
+
28
55
  def cap(string):
29
56
  '''just upper-case the first damn letter.
30
57
 
@@ -37,17 +64,6 @@ def cap(string):
37
64
  return string[0].upper() + string[1:]
38
65
 
39
66
 
40
- def words(string):
41
- '''break a string into words
42
-
43
- >>> words('git_submodule_update')
44
- ['git', 'submodule', 'update']
45
-
46
- >>> words("qb.DoSomething")
47
- ['qb', 'DoSomething']
48
- '''
49
- return re.split('[\W\_]+', string)
50
-
51
67
 
52
68
  def camel_case(string):
53
69
  '''convert a name to camel case.
@@ -71,13 +87,13 @@ def camel_case(string):
71
87
  def cap_camel_case(string):
72
88
  '''convert a string to camel case with a leading capital.
73
89
 
74
- >>> upper_camel_case("git_submodule_update")
90
+ >>> cap_camel_case("git_submodule_update")
75
91
  'GitSubmoduleUpdate'
76
92
 
77
- >>> upper_camel_case("git-submodule-update")
93
+ >>> cap_camel_case("git-submodule-update")
78
94
  'GitSubmoduleUpdate'
79
95
 
80
- >>> upper_camel_case("qb.do_something")
96
+ >>> cap_camel_case("qb.do_something")
81
97
  'QbDoSomething'
82
98
  '''
83
99
  return cap(camel_case(string))
@@ -89,10 +105,11 @@ class FilterModule(object):
89
105
  def filters(self):
90
106
  return {
91
107
  'cap': cap,
92
- 'words': words,
108
+ 'words': qb.strings.words,
93
109
  'camel_case': camel_case,
94
110
  'cap_camel_case': cap_camel_case,
95
111
  'class_case': cap_camel_case,
112
+ 'to_filepath': qb.strings.filepath,
96
113
  }
97
114
 
98
115
 
data/qb.gemspec CHANGED
@@ -97,8 +97,8 @@ Gem::Specification.new do |spec|
97
97
  spec.add_development_dependency "yard"
98
98
  spec.add_development_dependency "pry"
99
99
 
100
- spec.add_dependency "cmds", '~> 0.0', ">= 0.2.3"
101
- spec.add_dependency "nrser", '~> 0.0', ">= 0.0.28"
100
+ spec.add_dependency "cmds", '~> 0.0', ">= 0.2.4"
101
+ spec.add_dependency "nrser", '~> 0.0', ">= 0.0.29"
102
102
  spec.add_dependency "nrser-extras", '~> 0.0', ">= 0.0.3"
103
103
  spec.add_dependency "state_mate", '~> 0.0', ">= 0.0.9"
104
104
  spec.add_dependency 'parseconfig', '~> 1.0', '>= 1.0.8'
@@ -0,0 +1,10 @@
1
+ ---
2
+ # defaults file for qb/rspex/generate
3
+
4
+ gem_root: >-
5
+ {{ qb_dir }}
6
+
7
+ spec_dir: spec
8
+
9
+ spec_abs_dir: >-
10
+ {{ gem_root | path_resolve( spec_dir ) }}
@@ -0,0 +1,8 @@
1
+ ---
2
+ # meta file for qb/rspex/generate
3
+
4
+ allow_duplicates: yes
5
+
6
+ dependencies:
7
+ - role: nrser.rb
8
+
@@ -0,0 +1,91 @@
1
+ ---
2
+ # meta/qb.yml file for qb/rspex/generate
3
+ #
4
+ # qb settings for this role. see README.md for more info.
5
+ #
6
+
7
+ # description of the role to show in it's help output.
8
+ description: null
9
+
10
+ # Gemspec-style requirements. Right now only `gems:qb` is used, but plan to
11
+ # generalize in the future.
12
+ requirements:
13
+ gems:
14
+ qb: ~> 0.3.0
15
+
16
+ # prefix for role variables
17
+ var_prefix: false # Don't prefix variables
18
+
19
+ # how to get a default for `dir` if it's not provided as the only
20
+ # positional argument. if a positional argument is provided it will
21
+ # override the method defined here.
22
+ #
23
+ # options:
24
+ #
25
+ # - null
26
+ # - require the value on the command line.
27
+ # - false
28
+ # - don't provide qb_dir (means doesn't load or save options either).
29
+ # - git_root
30
+ # - use the git root of the directory that the `qb` command is invoked
31
+ # from. useful for 'project-centric' commands so they can be invoked
32
+ # from anywhere in the repo.
33
+ # - cwd
34
+ # - use the directory the `qb` command is invoked form.
35
+ # - {exe: PATH}
36
+ # - invoke an executable, passing a JSON serialization of the options
37
+ # mapping their CLI names to values. path can be relative to role
38
+ # directory.
39
+ # - {find_up: FILENAME}
40
+ # - starting at the current directory and climbing up to parent
41
+ # directories, use the first one that contains FILENAME. error
42
+ # if none is found.
43
+ default_dir: null
44
+
45
+ # If `true`, QB will ensure the default dir exists before starting the play.
46
+ #
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
49
+ # they need it.
50
+ #
51
+ mkdir: false
52
+
53
+ # default user to become for play
54
+ default_user: null
55
+
56
+ # set to false to not save options in .qb-options.yml files
57
+ save_options: true
58
+
59
+ # options to pass to ansible-playbook
60
+ ansible_options: {}
61
+
62
+ options:
63
+ # - name: example
64
+ # description: an example of a variable.
65
+ # required: false
66
+ # type: boolean # boolean (default) | string
67
+ # short: e
68
+
69
+ - name: spec_dir
70
+ description: >-
71
+ Directory that specs go in. May be relative to the gem root or absolute.
72
+ required: false
73
+ type: path
74
+ short: d
75
+
76
+ - name: require
77
+ description: >-
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
80
+ are NOT auto-required via `<gem_root>/.rspec`.
81
+ required: false
82
+ type: list
83
+ short: r
84
+
85
+ - name: class
86
+ description: >-
87
+ Generate spec file for a class.
88
+ required: false
89
+ type: string
90
+ short: c
91
+
@@ -0,0 +1,22 @@
1
+ ---
2
+
3
+ - name: >-
4
+ Set `dest` for `class={{ class }}` relative to
5
+ `spec_abs_dir={{ spec_abs_dir }}`
6
+ set_fact:
7
+ dest: >-
8
+ {{ spec_abs_dir | path_join( (class | to_filepath) + '_spec.rb' ) }}
9
+
10
+ - name: >-
11
+ Make sure the destination directory `{{ dest | dirname }}` exists
12
+ file:
13
+ dest: >-
14
+ {{ dest | dirname }}
15
+ state: directory
16
+
17
+ - name: >-
18
+ Render spec file template
19
+ template:
20
+ src: class_spec.rb.j2
21
+ dest: >-
22
+ {{ dest }}
@@ -0,0 +1,96 @@
1
+ ---
2
+ ##
3
+ # Figure out what's going on with helpers, which are files like
4
+ #
5
+ # <gem_root>/spec/*_helper.rb
6
+ #
7
+ # They may be auto-required in `<gem_root>/.rspec` with lines like
8
+ #
9
+ # --require spec_helper.rb
10
+ #
11
+ # These tasks determine what helpers a generated spec file should require.
12
+ #
13
+ # Expects:
14
+ #
15
+ # @var [str] spec_abs_dir
16
+ # Absolute path to the target gem's spec directory.
17
+ #
18
+ # @var [list<str>?] require
19
+ # Optional list of string names to require in spec files. If not defined,
20
+ # it will be set - see details below.
21
+ #
22
+ #
23
+ # Provides:
24
+ #
25
+ # @var [list<str>] available_helpers
26
+ # List of "requirable" strings pulled from any `<spec_dir>/*_helper.rb` files
27
+ # found.
28
+ #
29
+ # @var [list<str>] auto_require_helpers
30
+ # List of "auto-required" helpers parsed from `--require *_helper` lines in
31
+ # `<gem_root>/.rspec` (if it exists). Will be `[]` if `.rspec` doesn't exist
32
+ # or has not `--require *_helper` lines.
33
+ #
34
+ # @var [list<str>] require
35
+ # List of string names to require in spec files. If this variables is *not*
36
+ # defined it will be set to all available helpers that are *not*
37
+ # auto-required in `.rspec`.
38
+ #
39
+ ##
40
+
41
+ - name: >-
42
+ Get a list of available `*_helper.rb` files in
43
+ `spec_abs_dir={{ spec_abs_dir }}`
44
+ find:
45
+ paths: >-
46
+ {{ spec_abs_dir }}
47
+ patterns: '*_helper.rb'
48
+ register: found_helpers
49
+
50
+
51
+ - name: >-
52
+ Set `available_helpers` to the extension-less basenames of each file in
53
+ `found_helpers.files`
54
+ set_fact:
55
+ available_helpers: >-
56
+ {{
57
+ found_helpers.files
58
+ | map( attribute='path' )
59
+ | map( 'basename' )
60
+ | map( 'splitext' )
61
+ | map( 'first' )
62
+ | list
63
+ }}
64
+
65
+
66
+ - name: >-
67
+ Set `auto_require_helpers` to the list of spec helpers files that are
68
+ auto-required via `--require <name>_helper` lines in `<gem_root>/.rspec`
69
+ set_fact_with_ruby:
70
+ var_name: auto_require_helpers
71
+ bind:
72
+ gem_root: >-
73
+ {{ gem_root }}
74
+ src: |
75
+ require 'pathname'
76
+
77
+ path = Pathname.new( gem_root ) / '.rspec'
78
+
79
+ if path.file?
80
+ path.read.scan( /^\-\-require(?:\ |\=)(.*_helper)$/ ).map &:first
81
+ else
82
+ []
83
+ end
84
+
85
+
86
+ - when: require is not defined
87
+ name: >-
88
+ Set `require` to all the `available_helpers` that are not
89
+ `auto_require_helpers={{ auto_require_helpers }}`
90
+ set_fact:
91
+ require: >-
92
+ {{ available_helpers | difference( auto_require_helpers ) }}
93
+
94
+
95
+ # - debug: var=require
96
+
@@ -0,0 +1,9 @@
1
+ ---
2
+ # tasks file for qb/rspex/generate
3
+
4
+ - include_tasks: >-
5
+ {{ role_path }}/tasks/helpers.yml
6
+
7
+ - when: class
8
+ include_tasks: >-
9
+ {{ role_path }}/tasks/class.yml
@@ -0,0 +1,10 @@
1
+ {% for name in require %}
2
+ require {{ name | string | to_json }}
3
+ {% endfor %}
4
+
5
+ describe_class {{ class }} do
6
+ ##############################################################################
7
+
8
+ # Examples and groups...
9
+
10
+ end # describe_class {{ class }}
@@ -0,0 +1,2 @@
1
+ ---
2
+ # defaults file for qb/rspex/issue
@@ -1,5 +1,5 @@
1
1
  ---
2
- # meta file for qb/test/rspec/spec/issue
2
+ # meta file for qb/rspex/issue
3
3
 
4
4
  allow_duplicates: yes
5
5
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- # meta/qb.yml file for qb/test/rspec/spec/issue
2
+ # meta/qb.yml file for qb/rspex/issue
3
3
  #
4
4
  # qb settings for this role. see README.md for more info.
5
5
  #
@@ -40,7 +40,7 @@ var_prefix: null
40
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
- default_dir: null
43
+ default_dir: git_root
44
44
 
45
45
  # If `true`, QB will ensure the default dir exists before starting the play.
46
46
  #
@@ -59,9 +59,11 @@ save_options: true
59
59
  # options to pass to ansible-playbook
60
60
  ansible_options: {}
61
61
 
62
- options: []
62
+ options:
63
63
  # - name: example
64
64
  # description: an example of a variable.
65
65
  # required: false
66
66
  # type: boolean # boolean (default) | string
67
67
  # short: e
68
+
69
+ - name:
@@ -1,5 +1,5 @@
1
1
  ---
2
- # tasks file for qb/test/rspec/spec/issue
2
+ # tasks file for qb/rspex/issue
3
3
 
4
4
  - set_fact:
5
5
  issue: >-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11
4
+ version: 0.3.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - nrser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-10 00:00:00.000000000 Z
11
+ date: 2017-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,7 +89,7 @@ dependencies:
89
89
  version: '0.0'
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 0.2.3
92
+ version: 0.2.4
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: '0.0'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 0.2.3
102
+ version: 0.2.4
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: nrser
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0.0'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 0.0.28
112
+ version: 0.0.29
113
113
  type: :runtime
114
114
  prerelease: false
115
115
  version_requirements: !ruby/object:Gem::Requirement
@@ -119,7 +119,7 @@ dependencies:
119
119
  version: '0.0'
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
- version: 0.0.28
122
+ version: 0.0.29
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: nrser-extras
125
125
  requirement: !ruby/object:Gem::Requirement
@@ -252,6 +252,7 @@ files:
252
252
  - exe/qb
253
253
  - lib/python/qb/__init__.py
254
254
  - lib/python/qb/interop.py
255
+ - lib/python/qb/strings.py
255
256
  - lib/qb.rb
256
257
  - lib/qb/ansible.rb
257
258
  - lib/qb/ansible/cmds/playbook.rb
@@ -749,10 +750,17 @@ files:
749
750
  - roles/qb/role/qb/tasks/main.yml
750
751
  - roles/qb/role/qb/templates/.gitkeep
751
752
  - roles/qb/role/qb/templates/qb.yml.j2
752
- - roles/qb/test/rspec/spec/issue/defaults/main.yml
753
- - roles/qb/test/rspec/spec/issue/meta/main.yml
754
- - roles/qb/test/rspec/spec/issue/meta/qb.yml
755
- - roles/qb/test/rspec/spec/issue/tasks/main.yml
753
+ - roles/qb/rspex/generate/defaults/main.yml
754
+ - roles/qb/rspex/generate/meta/main.yml
755
+ - roles/qb/rspex/generate/meta/qb.yml
756
+ - roles/qb/rspex/generate/tasks/class.yml
757
+ - roles/qb/rspex/generate/tasks/helpers.yml
758
+ - roles/qb/rspex/generate/tasks/main.yml
759
+ - roles/qb/rspex/generate/templates/class_spec.rb.j2
760
+ - roles/qb/rspex/issue/defaults/main.yml
761
+ - roles/qb/rspex/issue/meta/main.yml
762
+ - roles/qb/rspex/issue/meta/qb.yml
763
+ - roles/qb/rspex/issue/tasks/main.yml
756
764
  - roles/qb/yarn/setup/README.md
757
765
  - roles/qb/yarn/setup/defaults/main.yml
758
766
  - roles/qb/yarn/setup/meta/main.yml
@@ -1,2 +0,0 @@
1
- ---
2
- # defaults file for qb/test/rspec/spec/issue