dbi-dbrc 1.4.1 → 1.5.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.
data/Rakefile CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'rake'
2
2
  require 'rake/clean'
3
- require 'rake/testtask'
3
+ require 'rspec/core/rake_task'
4
4
 
5
- CLEAN.include("**/*.gem", "**/*.rbc")
5
+ CLEAN.include("**/*.gem", "**/*.rbc", "**/*.lock")
6
6
 
7
7
  namespace :gem do
8
8
  desc "Create the dbi-dbrc gem"
@@ -20,23 +20,7 @@ namespace :gem do
20
20
  end
21
21
  end
22
22
 
23
- namespace :test do
24
- Rake::TestTask.new(:all) do |t|
25
- t.warning = true
26
- t.verbose = true
27
- end
28
-
29
- Rake::TestTask.new(:xml) do |t|
30
- t.warning = true
31
- t.verbose = true
32
- t.test_files = FileList['test/test_dbi_dbrc_xml.rb']
33
- end
34
-
35
- Rake::TestTask.new(:yml) do |t|
36
- t.warning = true
37
- t.verbose = true
38
- t.test_files = FileList['test/test_dbi_dbrc_yml.rb']
39
- end
40
- end
23
+ desc "Run the test suite"
24
+ RSpec::Core::RakeTask.new(:spec)
41
25
 
42
- task :default => 'test:all'
26
+ task :default => :spec
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.4.1'
5
+ spec.version = '1.5.0'
6
6
  spec.author = 'Daniel Berger'
7
7
  spec.email = 'djberg96@gmail.com'
8
8
  spec.license = 'Apache-2.0'
@@ -12,17 +12,14 @@ 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.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
16
-
17
- spec.required_ruby_version = ">= 1.9.3"
18
-
19
- spec.add_development_dependency('test-unit')
20
15
  spec.add_development_dependency('rake')
16
+ spec.add_development_dependency('rspec', '~> 3.9')
17
+ spec.add_development_dependency('fakefs', '~> 1.3')
21
18
 
