abide_dev_utils 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53dde19f67b39702c5430d9e9e9c0003c5e27f3440bcd9d60a575911ae9959dd
4
- data.tar.gz: 768c7f2b0ca6d3bfccef663668bfcb01a5c4828593884116ff5580df1ee1f4da
3
+ metadata.gz: 75678bc1c177a3187619cfec9d2c25e566b08d91439c3b46c578c4202f4d9a7c
4
+ data.tar.gz: f9749e6c8ad3d5b0439a8fe0fd03ba3ea91e5c0052057eea43b3862c08b45fbd
5
5
  SHA512:
6
- metadata.gz: 44e2b63c7488ac4bda0ae50ac8f672ba481fe20cb6a1087395921b115b773e96aaf08b08849c9a3dbb08cd03cde712b4d0977978434d1f7619d9f4bda403d758
7
- data.tar.gz: 35a1c0755970943435a928414da5f25c9d082372d787c6310d63557875a0ae6c5e9a272928b1073c5aa63d5a0081638ef8e3b9703a49a8900334699881ea41f0
6
+ metadata.gz: 97ba4b3b0898a40ed6df3facaf3aa03beb2d1375d61e1915c6566e107e6edffa083ab7af93827c2679c14a2503504cafd40d9275b12708f582c3723953b5c9c7
7
+ data.tar.gz: 2680eb354112e27223d590a645318ea14c4988dd0e331bf5a5f3b347402ead6398c8c07c1b7ded55704d76011522ff790459cf40452ceba8ca15dc2a19a76a7a
@@ -49,7 +49,7 @@ Gem::Specification.new do |spec|
49
49
  spec.add_development_dependency 'rubocop-ast', '~> 1.4'
50
50
  spec.add_development_dependency 'rubocop-performance', '~> 1.9'
51
51
  spec.add_development_dependency 'rubocop-i18n', '~> 3.0'
52
- spec.add_development_dependency 'fast_gettext', '~> 1.1'
52
+ spec.add_development_dependency 'fast_gettext', '~> 1.8'
53
53
 
54
54
  # For more information and examples about making a new gem, checkout our
55
55
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -2,8 +2,9 @@
2
2
 
3
3
  require 'abide_dev_utils/version'
4
4
  require 'abide_dev_utils/xccdf'
5
- require 'abide_dev_utils/utils'
6
- require 'abide_dev_utils/errors'
5
+ require 'abide_dev_utils/ppt'
6
+ require 'abide_dev_utils/jira'
7
+ require 'abide_dev_utils/config'
7
8
 
8
- # Just creates the namespace
9
+ # Root namespace all modules / classes
9
10
  module AbideDevUtils; end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Abide
4
+ module CLI
5
+ # @abstract
6
+ class Command < CmdParse::Command
7
+ include AbideDevUtils::Config
8
+ def initialize(cmd_name, cmd_short, cmd_long, **opts)
9
+ super(cmd_name, **opts)
10
+ short_desc(cmd_short)
11
+ long_desc(cmd_long)
12
+ add_command(CmdParse::HelpCommand.new, default: true) if opts[:takes_commands]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -36,7 +36,9 @@ module Abide
36
36
  def execute
37
37
  client = JIRA.client
38
38
  myself = JIRA.get_myself(client)
39
- Abide::CLI::OUTPUT.simple("Successfully authenticated user #{myself.attrs['name']}!") unless myself.attrs['name'].empty?
39
+ return if myself.attrs['name'].empty?
40
+
41
+ Abide::CLI::OUTPUT.simple("Successfully authenticated user #{myself.attrs['name']}!")
40
42
  end
41
43
  end
42
44
 
@@ -1,30 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'abide_dev_utils/cli/abstract'
4
+
3
5
  module Abide
4
6
  module CLI
5
- class PuppetCommand < CmdParse::Command
7
+ class PuppetCommand < Command
6
8
  CMD_NAME = 'puppet'
7
9
  CMD_SHORT = 'Commands related to Puppet code'
8
10
  CMD_LONG = 'Namespace for commands related to Puppet code'
9
11
  def initialize
