hiera-eyaml 3.4.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +2 -2
  3. data/.github/workflows/test.yml +18 -28
  4. data/.rubocop.yml +8 -0
  5. data/.rubocop_todo.yml +416 -0
  6. data/CHANGELOG.md +33 -1
  7. data/Gemfile +13 -14
  8. data/README.md +32 -8
  9. data/Rakefile +11 -4
  10. data/hiera-eyaml.gemspec +17 -15
  11. data/lib/hiera/backend/eyaml/CLI.rb +12 -19
  12. data/lib/hiera/backend/eyaml/commands.rb +2 -6
  13. data/lib/hiera/backend/eyaml/edithelper.rb +24 -19
  14. data/lib/hiera/backend/eyaml/encrypthelper.rb +17 -19
  15. data/lib/hiera/backend/eyaml/encryptor.rb +40 -43
  16. data/lib/hiera/backend/eyaml/encryptors/pkcs7.rb +79 -105
  17. data/lib/hiera/backend/eyaml/highlinehelper.rb +3 -5
  18. data/lib/hiera/backend/eyaml/logginghelper.rb +27 -29
  19. data/lib/hiera/backend/eyaml/options.rb +13 -16
  20. data/lib/hiera/backend/eyaml/parser/encrypted_tokens.rb +2 -2
  21. data/lib/hiera/backend/eyaml/parser/parser.rb +35 -36
  22. data/lib/hiera/backend/eyaml/parser/token.rb +15 -6
  23. data/lib/hiera/backend/eyaml/plugins.rb +13 -18
  24. data/lib/hiera/backend/eyaml/subcommand.rb +72 -74
  25. data/lib/hiera/backend/eyaml/subcommands/createkeys.rb +2 -6
  26. data/lib/hiera/backend/eyaml/subcommands/decrypt.rb +52 -52
  27. data/lib/hiera/backend/eyaml/subcommands/edit.rb +57 -58
  28. data/lib/hiera/backend/eyaml/subcommands/encrypt.rb +65 -69
  29. data/lib/hiera/backend/eyaml/subcommands/help.rb +17 -22
  30. data/lib/hiera/backend/eyaml/subcommands/recrypt.rb +13 -20
  31. data/lib/hiera/backend/eyaml/subcommands/unknown_command.rb +10 -14
  32. data/lib/hiera/backend/eyaml/subcommands/version.rb +4 -9
  33. data/lib/hiera/backend/eyaml/utils.rb +27 -28
  34. data/lib/hiera/backend/eyaml.rb +7 -9
  35. data/lib/hiera/backend/eyaml_backend.rb +33 -27
  36. metadata +62 -14
  37. data/tools/git_tag_release.rb +0 -98
  38. data/tools/regem.sh +0 -11
@@ -9,24 +9,21 @@ class Hiera
9
9
  module Backend
10
10
  module Eyaml
11
11
  module Subcommands
12
-
13
12
  class Edit < Subcommand
14
-
15
13
  def self.options
16
- [{ :name => :no_preamble,
17
- :description => "Don't prefix edit sessions with the informative preamble" },
18
- {:name => :no_decrypt,
19
- :short => "-d",
20
- :description => "Do not decrypt existing encrypted content. New content marked properly will be encrypted."}
21
- ]
14
+ [{ name: :no_preamble,
15
+ description: "Don't prefix edit sessions with the informative preamble", },
16
+ { name: :no_decrypt,
17
+ short: '-d',
18
+ description: 'Do not decrypt existing encrypted content. New content marked properly will be encrypted.', },]
22
19
  end
23
20
 
24
21
  def self.description
25
- "edit an eyaml file"
22
+ 'edit an eyaml file'
26
23
  end
27
24
 
28
25
  def self.helptext
29
- "Usage: eyaml edit [options] <some-eyaml-file>"
26
+ 'Usage: eyaml edit [options] <some-eyaml-file>'
30
27
  end
31
28
 
