pod4 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,26 +10,30 @@ require 'time'
10
10
  require 'bigdecimal'
11
11
 
12
12
 
13
- class TestSequelInterfacePg < SequelInterface
14
- set_table :customer
15
- set_id_fld :id
16
- end
17
-
18
- class SchemaSequelInterfacePg < SequelInterface
19
- set_schema :public
20
- set_table :customer
21
- set_id_fld :id
22
- end
23
-
24
- class ProdSequelInterfacePg < SequelInterface
25
- set_table :product
26
- set_id_fld :code
27
- end
13
+ describe "SequelInterface (Pg)" do
28
14
 
15
+ let(:sequel_interface_class) do
16
+ Class.new SequelInterface do
17
+ set_table :customer
18
+ set_id_fld :id
19
+ end
20
+ end
29
21
 
22
+ let(:schema_interface_class) do
23
+ Class.new SequelInterface do
24
+ set_schema :public
25
+ set_table :customer
26
+ set_id_fld :id
27
+ end
28
+ end
30
29
 
30
+ let(:prod_interface_class) do
31
+ Class.new SequelInterface do
32
+ set_table :product
33
+ set_id_fld :code
34
+ end
35
+ end
31
36
 
32
- describe TestSequelInterfacePg do
33
37
 
34
38
  let(:data) do
35
39
  d = []
@@ -89,8 +93,8 @@ describe TestSequelInterfacePg do
89
93
  db
90
94
  end
91
95
 
92
- let(:interface) { TestSequelInterfacePg.new(db) }
93
- let(:prod_interface) { ProdSequelInterfacePg.new(db) }
96
+ let(:interface) { sequel_interface_class.new(db) }
97
+ let(:prod_interface) { prod_interface_class.new(db) }
94
98
 
95
99
 
96
100
  before do
@@ -115,7 +119,7 @@ describe TestSequelInterfacePg do
115
119
  end
116
120
 
117
121
  it 'returns the schema plus table when the schema is set' do
118
- ifce = SchemaSequelInterfacePg.new(db)
122
+ ifce = schema_interface_class.new(db)
119
123
  expect( ifce.quoted_table.downcase ).to eq( %|"public"."customer"| )
120
124
  end
121
125
 
@@ -3,25 +3,29 @@ require 'time'
3
3
  require 'bigdecimal'
4
4
  require 'pod4/sql_helper'
5
5
 
6
- class SQLHelperTester1
7
- include SQLHelper
8
6
 
9
- def schema; "marco"; end
10
- def table; "polo"; end
11
- def id_fld; "foo"; end
12
- end
7
+ describe "SQLHelper" do
13
8
 
14
- class SQLHelperTester2
15
- include SQLHelper
9
+ let(:tester1_class) do
10
+ Class.new do
11
+ include SQLHelper
16
12
 
17
- def table; "polo"; end
18
- end
13
+ def schema; "marco"; end
14
+ def table; "polo"; end
15
+ def id_fld; "foo"; end
16
+ end
17
+ end
19
18
 
19
+ let(:tester2_class) do
20
+ Class.new do
21
+ include SQLHelper
20
22
 
21
- describe "SQLHelper" do
23
+ def table; "polo"; end
24
+ end
25
+ end
22
26
 
23
- let(:tester1) {SQLHelperTester1.new}
24
- let(:tester2) {SQLHelperTester2.new}
27
+ let(:tester1) {tester1_class.new}
28
+ let(:tester2) {tester2_class.new}
25
29
 
26
30
 
27
31
  describe "quoted_table" do
@@ -89,7 +93,13 @@ describe "SQLHelper" do
89
93
 
90
94
  it "returns time wrapped in a single quote" do
91
95
  tm = Time.parse(datetime)
92
- expect( tester1.send :quote, tm ).to match dtmatch
96
+
97
+ # Ruby Time.parse swallows the given timezone and converts prior to Ruby 2.2
98
+ if RUBY_VERSION =~ /^2.[01]/
99
+ expect( tester1.send :quote, tm ).to match /'2055.12.31[T ]07.23.36 ?\+00:?00'/
100
+ else
101
+ expect( tester1.send :quote, tm ).to match dtmatch
102
+ end
93
103
  end
