vault_ruby_client 0.18.2

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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +287 -0
  3. data/LICENSE +364 -0
  4. data/README.md +223 -0
  5. data/lib/vault/api/approle.rb +221 -0
  6. data/lib/vault/api/auth.rb +324 -0
  7. data/lib/vault/api/auth_tls.rb +95 -0
  8. data/lib/vault/api/auth_token.rb +245 -0
  9. data/lib/vault/api/help.rb +36 -0
  10. data/lib/vault/api/kv.rb +230 -0
  11. data/lib/vault/api/logical.rb +153 -0
  12. data/lib/vault/api/secret.rb +171 -0
  13. data/lib/vault/api/sys/audit.rb +94 -0
  14. data/lib/vault/api/sys/auth.rb +119 -0
  15. data/lib/vault/api/sys/health.rb +66 -0
  16. data/lib/vault/api/sys/init.rb +86 -0
  17. data/lib/vault/api/sys/leader.rb +51 -0
  18. data/lib/vault/api/sys/lease.rb +52 -0
  19. data/lib/vault/api/sys/mount.rb +165 -0
  20. data/lib/vault/api/sys/namespace.rb +86 -0
  21. data/lib/vault/api/sys/policy.rb +95 -0
  22. data/lib/vault/api/sys/quota.rb +110 -0
  23. data/lib/vault/api/sys/seal.rb +84 -0
  24. data/lib/vault/api/sys.rb +30 -0
  25. data/lib/vault/api/transform/alphabet.rb +46 -0
  26. data/lib/vault/api/transform/role.rb +45 -0
  27. data/lib/vault/api/transform/template.rb +57 -0
  28. data/lib/vault/api/transform/transformation.rb +64 -0
  29. data/lib/vault/api/transform.rb +32 -0
  30. data/lib/vault/api.rb +17 -0
  31. data/lib/vault/client.rb +460 -0
  32. data/lib/vault/configurable.rb +53 -0
  33. data/lib/vault/defaults.rb +218 -0
  34. data/lib/vault/encode.rb +22 -0
  35. data/lib/vault/errors.rb +87 -0
  36. data/lib/vault/persistent/connection.rb +45 -0
  37. data/lib/vault/persistent/pool.rb +51 -0
  38. data/lib/vault/persistent/timed_stack_multi.rb +73 -0
  39. data/lib/vault/persistent.rb +1161 -0
  40. data/lib/vault/request.rb +47 -0
  41. data/lib/vault/response.rb +92 -0
  42. data/lib/vault/vendor/connection_pool/timed_stack.rb +181 -0
  43. data/lib/vault/vendor/connection_pool/version.rb +8 -0
  44. data/lib/vault/vendor/connection_pool.rb +153 -0
  45. data/lib/vault/version.rb +6 -0
  46. data/lib/vault_ruby_client.rb +53 -0
  47. metadata +158 -0
