pod4 0.8.0 → 0.8.1

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.
@@ -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