pod4 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,6 +30,12 @@ class BadTdsInterface2 < TdsInterface
30
30
  set_id_fld :id
31
31
  end
32
32
 
33
+ class ProdTdsInterface < TdsInterface
34
+ set_db :pod4_test
35
+ set_table :product
36
+ set_id_fld :code
37
+ end
38
+
33
39
 
34
40
  describe TestTdsInterface do
35
41
 
@@ -42,10 +48,14 @@ describe TestTdsInterface do
42
48
  client.execute(%Q|
43
49
  if exists (select * from INFORMATION_SCHEMA.TABLES
44
50
  where TABLE_NAME = 'customer'
45
- AND TABLE_SCHEMA = 'dbo' )
46
- drop table dbo.customer;| ).do
51
+ and TABLE_SCHEMA = 'dbo' )
52
+ drop table dbo.customer;
53
+
54
+ if exists (select * from INFORMATION_SCHEMA.TABLES
55
+ where TABLE_NAME = 'product'
56
+ and TABLE_SCHEMA = 'dbo' )
57
+ drop table dbo.product;
47
58
 
48
- client.execute(%Q|
49
59
  create table dbo.customer (
50
60
  id int identity(1,1) not null,
51
61
  name nvarchar(max),
@@ -53,7 +63,11 @@ describe TestTdsInterface do
53
63
  day date null,
54
64
  timestamp datetime null,
55
65
  price money null,
56
- qty numeric(5,2) null );| ).do
66
+ qty numeric(5,2) null );
67
+
68
+ create table dbo.product (
69
+ code nvarchar(20),
70
+ name nvarchar(max) );| ).do
57
71
 
58
72
  ensure
59
73
  client.close if client
@@ -64,6 +78,10 @@ describe TestTdsInterface do
64
78
  @data.each{|r| ifce.create(r) }
65
79
  end
66
80
 
81
+ def fill_product_data(ifce)
82
+ ifce.create( {code: "foo", name: "bar"} )
83
+ end
84
+
67
85
 
68
86
  before(:all) do
69
87
  @connect_hash = DB[:tds]
@@ -104,6 +122,10 @@ describe TestTdsInterface do
104
122
  TestTdsInterface.new(@connect_hash)
105
123
  end
106
124
 
125
+ let(:prod_interface) do
126
+ ProdTdsInterface.new(@connect_hash)
127
+ end
128
+
107
129
  #####
108
130
 
109
131
 
@@ -113,6 +135,7 @@ describe TestTdsInterface do
113
135
  TestTdsInterface.new(@connect_hash)
114
136
  end
115
137
 
138
+
116
139
  let(:record) { {name: 'Barney'} }
117
140
 
118
141
  end
@@ -252,20 +275,29 @@ describe TestTdsInterface do
252
275
  expect( interface.read(id).to_h ).to include ot.to_h
253
276
  end
254
277
 
255
- it 'shouldnt have a problem with record values of nil' do
278
+ it 'shouldn\'t have a problem with record values of nil' do
256
279
  hash2 = {name: 'Ranger', price: nil}
257
280
  expect{ interface.create(hash2) }.not_to raise_exception
258
281
  id = interface.create(hash2)
259
282
  expect( interface.read(id).to_h ).to include(hash2)
260
283
  end
261
284
 
262
- it 'shouldnt have a problem with strings containing special characters' do
285
+ it 'shouldn\'t have a problem with strings containing special characters' do
263
286
  hash2 = {name: "T'Challa[]", price: nil}
264
287
  expect{ interface.create(hash2) }.not_to raise_exception
265
288
  id = interface.create(hash2)
266
289
  expect( interface.read(id).to_h ).to include(hash2)
267
290
  end
268
291
 
292
+ it 'shouldn\'t have a problem with non-integer keys' do
293
+ hash = {code: "foo", name: "bar"}
294
+ id = prod_interface.create( Octothorpe.new(hash) )
295
+
296
+ expect( id ).to eq "foo"
297
+ expect{ prod_interface.read("foo") }.not_to raise_exception
298
+ expect( prod_interface.read("foo").to_h ).to include hash
299
+ end
300
+
269
301
  end
270
302
  ##
271
303
 
@@ -325,6 +357,14 @@ describe TestTdsInterface do
325
357
  expect( price ).to eq @data.first[:price]
326
358
  end
327
359
 
360
+ it 'shouldn\'t have a problem with non-integer keys' do
361
+ # this is a 100% overlap with the create test above...
362
+ fill_product_data(prod_interface)
363
+
364
+ expect{ prod_interface.read("foo") }.not_to raise_exception
365
+ expect( prod_interface.read("foo").to_h ).to include(code: "foo", name: "bar")
366
+ end
367
+
328
368
  end
329
369
  ##
330
370
 
@@ -395,26 +435,32 @@ describe TestTdsInterface do
395
435
 
396
436
  end
397
437
 
398
- it 'shouldnt have a problem with record values of nil' do
438
+ it 'shouldn\'t have a problem with record values of nil' do
399
439
  record = {name: 'Ranger', price: nil}
400
440
  expect{ interface.update(id, record) }.not_to raise_exception
