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 +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
|