dbi-dbrc 1.6.0 → 1.7.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGES.md +5 -0
- data/MANIFEST.md +4 -0
- data/README.md +44 -29
- data/dbi-dbrc.gemspec +1 -1
- data/lib/dbi/dbrc.rb +6 -60
- data/lib/dbi/dbrc/json.rb +38 -0
- data/lib/dbi/dbrc/xml.rb +35 -0
- data/lib/dbi/dbrc/yaml.rb +37 -0
- data/spec/dbi_dbrc_json_spec.rb +109 -0
- data/spec/dbi_dbrc_spec.rb +1 -1
- metadata +6 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 813eb7a49bd78983624e1e91031b3f93d83a872a1edea9bc2a1bced57985af9a
|
4
|
+
data.tar.gz: f9a2a4b40d14ecdc5e36b02c8c8c14c5e5bf47cf34400f365b9e4b23b03a540c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b46c7b59855bfa381213fa8ce30d31dbe4646811a6fd085ec698a1d6d3504eda6838a9693355ee958fd13e5aad679b6f2f5a060050cfaa64a45ec5214e84c4ab
|
7
|
+
data.tar.gz: 7f222c7eda45b449a59ecff9fb6c9631ac3dd54e59f3c12a858333ba478a1fa1f4e0269bd96a4453c320a56c47826e49da2994656caa1e61bebbde78e5d54a80
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 1.7.0 - 19-Jun-2021
|
2
|
+
* Added a DBI::DBRC::JSON subclass, and corresponding specs, so you can now
|
3
|
+
store information in JSON format.
|
4
|
+
* Updated and/or removed old information from the README file.
|
5
|
+
|
1
6
|
## 1.6.0 - 9-Jun-2021
|
2
7
|
* Now supports gpg encrypted files, with a 4th optional parameter where you
|
3
8
|
can pass gpg options (usually a password, but whatever gpgme supports).
|
data/MANIFEST.md
CHANGED
@@ -5,6 +5,9 @@
|
|
5
5
|
* dbi-dbrc.gemspec
|
6
6
|
* certs/djberg96_pub.pem
|
7
7
|
* lib/dbi/dbrc.rb
|
8
|
+
* lib/dbi/dbrc/json.rb
|
9
|
+
* lib/dbi/dbrc/xml.rb
|
10
|
+
* lib/dbi/dbrc/yaml.rb
|
8
11
|
* examples/plain/.dbrc
|
9
12
|
* examples/plain/test.rb
|
10
13
|
* examples/xml_examples/.dbrc
|
@@ -12,5 +15,6 @@
|
|
12
15
|
* examples/yml_examples/.dbrc
|
13
16
|
* examples/yml_examples/test_yml.rb
|
14
17
|
* spec/dbi_dbrc_spec.rb
|
18
|
+
* spec/dbi_dbrc_json_spec.rb
|
15
19
|
* spec/dbi_dbrc_xml_spec.rb
|
16
20
|
* spec/dbi_dbrc_yml_spec.rb
|
data/README.md
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
## Description
|
2
|
-
This is a
|
3
|
-
passwords in your programs
|
4
|
-
|
2
|
+
This is essentially a database connection configuration library, allowing you
|
3
|
+
to avoid hard-coding passwords in your programs, and store other generalized
|
4
|
+
information, when making database connections.
|
5
|
+
|
6
|
+
It can also be used as a general password storage manager for other types of
|
5
7
|
connections, e.g. ssh, ftp, etc.
|
6
8
|
|
9
|
+
The name was originally based on the old DBI library (which in turn was based
|
10
|
+
on the Perl library of the same name), and was originally meant as a supplement
|
11
|
+
to that library. The DBI library is now defunct, but it not necessary to use
|
12
|
+
this library. But, that explains why there's an outer "DBI" namespace module.
|
13
|
+
|
7
14
|
## Requirements
|
8
|
-
|
9
|
-
|
15
|
+
* gpgme - For GPG encrypted files (which you should be doing).
|
16
|
+
|
17
|
+
For MS Windows there are these additional requirements:
|
10
18
|
|
11
19
|
* sys-admin
|
12
20
|
* win32-file-attributes
|
@@ -33,10 +41,10 @@ puts dbrc.dsn
|
|
33
41
|
```
|
34
42
|
|
35
43
|
## Notes on the .dbrc file
|
36
|
-
This module relies on a file
|
37
|
-
is meant to be analogous to the ".netrc" file
|
38
|
-
telnet. The .dbrc file has several conditions that
|
39
|
-
module or it will fail:
|
44
|
+
This module relies on a file somewhere on your filesystem (normally your home
|
45
|
+
directory) called ".dbrc", and it is meant to be analogous to the ".netrc" file
|
46
|
+
used by programs such as telnet. The .dbrc file has several conditions that
|
47
|
+
must be met by the module or it will fail:
|
40
48
|
|
41
49
|
* Permissions must be set to 600 (Unix only).
|
42
50
|
* Must be hidden (MS Windows only).
|
@@ -54,8 +62,7 @@ You may include comments in the .dbrc file by starting the line with a
|
|
54
62
|
|
55
63
|
A failure in any of the rules mentioned above will result in a `DBRC::Error`
|
56
64
|
being raised. In addition, the file may also be encrypted on MS Windows
|
57
|
-
systems, in which case the file will automatically be (temporarily)
|
58
|
-
decrypted.
|
65
|
+
systems, in which case the file will automatically be (temporarily) decrypted.
|
59
66
|
|
60
67
|
The format for XML (using the example above) is as follows:
|
61
68
|
|
@@ -83,6 +90,23 @@ The format for YAML is as follows:
|
|
83
90
|
timeout: 10
|
84
91
|
max_reconn: 2
|
85
92
|
```
|
93
|
+
|
94
|
+
The format for JSON is as follows:
|
95
|
+
|
96
|
+
```json
|
97
|
+
[
|
98
|
+
{
|
99
|
+
"foo": {
|
100
|
+
"user": "dan",
|
101
|
+
"password": "mypass",
|
102
|
+
"driver": "oracle",
|
103
|
+
"interval": 30,
|
104
|
+
"timeout": 10,
|
105
|
+
"maximum_reconnects": 2
|
106
|
+
}
|
107
|
+
}
|
108
|
+
]
|
109
|
+
```
|
86
110
|
|
87
111
|
## Constants
|
88
112
|
`VERSION`
|
@@ -90,7 +114,7 @@ The format for YAML is as follows:
|
|
90
114
|
The current version of this library, returned as a String.
|
91
115
|
|
92
116
|
## Class Methods
|
93
|
-
`DBRC.new(db, user=nil, dir=nil)`
|
117
|
+
`DBRC.new(db, user = nil, dir = nil, gpg_options = nil)`
|
94
118
|
|
95
119
|
The constructor takes one to three arguments. The first argument is the
|
96
120
|
database name. This *must* be provided. If only the database name is
|
@@ -105,6 +129,10 @@ The third argument, also optional, specifies the directory where DBRC will
|
|
105
129
|
look for the .dbrc file. By default, it looks in the pwuid (present
|
106
130
|
working user id) home directory. The rules for a .dbrc file still apply.
|
107
131
|
|
132
|
+
The fourth argument, if present, are options that are forwarded to the
|
133
|
+
`GPGME::Crypto.new` constructor for GPG encrypted files. Typically this
|
134
|
+
would at least be the :password option, but YMMV.
|
135
|
+
|
108
136
|
MS Windows users should read the "Notes" section for how your home directory
|
109
137
|
is determined.
|
110
138
|
|
@@ -209,7 +237,7 @@ not automatically reset the driver or database.
|
|
209
237
|
## Canonical Example
|
210
238
|
```ruby
|
211
239
|
# This is a basic template for how I do things:
|
212
|
-
|
240
|
+
require 'dbi'
|
213
241
|
require 'dbi/dbrc'
|
214
242
|
require 'timeout'
|
215
243
|
|
@@ -233,10 +261,6 @@ end
|
|
233
261
|
```
|
234
262
|
|
235
263
|
## Notes for MS Windows Users
|
236
|
-
The `home` directory for Win32 users is determined by `ENV['USERPROFILE']`.
|
237
|
-
If that is not set then `ENV['HOME']` is used. If that is not set, then
|
238
|
-
the directory found by the sys-admin library is used.
|
239
|
-
|
240
264
|
To make your file hidden, right click on the .dbrc file in your Explorer
|
241
265
|
window, select "Properties" and check the "Hidden" checkbox.
|
242
266
|
|
@@ -246,18 +270,9 @@ party, which is a bit much to expect. However, if the file is encrypted,
|
|
246
270
|
DBRC will attempt to decrypt it, parse it, and encrypt it again when done
|
247
271
|
parsing.
|
248
272
|
|
249
|
-
## Notes on running the test suite
|
250
|
-
I cannot guarantee that the .dbrc files under the `examples`
|
251
|
-
subdirectories maintain the appropriate properties. This can cause
|
252
|
-
failures for the test suite (which uses these files).
|
253
|
-
|
254
|
-
The only solution is to perform a `chmod 600 .dbrc` (on Unix) or set
|
255
|
-
the properties to 'hidden' (on MS Windows) manually, for the file in
|
256
|
-
question.
|
257
|
-
|
258
273
|
## Summary
|
259
|
-
These
|
260
|
-
convenience mechanism for
|
274
|
+
These methods don't really "do" anything. They're simply meant as a
|
275
|
+
convenience mechanism for your database connections, plus a little bit of
|
261
276
|
obfuscation (for passwords).
|
262
277
|
|
263
278
|
## Adding your own configuration
|
@@ -271,7 +286,7 @@ Take a look at the XML and YML subclasses in dbrc.rb for two examples that
|
|
271
286
|
you can work from.
|
272
287
|
|
273
288
|
## Future Plans
|
274
|
-
|
289
|
+
None at this time.
|
275
290
|
|
276
291
|
## Known Bugs
|
277
292
|
I'm not positive about the dsn strings for databases other than Oracle.
|
data/dbi-dbrc.gemspec
CHANGED
data/lib/dbi/dbrc.rb
CHANGED
@@ -17,7 +17,7 @@ module DBI
|
|
17
17
|
class Error < StandardError; end
|
18
18
|
|
19
19
|
# The version of the dbi-dbrc library
|
20
|
-
VERSION = '1.
|
20
|
+
VERSION = '1.7.0'
|
21
21
|
|
22
22
|
WINDOWS = File::ALT_SEPARATOR # :no-doc:
|
23
23
|
|
@@ -104,7 +104,7 @@ module DBI
|
|
104
104
|
# # Pass along a GPG password to decrypt the file.
|
105
105
|
# DBI::DBRC.new('some_database', 'foo_usr', '/usr/local', :gpg_options => {:password => 'xxx'})
|
106
106
|
#
|
107
|
-
|
107
|
+
def initialize(database, user = nil, dbrc_dir = Dir.home, gpg_options = nil)
|
108
108
|
if dbrc_dir.nil?
|
109
109
|
# Default to the app data directory on Windows, or root on Unix, if
|
110
110
|
# no home dir can be found.
|
@@ -245,62 +245,8 @@ module DBI
|
|
245
245
|
end
|
246
246
|
end
|
247
247
|
end
|
248
|
-
|
249
|
-
# A subclass of DBRC designed to handle .dbrc files in XML format. The
|
250
|
-
# public methods of this class are identical to DBRC.
|
251
|
-
class DBRC::XML < DBRC
|
252
|
-
require 'rexml/document' # Good enough for small files
|
253
|
-
|
254
|
-
private
|
255
|
-
|
256
|
-
def parse_dbrc_config_file(file = @dbrc_file)
|
257
|
-
file = file.is_a?(StringIO) ? file : File.new(file)
|
258
|
-
doc = REXML::Document.new(file)
|
259
|
-
|
260
|
-
fields = %w[user password driver interval timeout maximum_reconnects]
|
261
|
-
|
262
|
-
doc.elements.each('/dbrc/database') do |element|
|
263
|
-
next unless element.attributes['name'] == database
|
264
|
-
next if @user && @user != element.elements['user'].text
|
265
|
-
|
266
|
-
fields.each do |field|
|
267
|
-
val = element.elements[field]
|
268
|
-
send("#{field}=", val.text) unless val.nil?
|
269
|
-
end
|
270
|
-
|
271
|
-
break
|
272
|
-
end
|
273
|
-
|
274
|
-
raise Error, "No record found for #{@user}@#{@database}" unless @user && @database
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
# A subclass of DBRC designed to handle .dbrc files in YAML format. The
|
279
|
-
# public methods of this class are identical to DBRC.
|
280
|
-
class DBRC::YML < DBRC
|
281
|
-
require 'yaml'
|
282
|
-
|
283
|
-
private
|
284
|
-
|
285
|
-
def parse_dbrc_config_file(file = @dbrc_file)
|
286
|
-
fh = file.is_a?(StringIO) ? file : File.open(file)
|
287
|
-
config = YAML.safe_load(fh)
|
288
|
-
|
289
|
-
config.each do |hash|
|
290
|
-
hash.each do |db, info|
|
291
|
-
next unless db == @database
|
292
|
-
next if @user && @user != info['user']
|
293
|
-
@user = info['user']
|
294
|
-
@password = info['password']
|
295
|
-
@driver = info['driver']
|
296
|
-
@interval = info['interval']
|
297
|
-
@timeout = info['timeout']
|
298
|
-
@maximum_reconnects = info['maximum_reconnects']
|
299
|
-
break
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
raise Error, "No entry found for #{@user}@#{@database}" unless @user && @database
|
304
|
-
end
|
305
|
-
end
|
306
248
|
end
|
249
|
+
|
250
|
+
require_relative 'dbrc/xml'
|
251
|
+
require_relative 'dbrc/yaml'
|
252
|
+
require_relative 'dbrc/json'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../dbrc'
|
4
|
+
|
5
|
+
# The DBI module serves as namespace only.
|
6
|
+
module DBI
|
7
|
+
# A subclass of DBRC designed to handle .dbrc files in JSON format. The
|
8
|
+
# public methods of this class are identical to DBRC.
|
9
|
+
class DBRC::JSON < DBRC
|
10
|
+
require 'json'
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parse_dbrc_config_file(file = @dbrc_file)
|
15
|
+
begin
|
16
|
+
fh = file.is_a?(StringIO) ? file : File.open(file)
|
17
|
+
config = ::JSON.parse(fh.read)
|
18
|
+
|
19
|
+
config.each do |hash|
|
20
|
+
db = hash.keys.first
|
21
|
+
next unless db == @database
|
22
|
+
next if @user && @user != hash[db]['user']
|
23
|
+
@user = hash[db]['user']
|
24
|
+
@password = hash[db]['password']
|
25
|
+
@driver = hash[db]['driver']
|
26
|
+
@interval = hash[db]['interval']
|
27
|
+
@timeout = hash[db]['timeout']
|
28
|
+
@maximum_reconnects = hash[db]['maximum_reconnects']
|
29
|
+
break
|
30
|
+
end
|
31
|
+
ensure
|
32
|
+
fh.close if fh && fh.respond_to?(:close)
|
33
|
+
end
|
34
|
+
|
35
|
+
raise Error, "No entry found for #{@user}@#{@database}" unless @user && @database
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/dbi/dbrc/xml.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../dbrc'
|
4
|
+
|
5
|
+
# The DBI module serves as a namespace only.
|
6
|
+
module DBI
|
7
|
+
# A subclass of DBRC designed to handle .dbrc files in XML format. The
|
8
|
+
# public methods of this class are identical to DBRC.
|
9
|
+
class DBRC::XML < DBRC
|
10
|
+
require 'rexml/document' # Good enough for small files
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parse_dbrc_config_file(file = @dbrc_file)
|
15
|
+
file = file.is_a?(StringIO) ? file : File.new(file)
|
16
|
+
doc = REXML::Document.new(file)
|
17
|
+
|
18
|
+
fields = %w[user password driver interval timeout maximum_reconnects]
|
19
|
+
|
20
|
+
doc.elements.each('/dbrc/database') do |element|
|
21
|
+
next unless element.attributes['name'] == database
|
22
|
+
next if @user && @user != element.elements['user'].text
|
23
|
+
|
24
|
+
fields.each do |field|
|
25
|
+
val = element.elements[field]
|
26
|
+
send("#{field}=", val.text) unless val.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
break
|
30
|
+
end
|
31
|
+
|
32
|
+
raise Error, "No record found for #{@user}@#{@database}" unless @user && @database
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../dbrc'
|
4
|
+
|
5
|
+
# The DBI module serves as namespace only.
|
6
|
+
module DBI
|
7
|
+
# A subclass of DBRC designed to handle .dbrc files in YAML format. The
|
8
|
+
# public methods of this class are identical to DBRC.
|
9
|
+
class DBRC::YML < DBRC
|
10
|
+
require 'yaml'
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parse_dbrc_config_file(file = @dbrc_file)
|
15
|
+
fh = file.is_a?(StringIO) ? file : File.open(file)
|
16
|
+
config = ::YAML.safe_load(fh)
|
17
|
+
|
18
|
+
config.each do |hash|
|
19
|
+
hash.each do |db, info|
|
20
|
+
next unless db == @database
|
21
|
+
next if @user && @user != info['user']
|
22
|
+
@user = info['user']
|
23
|
+
@password = info['password']
|
24
|
+
@driver = info['driver']
|
25
|
+
@interval = info['interval']
|
26
|
+
@timeout = info['timeout']
|
27
|
+
@maximum_reconnects = info['maximum_reconnects']
|
28
|
+
break
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
raise Error, "No entry found for #{@user}@#{@database}" unless @user && @database
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
DBI::DBRC::YAML = DBI::DBRC::YML # Alias
|
@@ -0,0 +1,109 @@
|
|
1
|
+
########################################################################
|
2
|
+
# dbi_dbrc_json_spec.rb
|
3
|
+
#
|
4
|
+
# Test suite for the JSON specific version of DBI::DBRC. This test case
|
5
|
+
# should be run via the 'rake test' task.
|
6
|
+
########################################################################
|
7
|
+
require 'dbi/dbrc'
|
8
|
+
require 'rspec'
|
9
|
+
require 'pp' # Need this to avoid fakefs error
|
10
|
+
require 'fakefs/spec_helpers'
|
11
|
+
|
12
|
+
RSpec.describe DBI::DBRC::JSON, :json => true do
|
13
|
+
include FakeFS::SpecHelpers
|
14
|
+
|
15
|
+
let(:home) { File.join(Dir.pwd, 'home', 'someone') }
|
16
|
+
let(:dbrc) { File.join(home, '.dbrc') }
|
17
|
+
|
18
|
+
let(:db_foo){ 'foo' }
|
19
|
+
let(:user1) { 'user1' }
|
20
|
+
|
21
|
+
let(:json){
|
22
|
+
%q{
|
23
|
+
[
|
24
|
+
{
|
25
|
+
"foo": {
|
26
|
+
"user": "user1",
|
27
|
+
"password": "pwd1",
|
28
|
+
"driver": "Oracle",
|
29
|
+
"interval": 60,
|
30
|
+
"timeout": 40,
|
31
|
+
"maximum_reconnects": 3
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"foo": {
|
36
|
+
"user": "user2",
|
37
|
+
"password": "pwd2",
|
38
|
+
"driver": "OCI8",
|
39
|
+
"interval": 60,
|
40
|
+
"timeout": 60,
|
41
|
+
"maximum_reconnects": 4
|
42
|
+
}
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"bar": {
|
46
|
+
"user": "user1",
|
47
|
+
"password": "pwd3",
|
48
|
+
"driver": "Oracle",
|
49
|
+
"interval": 30,
|
50
|
+
"timeout": 30,
|
51
|
+
"maximum_reconnects": 2
|
52
|
+
}
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"baz": {
|
56
|
+
"user": "user3",
|
57
|
+
"password": "pwd4"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
]
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
before do
|
65
|
+
allow(Dir).to receive(:home).and_return(home)
|
66
|
+
|
67
|
+
if File::ALT_SEPARATOR
|
68
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(true)
|
69
|
+
allow(FakeFS::File).to receive(:encrypted?).and_return(false)
|
70
|
+
end
|
71
|
+
|
72
|
+
FileUtils.mkdir_p(home)
|
73
|
+
File.open(dbrc, 'w'){ |fh| fh.write(json) }
|
74
|
+
File.chmod(0600, dbrc)
|
75
|
+
|
76
|
+
# FakeFS doesn't implement this yet
|
77
|
+
allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
|
78
|
+
end
|
79
|
+
|
80
|
+
context "instance methods" do
|
81
|
+
before do
|
82
|
+
@dbrc = described_class.new(db_foo, user1)
|
83
|
+
end
|
84
|
+
|
85
|
+
example "database method returns expected value" do
|
86
|
+
expect(@dbrc.database).to eq('foo')
|
87
|
+
end
|
88
|
+
|
89
|
+
example "password method returns expected value" do
|
90
|
+
expect(@dbrc.password).to eq('pwd1')
|
91
|
+
end
|
92
|
+
|
93
|
+
example "driver method returns expected value" do
|
94
|
+
expect(@dbrc.driver).to eq('Oracle')
|
95
|
+
end
|
96
|
+
|
97
|
+
example "interval method returns expected value" do
|
98
|
+
expect(@dbrc.interval).to eq(60)
|
99
|
+
end
|
100
|
+
|
101
|
+
example "timeout method returns expected value" do
|
102
|
+
expect(@dbrc.timeout).to eq(40)
|
103
|
+
end
|
104
|
+
|
105
|
+
example "maximum_reconnects method returns expected value" do
|
106
|
+
expect(@dbrc.maximum_reconnects).to eq(3)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/spec/dbi_dbrc_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbi-dbrc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Berger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-06-
|
38
|
+
date: 2021-06-19 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: gpgme
|
@@ -119,6 +119,10 @@ files:
|
|
119
119
|
- examples/yml/test_yml.rb
|
120
120
|
- lib/dbi-dbrc.rb
|
121
121
|
- lib/dbi/dbrc.rb
|
122
|
+
- lib/dbi/dbrc/json.rb
|
123
|
+
- lib/dbi/dbrc/xml.rb
|
124
|
+
- lib/dbi/dbrc/yaml.rb
|
125
|
+
- spec/dbi_dbrc_json_spec.rb
|
122
126
|
- spec/dbi_dbrc_spec.rb
|
123
127
|
- spec/dbi_dbrc_xml_spec.rb
|
124
128
|
- spec/dbi_dbrc_yml_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|