hiera-eyaml 3.4.0 → 4.1.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.
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 +41 -1
  7. data/Gemfile +13 -14
  8. data/README.md +34 -10
  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 +81 -104
  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