94
104
 
95
105
  it "returns a BigDecimal as a float" do
@@ -13,24 +13,31 @@ require 'bigdecimal'
13
13
  require 'sqljdbc4.jar' # from jdbc-mssqlserver
14
14
 
15
15
 
16
- class TestSequelInterfaceMs < SequelInterface
17
- set_table :customer
18
- set_id_fld :id
19
- end
16
+ describe "SequelInterface (JDBC/MSSQL)" do
20
17
 
21
- class SchemaSequelInterfaceMs < SequelInterface
22
- set_schema :public
23
- set_table :customer
24
- set_id_fld :id
25
- end
18
+ let(:sequel_interface_class) do
19
+ Class.new SequelInterface do
20
+ set_table :customer
21
+ set_id_fld :id
22
+ end
23
+ end
26
24
 
27
- class ProdSequelInterfaceMs < SequelInterface
28
- set_table :product
29
- set_id_fld :code
30
- end
25
+ let(:schema_interface_class) do
26
+ Class.new SequelInterface do
27
+ set_schema :public
28
+ set_table :customer
29
+ set_id_fld :id
30
+ end
31
+ end
32
+
33
+ let(:prod_interface_class) do
34
+ Class.new SequelInterface do
35
+ set_table :product
36
+ set_id_fld :code
37
+ end
38
+ end
31
39
 
32
40
 
33
- describe TestSequelInterfaceMs do
34
41
 
35
42
  let(:data) do
36
43
  d = []
@@ -101,8 +108,8 @@ describe TestSequelInterfaceMs do
101
108
  db
102
109
  end
103
110
 
104
- let(:interface) { TestSequelInterfaceMs.new(db) }
105
- let(:prod_interface) { ProdSequelInterfaceMs.new(db) }
111
+ let(:interface) { sequel_interface_class.new(db) }
112
+ let(:prod_interface) { prod_interface_class.new(db) }
106
113
 
107
114
  before do
108
115
  # TRUNCATE TABLE also resets the identity counter
@@ -123,7 +130,7 @@ describe TestSequelInterfaceMs do
123
130
  end
124
131
 
125
132
  it 'returns the schema plus table when the schema is set' do
126
- ifce = SchemaSequelInterfaceMs.new(db)
133
+ ifce = schema_interface_class.new(db)
127
134
  expect( ifce.quoted_table.downcase ).to eq( %|[public].[customer]| )
128
135
  end
129
136
 
@@ -13,6 +13,8 @@ require 'bigdecimal'
13
13
  # the MSSQL one. But no --- and presumably Jeremy Evans has his reasons.
14
14
  require 'jdbc/postgres'
15
15
 
16
+
17
+ =begin
16
18
  class TestSequelInterfacePg < SequelInterface
17
19
  set_table :customer
18
20
  set_id_fld :id
@@ -28,10 +30,34 @@ class ProdSequelInterfacePg < SequelInterface
28
30
  set_table :product
29
31
  set_id_fld :code
30
32
  end
33
+ =end
34
+
35
+
31
36
 
37
+ describe "SequelInterface (JDBC/Pg)" do
38
+
39
+ let(:sequel_interface_class) do
40
+ Class.new SequelInterface do
41
+ set_table :customer
42
+ set_id_fld :id
43
+ end
44
+ end
32
45
 
46
+ let(:schema_interface_class) do
47
+ Class.new SequelInterface do
48
+ set_schema :public
49
+ set_table :customer
50
+ set_id_fld :id
51
+ end
52
+ end
53
+
54
+ let(:prod_interface_class) do
55
+ Class.new SequelInterface do
56
+ set_table :product
57
+ set_id_fld :code
58
+ end
59
+ end
33
60
 
34
- describe TestSequelInterfacePg do
35
61
 
36
62
  let(:data) do
37
63
  d = []
@@ -91,8 +117,8 @@ describe TestSequelInterfacePg do
91
117
  db
92
118
  end
93
119
 