10
- super(CMD_NAME, takes_commands: true)
11
- short_desc(CMD_SHORT)
12
- long_desc(CMD_LONG)
13
- add_command(CmdParse::HelpCommand.new, default: true)
12
+ super(CMD_NAME, CMD_SHORT, CMD_LONG, takes_commands: true)
14
13
  add_command(PuppetCoverageCommand.new)
14
+ add_command(PuppetNewCommand.new)
15
15
  end
16
16
  end
17
17
 
18
- class PuppetCoverageCommand < CmdParse::Command
18
+ class PuppetCoverageCommand < Command
19
19
  CMD_NAME = 'coverage'
20
20
  CMD_SHORT = 'Generates control coverage report'
21
21
  CMD_LONG = 'Generates report of valid Puppet classes that match with Hiera controls'
22
22
  CMD_CLASS_DIR = 'Directory that holds Puppet manifests'
23
23
  CMD_HIERA_FILE = 'Hiera file generated from an XCCDF'
24
24
  def initialize
25
- super(CMD_NAME, takes_commands: false)
26
- short_desc(CMD_SHORT)
27
- long_desc(CMD_LONG)
25
+ super(CMD_NAME, CMD_SHORT, CMD_LONG, takes_commands: false)
28
26
  argument_desc(CLASS_DIR: CMD_CLASS_DIR, HIERA_FILE: CMD_HIERA_FILE)
29
27
  options.on('-o [FILE]', '--out-file [FILE]', 'Path to save the coverage report') { |f| @data[:file] = f }
30
28
  options.on('-p [PROFILE]', '--profile [PROFILE]', 'Generate only for profile') { |p| @data[:profile] = p }
@@ -43,7 +41,7 @@ module Abide
43
41
  require 'abide_dev_utils/ppt'
44
42
  Abide::CLI::VALIDATE.directory(class_dir)
45
43
  Abide::CLI::VALIDATE.file(hiera_file)
46
- coverage = AbideDevUtils::Ppt.coverage_report(class_dir, hiera_file, @data[:profile])
44
+ coverage = AbideDevUtils::Ppt::CoverageReport.generate(class_dir, hiera_file, @data[:profile])
47
45
  coverage.each do |k, v|
48
46
  next if ['classes', 'benchmark'].include?(k)
49
47
 
@@ -54,5 +52,54 @@ module Abide
54
52
  Abide::CLI::OUTPUT.json(coverage, file: @data[:file])
55
53
  end
56
54
  end
55
+
56
+ class PuppetNewCommand < Command
57
+ CMD_NAME = 'new'
58
+ CMD_SHORT = 'Generates a new Puppet object from templates'
59
+ CMD_LONG = 'Generates a new Puppet object (class, test, etc.) from templates stored in the module repo'
60
+ CMD_TYPE_ARG = 'The type of object to generate. This value must be the name of a template (without .erb) file in <template dir>'
61
+ CMD_NAME_ARG = 'The fully namespaced name of the new object'
62
+ def initialize
63
+ super(CMD_NAME, CMD_SHORT, CMD_LONG, takes_commands: false)
64
+ argument_desc(TYPE: CMD_TYPE_ARG, NAME: CMD_NAME_ARG)
65
+ options.on(
66
+ '-t [DIR]',
67
+ '--template-dir [DIR]',
68
+ 'Path to the directory holding your ERB templates for custom objects. Defaults to "object_templates" in the root dir.'
69
+ ) { |t| @data[:tmpl_dir] = t }
70
+ options.on(
71
+ '-r [DIR]',
72
+ '--root-dir [DIR]',
73
+ 'Path to the root directory of the module. Defaults to the current working directory.'
74
+ ) { |r| @data[:root_dir] = r }
75
+ options.on(
76
+ '-A',
77
+ '--absolute-template-dir',
78
+ 'Use this flage if the template dir is an absolute path'
79
+ ) { |a| @data[:absolute_template_dir] = a }
80
+ options.on(
81
+ '-n [NAME]',
82
+ '--template-name [NAME]',
83
+ 'Allows you to specify a name for the template if it is different from the basename (last segment) of the object name.'
84
+ )
85
+ options.on(
86
+ '-V [VARNAME=VALUE]',
87
+ '--vars [VARNAME=VALUE]',
88
+ 'Allows you to specify comma-separated variable names and values that will be converted into a hash that is available for you to use in your templates'
89
+ ) { |v| @data[:vars] = v }
90
+ end
91
+
92
+ def execute(type, name)
93
+ require 'abide_dev_utils/ppt/new_obj'
94
+ builder = AbideDevUtils::Ppt::NewObjectBuilder.new(
95
+ type,
96
+ name,
97
+ opts: @data,
98
+ vars: @data.fetch(:vars, '').split(',').map { |i| i.split('=') }.to_h # makes the str a hash
99
+ )
100
+ result = builder.build
101
+ Abide::CLI::OUTPUT.simple(result)
102
+ end
103
+ end
57
104
  end