32
29
  def self.prefix
@@ -34,40 +31,40 @@ class Hiera
34
31
  end
35
32
 
36
33
  def self.preamble
37
- tags = (["pkcs7"] + Plugins.plugins.collect {|plugin|
38
- plugin.name.split("hiera-eyaml-").last
39
- }).collect{|name| Encryptor.find(name).tag}
40
-
41
- preamble = <<-eos
42
- This is eyaml edit mode. This text (lines starting with #{self.prefix} at the top of
43
- the file) will be removed when you save and exit.
44
- - To edit encrypted values, change the content of the DEC(<num>)::PKCS7[]!
45
- block#{(tags.size>1) ? " (or #{tags.drop(1).collect {|tag| "DEC(<num>)::#{tag}[]!" }.join(' or ')})." : '.' }
46
- WARNING: DO NOT change the number in the parentheses.
47
- - To add a new encrypted value copy and paste a new block from the
48
- appropriate example below. Note that:
49
- * the text to encrypt goes in the square brackets
50
- * ensure you include the exclamation mark when you copy and paste
51
- * you must not include a number when adding a new block
52
- e.g. #{tags.collect {|tag| "DEC::#{tag}[]!" }.join(' -or- ')}
53
- eos
54
-
55
- preamble.gsub(/^/, "#{self.prefix} ")
34
+ tags = (['pkcs7'] + Plugins.plugins.collect do |plugin|
35
+ plugin.name.split('hiera-eyaml-').last
36
+ end).collect { |name| Encryptor.find(name).tag }
37
+
38
+ preamble = <<~EOS
39
+ This is eyaml edit mode. This text (lines starting with #{prefix} at the top of
40
+ the file) will be removed when you save and exit.
41
+ - To edit encrypted values, change the content of the DEC(<num>)::PKCS7[]!
42
+ block#{(tags.size > 1) ? " (or #{tags.drop(1).collect { |tag| "DEC(<num>)::#{tag}[]!" }.join(' or ')})." : '.'}
43
+ WARNING: DO NOT change the number in the parentheses.
44
+ - To add a new encrypted value copy and paste a new block from the
45
+ appropriate example below. Note that:
46
+ * the text to encrypt goes in the square brackets
47
+ * ensure you include the exclamation mark when you copy and paste
48
+ * you must not include a number when adding a new block
49
+ e.g. #{tags.collect { |tag| "DEC::#{tag}[]!" }.join(' -or- ')}
50
+ EOS
51
+
52
+ preamble.gsub(/^/, "#{prefix} ")
56
53
  end
57
54
 
58
- def self.validate options
59
- Optimist::die "You must specify an eyaml file" if ARGV.empty?
55
+ def self.validate(options)
56
+ Optimist.die 'You must specify an eyaml file' if ARGV.empty?
60
57
  options[:source] = :eyaml
61
58
  options[:eyaml] = ARGV.shift
62
59
  if File.exist? options[:eyaml]
63
60
  begin
64
61
  options[:input_data] = File.read options[:eyaml]
65
- rescue
62
+ rescue StandardError
66
63
  raise StandardError, "Could not open file for reading: #{options[:eyaml]}"
67
64
  end
68
65
  else
69
66
  LoggingHelper.info "#{options[:eyaml]} doesn't exist, editing new file"
70
- options[:input_data] = "---"
67
+ options[:input_data] = '---'
71
68
  end
72
69
  options
73
70
  end
@@ -80,42 +77,48 @@ eos
80
77
  # The 'no_' option has special handling - bypass that and just check if a flag was set.
81
78
  if Eyaml::Options[:no_decrypt_given]
82
79
  decrypted_input = Eyaml::Options[:input_data]
83
- decrypted_file_content = Eyaml::Options[:no_preamble] ? decrypted_input : (self.preamble + decrypted_input)
80
+ decrypted_file_content = Eyaml::Options[:no_preamble] ? decrypted_input : (preamble + decrypted_input)
84
81
  else