94
- let(:interface) { TestSequelInterfacePg.new(db) }
95
- let(:prod_interface) { ProdSequelInterfacePg.new(db) }
120
+ let(:interface) { sequel_interface_class.new(db) }
121
+ let(:prod_interface) { prod_interface_class.new(db) }
96
122
 
97
123
  before do
98
124
  # TRUNCATE TABLE also resets the identity counter
@@ -117,7 +143,7 @@ describe TestSequelInterfacePg do
117
143
  end
118
144
 
119
145
  it 'returns the schema plus table when the schema is set' do
120
- ifce = SchemaSequelInterfacePg.new(db)
146
+ ifce = schema_interface_class.new(db)
121
147
  expect( ifce.quoted_table.downcase ).to eq( %|"public"."customer"| )
122
148
  end
123
149
 
@@ -5,35 +5,44 @@ require_relative '../common/shared_examples_for_interface'
5
5
  require_relative '../fixtures/database'
6
6
 
7
7
 
8
- class TestPgInterface < PgInterface
9
- set_table :customer
10
- set_id_fld :id
8
+ describe "PgInterface" do
11
9
 
12
- # We open a lot of connections, unusually
13
- def stop; close; end
14
- end
10
+ let(:pg_interface_class) do
11
+ Class.new PgInterface do
12
+ set_table :customer
13
+ set_id_fld :id
15
14
 
16
- class SchemaPgInterface < PgInterface
17
- set_schema :public
18
- set_table :customer
19
- set_id_fld :id
20
- end
15
+ def stop; close; end # We open a lot of connections, unusually
16
+ end
17
+ end
21
18
 
22
- class BadPgInterface1 < PgInterface
23
- set_table :customer
24
- end
19
+ let(:schema_interface_class) do
20
+ Class.new PgInterface do
21
+ set_schema :public
22
+ set_table :customer
23
+ set_id_fld :id
24
+ end
25
+ end
25
26
 
26
- class BadPgInterface2 < PgInterface
27
- set_id_fld :id
28
- end
27
+ let(:prod_interface_class) do
28
+ Class.new PgInterface do
29
+ set_table :product
30
+ set_id_fld :code
31
+ end
32
+ end
29
33
 
30
- class ProdPgInterface < PgInterface
31
- set_table :product
32
- set_id_fld :code
33
- end
34
+ let(:bad_interface_class1) do
35
+ Class.new PgInterface do
36
+ set_table :customer
37
+ end
38
+ end
34
39
 
40
+ let(:bad_interface_class2) do
41
+ Class.new PgInterface do
42
+ set_id_fld :id
43
+ end
44
+ end
35
45
 
36
- describe TestPgInterface do
37
46
 
38
47
  def db_setup(connect)
39
48
  client = PG.connect(connect)
@@ -114,11 +123,11 @@ describe TestPgInterface do
114
123
 
115
124
 
116
125
  let(:interface) do
117
- TestPgInterface.new(@connect_hash)
126
+ pg_interface_class.new(@connect_hash)
118
127
  end
119
128
 
120
129
  let(:prod_interface) do
121
- ProdPgInterface.new(@connect_hash)
130
+ prod_interface_class.new(@connect_hash)
122
131
  end
123
132
 
124
133
  #####
@@ -127,7 +136,7 @@ describe TestPgInterface do
127
136
  it_behaves_like 'an interface' do
128
137
 
129
138
  let(:interface) do
130
- TestPgInterface.new(@connect_hash)
139
+ pg_interface_class.new(@connect_hash)
131
140
  end
132
141
 
133
142
  let(:record) { {name: 'Barney'} }
@@ -138,7 +147,7 @@ describe TestPgInterface do
138
147
 
139
148
  describe 'PgInterface.set_schema' do
140
149
  it 'takes one argument' do
141
- expect( PgInterface ).to respond_to(:set_schema).with(1).argument
150
+ expect( pg_interface_class ).to respond_to(:set_schema).with(1).argument
142
151
  end
143
152
  end
144
153
  ##
@@ -146,12 +155,12 @@ describe TestPgInterface do
146
155
 
147
156
  describe 'PgInterface.schema' do
148
157
  it 'returns the schema' do