58
105
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'abide_dev_utils/errors/base'
3
4
  require 'abide_dev_utils/errors/general'
4
5
  require 'abide_dev_utils/errors/jira'
5
6
  require 'abide_dev_utils/errors/xccdf'
7
+ require 'abide_dev_utils/errors/ppt'
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'abide_dev_utils/errors/base'
4
+
5
+ module AbideDevUtils
6
+ module Errors
7
+ module Ppt
8
+ class ObjClassPathError < GenericError
9
+ @default = 'Invalid path for class:'
10
+ end
11
+
12
+ class CustomObjPathKeyError < GenericError
13
+ @default = 'Custom Object value hash does not have :path key: '
14
+ end
15
+
16
+ class CustomObjNotFoundError < GenericError
17
+ @default = 'Could not find custom object in map:'
18
+ end
19
+
20
+ class TemplateNotFoundError < GenericError
21
+ @default = 'Template does not exist at:'
22
+ end
23
+
24
+ class FailedToCreateFileError < GenericError
25
+ @default = 'Failed to create file:'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -148,7 +148,7 @@ module AbideDevUtils
148
148
  false
149
149
  end
150
150
 
151
- def self.summaries_from_coverage_report(report)
151
+ def self.summaries_from_coverage_report(report) # rubocop:disable Metrics/CyclomaticComplexity
152
152
  summaries = {}
153
153
  benchmark = nil
154
154
  report.each do |k, v|
@@ -1,57 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'pathname'
5
- require 'yaml'
6
- require 'puppet_pal'
3
+ require 'abide_dev_utils/ppt/coverage'
4
+ require 'abide_dev_utils/ppt/new_obj'
7
5
 
8
6
  module AbideDevUtils
9
7
  module Ppt
10
- def self.coverage_report(puppet_class_dir, hiera_path, profile = nil)
11
- coverage = {}
12
- coverage['classes'] = {}
13
- all_cap = find_all_classes_and_paths(puppet_class_dir)
14
- invalid_classes = find_invalid_classes(all_cap)
15
- valid_classes = all_cap.dup.transpose[0] - invalid_classes
16
- coverage['classes']['invalid'] = invalid_classes
17
- coverage['classes']['valid'] = valid_classes
18
- hiera = YAML.safe_load(File.open(hiera_path))
19
- matcher = profile.nil? ? /^profile_/ : /^profile_#{profile}/
20
- hiera.each do |k, v|
21
- key_base = k.split('::')[-1]
22
- coverage['benchmark'] = v if key_base == 'title'
23
- next unless key_base.match?(matcher)
24
-
25
- coverage[key_base] = generate_uncovered_data(v, valid_classes)
26
- end
27
- coverage
28
- end
29
-
30
- def self.generate_uncovered_data(ctrl_list, valid_classes)
31
- out_hash = {}
32
- out_hash[:num_total] = ctrl_list.length
33
- out_hash[:uncovered] = []
34
- out_hash[:covered] = []
35
- ctrl_list.each do |c|
36
- if valid_classes.include?(c)
37
- out_hash[:covered] << c
38
- else
39
- out_hash[:uncovered] << c
40
- end
41
- end
42
- out_hash[:num_covered] = out_hash[:covered].length
43
- out_hash[:num_uncovered] = out_hash[:uncovered].length
44
- out_hash[:coverage] = Float(
45
- (Float(out_hash[:num_covered]) / Float(out_hash[:num_total])) * 100.0
46
- ).floor(3)
47
- out_hash
48
- end
49
-
50
8
  # Given a directory holding Puppet manifests, returns
