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 +4 -4
- data/Gemfile.lock +2 -2
- data/lib/ruby_vault/commands/base.rb +110 -0
- data/lib/ruby_vault/commands/login.rb +21 -0
- data/lib/ruby_vault/commands/write.rb +24 -0
- data/lib/ruby_vault/commands.rb +9 -0
- data/lib/ruby_vault/errors/execution_error.rb +8 -0
- data/lib/ruby_vault/errors.rb +8 -0
- data/lib/ruby_vault/options/definition.rb +174 -0
- data/lib/ruby_vault/options/definitions.rb +14 -0
- data/lib/ruby_vault/options/factory.rb +27 -0
- data/lib/ruby_vault/options/name.rb +37 -0
- data/lib/ruby_vault/options/types/flag.rb +20 -0
- data/lib/ruby_vault/options/types/standard.rb +31 -0
- data/lib/ruby_vault/options/types.rb +26 -0
- data/lib/ruby_vault/options/values/base.rb +15 -0
- data/lib/ruby_vault/options/values/boolean.rb +33 -0
- data/lib/ruby_vault/options/values/complex.rb +21 -0
- data/lib/ruby_vault/options/values/key_value.rb +23 -0
- data/lib/ruby_vault/options/values/string.rb +17 -0
- data/lib/ruby_vault/options/values.rb +38 -0
- data/lib/ruby_vault/options.rb +29 -0
- data/lib/ruby_vault/version.rb +1 -1
- data/lib/ruby_vault.rb +67 -1
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb03f600d2c47bd04285941594a82ef4f3e0db9b8fc7e5092326f96fbaca5e9e
|
4
|
+
data.tar.gz: 0b83a87b3ab6690737170e14aab376e83ef519df45d25c75c49fc86789b85be9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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,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,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,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,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'
|
data/lib/ruby_vault/version.rb
CHANGED
data/lib/ruby_vault.rb
CHANGED
@@ -1,3 +1,69 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
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.
|
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-
|
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
|