puppet-retrospec 0.6.1 → 0.7.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
  SHA1:
3
- metadata.gz: 1b8a2d188fa0d01a182d58443a8ff7c109e67228
4
- data.tar.gz: 2e63276ab8d5b814a386615df85233191d9af9f4
3
+ metadata.gz: d2d1e94be8d1bb747a80e140e221d2ec084c4e84
4
+ data.tar.gz: cfc0f190bc77582fe7e1d851d60c6b06662efb16
5
5
  SHA512:
6
- metadata.gz: d4bab8bfad24ac10fc8b362e4ca7445075912d876d2bb9e2b2147f1f1e91ae44a65ac8cf50c3324766f30c5e9c39cebf7a4de1c5a2e4570c8d6a2daf03d77922
7
- data.tar.gz: 34a74fce6aa0cdb20acf9088e6c843076d209c813413eee0813566a4fa89ffa2458f8dcb11f477c984ae5651d1902699bc97e80d8ceea1f616c3caedc8f7660b
6
+ metadata.gz: 8a30bcaa63582f99df12131482eb08055825c0a72bf01c11faafb0b312da1bbb32ac3208dda81b1461d31097f9dbbe9d21481fbcf6c44d4650d52951cbaa6764
7
+ data.tar.gz: 1b577832ee652ac2113dfe1828326c26ef5576593e9acb3833ecc0eecd49c6fe2871f3a707e4444706a774d9ba9b41b01e99ecacafe385a96ae32fcb78649c14
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.7.0
2
+ * gh-18 puppet 4 code syntax does not work
3
+ * gh-10 safe file creation should use colors
4
+
1
5
  ## 0.6.1
2
6
  * gh-12 - allow new templates to be easily added without changing code
3
7
  * gh-8 - tests are not created when manifest is invalid