51
9
  # the full namespace for all classes in that directory.
52
10
  # @param puppet_class_dir [String] path to a dir containing Puppet manifests
53
11
  # @return [String] The namespace for all classes in manifests in the dir
54
- def self.find_class_namespace(puppet_class_dir)
12
+ def find_class_namespace(puppet_class_dir)
55
13
  path = Pathname.new(puppet_class_dir)
56
14
  mod_root = nil
57
15
  ns_parts = []
@@ -76,7 +34,7 @@ module AbideDevUtils
76
34
  # metadata.json, if it exists, or by using the parent directory name.
77
35
  # @param pathname [Pathname] A Pathname object of the module's manifests dir
78
36
  # @return [String] The module's namespace root
79
- def self.find_mod_root(pathname)
37
+ def find_mod_root(pathname)
80
38
  metadata_file = nil
81
39
  pathname.entries.each do |e|
82
40
  metadata_file = "#{pathname}/metadata.json" if File.basename(e) == 'metadata.json'
@@ -94,7 +52,7 @@ module AbideDevUtils
94
52
 
95
53
  # @return [Array] An array of frozen arrays where each sub-array's
96
54
  # index 0 is class_name and index 1 is the full path to the file.
97
- def self.find_all_classes_and_paths(puppet_class_dir)
55
+ def find_all_classes_and_paths(puppet_class_dir)
98
56
  all_cap = []
99
57
  Dir.each_child(puppet_class_dir) do |c|
100
58
  path = "#{puppet_class_dir}/#{c}"
@@ -104,32 +62,5 @@ module AbideDevUtils
104
62
  end
105
63
  all_cap
106
64
  end
107
-
108
- def self.find_valid_classes(all_cap)
109
- all_classes = all_cap.dup.transpose[0]
110
- all_classes - find_invalid_classes(all_cap)
111
- end
112
-
113
- def self.find_invalid_classes(all_cap)
114
- invalid_classes = []
115
- all_cap.each do |cap|
116
- invalid_classes << cap[0] unless class_valid?(cap[1])
117
- end
118
- invalid_classes
119
- end
120
-
121
- def self.class_valid?(manifest_path)
122
- compiler = Puppet::Pal::Compiler.new(nil)
123
- ast = compiler.parse_file(manifest_path)
124
- ast.body.body.statements.each do |s|
125
- next unless s.respond_to?(:arguments)
126
- next unless s.arguments.respond_to?(:each)
127
-
128
- s.arguments.each do |i|
129
- return false if i.value == 'Not implemented'
130
- end
131
- end
132
- true
133
- end
134
65
  end