85
82
  encrypted_parser = Parser::ParserFactory.encrypted_parser
86
83
  tokens = encrypted_parser.parse Eyaml::Options[:input_data]
87
- decrypted_input = tokens.each_with_index.to_a.map{|(t,index)| t.to_decrypted :index => index}.join
88
- decrypted_file_content = Eyaml::Options[:no_preamble] ? decrypted_input : (self.preamble + decrypted_input)
84
+ decrypted_input = tokens.each_with_index.to_a.map { |(t, index)| t.to_decrypted index: index }.join
85
+ decrypted_file_content = Eyaml::Options[:no_preamble] ? decrypted_input : (preamble + decrypted_input)
89
86
  end
90
87
 
91
88
  begin
92
- decrypted_file = EditHelper.write_tempfile decrypted_file_content unless decrypted_file
89
+ decrypted_file ||= EditHelper.write_tempfile decrypted_file_content
93
90
  system "#{editor} \"#{decrypted_file}\""
94
91
  status = $?
95
92
 
96
- raise StandardError, "File was moved by editor" unless File.file? decrypted_file
93
+ raise StandardError, 'File was moved by editor' unless File.file? decrypted_file
94
+
97
95
  raw_edited_file = File.read decrypted_file
98
96
  # strip comments at start of file
99
- edited_file = raw_edited_file.split($/,-1).drop_while {|line| line.start_with?(self.prefix)}.join($/)
97
+ edited_file = raw_edited_file.split($/, -1).drop_while { |line| line.start_with?(prefix) }.join($/)
100
98
 
101
99
  raise StandardError, "Editor #{editor} has not exited?" unless status.exited?
102
- raise StandardError, "Editor did not exit successfully (exit code #{status.exitstatus}), aborting" unless status.exitstatus == 0
103
- raise StandardError, "Edited file is blank" if edited_file.empty?
100
+
101
+ unless status.exitstatus == 0
102
+ raise StandardError,
103
+ "Editor did not exit successfully (exit code #{status.exitstatus}), aborting"
104
+ end
105
+ raise StandardError, 'Edited file is blank' if edited_file.empty?
104
106
 
105
107
  if edited_file == decrypted_input
106
- LoggingHelper.info "No changes detected, exiting"
108
+ LoggingHelper.info 'No changes detected, exiting'
107
109
  else
108
110
  decrypted_parser = Parser::ParserFactory.decrypted_parser
109
111
  edited_tokens = decrypted_parser.parse(edited_file)
110
112
 
111
113
  # check that the tokens haven't been copy / pasted
112
- used_ids = edited_tokens.find_all{ |t| t.class.name =~ /::EncToken$/ and !t.id.nil? }.map{ |t| t.id }
114
+ used_ids = edited_tokens.find_all { |t| t.class.name =~ /::EncToken$/ and !t.id.nil? }.map { |t| t.id }
113
115
  if used_ids.length != used_ids.uniq.length
114
- raise RecoverableError, "A duplicate DEC(ID) was found so I don't know how to proceed. This is probably because you copy and pasted a value - if you do this please delete the ID and parentheses"
116
+ raise RecoverableError,
117
+ "A duplicate DEC(ID) was found so I don't know how to proceed. This is probably because you copy and pasted a value - if you do this please delete the ID and parentheses"
115
118
  end
116
119
 
117
120
  # replace untouched values with the source values
118
- edited_denoised_tokens = edited_tokens.map{ |token|
121
+ edited_denoised_tokens = edited_tokens.map do |token|
119
122
  if token.class.name =~ /::EncToken$/ && !token.id.nil?
120
123
  old_token = tokens[token.id]
121
124
  if old_token.plain_text.eql? token.plain_text
@@ -126,31 +129,27 @@ eos
126
129
  else
127
130
  token
128
131
  end
129
- }
132
+ end
130
133
 