22
19
  spec.metadata = {
23
20
  'homepage_uri' => 'https://github.com/djberg96/dbi-dbrc',
24
21
  'bug_tracker_uri' => 'https://github.com/djberg96/dbi-dbrc/issues',
25
- 'changelog_uri' => 'https://github.com/djberg96/dbi-dbrc/blob/master/CHANGES',
22
+ 'changelog_uri' => 'https://github.com/djberg96/dbi-dbrc/blob/main/CHANGES',
26
23
  'documentation_uri' => 'https://github.com/djberg96/dbi-dbrc/wiki',
27
24
  'source_code_uri' => 'https://github.com/djberg96/dbi-dbrc',
28
25
  'wiki_uri' => 'https://github.com/djberg96/dbi-dbrc/wiki'
data/lib/dbi/dbrc.rb CHANGED
@@ -18,7 +18,7 @@ module DBI
18
18
  class Error < StandardError; end
19
19
 
20
20
  # The version of the dbi-dbrc library
21
- VERSION = '1.4.1'.freeze
21
+ VERSION = '1.5.0'.freeze
22
22
 
23
23
  WINDOWS = File::ALT_SEPARATOR # :no-doc:
24
24
 
@@ -118,6 +118,7 @@ module DBI
118
118
  end
119
119
 
120
120
  @dbrc_file = File.join(home, '.dbrc')
121
+ dbrc_dir = home
121
122
  else
122
123
  raise Error, 'bad directory' unless File.directory?(dbrc_dir)
123
124
  @dbrc_file = File.join(dbrc_dir, '.dbrc')
@@ -220,7 +221,7 @@ module DBI
220
221
  # Parse the text out of the .dbrc file. This is the only method you
221
222
  # need to redefine if writing your own config handler.
222
223
  def parse_dbrc_config_file(file=@dbrc_file)
223
- IO.foreach(file){ |line|
224
+ File.foreach(file){ |line|
224
225
  next if line =~ /^#/ # Ignore comments
225
226
  db, user, pwd, driver, timeout, max, interval = line.split
226
227
 
@@ -253,7 +254,7 @@ module DBI
253
254
 
254
255
  # A subclass of DBRC designed to handle .dbrc files in XML format. The
255
256
  # public methods of this class are identical to DBRC.
256
- class XML < DBRC
257
+ class DBRC::XML < DBRC
257
258
  require 'rexml/document' # Good enough for small files
258
259
  include REXML
259
260
 
@@ -282,7 +283,7 @@ module DBI
282
283
 
283
284
  # A subclass of DBRC designed to handle .dbrc files in YAML format. The
284
285
  # public methods of this class are identical to DBRC.
285
- class YML < DBRC
286
+ class DBRC::YML < DBRC
286
287
  require 'yaml'
287
288
 
288
289
  private
@@ -0,0 +1,236 @@
1
+ #########################################################################
2
+ # dbi_dbrc_spec.rb
3
+ #
4
+ # Specs for the base class of DBI::DBRC. This test case should be
5
+ # run via the 'rake spec' task.
6
+ #########################################################################
7
+ require 'dbi/dbrc'
8
+ require 'fileutils'
9
+ require 'spec_helper'
10
+ require 'pp' # Requiring this ahead of fakefs to address a superclass issue.
11
+ require 'fakefs/spec_helpers'
12
+
13
+ RSpec.describe DBI::DBRC do
14
+ include FakeFS::SpecHelpers
15
+
16
+ let(:windows) { File::ALT_SEPARATOR }
17
+ let(:home) { File.join(Dir.pwd, 'home', 'someone') }
18
+ let(:dbrc) { File.join(home, '.dbrc') }
19
+
20
+ let(:plain) {
21
+ %q{
22
+ foo user1 pwd1 Oracle 40 3 60
23
+ foo user2 pwd2 OCI8 60 4 60
24
+ bar user1 pwd3 Oracle 30 2 30
25
+ baz user3 pwd4
26
+ }.lstrip
27
+ }
28
+
29
+ let(:db_foo){ 'foo' }
30
+ let(:db_bar){ 'bar' }
31
+ let(:db_baz){ 'baz' }
32
+ let(:user1) { 'user1' }
33
+ let(:user2) { 'user2' }
34
+
35
+ before do
36
+ allow(Dir).to receive(:home).and_return(home)
37
+ FileUtils.mkdir_p(home)
38
+ File.open(dbrc, 'w'){ |fh| fh.write(plain) }
39
+ File.chmod(0600, dbrc)
40
+
41
+ # FakeFS doesn't implement this yet
42
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
43
+ end
44
+
45
+ example "version" do
46
+ expect(described_class::VERSION).to eq('1.5.0')
47
+ expect(described_class::VERSION).to be_frozen
48
+ end
49
+
50
+ context "windows", :windows => true do
51
+ example "constructor raises an error unless the .dbrc file is hidden" do
52
+ File.unset_attr(plain, File::HIDDEN)
53
+ expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
54
+ end
55
+ end
56
+
57
+ context "constructor" do
58
+ example "constructor raises an error if the permissions are invalid" do
59
+ File.chmod(0555, dbrc)
60
+ expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
61
+ end
62
+
63
+ example "constructor raises an error if no database is provided" do
64
+ expect{ described_class.new }.to raise_error(ArgumentError)
65
+ end
66
+
67
+ example "constructor works as expected with or without user" do
68
+ expect{ described_class.new(db_foo, user1) }.not_to raise_error
69
+ expect{ described_class.new(db_foo, nil) }.not_to raise_error
70
+ end
71
+
72
+ example "constructor fails if the database entry doesn't exist" do
73
+ expect{ described_class.new('bogus', user1) }.to raise_error(DBI::DBRC::Error)
74
+ end
75
+
76
+ example "constructor fails if the user entry doesn't exist" do
77
+ expect{ described_class.new(db_foo, 'nobody') }.to raise_error(DBI::DBRC::Error)
78
+ end
79
+
80
+ example "constructor fails if the .dbrc file isn't found in the specified directory" do
81
+ expect{ described_class.new(db_foo, user1, '/bogusXX') }.to raise_error(DBI::DBRC::Error)
82
+ end
83
+
84
+ example "constructor returns expected values for the same database with different users" do
85
+ dbrc1 = described_class.new(db_foo, user1)
86
+ dbrc2 = described_class.new(db_foo, user2)
87
+ expect(dbrc1.database).to eq(dbrc2.database)
88
+ expect(dbrc1.user).to eq('user1')
89
+ expect(dbrc2.user).to eq('user2')
90
+ end
91
+
92
+ example "constructor returns expected values for the same user with different database" do
93
+ dbrc1 = described_class.new(db_foo, user1)
94
+ dbrc2 = described_class.new(db_bar, user1)
95
+ expect(dbrc1.user).to eq(dbrc2.user)
96
+ expect(dbrc1.database).to eq('foo')
97
+ expect(dbrc2.database).to eq('bar')
98
+ end
99
+
100
+ example "constructor works as expected if some optional fields are not defined" do
101
+ dbrc = described_class.new(db_baz)
102
+ expect(dbrc.user).to eq("user3")
103
+ expect(dbrc.passwd).to eq("pwd4")
104
+ expect(dbrc.driver).to be_nil
105
+ expect(dbrc.interval).to be_nil
106
+ expect(dbrc.timeout).to be_nil
107
+ expect(dbrc.max_reconn).to be_nil
108
+ expect(dbrc.dsn).to be_nil
109
+ end
110
+ end
111
+
112
+ context "instance methods" do
113
+ before do
114
+ @dbrc = DBI::DBRC.new(db_foo)
115
+ end
116
+
117
+ example "basic database getter method and aliases" do
118
+ expect(@dbrc).to respond_to(:database)
119
+ expect(@dbrc.method(:database)).to eq(@dbrc.method(:db))
120
+ expect(@dbrc.method(:database)).to eq(@dbrc.method(:host))
121
+ end
122
+
123
+ example "basic database setter method and alias" do
124
+ expect(@dbrc).to respond_to(:database=)
125
+ expect(@dbrc.method(:database=)).to eq(@dbrc.method(:db=))
126
+ end
127
+
128
+ example "database method returns expected value" do
129
+ expect(@dbrc.database).to eq('foo')
130
+ end
131
+
132
+ example "basic dbrc_dir check" do
133
+ expect(@dbrc).to respond_to(:dbrc_dir)
134
+ end
135
+
136
+ example "dbrc_dir returns the expected value" do
137
+ expect(@dbrc.dbrc_dir).to eq(home)
138
+ end
139
+
140
+ example "basic dbrc_file check" do
141
+ expect(@dbrc).to respond_to(:dbrc_file)
142
+ end
143
+
144
+ example "dbrc_file returns the expected value" do
145
+ expect(File.basename(@dbrc.dbrc_file)).to eq('.dbrc')
146
+ end
147
+
148
+ example "basic dsn getter check" do
149
+ expect(@dbrc).to respond_to(:dsn)
150
+ end
151
+
152
+ example "dsn method returns the expected value" do
153
+ expect(@dbrc.dsn).to eq('dbi:Oracle:foo')
154
+ end
155
+
156
+ example "basic dsn setter check" do
157
+ expect(@dbrc).to respond_to(:dsn=)
158
+ end
159
+
160
+ example "user getter basic check" do
161
+ expect(@dbrc).to respond_to(:user)
162
+ end
163
+
164
+ example "user method returns expected value" do
165
+ expect(@dbrc.user).to eq('user1')
166
+ end
167
+
168
+ example "user setter basic check" do
169
+ expect(@dbrc).to respond_to(:user=)
170
+ end
171
+
172
+ example "password getter basic check and alias" do
173
+ expect(@dbrc).to respond_to(:password)
174
+ expect(@dbrc.method(:password)).to eq(@dbrc.method(:passwd))
175
+ end
176
+
177
+ example "password method returns expected value" do
178
+ expect(@dbrc.password).to eq("pwd1")
179
+ end
180
+
181
+ example "password setter basic check and alias" do
182
+ expect(@dbrc).to respond_to(:password=)
183
+ expect(@dbrc.method(:password=)).to eq(@dbrc.method(:passwd=))
184
+ end
185
+
186
+ example "driver getter basic check" do
187
+ expect(@dbrc).to respond_to(:driver)
188
+ end
189
+
190
+ example "driver method returns expected value" do
191
+ expect(@dbrc.driver).to eq("Oracle")
192
+ end
193
+
194
+ example "driver setter basic check" do
195
+ expect(@dbrc).to respond_to(:driver=)
196
+ end
197
+
198
+ example "interval getter basic check" do
199
+ expect(@dbrc).to respond_to(:interval)
200
+ end
201
+
202
+ example "interval method returns expected value" do
203
+ expect(@dbrc.interval).to eq(60)
204
+ end
205
+
206
+ example "interval setter basic check" do
207
+ expect(@dbrc).to respond_to(:interval=)
208
+ end
209
+
210
+ example "timeout getter basic check" do
211
+ expect(@dbrc).to respond_to(:timeout)
212
+ expect(@dbrc.method(:timeout)).to eq(@dbrc.method(:time_out))
213
+ end
214
+
215
+ example "timeout method returns expected value" do
216
+ expect(@dbrc.timeout).to eq(40)
217
+ end
218
+
219
+ example "timeout setter basic check" do
220
+ expect(@dbrc).to respond_to(:timeout=)
221
+ end
222
+
223
+ example "max_reconn getter basic check" do
224
+ expect(@dbrc).to respond_to(:max_reconn)
225
+ expect(@dbrc.method(:max_reconn)).to eq(@dbrc.method(:maximum_reconnects))
226
+ end
227
+
228
+ example "max_reconn method returns expected value" do
229
+ expect(@dbrc.max_reconn).to eq(3)
230
+ end
231
+
232
+ example "max_reconn setter basic check" do
233
+ expect(@dbrc).to respond_to(:max_reconn=)
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,95 @@
1
+ ########################################################################
2
+ # dbi_dbrc_xml_spec.rb
3
+ #
4
+ # Test suite for the XML 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::XML, :xml => 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(:xml){
22
+ %q{
23
+ <dbrc>
24
+ <database name="foo">
25
+ <user>user1</user>
26
+ <password>pwd1</password>
27
+ <driver>Oracle</driver>
28
+ <interval>60</interval>
29
+ <timeout>40</timeout>
30
+ <maximum_reconnects>3</maximum_reconnects>
31
+ </database>
32
+ <database name="foo">
33
+ <user>user2</user>
34
+ <password>pwd2</password>
35
+ <driver>OCI8</driver>
36
+ <interval>60</interval>
37
+ <timeout>60</timeout>
38
+ <maximum_reconnects>4</maximum_reconnects>
39
+ </database>
40
+ <database name="bar">
41
+ <user>user1</user>
42
+ <password>pwd3</password>
43
+ <driver>Oracle</driver>
44
+ <interval>30</interval>
45
+ <timeout>30</timeout>
46
+ <maximum_reconnects>2</maximum_reconnects>
47
+ </database>
48
+ <database name="baz">
49
+ <user>user3</user>
50
+ <password>pwd4</password>
51
+ </database>
52
+ </dbrc>
53
+ }.lstrip
54
+ }
55
+
56
+ before do
57
+ allow(Dir).to receive(:home).and_return(home)
58
+ FileUtils.mkdir_p(home)
59
+ File.open(dbrc, 'w'){ |fh| fh.write(xml) }
60
+ File.chmod(0600, dbrc)
61
+
62
+ # FakeFS doesn't implement this yet
63
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
64
+ end
65
+
66
+ context "instance methods" do
67
+ before do
68
+ @dbrc = described_class.new(db_foo, user1)
69
+ end
70
+
71
+ example "database method returns expected value" do
72
+ expect(@dbrc.database).to eq('foo')
73
+ end
74
+
75
+ example "password method returns expected value" do
76
+ expect(@dbrc.password).to eq('pwd1')
77
+ end
78
+
79
+ example "driver method returns expected value" do
80
+ expect(@dbrc.driver).to eq('Oracle')
81
+ end
82
+
83
+ example "interval method returns expected value" do
84
+ expect(@dbrc.interval).to eq(60)
85
+ end
86
+
87
+ example "timeout method returns expected value" do
88
+ expect(@dbrc.timeout).to eq(40)
89
+ end
90
+
91
+ example "maximum_reconnects method returns expected value" do
92
+ expect(@dbrc.maximum_reconnects).to eq(3)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,89 @@
1
+ ########################################################################
2
+ # dbi_dbrc_yml_spec.rb
3
+ #
4
+ # Test suite for the YAML 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::YML, :yml => 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(:yml){
22
+ %q{
23
+ - foo:
24
+ user: user1
25
+ password: pwd1
26
+ driver: Oracle
27
+ interval: 60
28
+ timeout: 40
29
+ maximum_reconnects: 3
30
+ - foo:
31
+ user: user2
32
+ password: pwd2
33
+ driver: OCI8
34
+ interval: 60
35
+ timeout: 60
36
+ maximum_reconnects: 4
37
+ - bar:
38
+ user: user1
39
+ password: pwd3
40
+ driver: Oracle
41
+ interval: 30
42
+ timeout: 30
43
+ maximum_reconnects: 2
44
+ - baz:
45
+ user: user3
46
+ password: pwd4
47
+ }
48
+ }
49
+
50
+ before do
51
+ allow(Dir).to receive(:home).and_return(home)
52
+ FileUtils.mkdir_p(home)
53
+ File.open(dbrc, 'w'){ |fh| fh.write(yml) }
54
+ File.chmod(0600, dbrc)
55
+
56
+ # FakeFS doesn't implement this yet
57
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
58
+ end
59
+
60
+ context "instance methods" do
61
+ before do
62
+ @dbrc = described_class.new(db_foo, user1)
63
+ end
64
+
65
+ example "database method returns expected value" do
66
+ expect(@dbrc.database).to eq('foo')
67
+ end
68
+
69
+ example "password method returns expected value" do
70
+ expect(@dbrc.password).to eq('pwd1')
71
+ end
72
+
73
+ example "driver method returns expected value" do
74
+ expect(@dbrc.driver).to eq('Oracle')
75
+ end
76
+
77
+ example "interval method returns expected value" do
78
+ expect(@dbrc.interval).to eq(60)
79
+ end
80
+
81
+ example "timeout method returns expected value" do
82
+ expect(@dbrc.timeout).to eq(40)
83
+ end
84
+
85
+ example "maximum_reconnects method returns expected value" do
86
+ expect(@dbrc.maximum_reconnects).to eq(3)
87
+ end
88
+ end
89
+ end