149
- expect( SchemaPgInterface.schema ).to eq :public
158
+ expect( schema_interface_class.schema ).to eq :public
150
159
  end
151
160
 
152
161
  it 'is optional' do
153
- expect{ TestPgInterface.schema }.not_to raise_exception
154
- expect( TestPgInterface.schema ).to eq nil
162
+ expect{ pg_interface_class.schema }.not_to raise_exception
163
+ expect( pg_interface_class.schema ).to eq nil
155
164
  end
156
165
  end
157
166
  ##
@@ -159,7 +168,7 @@ describe TestPgInterface do
159
168
 
160
169
  describe 'PgInterface.set_table' do
161
170
  it 'takes one argument' do
162
- expect( PgInterface ).to respond_to(:set_table).with(1).argument
171
+ expect( pg_interface_class ).to respond_to(:set_table).with(1).argument
163
172
  end
164
173
  end
165
174
  ##
@@ -167,7 +176,7 @@ describe TestPgInterface do
167
176
 
168
177
  describe 'PgInterface.table' do
169
178
  it 'returns the table' do
170
- expect( TestPgInterface.table ).to eq :customer
179
+ expect( pg_interface_class.table ).to eq :customer
171
180
  end
172
181
  end
173
182
  ##
@@ -175,7 +184,7 @@ describe TestPgInterface do
175
184
 
176
185
  describe 'PgInterface.set_id_fld' do
177
186
  it 'takes one argument' do
178
- expect( PgInterface ).to respond_to(:set_id_fld).with(1).argument
187
+ expect( pg_interface_class ).to respond_to(:set_id_fld).with(1).argument
179
188
  end
180
189
  end
181
190
  ##
@@ -183,7 +192,7 @@ describe TestPgInterface do
183
192
 
184
193
  describe 'PgInterface.id_fld' do
185
194
  it 'returns the ID field name' do
186
- expect( TestPgInterface.id_fld ).to eq :id
195
+ expect( pg_interface_class.id_fld ).to eq :id
187
196
  end
188
197
  end
189
198
  ##
@@ -192,11 +201,11 @@ describe TestPgInterface do
192
201
  describe '#new' do
193
202
 
194
203
  it 'requires a TinyTds connection string' do
195
- expect{ TestPgInterface.new }.to raise_exception ArgumentError
196
- expect{ TestPgInterface.new(nil) }.to raise_exception ArgumentError
197
- expect{ TestPgInterface.new('foo') }.to raise_exception ArgumentError
204
+ expect{ pg_interface_class.new }.to raise_exception ArgumentError
205
+ expect{ pg_interface_class.new(nil) }.to raise_exception ArgumentError
206
+ expect{ pg_interface_class.new('foo') }.to raise_exception ArgumentError
198
207
 
199
- expect{ TestPgInterface.new(@connect_hash) }.not_to raise_exception
208
+ expect{ pg_interface_class.new(@connect_hash) }.not_to raise_exception
200
209
  end
201
210
 
202
211
  end
@@ -210,7 +219,7 @@ describe TestPgInterface do
210
219
  end
211
220
 
212
221
  it 'returns the schema plus table when the schema is set' do
213
- ifce = SchemaPgInterface.new(@connect_hash)
222
+ ifce = schema_interface_class.new(@connect_hash)
214
223
  expect( ifce.quoted_table ).to eq( %|"public"."customer"| )
215
224
  end
216
225
 
@@ -553,9 +562,9 @@ describe TestPgInterface do
553
562
  before { fill_data(interface) }
554
563
 
555
564
  it 'requires an SQL string' do
556
- expect{ interface.selectp }.to raise_exception ArgumentError
557
- expect{ interface.selectp(nil) }.to raise_exception ArgumentError
558
- expect{ interface.selectp(14) }.to raise_exception ArgumentError
565
+ expect{ interface.selectp }.to raise_exception ArgumentError
566
+ expect{ interface.selectp(nil) }.to raise_exception ArgumentError
567
+ expect{ interface.selectp(14) }.to raise_exception ArgumentError
559
568
  end
560
569
 