131
- encrypted_output = edited_denoised_tokens.map{ |t| t.to_encrypted }.join
134
+ encrypted_output = edited_denoised_tokens.map { |t| t.to_encrypted }.join
132
135
 
133
136
  filename = Eyaml::Options[:eyaml]
134
- File.open("#{filename}", 'w') { |file|
135
- file.write encrypted_output
136
- }
137
+ File.write("#{filename}", encrypted_output)
137
138
  end
138
139
  rescue RecoverableError => e
139
140
  LoggingHelper.info e
140
- if agree "Return to the editor to try again?"
141
- retry
142
- else
143
- raise e
144
- end
141
+ raise e unless agree 'Return to the editor to try again?'
142
+
143
+ retry
145
144
  ensure
146
- EditHelper.secure_file_delete :file => decrypted_file, :num_bytes => [edited_file.length, decrypted_input.length].max
145
+ EditHelper.secure_file_delete file: decrypted_file,
146
+ num_bytes: [edited_file.length,
147
+ decrypted_input.length,].max
147
148
  end
148
149
 
149
150
  nil
150
151
  end
151
-
152
152
  end
153
-
154
153
  end
155
154
  end
156
155
  end
@@ -7,94 +7,90 @@ class Hiera
7
7
  module Backend
8
8
  module Eyaml
9
9
  module Subcommands
10
-
11
10
  class Encrypt < Subcommand
12
-
13
11
  def self.options
14
- [{:name => :password,
15
- :description => "Source input is a password entered on the terminal",
16
- :short => 'p'},
17
- {:name => :string,
18
- :description => "Source input is a string provided as an argument",
19
- :short => 's',
20
- :type => :string},
21
- {:name => :file,
22
- :description => "Source input is a regular file",
23
- :short => 'f',
24
- :type => :string},
25
- {:name => :stdin,
26
- :description => "Source input is taken from stdin",
27
- :short => :none},
28
- {:name => :eyaml,
29
- :description => "Source input is an eyaml file",
30
- :short => 'e',
31
- :type => :string},
32
- {:name => :output,
33
- :description => "Output format of final result (examples, block, string)",
34
- :type => :string,
35
- :short => 'o',
36
- :default => "examples"},
37
- {:name => :label,
38
- :description => "Apply a label to the encrypted result",
39
- :short => 'l',
40
- :type => :string}
41
- ]
12
+ [{ name: :password,
13
+ description: 'Source input is a password entered on the terminal',
14
+ short: 'p', },
15
+ { name: :string,
16
+ description: 'Source input is a string provided as an argument',
17
+ short: 's',
18
+ type: :string, },
19
+ { name: :file,
20
+ description: 'Source input is a regular file',
21
+ short: 'f',
22
+ type: :string, },
23
+ { name: :stdin,
24
+ description: 'Source input is taken from stdin',
25
+ short: :none, },
26
+ { name: :eyaml,
27
+ description: 'Source input is an eyaml file',
28
+ short: 'e',
29
+ type: :string, },
30
+ { name: :output,
31
+ description: 'Output format of final result (examples, block, string)',
32
+ type: :string,
33
+ short: 'o',
34
+ default: 'examples', },
35
+ { name: :label,
36
+ description: 'Apply a label to the encrypted result',
37
+ short: 'l',
38
+ type: :string, },]
42
39
  end
43
40
 
44
41
  def self.description
45
- "encrypt some data"
42
+ 'encrypt some data'
46
43
  end
47
44
 
48
- def self.validate options
49
- sources = [:password, :string, :file, :stdin, :eyaml].collect {|x| x if options[x]}.compact
50
- Optimist::die "You must specify a source" if sources.count.zero?
51
- Optimist::die "You can only specify one of (#{sources.join(', ')})" if sources.count > 1
45
+ def self.validate(options)
46
+ sources = %i[password string file stdin eyaml].collect { |x| x if options[x] }.compact
47
+ Optimist.die 'You must specify a source' if sources.count.zero?
48
+ Optimist.die "You can only specify one of (#{sources.join(', ')})" if sources.count > 1
52
49
  options[:source] = sources.first