135
66
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'pathname'
5
+ require 'yaml'
6
+ require 'puppet_pal'
7
+ require 'abide_dev_utils/ppt'
8
+
9
+ module AbideDevUtils
10
+ module Ppt
11
+ class CoverageReport
12
+ include AbideDevUtils::Ppt
13
+ def self.generate(puppet_class_dir, hiera_path, profile = nil)
14
+ coverage = {}
15
+ coverage['classes'] = {}
16
+ all_cap = find_all_classes_and_paths(puppet_class_dir)
17
+ invalid_classes = find_invalid_classes(all_cap)
18
+ valid_classes = all_cap.dup.transpose[0] - invalid_classes
19
+ coverage['classes']['invalid'] = invalid_classes
20
+ coverage['classes']['valid'] = valid_classes
21
+ hiera = YAML.safe_load(File.open(hiera_path))
22
+ matcher = profile.nil? ? /^profile_/ : /^profile_#{profile}/
23
+ hiera.each do |k, v|
24
+ key_base = k.split('::')[-1]
25
+ coverage['benchmark'] = v if key_base == 'title'
26
+ next unless key_base.match?(matcher)
27
+
28
+ coverage[key_base] = generate_uncovered_data(v, valid_classes)
29
+ end
30
+ coverage
31
+ end
32
+
33
+ def self.generate_uncovered_data(ctrl_list, valid_classes)
34
+ out_hash = {}
35
+ out_hash[:num_total] = ctrl_list.length
36
+ out_hash[:uncovered] = []
37
+ out_hash[:covered] = []
38
+ ctrl_list.each do |c|
39
+ if valid_classes.include?(c)
40
+ out_hash[:covered] << c
41
+ else
42
+ out_hash[:uncovered] << c
43
+ end
44
+ end
45
+ out_hash[:num_covered] = out_hash[:covered].length
46
+ out_hash[:num_uncovered] = out_hash[:uncovered].length
47
+ out_hash[:coverage] = Float(
48
+ (Float(out_hash[:num_covered]) / Float(out_hash[:num_total])) * 100.0
49
+ ).floor(3)
50
+ out_hash
51
+ end
52
+
53
+ def self.find_valid_classes(all_cap)
54
+ all_classes = all_cap.dup.transpose[0]
55
+ all_classes - find_invalid_classes(all_cap)
56
+ end
57
+
58
+ def self.find_invalid_classes(all_cap)
59
+ invalid_classes = []
60
+ all_cap.each do |cap|
61
+ invalid_classes << cap[0] unless class_valid?(cap[1])
62
+ end
63
+ invalid_classes
64
+ end
65
+
66
+ def self.class_valid?(manifest_path)
67
+ compiler = Puppet::Pal::Compiler.new(nil)
68
+ ast = compiler.parse_file(manifest_path)
69
+ ast.body.body.statements.each do |s|
70
+ next unless s.respond_to?(:arguments)
71
+ next unless s.arguments.respond_to?(:each)
72
+
73
+ s.arguments.each do |i|
74
+ return false if i.value == 'Not implemented'
75
+ end
76
+ end
77
+ true
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+ require 'pathname'
5
+ require 'abide_dev_utils/prompt'
6
+ require 'abide_dev_utils/errors/ppt'
7
+
8
+ module AbideDevUtils
9
+ module Ppt
10
+ class NewObjectBuilder
11
+ DEFAULT_EXT = '.pp'
12
+
13
+ def initialize(obj_type, obj_name, opts: {}, vars: {})
14
+ @obj_type = obj_type
15
+ @obj_name = obj_name.split(':').reject(&:empty?).join('::') # removes
16
+ @obj_basename = obj_name.split('::')[-1]
17
+ @root_dir = Pathname.new(opts.fetch(:root_dir, Dir.pwd))
18
+ @tmpl_dir = if opts.fetch(:absolute_template_dir, false)
19
+ opts.fetch(:tmpl_dir)
20
+ else
21
+ "#{@root_dir}/#{opts.fetch(:tmpl_dir, 'object_templates')}"
22
+ end
23
+ @tmpl_name = opts.fetch(:tmpl_name, "#{@obj_type}.erb")
24
+ @tmpl_path = Pathname.new("#{@tmpl_dir}/#{@tmpl_name}")
25
+ @type_path_map = opts.fetch(:type_path_map, {})
26
+ @vars = vars
27
+ end
28
+
29
+ def obj_path
30
+ case @obj_type
31
+ when 'class'
32
+ obj_path_from_name
33
+ else
34
+ custom_obj_path
35
+ end
36
+ end
37
+
38
+ def template?
39
+ @tmpl_path.file?
40
+ end
41
+
42
+ def render
43
+ raise AbideDevUtils::Errors::Ppt::TemplateNotFoundError, @tmpl_path.to_s unless template?
44
+
45
+ ERB.new(File.read(@tmpl_path.to_s), 0, '<>-').result(binding)
46
+ end
47
+
48
+ def build
49
+ continue = File.exist?(obj_path) ? AbideDevUtils::Prompt.yes_no('File exists, would you like to overwrite?') : true
50
+ return "Not overwriting file #{obj_path}" unless continue
51
+
52
+ dir, = Pathname.new(obj_path).split
53
+ Pathname.new(dir).mkpath unless Dir.exist?(dir)
54
+ content = render
55
+ File.open(obj_path, 'w') { |f| f.write(render) } unless content.empty?
56
+ raise AbideDevUtils::Errors::Ppt::FailedToCreateFileError, obj_path unless File.file?(obj_path)
57
+
58
+ "Created file #{obj_path}"
59
+ end
60
+
61
+ # If a method gets called on the Hiera object which is not defined,
62
+ # this sends that method call to hash, then doc, then super.
63
+ def method_missing(method, *args, &block)
64
+ return true if ['exist?', 'exists?'].include?(method.to_s)
65
+
66
+ return @hash.send(method, *args, &block) if @hash.respond_to?(method)
67
+
68
+ return @doc.send(method, *args, &block) if @doc.respond_to?(method)
69
+
70
+ super(method, *args, &block)
71
+ end
72
+
73
+ # Checks the respond_to? of hash, doc, or super
74
+ def respond_to_missing?(method_name, include_private = false)
75
+ return true if ['exist?', 'exists?'].include?(method_name.to_s)
76
+
77
+ @hash || @doc || super
78
+ end
79
+
80
+ private
81
+
82
+ def obj_path_from_name
83
+ parts = @obj_name.split('::')[1..-2]
84
+ parts.insert(0, 'manifests')
85
+ parts.insert(-1, "#{@obj_basename}#{DEFAULT_EXT}")
86
+ path = @root_dir + Pathname.new(parts.join('/'))
87
+ path.to_s
88
+ end
89
+
90
+ def custom_obj_path
91
+ map_val = @type_path_map.fetch(@obj_type.to_sym, nil)
92
+ return obj_path_from_name if map_val.nil?
93
+
94
+ if map_val.respond_to?(:key?)
95
+ custom_obj_path_from_hash(map_val)
96
+ else
97
+ abs_path = Pathname.new(map_val).absolute? ? map_val : "#{Dir.pwd}/#{map_val}"
98
+ "#{abs_path}/#{@obj_basename}#{DEFAULT_EXT}"
99
+ end
100
+ end
101
+
102
+ def custom_obj_path_from_hash(map_val)
103
+ raise AbideDevUtils::Errors::Ppt::CustomObjPathKeyError, map_val unless map_val.key?(:path)
104
+
105
+ abs_path = Pathname.new(map_val[:path]).absolute? ? map_val[:path] : "#{Dir.pwd}/#{map_val[:path]}"
106
+ if map_val.key?(:extension)
107
+ "#{abs_path}/#{@obj_basename}#{map_val[:extension]}"
108
+ else
109
+ "#{abs_path}/#{@obj_basename}#{DEFAULT_EXT}"
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AbideDevUtils
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abide_dev_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heston Snodgrass
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-26 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '1.1'
229
+ version: '1.8'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '1.1'
236
+ version: '1.8'
237
237
  description: Provides a CLI with helpful utilities for developing Abide