561
570
  it 'raises some sort of Pod4 error if it runs into problems' do
@@ -8,40 +8,44 @@ require 'bigdecimal'
8
8
  require_relative '../common/shared_examples_for_interface'
9
9
 
10
10
 
11
- class TestSequelInterface < SequelInterface
12
- set_table :customer
13
- set_id_fld :id
14
- end
15
11
 
16
- class SchemaSequelInterface < SequelInterface
17
- set_schema :public
18
- set_table :customer
19
- set_id_fld :id
20
- end
12
+ describe "SequelInterface" do
21
13
 
22
- class BadSequelInterface1 < SequelInterface
23
- set_table :customer
24
- end
25
-
26
- class BadSequelInterface2 < SequelInterface
27
- set_id_fld :id
28
- end
14
+ let(:sequel_interface_class) do
15
+ Class.new SequelInterface do
16
+ set_table :customer
17
+ set_id_fld :id
18
+ end
19
+ end
29
20
 
30
- class ProdSequelInterface < SequelInterface
31
- set_table :product
32
- set_id_fld :code
33
- end
21
+ let(:schema_interface_class) do
22
+ Class.new SequelInterface do
23
+ set_schema :public
24
+ set_table :customer
25
+ set_id_fld :id
26
+ end
27
+ end
34
28
 
29
+ let(:prod_interface_class) do
30
+ Class.new SequelInterface do
31
+ set_table :product
32
+ set_id_fld :code
33
+ end
34
+ end
35
35
 
36
+ let(:bad_interface_class1) do
37
+ Class.new SequelInterface do
38
+ set_table :customer
39
+ end
40
+ end
36
41
 
42
+ let(:bad_interface_class2) do
43
+ Class.new SequelInterface do
44
+ set_id_fld :id
45
+ end
46
+ end
37
47
 
38
- describe TestSequelInterface do
39
48
 
40
- # We actually connect to a special test database for this. I don't generally
41
- # like unit tests to involve other classes at all, but otherwise we are
42
- # hardly testing anything, and in any case we do need to test that this class
43
- # successfully interfaces with Sequel. We can't really do that without
44
- # talking to a database.
45
49
 
46
50
  let(:data) do
47
51
  d = []
@@ -99,8 +103,8 @@ describe TestSequelInterface do
99
103
  db
100
104
  end
101
105
 
102
- let(:interface) { TestSequelInterface.new(db) }
103
- let(:prod_interface) { ProdSequelInterface.new(db) }
106
+ let(:interface) { sequel_interface_class.new(db) }
107
+ let(:prod_interface) { prod_interface_class.new(db) }
104
108
 
105
109
  before do
106
110
  fill_data(interface)
@@ -122,7 +126,7 @@ describe TestSequelInterface do
122
126
  BigDecimal :price, :size=>[10.2]
123
127
  end
124
128
 
125
- TestSequelInterface.new(db2)
129
+ sequel_interface_class.new(db2)
126
130
  end
127
131
 
128
132
  let(:record) { {name: 'Barney', price: 1.11} }
@@ -132,7 +136,7 @@ describe TestSequelInterface do
132
136
 
133
137
  describe 'SequelInterface.set_schema' do
134
138
  it 'takes one argument' do
135
- expect( SequelInterface ).to respond_to(:set_schema).with(1).argument
139
+ expect( sequel_interface_class ).to respond_to(:set_schema).with(1).argument
136
140
  end
137
141
  end
138
142
  ##
@@ -140,12 +144,12 @@ describe TestSequelInterface do
140
144
 
141
145
  describe 'SequelInterface.schema' do
142
146
  it 'returns the schema' do
143
- expect( SchemaSequelInterface.schema ).to eq :public
147
+ expect( schema_interface_class.schema ).to eq :public
144
148
  end
145
149
 
146
150
  it 'is optional' do
147
- expect{ TestSequelInterface.schema }.not_to raise_exception
148
- expect( TestSequelInterface.schema ).to eq nil
151
+ expect{ sequel_interface_class.schema }.not_to raise_exception
152
+ expect( sequel_interface_class.schema ).to eq nil
149
153
  end
150
154
  end