53
50
 
54
51
  options[:input_data] = case options[:source]
55
- when :password
56
- require 'hiera/backend/eyaml/highlinehelper'
57
- HighlineHelper.read_password
58
- when :string
59
- options[:string]
60
- when :file
61
- File.read options[:file]
62
- when :stdin
63
- STDIN.read
64
- when :eyaml
65
- File.read options[:eyaml]
66
- end
52
+ when :password
53
+ require 'hiera/backend/eyaml/highlinehelper'
54
+ HighlineHelper.read_password
55
+ when :string
56
+ options[:string]
57
+ when :file
58
+ File.read options[:file]
59
+ when :stdin
60
+ STDIN.read
61
+ when :eyaml
62
+ File.read options[:eyaml]
63
+ end
67
64
  options
68
-
69
65
  end
70
66
 
71
67
  def self.execute
72
68
  case Eyaml::Options[:source]
73
- when :eyaml
74
- parser = Parser::ParserFactory.decrypted_parser
75
- tokens = parser.parse(Eyaml::Options[:input_data])
76
- encrypted = tokens.map{ |token| token.to_encrypted }
77
- encrypted.join
69
+ when :eyaml
70
+ parser = Parser::ParserFactory.decrypted_parser
71
+ tokens = parser.parse(Eyaml::Options[:input_data])
72
+ encrypted = tokens.map { |token| token.to_encrypted }
73
+ encrypted.join
74
+ else
75
+ encryptor = Encryptor.find
76
+ ciphertext = encryptor.encode(encryptor.encrypt(Eyaml::Options[:input_data]))
77
+ token = Parser::EncToken.new(:block, Eyaml::Options[:input_data], encryptor, ciphertext, nil, ' ')
78
+ case Eyaml::Options[:output]
79
+ when 'block'
80
+ token.to_encrypted label: Eyaml::Options[:label], use_chevron: !Eyaml::Options[:label].nil?,
81
+ format: :block
82
+ when 'string'
83
+ token.to_encrypted label: Eyaml::Options[:label], format: :string
84
+ when 'examples'
85
+ string = token.to_encrypted label: Eyaml::Options[:label] || 'string', format: :string
86
+ block = token.to_encrypted label: Eyaml::Options[:label] || 'block', format: :block
87
+ "#{string}\n\nOR\n\n#{block}"
78
88
  else
79
- encryptor = Encryptor.find
80
- ciphertext = encryptor.encode( encryptor.encrypt(Eyaml::Options[:input_data]) )
81
- token = Parser::EncToken.new(:block, Eyaml::Options[:input_data], encryptor, ciphertext, nil, ' ')
82
- case Eyaml::Options[:output]
83
- when "block"
84
- token.to_encrypted :label => Eyaml::Options[:label], :use_chevron => !Eyaml::Options[:label].nil?, :format => :block
85
- when "string"
86
- token.to_encrypted :label => Eyaml::Options[:label], :format => :string
87
- when "examples"
88
- string = token.to_encrypted :label => Eyaml::Options[:label] || 'string', :format => :string
89
- block = token.to_encrypted :label => Eyaml::Options[:label] || 'block', :format => :block
90
- "#{string}\n\nOR\n\n#{block}"
91
- else
92
- token.to_encrypted :format => :string
93
- end
89
+ token.to_encrypted format: :string
90
+ end
94
91
  end
95
92
  end
96
93
  end
97
-
98
94
  end
99
95
  end
100
96
  end
@@ -5,47 +5,42 @@ class Hiera
5
5
  module Backend
6
6
  module Eyaml
7
7
  module Subcommands
8
-
9
8
  class Help < Subcommand
10
-
11
9
  def self.options
12
10
  []
13
11
  end
14
12
 
15
13
  def self.description
16
- "this page"
14
+ 'this page'
17
15
  end
18
16
 