data/README.md CHANGED
@@ -25,6 +25,7 @@ Table of Contents
25
25
  * [Running Tests](#running-tests)
26
26
  * [Understanding Variable Resolution](#understanding-variable-resolution)
27
27
  * [Todo](#todo)
28
+ * [Future Parser Support](#future-parser-support)
28
29
  * [Support](#support)
29
30
 
30
31
  Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)
@@ -478,6 +479,25 @@ Resolution workflow.
478
479
  2. Find all vardef objects, resolve them if possible and store the values
479
480
  3. Anything contained in a block of code is currently ignored, until later refinement.
480
481
 
482
+ Future Parser Support
483
+ ==============
484
+ Currently Retrospec uses the old/current AST parser for code parsing. If your code contains future parser syntax
485
+ the current parser will fail to render some resource definitions but will still render the spec file template without parameters
486
+ and resource tests that are contained in your manifest.
487
+ Since Puppet 4 introduces many new things and breaks many other things I am not sure
488
+ which side of the grass is greener at this time. What I do know is that most people are using Puppet 3 and it may take
489
+ time to move to Puppet 4. I would suspect Retrospec would be more valuable for those moving to Puppet 4
490
+ who don't have unit tests that currently have Puppet 3 codebases. For those with a clean slate and start directly in
491
+ Puppet 4, Retrospec will still be able to produce the templates but some of the test cases will be missing if the old AST
492
+ parser cannot read future code syntax. If your puppet 4 codebase is compatible with puppet 3 syntax there should not be an issue.
493
+
494
+ In order to allow future parser validation please run retrospec with the following option.
495
+
496
+ ```shell
497
+ retrospec --enable-future-parser
498
+
499
+ ```
500
+
481
501
  Todo
482
502
  ============
483
503
  - Add support to fill out used facts in the unit tests automatically
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.7.0
data/bin/retrospec CHANGED
@@ -10,6 +10,7 @@ opts = Trollop::options do
10
10
  opt :enable_user_templates, "Use Retrospec templates from #{File.expand_path('~/.puppet_retrospec_templates')}",
11
11
  :require => false, :type => :boolean
12
12
  opt :enable_beaker_tests, "Enable the creation of beaker tests", :require => false, :type => :boolean
13
+ opt :enable_future_parser, "Enables the future parser only during validation", :require => false, :type => :boolean
13
14
  end
14
15
  include Puppet_Retrospec
15
16
 
data/lib/retrospec.rb CHANGED
@@ -22,6 +22,7 @@ class Retrospec
22
22
  # opts[:enable_beaker_tests]
23
23
  # opts[:template_dir]
24
24
  def initialize(supplied_module_path=nil,opts={})
25
+ Utilities::PuppetModule.instance.future_parser = opts[:enable_future_parser]
25
26
  # user supplied a template path or user wants to use local templates
26
27
  if opts[:template_dir] or opts[:enable_user_templates]
27
28
  @template_dir = Helpers.setup_user_template_dir(opts[:template_dir])
@@ -156,8 +157,14 @@ class Retrospec
156
157
  file_name = tokens.pop
157
158
  "#{file_name}_spec.rb"
158
159
  end
159
-
160
- private
161
-
162
-
163
160
  end
161
+
162
+ class String
163
+ def red; "\033[31m#{self}\033[0m" end
164
+ def green; "\033[32m#{self}\033[0m" end
165
+ def cyan; "\033[36m#{self}\033[0m" end
166
+ def yellow; "\033[33m#{self}\033[0m" end
167
+ def warning; yellow end
168
+ def fatal; red end
169
+ def info; green end
170
+ end
@@ -32,11 +32,11 @@ class Helpers
32
32
  def self.safe_mkdir(dir)
33
33
  if File.exists? dir
34
34
  unless File.directory? dir
35
- $stderr.puts "!! #{dir} already exists and is not a directory"
35
+ $stderr.puts "!! #{dir} already exists and is not a directory".fatal
36
36
  end
37
37
  else
38
38
  FileUtils.mkdir_p dir
39
- puts " + #{dir}/"
39
+ puts " + #{dir}/".info
40
40
  end
41
41
  end
42
42
 
@@ -82,7 +82,7 @@ class Helpers
82
82
 
83
83
  def self.safe_copy_file(src, dest)
84
84
  if File.exists?(dest) and not File.zero?(dest)
85
- $stderr.puts "!! #{dest} already exists"
85
+ $stderr.puts "!! #{dest} already exists".warning
86
86
  else
87
87
  if not File.exists?(src)
88
88
  safe_touch(src)
@@ -90,18 +90,18 @@ class Helpers
90
90
  safe_mkdir(File.dirname(dest))
91
91
  FileUtils.cp(src,dest)
92
92
  end
93
- puts " + #{dest}"
93
+ puts " + #{dest}".info
94
94
  end
95
95
  end
96
96
 
97
97
  def self.safe_touch(file)
98
98
  if File.exists? file
99
99
  unless File.file? file
100
- $stderr.puts "!! #{file} already exists and is not a regular file"
100
+ $stderr.puts "!! #{file} already exists and is not a regular file".fatal
101
101
  end
102
102
  else
103
103
  FileUtils.touch file
104
- puts " + #{file}"
104
+ puts " + #{file}".info
105
105
  end
106
106
  end
107
107
 
@@ -110,14 +110,14 @@ class Helpers
110
110
  old_content = File.read(filepath)
111
111
  # if we did a better comparison of content we could be smarter about when we create files
112
112
  if old_content != content or not File.zero?(filepath)
113
- $stderr.puts "!! #{filepath} already exists and differs from template"
113
+ $stderr.puts "!! #{filepath} already exists and differs from template".warning
114
114
  end
115
115
  else
116
116
  safe_mkdir(File.dirname(filepath)) unless File.exists? File.dirname(filepath)
117
117
  File.open(filepath, 'w') do |f|
118
118
  f.puts content
119
119
  end
120
- puts " + #{filepath}"
120
+ puts " + #{filepath}".info
121
121
  end
122
122
  end
123
123
  end
@@ -3,6 +3,7 @@ require 'puppet/face'
3
3
  module Utilities
4
4
  class PuppetModule
5
5
  attr_writer :module_path
6
+ attr_accessor :future_parser
6
7
 
7
8
  include Singleton
8
9
 
@@ -61,26 +62,29 @@ module Utilities
61
62
  if dir.nil?
62
63
  dir = '.'
63
64
  elsif dir.instance_of?(Array)
64
- puts "Retrospec - an array of module paths is not supported at this time"
65
+ puts "Retrospec - an array of module paths is not supported at this time".fatal
65
66
  exit 1
66
67
  end
67
68
  dir = File.expand_path(dir)
68
69
  manifest_dir = File.join(dir,'manifests')
69
70
  if ! File.exist?(manifest_dir)
70
- puts "No manifest directory in #{manifest_dir}, cannot validate this is a module"
71
+ puts "No manifest directory in #{manifest_dir}, cannot validate this is a module".fatal
71
72
  exit 1
72
73
  else
73
74
  files = Dir.glob("#{manifest_dir}/**/*.pp")
74
- warn "No puppet manifest files found at #{manifest_dir}" if files.length < 1
75
+ warn "No puppet manifest files found at #{manifest_dir}".warning if files.length < 1
75
76
  # validate the manifest files, because if one files doesn't work it affects everything
76
77
  files.each do |file|
77
78
  begin
78
- Puppet::Face[:parser, '0.0.1'].validate(file)
79
+ Puppet[:parser] = 'future' if future_parser
80
+ Puppet::Face[:parser, :current].validate(file)
79
81
  rescue SystemExit => e
80
- puts "Manifest file: #{file} has parser errors, please fix and re-check using\n puppet parser validate #{file}"
82
+ puts "Manifest file: #{file} has parser errors, please fix and re-check using\n puppet parser validate #{file}".fatal
81
83
  exit 1
82
84
  end
83
85
  end
86
+ # switch back to current parser, since we rely on the AST parser
87
+ Puppet[:parser] = 'current' if future_parser
84
88
  end
85
89
  dir
86
90
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: puppet-retrospec 0.6.1 ruby lib
5
+ # stub: puppet-retrospec 0.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "puppet-retrospec"
9
- s.version = "0.6.1"
9
+ s.version = "0.7.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Corey Osman"]
14
- s.date = "2015-03-27"
14
+ s.date = "2015-04-07"
15
15
  s.description = "Retrofits and generates valid puppet rspec test code to existing modules"
16
16
  s.email = "corey@logicminds.biz"
17
17
  s.executables = ["retrospec"]
@@ -28,6 +28,13 @@ describe "puppet-retrospec" do
28
28
  expect(tomcat).to be_instance_of(Retrospec)
29
29
  end
30
30
 
31
+ it 'should set the parser to future' do
32
+ opts = {:module_path => @path, :enable_beaker_tests => false,
33
+ :enable_user_templates => false, :template_dir => nil, :enable_future_parser => true }
34
+ tomcat = Retrospec.new(opts[:module_path], opts)
35
+ expect(tomcat.spec_object.instance.future_parser).to eq(true)
36
+ end
37
+
31
38
  it 'should create files without error' do
32
39
  tomcat = Retrospec.new(@opts[:module_path], @opts)
33
40
  tomcat.create_files
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-retrospec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Osman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2015-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet