ruby_vault 0.1.0.pre.2 → 0.1.0.pre.5

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: 517ba1189e0acf38b729072d2f4a79ff4d22e0d7630d22d7933d0e33eb2ef04f
4
- data.tar.gz: e70f30492b24464cf6505ac87fc040070c9915abb08a8696d66b3caa41440c31
3
+ metadata.gz: fb03f600d2c47bd04285941594a82ef4f3e0db9b8fc7e5092326f96fbaca5e9e
4
+ data.tar.gz: 0b83a87b3ab6690737170e14aab376e83ef519df45d25c75c49fc86789b85be9
5
5
  SHA512:
6
- metadata.gz: d1aa3226f32c5f59acdfba7d0cfab67e71e10d8cbe9912f45ac18a54cca8df93912ebfe09b3897b8a47687e4301a818b01b6778a3ae1c2ac89cfa7564a3f445d
7
- data.tar.gz: 83577b10a67ea70167fdb434ebaa3fb81c55538a82a2e748f6b0ac2fff857f5f78984a356a488fdae00e65e4bc100e989e0d84c2a168aef7d211d0c0cfce441a
6
+ metadata.gz: 120ebda0f8284dfbd8fb8995554953725022f60aa8ccb114e060bfaca71c836e19907c2954f15f41876c9ea8ecd51bb22910aecf9d8472025850a7c383fbad78
7
+ data.tar.gz: dd6e94ffb5afeeffba98af0b8df0e9c992c772ea62b5524032862f9249c74959767d3985d37da1354116f1ea7243963878b2e3d824c457521f70ae3be8f69613
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby_vault (0.1.0.pre.2)
4
+ ruby_vault (0.1.0.pre.5)
5
5
  immutable-struct (~> 2.4)
6
6
  lino (~> 3.0)
7
7
 
@@ -115,7 +115,7 @@ GEM
115
115
  diff-lcs (>= 1.2.0, < 2.0)
116
116
  rspec-support (~> 3.11.0)
117
117
  rspec-support (3.11.0)
118
- rubocop (1.32.0)
118
+ rubocop (1.33.0)
119
119
  json (~> 2.3)
120
120
  parallel (~> 1.10)