19
17
  def self.execute
18
+ puts <<~EOS
19
+ Welcome to eyaml #{Eyaml::VERSION}#{' '}
20
20
 
21
- puts <<-EOS
22
- Welcome to eyaml #{Eyaml::VERSION}
23
-
24
- Usage:
25
- eyaml subcommand [global-opts] [subcommand-opts]
21
+ Usage:
22
+ eyaml subcommand [global-opts] [subcommand-opts]
26
23
 
27
- Available subcommands:
28
- #{Eyaml.subcommands.collect {|command|
29
- command_class = Subcommands.const_get(Utils.camelcase command)
30
- sprintf "%15s: %-65s", command.downcase, command_class.description unless command_class.hidden?
31
- }.compact.join("\n")}
24
+ Available subcommands:
25
+ #{Eyaml.subcommands.collect do |command|
26
+ command_class = Subcommands.const_get(Utils.camelcase(command))
27
+ format '%15s: %-65s', command.downcase, command_class.description unless command_class.hidden?
28
+ end.compact.join("\n")}
32
29
 
33
- For more help on an individual command, use --help on that command
30
+ For more help on an individual command, use --help on that command
34
31
 
35
- Installed Plugins:
36
- #{Plugins.plugins.collect {|plugin|
37
- "\t" + plugin.name.split("hiera-eyaml-").last
38
- }.join("\n")}
39
- EOS
32
+ Installed Plugins:
33
+ #{Plugins.plugins.collect do |plugin| # {' '}
34
+ "\t" + plugin.name.split('hiera-eyaml-').last
35
+ end.join("\n")}
36
+ EOS
40
37
  end
41
38
 
42
39
  def self.hidden?
43
40
  true
44
41
  end
45
-
46
42
  end
47
-
48
43
  end
49
44
  end
50
45
  end
51
- end
46
+ end
@@ -6,28 +6,26 @@ class Hiera
6
6
  module Backend
7
7
  module Eyaml
8
8
  module Subcommands
9
-
10
9
  class Recrypt < Subcommand
11
-
12
10
  def self.options
13
11
  [
14
- {:name => :change_encryption,
15
- :description => "Specify the new encryption method that should be used for the file",
16
- :short => 'd',
17
- :default => "pkcs7"}
18
- ]
12
+ { name: :change_encryption,
13
+ description: 'Specify the new encryption method that should be used for the file',
14
+ short: 'd',
15
+ default: 'pkcs7', },
16
+ ]
19
17
  end
20
18
 
21
19
  def self.description
22
- "recrypt an eyaml file"
20
+ 'recrypt an eyaml file'
23
21
  end
24
22
 
25
23
  def self.helptext
26
- "Usage: eyaml recrypt [options] <some-eyaml-file>"
24
+ 'Usage: eyaml recrypt [options] <some-eyaml-file>'
27
25
  end
28
26
 
29
- def self.validate options
30
- Optimist::die "You must specify an eyaml file" if ARGV.empty?
27
+ def self.validate(options)
28
+ Optimist.die 'You must specify an eyaml file' if ARGV.empty?
31
29
  options[:source] = :eyaml
32
30
  options[:eyaml] = ARGV.shift
33
31
  options[:input_data] = File.read options[:eyaml]
@@ -35,27 +33,22 @@ class Hiera
35
33
  options
36
34
  end
37
35
 
38
- def self.execute
39
-
36
+ def self.execute
40
37
  encrypted_parser = Parser::ParserFactory.encrypted_parser
41
38
  tokens = encrypted_parser.parse Eyaml::Options[:input_data]
42
- decrypted_input = tokens.each_with_index.to_a.map{|(t,index)| t.to_decrypted :index => index}.join
39
+ decrypted_input = tokens.each_with_index.to_a.map { |(t, index)| t.to_decrypted index: index }.join
43
40
 
44
41
  decrypted_parser = Parser::ParserFactory.decrypted_parser