238
238
  email:
239
239
  - hsnodgrass3@gmail.com
@@ -258,6 +258,7 @@ files:
258
258
  - exe/abide
259
259
  - lib/abide_dev_utils.rb
260
260
  - lib/abide_dev_utils/cli.rb
261
+ - lib/abide_dev_utils/cli/abstract.rb
261
262
  - lib/abide_dev_utils/cli/jira.rb
262
263
  - lib/abide_dev_utils/cli/puppet.rb
263
264
  - lib/abide_dev_utils/cli/test.rb
@@ -268,11 +269,14 @@ files:
268
269
  - lib/abide_dev_utils/errors/base.rb
269
270
  - lib/abide_dev_utils/errors/general.rb
270
271
  - lib/abide_dev_utils/errors/jira.rb
272
+ - lib/abide_dev_utils/errors/ppt.rb
271
273
  - lib/abide_dev_utils/errors/xccdf.rb
272
274
  - lib/abide_dev_utils/files.rb
273
275
  - lib/abide_dev_utils/jira.rb
274
276
  - lib/abide_dev_utils/output.rb
275
277
  - lib/abide_dev_utils/ppt.rb
278
+ - lib/abide_dev_utils/ppt/coverage.rb
279
+ - lib/abide_dev_utils/ppt/new_obj.rb
276
280
  - lib/abide_dev_utils/prompt.rb
277
281
  - lib/abide_dev_utils/utils/general.rb
278
282
  - lib/abide_dev_utils/validate.rb