@@ -0,0 +1,47 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module Vault
5
+ class Request
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ # @return [String]
13
+ def to_s
14
+ "#<#{self.class.name}>"
15
+ end
16
+
17
+ # @return [String]
18
+ def inspect
19
+ "#<#{self.class.name}:0x#{"%x" % (self.object_id << 1)}>"
20
+ end
21
+
22
+ private
23
+
24
+ include EncodePath
25
+
26
+ # Removes the given header fields from options and returns the result. This
27
+ # modifies the given options in place.
28
+ #
29
+ # @param [Hash] options
30
+ #
31
+ # @return [Hash]
32
+ def extract_headers!(options = {})
33
+ extract = {
34
+ wrap_ttl: Vault::Client::WRAP_TTL_HEADER,
35
+ namespace: Vault::Client::NAMESPACE_HEADER,
36
+ }
37
+
38
+ {}.tap do |h|
39
+ extract.each do |k,v|
40
+ if options[k]
41
+ h[v] = options.delete(k)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,92 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module Vault
5
+ class Response
6
+ # Defines a new field. This is designed to be used by the subclass as a
7
+ # mini-DSL.
8
+ #
9
+ # @example Default
10
+ # field :data
11
+ #
12
+ # @example With a mutator
13
+ # field :present, as: :present?
14
+ #
15
+ # @param n [Symbol] the name of the field
16
+ # @option opts [Symbol] :as alias for method name
17
+ #
18
+ # @!visibility private
19
+ def self.field(n, opts = {})
20
+ self.fields[n] = opts
21
+
22
+ if opts[:as].nil?
23
+ attr_reader n
24
+ else
25
+ define_method(opts[:as]) do
26
+ instance_variable_get(:"@#{n}")
27
+ end
28
+ end
29
+ end
30
+
31
+ # Returns the list of fields defined on this subclass.
32
+ # @!visibility private
33
+ def self.fields
34
+ @fields ||= {}
35
+ end
36
+
37
+ # Decodes the given object (usually a Hash) into an instance of this class.
38
+ #
39
+ # @param object [Hash<Symbol, Object>]
40
+ def self.decode(object)
41
+ self.new(object)
42
+ end
43
+
44
+ def initialize(opts = {})
45
+ # Initialize all fields as nil to start
46
+ self.class.fields.each do |k, _|
47
+ instance_variable_set(:"@#{k}", nil)
48
+ end
49
+
50
+ # For each supplied option, set the instance variable if it was defined
51
+ # as a field.
52
+ opts.each do |k, v|
53
+ if self.class.fields.key?(k)
54
+ opts = self.class.fields[k]
55
+
56
+ if (m = opts[:load]) && !v.nil?
57
+ v = m.call(v)
58
+ end
59
+
60
+ if opts[:freeze]
61
+ v = v.freeze
62
+ end
63
+
64
+ instance_variable_set(:"@#{k}", v)
65
+ end
66
+ end
67
+ end
68
+
69
+ # Create a hash-bashed representation of this response.
70
+ #
71
+ # @return [Hash]
72
+ def to_h
73
+ self.class.fields.inject({}) do |h, (k, opts)|
74
+ if opts[:as].nil?
75
+ h[k] = self.public_send(k)
76
+ else
77
+ h[k] = self.public_send(opts[:as])
78
+ end
79
+
80
+ if !h[k].nil? && !h[k].is_a?(Array) && h[k].respond_to?(:to_h)
81
+ h[k] = h[k].to_h
82
+ end
83
+
84
+ h
85
+ end
86
+ end
87
+
88
+ def ==(other)
89
+ self.to_h == other.to_h
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,181 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ require 'thread'
5
+ require 'timeout'
6
+
7
+ module Vault; end
8
+
9
+ ##
10
+ # Raised when you attempt to retrieve a connection from a pool that has been
11
+ # shut down.
12
+
13
+ class Vault::ConnectionPool::PoolShuttingDownError < RuntimeError; end
14
+
15
+ ##
16
+ # The TimedStack manages a pool of homogeneous connections (or any resource
17
+ # you wish to manage). Connections are created lazily up to a given maximum
18
+ # number.
19
+
20
+ # Examples:
21
+ #
22
+ # ts = TimedStack.new(1) { MyConnection.new }
23
+ #
24
+ # # fetch a connection
25
+ # conn = ts.pop
26
+ #
27
+ # # return a connection
28
+ # ts.push conn
29
+ #
30
+ # conn = ts.pop
31
+ # ts.pop timeout: 5
32
+ # #=> raises Timeout::Error after 5 seconds
33
+
34
+ module Vault
35
+ class ConnectionPool::TimedStack
36
+
37
+ ##
38
+ # Creates a new pool with +size+ connections that are created from the given
39
+ # +block+.
40
+
41
+ def initialize(size = 0, &block)
42
+ @create_block = block
43
+ @created = 0
44
+ @que = []
45
+ @max = size
46
+ @mutex = Mutex.new
47
+ @resource = ConditionVariable.new
48
+ @shutdown_block = nil
49
+ end
50
+
51
+ ##
52
+ # Returns +obj+ to the stack. +options+ is ignored in TimedStack but may be
53
+ # used by subclasses that extend TimedStack.
54
+
55
+ def push(obj, options = {})
56
+ @mutex.synchronize do
57
+ if @shutdown_block
58
+ @shutdown_block.call(obj)
59
+ else
60
+ store_connection obj, options
61
+ end
62
+
63
+ @resource.broadcast
64
+ end
65
+ end
66
+ alias_method :<<, :push
67
+
68
+ ##
69
+ # Retrieves a connection from the stack. If a connection is available it is
70
+ # immediately returned. If no connection is available within the given
71
+ # timeout a Timeout::Error is raised.
72
+ #
73
+ # +:timeout+ is the only checked entry in +options+ and is preferred over
74
+ # the +timeout+ argument (which will be removed in a future release). Other
75
+ # options may be used by subclasses that extend TimedStack.
76
+
77
+ def pop(timeout = 0.5, options = {})
78
+ options, timeout = timeout, 0.5 if Hash === timeout
79
+ timeout = options.fetch :timeout, timeout
80
+
81
+ deadline = Time.now + timeout
82
+ @mutex.synchronize do
83
+ loop do
84
+ raise ConnectionPool::PoolShuttingDownError if @shutdown_block
85
+ return fetch_connection(options) if connection_stored?(options)
86
+
87
+ connection = try_create(options)
88
+ return connection if connection
89
+
90
+ to_wait = deadline - Time.now
91
+ raise Timeout::Error, "Waited #{timeout} sec" if to_wait <= 0
92
+ @resource.wait(@mutex, to_wait)
93
+ end
94
+ end
95
+ end
96
+
97
+ ##
98
+ # Shuts down the TimedStack which prevents connections from being checked
99
+ # out. The +block+ is called once for each connection on the stack.
100
+
101
+ def shutdown(&block)
102
+ raise ArgumentError, "shutdown must receive a block" unless block_given?
103
+
104
+ @mutex.synchronize do
105
+ @shutdown_block = block
106
+ @resource.broadcast
107
+
108
+ shutdown_connections
109
+ end
110
+ end
111
+
112
+ ##
113
+ # Returns +true+ if there are no available connections.
114
+
115
+ def empty?
116
+ (@created - @que.length) >= @max
117
+ end
118
+
119
+ ##
120
+ # The number of connections available on the stack.
121
+
122
+ def length
123
+ @max - @created + @que.length
124
+ end
125
+
126
+ private
127
+
128
+ ##
129
+ # This is an extension point for TimedStack and is called with a mutex.
130
+ #
131
+ # This method must returns true if a connection is available on the stack.
132
+
133
+ def connection_stored?(options = nil)
134
+ !@que.empty?
135
+ end
136
+
137
+ ##
138
+ # This is an extension point for TimedStack and is called with a mutex.
139
+ #
140
+ # This method must return a connection from the stack.
141
+
142
+ def fetch_connection(options = nil)
143
+ @que.pop
144
+ end
145
+
146
+ ##
147
+ # This is an extension point for TimedStack and is called with a mutex.
148
+ #
149
+ # This method must shut down all connections on the stack.
150
+
151
+ def shutdown_connections(options = nil)
152
+ while connection_stored?(options)
153
+ conn = fetch_connection(options)
154
+ @shutdown_block.call(conn)
155
+ end
156
+ end
157
+
158
+ ##
159
+ # This is an extension point for TimedStack and is called with a mutex.
160
+ #
161
+ # This method must return +obj+ to the stack.
162
+
163
+ def store_connection(obj, options = nil)
164
+ @que.push obj
165
+ end
166
+
167
+ ##
168
+ # This is an extension point for TimedStack and is called with a mutex.
169
+ #
170
+ # This method must create a connection if and only if the total number of
171
+ # connections allowed has not been met.
172
+
173
+ def try_create(options = nil)
174
+ unless @created == @max
175
+ object = @create_block.call
176
+ @created += 1
177
+ object
178
+ end
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,8 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module Vault
5
+ class ConnectionPool
6
+ VERSION = "2.2.0"
7
+ end
8
+ end
@@ -0,0 +1,153 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ require_relative 'connection_pool/version'
5
+ require_relative 'connection_pool/timed_stack'
6
+
7
+
8
+ # Generic connection pool class for e.g. sharing a limited number of network connections
9
+ # among many threads. Note: Connections are lazily created.
10
+ #
11
+ # Example usage with block (faster):
12
+ #
13
+ # @pool = ConnectionPool.new { Redis.new }
14
+ #
15
+ # @pool.with do |redis|
16
+ # redis.lpop('my-list') if redis.llen('my-list') > 0
17
+ # end
18
+ #
19
+ # Using optional timeout override (for that single invocation)
20
+ #
21
+ # @pool.with(:timeout => 2.0) do |redis|
22
+ # redis.lpop('my-list') if redis.llen('my-list') > 0
23
+ # end
24
+ #
25
+ # Example usage replacing an existing connection (slower):
26
+ #
27
+ # $redis = ConnectionPool.wrap { Redis.new }
28
+ #
29
+ # def do_work
30
+ # $redis.lpop('my-list') if $redis.llen('my-list') > 0
31
+ # end
32
+ #
33
+ # Accepts the following options:
34
+ # - :size - number of connections to pool, defaults to 5
35
+ # - :timeout - amount of time to wait for a connection if none currently available, defaults to 5 seconds
36
+ #
37
+ module Vault
38
+ class ConnectionPool
39
+ DEFAULTS = {size: 5, timeout: 5}
40
+
41
+ class Error < RuntimeError
42
+ end
43
+
44
+ def self.wrap(options, &block)
45
+ Wrapper.new(options, &block)
46
+ end
47
+
48
+ def initialize(options = {}, &block)
49
+ raise ArgumentError, 'Connection pool requires a block' unless block
50
+
51
+ options = DEFAULTS.merge(options)
52
+
53
+ @size = options.fetch(:size)
54
+ @timeout = options.fetch(:timeout)
55
+
56
+ @available = TimedStack.new(@size, &block)
57
+ @key = :"current-#{@available.object_id}"
58
+ end
59
+
60
+ if Thread.respond_to?(:handle_interrupt)
61
+
62
+ # MRI
63
+ def with(options = {})
64
+ Thread.handle_interrupt(Exception => :never) do
65
+ conn = checkout(options)
66
+ begin
67
+ Thread.handle_interrupt(Exception => :immediate) do
68
+ yield conn
69
+ end
70
+ ensure
71
+ checkin
72
+ end
73
+ end
74
+ end
75
+
76
+ else
77
+
78
+ # jruby 1.7.x
79
+ def with(options = {})
80
+ conn = checkout(options)
81
+ begin
82
+ yield conn
83
+ ensure
84
+ checkin
85
+ end
86
+ end
87
+
88
+ end
89
+
90
+ def checkout(options = {})
91
+ conn = if stack.empty?
92
+ timeout = options[:timeout] || @timeout
93
+ @available.pop(timeout: timeout)
94
+ else
95
+ stack.last
96
+ end
97
+
98
+ stack.push conn
99
+ conn
100
+ end
101
+
102
+ def checkin
103
+ conn = pop_connection # mutates stack, must be on its own line
104
+ @available.push(conn) if stack.empty?
105
+
106
+ nil
107
+ end
108
+
109
+ def shutdown(&block)
110
+ @available.shutdown(&block)
111
+ end
112
+
113
+ private
114
+
115
+ def pop_connection
116
+ if stack.empty?
117
+ raise ConnectionPool::Error, 'no connections are checked out'
118
+ else
119
+ stack.pop
120
+ end
121
+ end
122
+
123
+ def stack
124
+ ::Thread.current[@key] ||= []
125
+ end
126
+
127
+ class Wrapper < ::BasicObject
128
+ METHODS = [:with, :pool_shutdown]
129
+
130
+ def initialize(options = {}, &block)
131
+ @pool = ::ConnectionPool.new(options, &block)
132
+ end
133
+
134
+ def with(&block)
135
+ @pool.with(&block)
136
+ end
137
+
138
+ def pool_shutdown(&block)
139
+ @pool.shutdown(&block)
140
+ end
141
+
142
+ def respond_to?(id, *args)
143
+ METHODS.include?(id) || with { |c| c.respond_to?(id, *args) }
144
+ end
145
+
146
+ def method_missing(name, *args, &block)
147
+ with do |connection|
148
+ connection.send(name, *args, &block)
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,6 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module Vault
5
+ VERSION = "0.18.2"
6
+ end
@@ -0,0 +1,53 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module Vault
5
+ require_relative "vault/errors"
6
+ require_relative "vault/client"
7
+ require_relative "vault/configurable"
8
+ require_relative "vault/defaults"
9
+ require_relative "vault/response"
10
+ require_relative "vault/version"
11
+
12
+ require_relative "vault/api"
13
+
14
+ class << self
15
+ # API client object based off the configured options in {Configurable}.
16
+ #
17
+ # @return [Vault::Client]
18
+ attr_reader :client
19
+
20
+ def setup!
21
+ @client = Vault::Client.new
22
+
23
+ # Set secure SSL options
24
+ OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.tap do |opts|
25
+ opts[:options] &= ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS if defined?(OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS)
26
+ opts[:options] |= OpenSSL::SSL::OP_NO_COMPRESSION if defined?(OpenSSL::SSL::OP_NO_COMPRESSION)
27
+ opts[:options] |= OpenSSL::SSL::OP_NO_SSLv2 if defined?(OpenSSL::SSL::OP_NO_SSLv2)
28
+ opts[:options] |= OpenSSL::SSL::OP_NO_SSLv3 if defined?(OpenSSL::SSL::OP_NO_SSLv3)
29
+ end
30
+
31
+
32
+ self
33
+ end
34
+
35
+ # Delegate all methods to the client object, essentially making the module
36
+ # object behave like a {Client}.
37
+ def method_missing(m, *args, &block)
38
+ if @client.respond_to?(m)
39
+ @client.send(m, *args, &block)
40
+ else
41
+ super
42
+ end
43
+ end
44
+
45
+ # Delegating +respond_to+ to the {Client}.
46
+ def respond_to_missing?(m, include_private = false)
47
+ @client.respond_to?(m, include_private) || super
48
+ end
49
+ end
50
+ end
51
+
52
+ # Load the initial default values
53
+ Vault.setup!
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vault_ruby_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.18.2
5
+ platform: ruby
6
+ authors:
7
+ - khiav reoy
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sigv4
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '13.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '13.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.24'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.24'
83
+ description: Vault is a Ruby API client for interacting with a Vault server.
84
+ email:
85
+ - khiav223577@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - CHANGELOG.md
91
+ - LICENSE
92
+ - README.md
93
+ - lib/vault/api.rb
94
+ - lib/vault/api/approle.rb
95
+ - lib/vault/api/auth.rb
96
+ - lib/vault/api/auth_tls.rb
97
+ - lib/vault/api/auth_token.rb
98
+ - lib/vault/api/help.rb
99
+ - lib/vault/api/kv.rb
100
+ - lib/vault/api/logical.rb
101
+ - lib/vault/api/secret.rb
102
+ - lib/vault/api/sys.rb
103
+ - lib/vault/api/sys/audit.rb
104
+ - lib/vault/api/sys/auth.rb
105
+ - lib/vault/api/sys/health.rb
106
+ - lib/vault/api/sys/init.rb
107
+ - lib/vault/api/sys/leader.rb
108
+ - lib/vault/api/sys/lease.rb
109
+ - lib/vault/api/sys/mount.rb
110
+ - lib/vault/api/sys/namespace.rb
111
+ - lib/vault/api/sys/policy.rb
112
+ - lib/vault/api/sys/quota.rb
113
+ - lib/vault/api/sys/seal.rb
114
+ - lib/vault/api/transform.rb
115
+ - lib/vault/api/transform/alphabet.rb
116
+ - lib/vault/api/transform/role.rb
117
+ - lib/vault/api/transform/template.rb
118
+ - lib/vault/api/transform/transformation.rb
119
+ - lib/vault/client.rb
120
+ - lib/vault/configurable.rb
121
+ - lib/vault/defaults.rb
122
+ - lib/vault/encode.rb
123
+ - lib/vault/errors.rb
124
+ - lib/vault/persistent.rb
125
+ - lib/vault/persistent/connection.rb
126
+ - lib/vault/persistent/pool.rb
127
+ - lib/vault/persistent/timed_stack_multi.rb
128
+ - lib/vault/request.rb
129
+ - lib/vault/response.rb
130
+ - lib/vault/vendor/connection_pool.rb
131
+ - lib/vault/vendor/connection_pool/timed_stack.rb
132
+ - lib/vault/vendor/connection_pool/version.rb
133
+ - lib/vault/version.rb
134
+ - lib/vault_ruby_client.rb
135
+ homepage: https://github.com/khiav223577/vault_ruby_client
136
+ licenses:
137
+ - MPL-2.0
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '2.0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubygems_version: 3.1.4
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Vault is a Ruby API client for interacting with a Vault server.
158
+ test_files: []