151
155
  ##
@@ -153,7 +157,7 @@ describe TestSequelInterface do
153
157
 
154
158
  describe 'SequelInterface.set_table' do
155
159
  it 'takes one argument' do
156
- expect( SequelInterface ).to respond_to(:set_table).with(1).argument
160
+ expect( sequel_interface_class ).to respond_to(:set_table).with(1).argument
157
161
  end
158
162
  end
159
163
  ##
@@ -161,7 +165,7 @@ describe TestSequelInterface do
161
165
 
162
166
  describe 'SequelInterface.table' do
163
167
  it 'returns the table' do
164
- expect( TestSequelInterface.table ).to eq :customer
168
+ expect( sequel_interface_class.table ).to eq :customer
165
169
  end
166
170
  end
167
171
  ##
@@ -169,7 +173,7 @@ describe TestSequelInterface do
169
173
 
170
174
  describe 'SequelInterface.set_id_fld' do
171
175
  it 'takes one argument' do
172
- expect( SequelInterface ).to respond_to(:set_id_fld).with(1).argument
176
+ expect( sequel_interface_class ).to respond_to(:set_id_fld).with(1).argument
173
177
  end
174
178
  end
175
179
  ##
@@ -177,7 +181,7 @@ describe TestSequelInterface do
177
181
 
178
182
  describe 'SequelInterface.id_fld' do
179
183
  it 'returns the ID field name' do
180
- expect( TestSequelInterface.id_fld ).to eq :id
184
+ expect( sequel_interface_class.id_fld ).to eq :id
181
185
  end
182
186
  end
183
187
  ##
@@ -186,17 +190,17 @@ describe TestSequelInterface do
186
190
  describe '#new' do
187
191
 
188
192
  it 'requires a Sequel DB object' do
189
- expect{ TestSequelInterface.new }.to raise_exception ArgumentError
190
- expect{ TestSequelInterface.new(nil) }.to raise_exception ArgumentError
191
- expect{ TestSequelInterface.new('foo') }.to raise_exception ArgumentError
193
+ expect{ sequel_interface_class.new }.to raise_exception ArgumentError
194
+ expect{ sequel_interface_class.new(nil) }.to raise_exception ArgumentError
195
+ expect{ sequel_interface_class.new('foo') }.to raise_exception ArgumentError
192
196
 
193
- expect{ TestSequelInterface.new(db) }.not_to raise_exception
197
+ expect{ sequel_interface_class.new(db) }.not_to raise_exception
194
198
  end
195
199
 
196
200
  it 'requires the table and id field to be defined in the class' do
197
201
  expect{ SequelInterface.new(db) }.to raise_exception Pod4Error
198
- expect{ BadSequelInterface1.new(db) }.to raise_exception Pod4Error
199
- expect{ BadSequelInterface2.new(db) }.to raise_exception Pod4Error
202
+ expect{ bad_interface_class1.new(db) }.to raise_exception Pod4Error
203
+ expect{ bad_interface_class2.new(db) }.to raise_exception Pod4Error
200
204
  end
201
205
 
202
206
  end
@@ -210,7 +214,7 @@ describe TestSequelInterface do
210
214
  end
211
215
 
212
216
  it 'returns the schema plus table when the schema is set' do
213
- ifce = SchemaSequelInterface.new(db)
217
+ ifce = schema_interface_class.new(db)
214
218
  expect( ifce.quoted_table ).to eq( %|`public`.`customer`| )
215
219
  end
216
220
 
@@ -340,15 +344,6 @@ describe TestSequelInterface do
340
344
  expect{ interface.list(name: 'Barney') }.not_to raise_exception
341
345
  end
342
346
 
343
- =begin
344
- it 'returns an array of Octothorpes that match the records' do
345
- # convert each OT to a hash and remove the ID key
346
- arr = interface.list.map {|ot| x = ot.to_h; x.delete(:id); x }
347
-
348
- expect( arr ).to match_array data
349
- end
350
- =end
351
-
352
347
  it 'returns an array of Octothorpes that match the records' do
353
348
  arr = interface.list.map {|ot| x = ot.to_h}
354
349