121
121
  parser (>= 3.1.0.0)
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lino'
4
+
5
+ require_relative '../errors'
6
+
7
+ module RubyVault
8
+ module Commands
9
+ class Base
10
+ # rubocop:disable Metrics/AbcSize
11
+
12
+ # Constructs an instance of the command.
13
+ #
14
+ def initialize(**opts)
15
+ @binary = opts[:binary] || RubyVault.configuration.binary
16
+ @logger = opts[:logger] || RubyVault.configuration.logger
17
+ @options = opts[:options] || RubyVault.configuration.options
18
+ @stdin = opts[:stdin] || RubyVault.configuration.stdin
19
+ @stdout = opts[:stdout] || RubyVault.configuration.stdout
20
+ @stderr = opts[:stderr] || RubyVault.configuration.stderr
21
+ end
22
+
23
+ # rubocop:enable Metrics/AbcSize
24
+
25
+ # Executes the command instance.
26
+ #
27
+ # @param [Hash<String, Object>] parameters The parameters used to
28
+ # invoke the command. See subclass documentation for details of
29
+ # supported options.
30
+ # @param [Hash<String, Object>] invocation_options Additional options
31
+ # controlling the invocation of the command.
32
+ # @option invocation_options [Hash<String, String>] :environment A map
33
+ # of environment variables to expose at command invocation time.
34
+ def execute(parameters = {}, invocation_options = {})
35
+ do_before(parameters)
36
+ build_and_execute_command(parameters, invocation_options)
37
+ do_after(parameters)
38
+ rescue Open4::SpawnError
39
+ message = "Failed while running '#{command_name}'."
40
+ logger.error(message)
41
+ raise Errors::ExecutionError, message
42
+ end
43
+
44
+ protected
45
+
46
+ attr_reader :binary, :logger, :stdin, :stdout, :stderr
47
+
48
+ def build_and_execute_command(parameters, invocation_options)
49
+ command = build_command(parameters, invocation_options)
50
+
51
+ logger.debug("Running '#{command}'.")
52
+ command.execute(
53
+ stdin: stdin,
54
+ stdout: stdout,
55
+ stderr: stderr
56
+ )
57
+ end
58
+
59
+ def command_name
60
+ self.class.to_s.split('::')[-1].downcase
61
+ end
62
+
63
+ def do_before(_parameters); end
64
+
65
+ def do_after(_parameters); end
66
+
67
+ private
68
+
69
+ def build_command(parameters, invocation_options)
70
+ parameters = resolve_parameters(parameters)
71
+ environment = invocation_options[:environment] || {}
72
+
73
+ Lino::CommandLineBuilder
74
+ .for_command(@binary)
75
+ .with_environment_variables(environment)
76
+ .with_options_after_subcommands
77
+ .with_option_separator('=')
78
+ .with_appliables(@options.resolve(options, parameters))
79
+ .with_subcommands(subcommands)
80
+ .with_arguments(arguments(parameters).compact.flatten).build
81
+ end
82
+
83
+ def resolve_parameters(parameters)
84
+ parameter_defaults(parameters)
85
+ .merge(parameters)
86
+ .merge(parameter_overrides(parameters))
87
+ end
88
+
89
+ def parameter_defaults(_parameters)
90
+ {}
91
+ end
92
+
93
+ def parameter_overrides(_parameters)
94
+ {}
95
+ end
96
+
97
+ def subcommands
98
+ []
99
+ end
100
+
101
+ def options
102
+ []
103
+ end
104
+
105
+ def arguments(_parameters)
106
+ []
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyVault
6
+ module Commands
7
+ class Login < Base
8
+ # @!visibility private
9
+ def subcommands
10
+ %w[login]
11
+ end
12
+
13
+ # @!visibility private
14
+ def options
15
+ %w[
16
+ -method
17
+ ] + super
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyVault
6
+ module Commands
7
+ class Write < Base
8
+ # @!visibility private
9
+ def subcommands
10
+ %w[write]
11
+ end
12
+
13
+ # @!visibility private
14
+ def options
15
+ %w[] + super
16
+ end
17
+
18
+ # @!visibility private
19
+ def arguments(parameters)
20
+ [parameters[:path]]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'commands/login'
4
+ require_relative 'commands/write'
5
+
6
+ module RubyVault
7
+ module Commands
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyVault
4
+ module Errors
5
+ class ExecutionError < StandardError
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'errors/execution_error'
4
+
5
+ module RubyVault
6
+ module Errors
7
+ end
8
+ end
@@ -0,0 +1,174 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ require_relative 'name'
6
+ require_relative 'types'
7
+ require_relative 'values'
8
+
9
+ module RubyVault
10
+ module Options
11
+ # rubocop:disable Metrics/ClassLength
12
+ class Definition < ImmutableStruct.new(
13
+ :name,
14
+ :option_type,
15
+ :value_type,
16
+ :override_keys,
17
+ :extra_keys,
18
+ :separator,
19
+ :placement,
20
+ :repeatable?
21
+ )
22
+ # rubocop:disable Metrics/MethodLength
23
+ def initialize(opts)
24
+ raise 'Missing name.' unless opts[:name]
25
+
26
+ super(
27
+ name: Name.new(opts[:name]),
28
+ option_type: Types.resolve(opts[:option_type]) || Types::Standard,
29
+ value_type: Values.resolve(opts[:value_type]) || Values::String,
30
+ repeatable: opts[:repeatable] || false,
31
+ separator: opts[:separator],
32
+ placement: opts[:placement],
33
+ extra_keys:
34
+ { singular: [], plural: [] }
35
+ .merge(opts[:extra_keys] || {}),
36
+ override_keys:
37
+ { singular: nil, plural: nil }
38
+ .merge(opts[:override_keys] || {})
39
+ )
40
+ end
41
+ # rubocop:enable Metrics/MethodLength
42
+
43
+ def matches?(name)
44
+ @name == Name.new(name)
45
+ end
46
+
47
+ def build(parameters)
48
+ build_singular_options(parameters) + build_plural_options(parameters)
49
+ end
50
+
51
+ private
52
+
53
+ def resolved_singular_key
54
+ if override_keys[:singular] == false
55
+ nil
56
+ else
57
+ override_keys[:singular] || name.as_singular_key
58
+ end
59
+ end
60
+
61
+ def all_singular_keys
62
+ ([resolved_singular_key] + extra_keys[:singular]).compact
63
+ end
64
+
65
+ def resolved_plural_key
66
+ if override_keys[:plural] == false
67
+ nil
68
+ else
69
+ override_keys[:plural] || name.as_plural_key
70
+ end
71
+ end
72
+
73
+ def all_plural_keys
74
+ ([resolved_plural_key] + extra_keys[:plural]).compact
75
+ end
76
+
77
+ def too_many_values?(values)
78
+ !repeatable? && values.length > 1
79
+ end
80
+
81
+ def values(parameters, keys)
82
+ keys.map { |k| parameters[k] }.compact
83
+ end
84
+
85
+ def needs_plural?(value)
86
+ repeatable? && !value.nil?
87
+ end
88
+
89
+ def only_singular?(value)
90
+ !needs_plural?(value)
91
+ end
92
+
93
+ def key_valued?(value)
94
+ value.respond_to?(:keys)
95
+ end
96
+
97
+ def multi_valued?(value)
98
+ value.respond_to?(:each)
99
+ end
100
+
101
+ def build_option(value)
102
+ option_type.new(name, value, separator: separator, placement: placement)
103
+ end
104
+
105
+ def build_value(value)
106
+ value_type.new(value)
107
+ end
108
+
109
+ def build_key_value(key, value)
110
+ Values::KeyValue.new(key, build_value(value))
111
+ end
112
+
113
+ def build_singular(value)
114
+ build_single_option(value)
115
+ end
116
+
117
+ def build_singulars(values)
118
+ values.map { |p| build_singular(p) }.flatten
119
+ end
120
+
121
+ def build_singular_options(parameters)
122
+ keys = all_singular_keys
123
+ values = values(parameters, keys)
124
+
125
+ if too_many_values?(values)
126
+ raise "Multiple values provided for '#{name}' " \
127
+ "(with keys #{keys}) and option not repeatable."
128
+ end
129
+
130
+ build_singulars(values)
131
+ end
132
+
133
+ def build_plural(value)
134
+ if only_singular?(value)
135
+ build_no_options
136
+ elsif key_valued?(value)
137
+ build_key_value_options(value)
138
+ elsif multi_valued?(value)
139
+ build_multiple_options(value)
140
+ else
141
+ build_single_option(value)
142
+ end
143
+ end
144
+
145
+ def build_plurals(values)
146
+ values.map { |p| build_plural(p) }.flatten
147
+ end
148
+
149
+ def build_plural_options(parameters)
150
+ keys = all_plural_keys
151
+ values = values(parameters, keys)
152
+
153
+ build_plurals(values)
154
+ end
155
+
156
+ def build_key_value_options(value)
157
+ value.map { |k, v| build_option(build_key_value(k, v)) }
158
+ end
159
+
160
+ def build_multiple_options(value)
161
+ value.map { |v| build_option(build_value(v)) }
162
+ end
163
+
164
+ def build_single_option(value)
165
+ [build_option(build_value(value))]
166
+ end
167
+
168
+ def build_no_options
169
+ []
170
+ end
171
+ end
172
+ # rubocop:enable Metrics/ClassLength
173
+ end
174
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyVault
4
+ module Options
5
+ DEFINITIONS = [
6
+ # string options
7
+ %w[
8
+ -method
9
+ ].map do |o|
10
+ definition(name: o, option_type: :standard, value_type: :string)
11
+ end
12
+ ].flatten.freeze
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'name'
4
+
5
+ module RubyVault
6
+ module Options
7
+ class Factory
8
+ def initialize(definitions)
9
+ @definitions = definitions
10
+ end
11
+
12
+ def resolve(names, parameters)
13
+ names
14
+ .map { |name| Name.new(name) }
15
+ .inject([]) do |options, name|
16
+ options + resolve_name(name, parameters)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def resolve_name(name, parameters)
23
+ @definitions.find { |d| d.matches?(name) }.build(parameters)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyVault
6
+ module Options
7
+ class Name < ImmutableStruct.new(:name)
8
+ def initialize(name)
9
+ super(name: name.to_s)
10
+ end
11
+
12
+ def name
13
+ "-#{without_prefix}"
14
+ end
15
+
16
+ alias to_s name
17
+
18
+ def as_singular_key
19
+ snake_case.to_sym
20
+ end
21
+
22
+ def as_plural_key
23
+ "#{snake_case}s".to_sym
24
+ end
25
+
26
+ private
27
+
28
+ def without_prefix
29
+ @name.sub(/^-+/, '')
30
+ end
31
+
32
+ def snake_case
33
+ without_prefix.gsub('-', '_')
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyVault
4
+ module Options
5
+ module Types
6
+ class Flag < ImmutableStruct.new(
7
+ :name,
8
+ :value
9
+ )
10
+ def initialize(name, value, **_opts)
11
+ super(name: name, value: value)
12
+ end
13
+
14
+ def apply(builder)
15
+ value.resolve ? builder.with_flag(name) : builder
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyVault
4
+ module Options
5
+ module Types
6
+ class Standard < ImmutableStruct.new(
7
+ :name,
8
+ :value,
9
+ :separator,
10
+ :placement
11
+ )
12
+ def initialize(name, value, **opts)
13
+ super(
14
+ name: name, value: value,
15
+ separator: opts[:separator],
16
+ placement: opts[:placement]
17
+ )
18
+ end
19
+
20
+ def apply(builder)
21
+ builder.with_option(
22
+ name,
23
+ value.render,
24
+ separator: separator,
25
+ placement: placement
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/standard'
4
+ require_relative 'types/flag'
5
+
6
+ module RubyVault
7
+ module Options
8
+ module Types
9
+ def self.standard(name, value, **opts)
10
+ Standard.new(name, value, **opts)
11
+ end
12
+
13
+ def self.flag(name, value)
14
+ Flag.new(name, value)
15
+ end
16
+
17
+ def self.resolve(type)
18
+ case type
19
+ when :standard then Types::Standard
20
+ when :flag then Types::Flag
21
+ else type
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyVault
6
+ module Options
7
+ module Values
8
+ class Base < ImmutableStruct.new(:value)
9
+ def initialize(value)
10
+ super(value: value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyVault
6
+ module Options
7
+ module Values
8
+ class Boolean < Base
9
+ def resolve
10
+ return nil if @value.nil?
11
+ return @value if a_boolean?(@value)
12
+ return true if true_as_string?(@value)
13
+
14
+ false
15
+ end
16
+
17
+ def render
18
+ resolve.nil? ? nil : resolve.to_s
19
+ end
20
+
21
+ private
22
+
23
+ def a_boolean?(value)
24
+ value.is_a?(TrueClass) || value.is_a?(FalseClass)
25
+ end
26
+
27
+ def true_as_string?(value)
28
+ value.respond_to?(:downcase) && value.downcase == 'true'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ require_relative 'base'
6
+
7
+ module RubyVault
8
+ module Options
9
+ module Values
10
+ class Complex < Base
11
+ def resolve
12
+ @value
13
+ end
14
+
15
+ def render
16
+ @value.is_a?(::String) ? @value : JSON.generate(value)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyVault
6
+ module Options
7
+ module Values
8
+ class KeyValue < ImmutableStruct.new(:key, :value)
9
+ def initialize(key, value)
10
+ super(key: key, value: value)
11
+ end
12
+
13
+ def resolve
14
+ { key => value.resolve }
15
+ end
16
+
17
+ def render
18
+ "'#{key}=#{value.render}'"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyVault
6
+ module Options
7
+ module Values
8
+ class String < Base
9
+ def resolve
10
+ @value.to_s
11
+ end
12
+
13
+ alias render resolve
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'values/boolean'
4
+ require_relative 'values/string'
5
+ require_relative 'values/complex'
6
+ require_relative 'values/key_value'
7
+
8
+ module RubyVault
9
+ module Options
10
+ module Values
11
+ def self.boolean(value)
12
+ Boolean.new(value)
13
+ end
14
+
15
+ def self.string(value)
16
+ String.new(value)
17
+ end
18
+
19
+ def self.complex(value)
20
+ Complex.new(value)
21
+ end
22
+
23
+ def self.key_value(key, value)
24
+ KeyValue.new(key, value)
25
+ end
26
+
27
+ def self.resolve(type)
28
+ case type
29
+ when :string then Values::String
30
+ when :boolean then Values::Boolean
31
+ when :complex then Values::Complex
32
+ when :key_value then Values::KeyValue
33
+ else type
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'options/name'
4
+ require_relative 'options/types'
5
+ require_relative 'options/values'
6
+ require_relative 'options/definition'
7
+ require_relative 'options/factory'
8
+
9
+ module RubyVault
10
+ module Options
11
+ def self.name(name)
12
+ Name.new(name)
13
+ end
14
+
15
+ def self.definition(opts)
16
+ Definition.new(opts)
17
+ end
18
+
19
+ def self.types
20
+ Types
21
+ end
22
+
23
+ def self.values
24
+ Values
25
+ end
26
+ end
27
+ end
28
+
29
+ require_relative 'options/definitions'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyVault
4
- VERSION = '0.1.0.pre.2'
4
+ VERSION = '0.1.0.pre.5'
5
5
  end
data/lib/ruby_vault.rb CHANGED
@@ -1,3 +1,69 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ruby_vault/version'
3
+ require_relative 'ruby_vault/options'
4
+ require_relative 'ruby_vault/version'
5
+ require_relative 'ruby_vault/commands'
6
+ require 'logger'
7
+
8
+ module RubyVault
9
+ class << self
10
+ def configuration
11
+ @configuration ||= Configuration.new
12
+ end
13
+
14
+ def configure
15
+ yield(configuration)
16
+ end
17
+
18
+ def reset!
19
+ @configuration = nil
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def login(parameters = {}, invocation_options = {})
25
+ exec(RubyVault::Commands::Login,
26
+ parameters, invocation_options)
27
+ end
28
+
29
+ def write(parameters = {}, invocation_options = {})
30
+ exec(RubyVault::Commands::Write,
31
+ parameters, invocation_options)
32
+ end
33
+
34
+ private
35
+
36
+ def exec(command_class, parameters, invocation_options)
37
+ command_class.new.execute(parameters, invocation_options)
38
+ end
39
+ end
40
+
41
+ extend ClassMethods
42
+
43
+ def self.included(other)
44
+ other.extend(ClassMethods)
45
+ end
46
+
47
+ class Configuration
48
+ attr_accessor :binary, :logger, :options, :stdin, :stdout, :stderr
49
+
50
+ def default_logger
51
+ logger = Logger.new($stdout)
52
+ logger.level = Logger::INFO
53
+ logger
54
+ end
55
+
56
+ def default_options
57
+ Options::Factory.new(Options::DEFINITIONS)
58
+ end
59
+
60
+ def initialize
61
+ @binary = 'vault'
62
+ @logger = default_logger
63
+ @options = default_options
64
+ @stdin = ''
65
+ @stdout = $stdout
66
+ @stderr = $stderr
67
+ end
68
+ end
69
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.2
4
+ version: 0.1.0.pre.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-02 00:00:00.000000000 Z
11
+ date: 2022-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: immutable-struct
@@ -279,6 +279,26 @@ files:
279
279
  - bin/console
280
280
  - bin/setup
281
281
  - lib/ruby_vault.rb
282
+ - lib/ruby_vault/commands.rb
283
+ - lib/ruby_vault/commands/base.rb
284
+ - lib/ruby_vault/commands/login.rb
285
+ - lib/ruby_vault/commands/write.rb
286
+ - lib/ruby_vault/errors.rb
287
+ - lib/ruby_vault/errors/execution_error.rb
288
+ - lib/ruby_vault/options.rb
289
+ - lib/ruby_vault/options/definition.rb
290
+ - lib/ruby_vault/options/definitions.rb
291
+ - lib/ruby_vault/options/factory.rb
292
+ - lib/ruby_vault/options/name.rb
293
+ - lib/ruby_vault/options/types.rb
294
+ - lib/ruby_vault/options/types/flag.rb
295
+ - lib/ruby_vault/options/types/standard.rb
296
+ - lib/ruby_vault/options/values.rb
297
+ - lib/ruby_vault/options/values/base.rb
298
+ - lib/ruby_vault/options/values/boolean.rb
299
+ - lib/ruby_vault/options/values/complex.rb
300
+ - lib/ruby_vault/options/values/key_value.rb
301
+ - lib/ruby_vault/options/values/string.rb
282
302
  - lib/ruby_vault/version.rb
283
303
  - ruby_vault.gemspec
284
304
  homepage: https://github.com/infrablocks/ruby_vault