qb 0.3.11 → 0.3.12
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.
- checksums.yaml +4 -4
- data/lib/python/qb/strings.py +147 -0
- data/lib/qb/github/issue.rb +14 -0
- data/lib/qb/version.rb +1 -1
- data/plugins/filter_plugins/string_plugins.py +32 -15
- data/qb.gemspec +2 -2
- data/roles/qb/rspex/generate/defaults/main.yml +10 -0
- data/roles/qb/rspex/generate/meta/main.yml +8 -0
- data/roles/qb/rspex/generate/meta/qb.yml +91 -0
- data/roles/qb/rspex/generate/tasks/class.yml +22 -0
- data/roles/qb/rspex/generate/tasks/helpers.yml +96 -0
- data/roles/qb/rspex/generate/tasks/main.yml +9 -0
- data/roles/qb/rspex/generate/templates/class_spec.rb.j2 +10 -0
- data/roles/qb/rspex/issue/defaults/main.yml +2 -0
- data/roles/qb/{test/rspec/spec → rspex}/issue/meta/main.yml +1 -1
- data/roles/qb/{test/rspec/spec → rspex}/issue/meta/qb.yml +5 -3
- data/roles/qb/{test/rspec/spec → rspex}/issue/tasks/main.yml +1 -1
- metadata +18 -10
- data/roles/qb/test/rspec/spec/issue/defaults/main.yml +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cad865997a7d3c28a43696a18d61845343640f57
|
4
|
+
data.tar.gz: 862f3381e5233eb4958e534beeeeb6e8713f70b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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()
|
data/lib/qb/github/issue.rb
CHANGED
@@ -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
|
|
data/lib/qb/version.rb
CHANGED
@@ -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
|
-
>>>
|
90
|
+
>>> cap_camel_case("git_submodule_update")
|
75
91
|
'GitSubmoduleUpdate'
|
76
92
|
|
77
|
-
>>>
|
93
|
+
>>> cap_camel_case("git-submodule-update")
|
78
94
|
'GitSubmoduleUpdate'
|
79
95
|
|
80
|
-
>>>
|
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.
|
101
|
-
spec.add_dependency "nrser", '~> 0.0', ">= 0.0.
|
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,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,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 }}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
# meta/qb.yml file for qb/
|
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:
|
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:
|
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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/
|
753
|
-
- roles/qb/
|
754
|
-
- roles/qb/
|
755
|
-
- roles/qb/
|
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
|