45
42
  edited_tokens = decrypted_parser.parse(decrypted_input)
46
43
 
47
- encrypted_output = edited_tokens.map{ |t| t.to_encrypted({:change_encryption => @change_encryption}) }.join
44
+ encrypted_output = edited_tokens.map { |t| t.to_encrypted({ change_encryption: @change_encryption }) }.join
48
45
 
49
46
  filename = Eyaml::Options[:eyaml]
50
- File.open("#{filename}", 'w') { |file|
51
- file.write encrypted_output
52
- }
47
+ File.write("#{filename}", encrypted_output)
53
48
 
54
49
  nil
55
50
  end
56
-
57
51
  end
58
-
59
52
  end
60
53
  end
61
54
  end
@@ -4,14 +4,12 @@ class Hiera
4
4
  module Backend
5
5
  module Eyaml
6
6
  module Subcommands
7
-
8
7
  class UnknownCommand < Eyaml::Subcommand
9
-
10
8
  class << self
11
9
  attr_accessor :original_command
12
10
  end
13
11
 
14
- @@original_command = "unknown"
12
+ @@original_command = 'unknown'
15
13
 
16
14
  def self.options
17
15
  []
@@ -23,25 +21,23 @@ class Hiera
23
21
 
24
22
  def self.execute
25
23
  subcommands = Eyaml.subcommands
26
- puts <<-EOS
27
- Unknown subcommand#{ ": " + Eyaml.subcommand if Eyaml.subcommand }
24
+ puts <<~EOS
25
+ Unknown subcommand#{': ' + Eyaml.subcommand if Eyaml.subcommand}
28
26
 
29
- Usage: eyaml <subcommand>
27
+ Usage: eyaml <subcommand>
30
28
 
31
- Please use one of the following subcommands or help for more help:
32
- #{Eyaml.subcommands.sort.collect {|command|
33
- command_class = Subcommands.const_get(Utils.camelcase command)
34
- command unless command_class.hidden?
35
- }.compact.join(", ")}
36
- EOS
29
+ Please use one of the following subcommands or help for more help:
30
+ #{Eyaml.subcommands.sort.collect do |command|
31
+ command_class = Subcommands.const_get(Utils.camelcase(command))
32
+ command unless command_class.hidden?
33
+ end.compact.join(', ')}
34
+ EOS
37
35
  end
38
36
 
39
37
  def self.hidden?
40
38
  true
41
39
  end
42
-
43
40
  end
44
-
45
41
  end
46
42
  end
47
43
  end
@@ -5,15 +5,13 @@ class Hiera
5
5
  module Backend
6
6
  module Eyaml
7
7
  module Subcommands
8
-
9
8
  class Version < Subcommand
10
-
11
9
  def self.options
12
10
  []
13
11
  end
14
12
 
15
13
  def self.description
16
- "show version information"
14
+ 'show version information'
17
15
  end
18
16
 
19
17
  def self.execute
@@ -22,21 +20,18 @@ class Hiera
22
20
  Eyaml::LoggingHelper.info "hiera-eyaml (core): #{Eyaml::VERSION}"
23
21
 
24
22
  Plugins.plugins.each do |plugin|
25
- plugin_shortname = plugin.name.split("hiera-eyaml-").last
23
+ plugin_shortname = plugin.name.split('hiera-eyaml-').last
26
24
  plugin_version = begin
27
25
  Encryptor.find(plugin_shortname)::VERSION.to_s
28
- rescue
29
- "unknown (is plugin compatible with eyaml 2.0+ ?)"
26
+ rescue StandardError
27
+ 'unknown (is plugin compatible with eyaml 2.0+ ?)'
30
28
  end
31
29
  Eyaml::LoggingHelper.info "hiera-eyaml-#{plugin_shortname} (gem): #{plugin_version}"
32
30
  end
33
31
 
34
32
  nil
35
-
36
33
  end
37
-
38
34
  end
39
-
40
35
  end
41
36
  end
42
37
  end