dbi-dbrc 1.5.0 → 1.6.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 +8 -0
- data/Rakefile +2 -2
- data/dbi-dbrc.gemspec +4 -2
- data/lib/dbi-dbrc.rb +2 -0
- data/lib/dbi/dbrc.rb +106 -110
- data/spec/dbi_dbrc_spec.rb +14 -3
- data/spec/dbi_dbrc_xml_spec.rb +6 -0
- data/spec/dbi_dbrc_yml_spec.rb +6 -0
- data/spec/spec_helper.rb +1 -0
- metadata +26 -20
- 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: 4f38085a9c7abb4c8a3e53fb239196135d317f78baa14a33f415fbaeab0b03d6
|
4
|
+
data.tar.gz: a591ba6877a994765c4ad4dc5eb540b149c98398fe11bfd93ff04be1dca4e562
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 607d4e9c54ceb5c98cfaa7dc1df75708b151daac57cca77bb244371d43a1950107334081cb65ea112ba46da85aa9b015700ad23df863a09f7cbd628b0627d069
|
7
|
+
data.tar.gz: 3712726dcf66e0f4dc19c4dbe46115e1dc9ea5159a59a4e9e31bf250e643dd07f114a6b4b27585a31c7a4c34016bba22c3999592b831feaea3aeeacddb9a57f4
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.6.0 - 9-Jun-2021
|
2
|
+
* Now supports gpg encrypted files, with a 4th optional parameter where you
|
3
|
+
can pass gpg options (usually a password, but whatever gpgme supports).
|
4
|
+
* Added gpgme as a dependency.
|
5
|
+
* Updated specs for MS Windows.
|
6
|
+
* The "home" handling is now a bit simpler, as it was originally written
|
7
|
+
before that method existed in core Ruby.
|
8
|
+
|
1
9
|
## 1.5.0 - 12-Apr-2021
|
2
10
|
* Switched from test-unit to rspec, with corresponding changes in the
|
3
11
|
gemspec and Rakefile.
|
data/Rakefile
CHANGED
@@ -8,9 +8,9 @@ namespace :gem do
|
|
8
8
|
desc "Create the dbi-dbrc gem"
|
9
9
|
task :create => [:clean] do
|
10
10
|
require 'rubygems/package'
|
11
|
-
spec =
|
11
|
+
spec = Gem::Specification.load('dbi-dbrc.gemspec')
|
12
12
|
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
13
|
-
Gem::Package.build(spec
|
13
|
+
Gem::Package.build(spec)
|
14
14
|
end
|
15
15
|
|
16
16
|
desc "Install the dbi-dbrc gem"
|
data/dbi-dbrc.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'dbi-dbrc'
|
5
|
-
spec.version = '1.
|
5
|
+
spec.version = '1.6.0'
|
6
6
|
spec.author = 'Daniel Berger'
|
7
7
|
spec.email = 'djberg96@gmail.com'
|
8
8
|
spec.license = 'Apache-2.0'
|
@@ -12,6 +12,8 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.test_files = Dir['test/test*.rb']
|
13
13
|
spec.cert_chain = Dir['certs/*']
|
14
14
|
|
15
|
+
spec.add_dependency('gpgme', '~> 2.0')
|
16
|
+
|
15
17
|
spec.add_development_dependency('rake')
|
16
18
|
spec.add_development_dependency('rspec', '~> 3.9')
|
17
19
|
spec.add_development_dependency('fakefs', '~> 1.3')
|
@@ -19,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
19
21
|
spec.metadata = {
|
20
22
|
'homepage_uri' => 'https://github.com/djberg96/dbi-dbrc',
|
21
23
|
'bug_tracker_uri' => 'https://github.com/djberg96/dbi-dbrc/issues',
|
22
|
-
'changelog_uri' => 'https://github.com/djberg96/dbi-dbrc/blob/main/CHANGES',
|
24
|
+
'changelog_uri' => 'https://github.com/djberg96/dbi-dbrc/blob/main/CHANGES.md',
|
23
25
|
'documentation_uri' => 'https://github.com/djberg96/dbi-dbrc/wiki',
|
24
26
|
'source_code_uri' => 'https://github.com/djberg96/dbi-dbrc',
|
25
27
|
'wiki_uri' => 'https://github.com/djberg96/dbi-dbrc/wiki'
|
data/lib/dbi-dbrc.rb
CHANGED
data/lib/dbi/dbrc.rb
CHANGED
@@ -1,34 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
if File::ALT_SEPARATOR
|
2
4
|
require 'win32/dir'
|
3
5
|
require 'win32/file/attributes'
|
4
6
|
require 'win32/process'
|
5
|
-
require 'sys/admin'
|
6
7
|
else
|
7
8
|
require 'etc'
|
9
|
+
require 'gpgme'
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
12
|
# The DBI module serves as a namespace only.
|
12
13
|
module DBI
|
13
|
-
|
14
14
|
# The DBRC class encapsulates a database resource config file.
|
15
15
|
class DBRC
|
16
|
-
|
17
16
|
# This error is raised if anything fails trying to read the config file.
|
18
17
|
class Error < StandardError; end
|
19
18
|
|
20
19
|
# The version of the dbi-dbrc library
|
21
|
-
VERSION = '1.
|
20
|
+
VERSION = '1.6.0'
|
22
21
|
|
23
22
|
WINDOWS = File::ALT_SEPARATOR # :no-doc:
|
24
23
|
|
25
24
|
# The database or host to be connected to.
|
26
25
|
attr_accessor :database
|
27
26
|
|
28
|
-
alias
|
29
|
-
alias
|
30
|
-
alias
|
31
|
-
alias
|
27
|
+
alias db database
|
28
|
+
alias db= database=
|
29
|
+
alias host database
|
30
|
+
alias host= database=
|
32
31
|
|
33
32
|
# The user name used for the database or host connection.
|
34
33
|
attr_accessor :user
|
@@ -36,8 +35,8 @@ module DBI
|
|
36
35
|
# The password associated with the database or host.
|
37
36
|
attr_accessor :password
|
38
37
|
|
39
|
-
alias
|
40
|
-
alias
|
38
|
+
alias passwd password
|
39
|
+
alias passwd= password=
|
41
40
|
|
42
41
|
# The driver associated with the database. This is used to internally to
|
43
42
|
# construct the DSN.
|
@@ -49,14 +48,14 @@ module DBI
|
|
49
48
|
# The maximum number of reconnects a program should make before giving up.
|
50
49
|
attr_accessor :maximum_reconnects
|
51
50
|
|
52
|
-
alias
|
53
|
-
alias
|
51
|
+
alias max_reconn maximum_reconnects
|
52
|
+
alias max_reconn= maximum_reconnects=
|
54
53
|
|
55
54
|
# The timeout, in seconds, for each connection attempt.
|
56
55
|
attr_accessor :timeout
|
57
56
|
|
58
|
-
alias
|
59
|
-
alias
|
57
|
+
alias time_out timeout
|
58
|
+
alias time_out= timeout=
|
60
59
|
|
61
60
|
# The interval, in seconds, between each connection attempt.
|
62
61
|
attr_accessor :interval
|
@@ -78,7 +77,7 @@ module DBI
|
|
78
77
|
# file.
|
79
78
|
#
|
80
79
|
# If an entry cannot be found for the database, or database plus user
|
81
|
-
# combination, then a Error is raised.
|
80
|
+
# combination, then a Error is raised. If the .dbrc file cannot be
|
82
81
|
# found, or is setup improperly with regards to permissions or properties
|
83
82
|
# then a DBI::DBRC::Error is raised.
|
84
83
|
#
|
@@ -88,6 +87,9 @@ module DBI
|
|
88
87
|
# storage mechanism. In that case simply treat the 'database' as the
|
89
88
|
# host name, and ignore the DBI::DBRC#dsn and DBI::DBRC#driver methods.
|
90
89
|
#
|
90
|
+
# On unixy systems you can GPG encrypt the file, and this library will
|
91
|
+
# decrypt it for you based on the +gpg_options+ that you pass.
|
92
|
+
#
|
91
93
|
# Examples:
|
92
94
|
#
|
93
95
|
# # Find the first match for 'some_database'
|
@@ -99,14 +101,11 @@ module DBI
|
|
99
101
|
# # Find the first match for 'foo_user@some_database' under /usr/local
|
100
102
|
# DBI::DBRC.new('some_database', 'foo_usr', '/usr/local')
|
101
103
|
#
|
102
|
-
|
104
|
+
# # Pass along a GPG password to decrypt the file.
|
105
|
+
# DBI::DBRC.new('some_database', 'foo_usr', '/usr/local', :gpg_options => {:password => 'xxx'})
|
106
|
+
#
|
107
|
+
def initialize(database, user = nil, dbrc_dir = Dir.home, gpg_options = nil)
|
103
108
|
if dbrc_dir.nil?
|
104
|
-
if WINDOWS
|
105
|
-
home = Sys::Admin.get_user(Process.uid, :localaccount => true).dir
|
106
|
-
else
|
107
|
-
home = Dir.home(Etc.getpwuid.name)
|
108
|
-
end
|
109
|
-
|
110
109
|
# Default to the app data directory on Windows, or root on Unix, if
|
111
110
|
# no home dir can be found.
|
112
111
|
if home.nil?
|
@@ -145,14 +144,21 @@ module DBI
|
|
145
144
|
File.decrypt(@dbrc_file)
|
146
145
|
end
|
147
146
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
147
|
+
if gpg_options
|
148
|
+
require 'gpgme'
|
149
|
+
require 'stringio'
|
150
|
+
crypto = GPGME::Crypto.new(gpg_options)
|
151
|
+
stringio = crypto.decrypt(File.open(@dbrc_file))
|
152
|
+
parse_dbrc_config_file(StringIO.new(stringio.read))
|
153
|
+
else
|
154
|
+
parse_dbrc_config_file
|
155
155
|
end
|
156
|
+
|
157
|
+
validate_data
|
158
|
+
convert_numeric_strings
|
159
|
+
create_dsn_string
|
160
|
+
ensure
|
161
|
+
File.encrypt(@dbrc_file) if WINDOWS && file_was_encrypted
|
156
162
|
end
|
157
163
|
end
|
158
164
|
|
@@ -160,28 +166,23 @@ module DBI
|
|
160
166
|
# Ruby Object#inspect, except that the password field is filtered.
|
161
167
|
#
|
162
168
|
def inspect
|
163
|
-
str = instance_variables.map
|
169
|
+
str = instance_variables.map do |iv|
|
164
170
|
if iv == '@password'
|
165
171
|
"#{iv}=[FILTERED]"
|
166
172
|
else
|
167
173
|
"#{iv}=#{instance_variable_get(iv).inspect}"
|
168
174
|
end
|
169
|
-
|
175
|
+
end.join(', ')
|
170
176
|
|
171
|
-
"#<#{self.class}:0x#{(
|
177
|
+
"#<#{self.class}:0x#{(object_id * 2).to_s(16)} " + str + '>'
|
172
178
|
end
|
173
179
|
|
174
180
|
private
|
175
181
|
|
176
182
|
# Ensure that the user/password has been set
|
177
183
|
def validate_data
|
178
|
-
unless @user
|
179
|
-
|
180
|
-
end
|
181
|
-
|
182
|
-
unless @password
|
183
|
-
raise Error, "password not defined for #{@user}@#{@database}"
|
184
|
-
end
|
184
|
+
raise Error, "no user found associated with #{@database}" unless @user
|
185
|
+
raise Error, "password not defined for #{@user}@#{@database}" unless @password
|
185
186
|
end
|
186
187
|
|
187
188
|
# Converts strings that should be numbers into actual numbers
|
@@ -197,87 +198,80 @@ module DBI
|
|
197
198
|
end
|
198
199
|
|
199
200
|
# Check ownership and permissions
|
200
|
-
def check_file(file
|
201
|
-
File.open(file)
|
201
|
+
def check_file(file = @dbrc_file)
|
202
|
+
File.open(file) do |f|
|
202
203
|
# Permissions must be set to 600 or better on Unix systems.
|
203
204
|
# Must be hidden on Win32 systems.
|
204
205
|
if WINDOWS
|
205
|
-
unless File.hidden?(file)
|
206
|
-
raise Error, "The .dbrc file must be hidden"
|
207
|
-
end
|
206
|
+
raise Error, 'The .dbrc file must be hidden' unless File.hidden?(file)
|
208
207
|
else
|
209
|
-
unless (f.stat.mode &
|
210
|
-
raise Error, "Bad .dbrc file permissions"
|
211
|
-
end
|
208
|
+
raise Error, 'Bad .dbrc file permissions' unless (f.stat.mode & 0o77) == 0
|
212
209
|
end
|
213
210
|
|
214
211
|
# Only the owner may use it
|
215
|
-
unless f.stat.owned?
|
216
|
-
|
217
|
-
end
|
218
|
-
}
|
212
|
+
raise Error, 'Not owner of .dbrc file' unless f.stat.owned?
|
213
|
+
end
|
219
214
|
end
|
220
215
|
|
221
216
|
# Parse the text out of the .dbrc file. This is the only method you
|
222
217
|
# need to redefine if writing your own config handler.
|
223
|
-
def parse_dbrc_config_file(file
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
next unless @
|
218
|
+
def parse_dbrc_config_file(file = @dbrc_file)
|
219
|
+
begin
|
220
|
+
fh = file.is_a?(StringIO) ? file : File.open(file)
|
221
|
+
|
222
|
+
fh.each_line do |line|
|
223
|
+
next if line =~ /^#/ # Ignore comments
|
224
|
+
db, user, pwd, driver, timeout, max, interval = line.split
|
225
|
+
|
226
|
+
next unless @database == db
|
227
|
+
next if @user && @user != user
|
228
|
+
|
229
|
+
@user = user
|
230
|
+
@password = pwd
|
231
|
+
@driver = driver
|
232
|
+
@timeout = timeout
|
233
|
+
@maximum_reconnects = max
|
234
|
+
@interval = interval
|
235
|
+
break
|
232
236
|
end
|
237
|
+
ensure
|
238
|
+
fh.close if fh && fh.respond_to?(:close)
|
239
|
+
end
|
233
240
|
|
234
|
-
@user = user
|
235
|
-
@password = pwd
|
236
|
-
@driver = driver
|
237
|
-
@timeout = timeout
|
238
|
-
@maximum_reconnects = max
|
239
|
-
@interval = interval
|
240
|
-
return
|
241
|
-
}
|
242
|
-
|
243
|
-
# If we reach here it means the database and/or user wasn't found
|
244
241
|
if @user
|
245
|
-
|
242
|
+
raise Error, "no record found for #{@user}@#{@database}" unless @user
|
246
243
|
else
|
247
|
-
|
244
|
+
raise Error, "no record found for #{@database}" unless @database
|
248
245
|
end
|
249
|
-
|
250
|
-
raise Error, err
|
251
246
|
end
|
252
|
-
|
253
247
|
end
|
254
248
|
|
255
249
|
# A subclass of DBRC designed to handle .dbrc files in XML format. The
|
256
250
|
# public methods of this class are identical to DBRC.
|
257
251
|
class DBRC::XML < DBRC
|
258
252
|
require 'rexml/document' # Good enough for small files
|
259
|
-
include REXML
|
260
253
|
|
261
254
|
private
|
262
255
|
|
263
|
-
def parse_dbrc_config_file(file
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
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|
|
272
267
|
val = element.elements[field]
|
273
|
-
unless val.nil?
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
raise Error, "No record found for #{@user}@#{@database}"
|
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
|
281
275
|
end
|
282
276
|
end
|
283
277
|
|
@@ -288,23 +282,25 @@ module DBI
|
|
288
282
|
|
289
283
|
private
|
290
284
|
|
291
|
-
def parse_dbrc_config_file(file
|
292
|
-
|
293
|
-
config.
|
294
|
-
|
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|
|
295
291
|
next unless db == @database
|
296
|
-
next
|
297
|
-
@user
|
298
|
-
@password
|
299
|
-
@driver
|
300
|
-
@interval
|
301
|
-
@timeout
|
302
|
-
@maximum_reconnects = info[
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
raise Error, "No entry found for #{@user}@#{@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
|
308
304
|
end
|
309
305
|
end
|
310
306
|
end
|
data/spec/dbi_dbrc_spec.rb
CHANGED
@@ -43,19 +43,26 @@ RSpec.describe DBI::DBRC do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
example "version" do
|
46
|
-
expect(described_class::VERSION).to eq('1.
|
46
|
+
expect(described_class::VERSION).to eq('1.6.0')
|
47
47
|
expect(described_class::VERSION).to be_frozen
|
48
48
|
end
|
49
49
|
|
50
50
|
context "windows", :windows => true do
|
51
51
|
example "constructor raises an error unless the .dbrc file is hidden" do
|
52
|
-
File.
|
52
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(false)
|
53
53
|
expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
context "constructor" do
|
58
|
-
|
58
|
+
before do
|
59
|
+
if File::ALT_SEPARATOR
|
60
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(true)
|
61
|
+
allow(FakeFS::File).to receive(:encrypted?).and_return(false)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
example "constructor raises an error if the permissions are invalid", :unix => true do
|
59
66
|
File.chmod(0555, dbrc)
|
60
67
|
expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
|
61
68
|
end
|
@@ -111,6 +118,10 @@ RSpec.describe DBI::DBRC do
|
|
111
118
|
|
112
119
|
context "instance methods" do
|
113
120
|
before do
|
121
|
+
if File::ALT_SEPARATOR
|
122
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(true)
|
123
|
+
allow(FakeFS::File).to receive(:encrypted?).and_return(false)
|
124
|
+
end
|
114
125
|
@dbrc = DBI::DBRC.new(db_foo)
|
115
126
|
end
|
116
127
|
|
data/spec/dbi_dbrc_xml_spec.rb
CHANGED
@@ -55,6 +55,12 @@ RSpec.describe DBI::DBRC::XML, :xml => true do
|
|
55
55
|
|
56
56
|
before do
|
57
57
|
allow(Dir).to receive(:home).and_return(home)
|
58
|
+
|
59
|
+
if File::ALT_SEPARATOR
|
60
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(true)
|
61
|
+
allow(FakeFS::File).to receive(:encrypted?).and_return(false)
|
62
|
+
end
|
63
|
+
|
58
64
|
FileUtils.mkdir_p(home)
|
59
65
|
File.open(dbrc, 'w'){ |fh| fh.write(xml) }
|
60
66
|
File.chmod(0600, dbrc)
|
data/spec/dbi_dbrc_yml_spec.rb
CHANGED
@@ -49,6 +49,12 @@ RSpec.describe DBI::DBRC::YML, :yml => true do
|
|
49
49
|
|
50
50
|
before do
|
51
51
|
allow(Dir).to receive(:home).and_return(home)
|
52
|
+
|
53
|
+
if File::ALT_SEPARATOR
|
54
|
+
allow(FakeFS::File).to receive(:hidden?).and_return(true)
|
55
|
+
allow(FakeFS::File).to receive(:encrypted?).and_return(false)
|
56
|
+
end
|
57
|
+
|
52
58
|
FileUtils.mkdir_p(home)
|
53
59
|
File.open(dbrc, 'w'){ |fh| fh.write(yml) }
|
54
60
|
File.chmod(0600, dbrc)
|
data/spec/spec_helper.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.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Berger
|
@@ -35,8 +35,22 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2021-06-09 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: gpgme
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.0'
|
40
54
|
- !ruby/object:Gem::Dependency
|
41
55
|
name: rake
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,37 +107,29 @@ executables: []
|
|
93
107
|
extensions: []
|
94
108
|
extra_rdoc_files: []
|
95
109
|
files:
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
- spec/dbi_dbrc_yml_spec.rb
|
100
|
-
- spec/dbi_dbrc_spec.rb
|
101
|
-
- spec/dbi_dbrc_xml_spec.rb
|
110
|
+
- CHANGES.md
|
111
|
+
- Gemfile
|
112
|
+
- MANIFEST.md
|
102
113
|
- README.md
|
103
114
|
- Rakefile
|
104
|
-
- MANIFEST.md
|
105
|
-
- certs
|
106
115
|
- certs/djberg96_pub.pem
|
107
|
-
-
|
108
|
-
- examples/plain
|
116
|
+
- dbi-dbrc.gemspec
|
109
117
|
- examples/plain/test.rb
|
110
|
-
- examples/xml
|
111
118
|
- examples/xml/test_xml.rb
|
112
|
-
- examples/yml
|
113
119
|
- examples/yml/test_yml.rb
|
114
|
-
- lib
|
115
|
-
- lib/dbi
|
116
|
-
- lib/dbi/dbrc.rb
|
117
120
|
- lib/dbi-dbrc.rb
|
118
|
-
-
|
119
|
-
-
|
121
|
+
- lib/dbi/dbrc.rb
|
122
|
+
- spec/dbi_dbrc_spec.rb
|
123
|
+
- spec/dbi_dbrc_xml_spec.rb
|
124
|
+
- spec/dbi_dbrc_yml_spec.rb
|
125
|
+
- spec/spec_helper.rb
|
120
126
|
homepage: https://github.com/djberg96/dbi-dbrc
|
121
127
|
licenses:
|
122
128
|
- Apache-2.0
|
123
129
|
metadata:
|
124
130
|
homepage_uri: https://github.com/djberg96/dbi-dbrc
|
125
131
|
bug_tracker_uri: https://github.com/djberg96/dbi-dbrc/issues
|
126
|
-
changelog_uri: https://github.com/djberg96/dbi-dbrc/blob/main/CHANGES
|
132
|
+
changelog_uri: https://github.com/djberg96/dbi-dbrc/blob/main/CHANGES.md
|
127
133
|
documentation_uri: https://github.com/djberg96/dbi-dbrc/wiki
|
128
134
|
source_code_uri: https://github.com/djberg96/dbi-dbrc
|
129
135
|
wiki_uri: https://github.com/djberg96/dbi-dbrc/wiki
|
metadata.gz.sig
CHANGED
Binary file
|