401
441
  expect( interface.read(id).to_h ).to include(record)
402
442
  end
403
443
 
404
- it 'shouldnt have a problem with strings containing special characters' do
444
+ it 'shouldn\'t have a problem with strings containing special characters' do
405
445
  record = {name: "T'Challa[]", price: nil}
406
446
  expect{ interface.update(id, record) }.not_to raise_exception
407
447
  expect( interface.read(id).to_h ).to include(record)
408
448
  end
409
449
 
450
+ it 'shouldn\'t have a problem with non-integer keys' do
451
+ fill_product_data(prod_interface)
452
+ expect{ prod_interface.update("foo", name: "baz") }.not_to raise_error
453
+ expect( prod_interface.read("foo").to_h[:name] ).to eq "baz"
454
+ end
455
+
410
456
  end
411
457
  ##
412
458
 
413
459
 
414
460
  describe '#delete' do
415
461
 
416
- def list_contains(id)
417
- interface.list.find {|x| x[interface.id_fld] == id }
462
+ def list_contains(ifce, id)
463
+ ifce.list.find {|x| x[ifce.id_fld] == id }
418
464
  end
419
465
 
420
466
  let(:id) { interface.list.first[:id] }
@@ -427,9 +473,16 @@ describe TestTdsInterface do
427
473
  end
428
474
 
429
475
  it 'makes the record at ID go away' do
430
- expect( list_contains(id) ).to be_truthy
476
+ expect( list_contains(interface, id) ).to be_truthy
431
477
  interface.delete(id)
432
- expect( list_contains(id) ).to be_falsy
478
+ expect( list_contains(interface, id) ).to be_falsy
479
+ end
480
+
481
+ it 'shouldn\'t have a problem with non-integer keys' do
482
+ fill_product_data(prod_interface)
483
+ expect( list_contains(prod_interface, "foo") ).to be_truthy
484
+ prod_interface.delete("foo")
485
+ expect( list_contains(prod_interface, "foo") ).to be_falsy
433
486
  end
434
487
 
435
488
  end
@@ -504,5 +557,22 @@ describe TestTdsInterface do
504
557
  ##
505
558
 
506
559
 
560
+ describe "#escape" do
561
+ # This just wraps the TinyTDS escape method, and we don't really know what that does.
562
+ # But at the very least it should deal with ' inside a string.
563
+ # Frankly? I suspect that that's all it does.
564
+
565
+ it "returns a simple String unchanged" do
566
+ expect( interface.escape "foo" ).to eq %Q|foo|
567
+ end
568
+
569
+ it "turns a single quote into a doubled single quote" do
570
+ expect( interface.escape "G'Kar" ).to eq %Q|G''Kar|
571
+ end
572
+
573
+ end
574
+ ##
575
+
576
+
507
577
  end
508
578
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pod4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jones
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-14 00:00:00.000000000 Z
11
+ date: 2016-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devnull
@@ -70,6 +70,7 @@ files:
70
70
  - lib/pod4/param.rb
71
71
  - lib/pod4/pg_interface.rb
72
72
  - lib/pod4/sequel_interface.rb
73
+ - lib/pod4/sql_helper.rb
73
74
  - lib/pod4/tds_interface.rb
74
75
  - lib/pod4/typecasting.rb
75
76
  - lib/pod4/version.rb
@@ -85,11 +86,14 @@ files:
85
86
  - spec/common/null_interface_spec.rb
86
87
  - spec/common/param_spec.rb
87
88
  - spec/common/pod4_spec.rb
89
+ - spec/common/sequel_interface_pg_spec.rb
88
90
  - spec/common/shared_examples_for_interface.rb
89
91
  - spec/common/spec_helper.rb
92
+ - spec/common/sql_helper_spec.rb
90
93
  - spec/doc_no_pending.rb
91
94
  - spec/fixtures/database.rb
92
- - spec/jruby/pg_interface_spec.rb
95
+ - spec/jruby/sequel_interface_jdbc_ms_spec.rb
96
+ - spec/jruby/sequel_interface_jdbc_pg_spec.rb
93
97
  - spec/mri/pg_interface_spec.rb
94
98
  - spec/mri/sequel_interface_spec.rb
95
99
  - spec/mri/tds_interface_spec.rb
@@ -129,11 +133,14 @@ test_files:
129
133
  - spec/common/null_interface_spec.rb
130
134
  - spec/common/param_spec.rb
131
135
  - spec/common/pod4_spec.rb
136
+ - spec/common/sequel_interface_pg_spec.rb
132
137
  - spec/common/shared_examples_for_interface.rb
133
138
  - spec/common/spec_helper.rb
139
+ - spec/common/sql_helper_spec.rb
134
140
  - spec/doc_no_pending.rb
135
141
  - spec/fixtures/database.rb
136
- - spec/jruby/pg_interface_spec.rb
142
+ - spec/jruby/sequel_interface_jdbc_ms_spec.rb
143
+ - spec/jruby/sequel_interface_jdbc_pg_spec.rb
137
144
  - spec/mri/pg_interface_spec.rb
138
145
  - spec/mri/sequel_interface_spec.rb
139
146
  - spec/mri/tds_interface_spec.rb