pod4 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.hgtags +1 -0
  3. data/Gemfile +1 -0
  4. data/README.md +3 -2
  5. data/Rakefile +2 -2
  6. data/lib/pod4/nebulous_interface.rb +0 -2
  7. data/lib/pod4/pg_interface.rb +0 -1
  8. data/lib/pod4/sequel_interface.rb +0 -1
  9. data/lib/pod4/tds_interface.rb +0 -1
  10. data/lib/pod4/version.rb +1 -1
  11. data/{spec_common → spec/common}/sequel_interface_spec.rb +1 -0
  12. data/{spec_mri → spec/jruby}/pg_interface_spec.rb +3 -2
  13. data/spec/mri/pg_interface_spec.rb +453 -0
  14. data/{spec_mri → spec/mri}/tds_interface_spec.rb +3 -2
  15. metadata +38 -41
  16. data/spec_jruby/alert_spec.rb +0 -1
  17. data/spec_jruby/basic_model_spec.rb +0 -1
  18. data/spec_jruby/doc_no_pending.rb +0 -1
  19. data/spec_jruby/fixtures +0 -1
  20. data/spec_jruby/model_spec.rb +0 -1
  21. data/spec_jruby/nebulous_interface_spec.rb +0 -1
  22. data/spec_jruby/null_interface_spec.rb +0 -1
  23. data/spec_jruby/param_spec.rb +0 -1
  24. data/spec_jruby/pod4_spec.rb +0 -1
  25. data/spec_jruby/shared_examples_for_interface.rb +0 -1
  26. data/spec_jruby/spec_helper.rb +0 -24
  27. data/spec_mri/alert_spec.rb +0 -1
  28. data/spec_mri/basic_model_spec.rb +0 -1
  29. data/spec_mri/doc_no_pending.rb +0 -1
  30. data/spec_mri/fixtures +0 -1
  31. data/spec_mri/model_spec.rb +0 -1
  32. data/spec_mri/nebulous_interface_spec.rb +0 -1
  33. data/spec_mri/null_interface_spec.rb +0 -1
  34. data/spec_mri/param_spec.rb +0 -1
  35. data/spec_mri/pod4_spec.rb +0 -1
  36. data/spec_mri/sequel_interface_spec.rb +0 -1
  37. data/spec_mri/shared_examples_for_interface.rb +0 -1
  38. /data/{spec_common → spec}/README.md +0 -0
  39. /data/{spec_common → spec/common}/alert_spec.rb +0 -0
  40. /data/{spec_common → spec/common}/basic_model_spec.rb +0 -0
  41. /data/{spec_mri → spec/common}/model_plus_typecasting_spec.rb +0 -0
  42. /data/{spec_common → spec/common}/model_spec.rb +0 -0
  43. /data/{spec_common → spec/common}/nebulous_interface_spec.rb +0 -0
  44. /data/{spec_common → spec/common}/null_interface_spec.rb +0 -0
  45. /data/{spec_common → spec/common}/param_spec.rb +0 -0
  46. /data/{spec_common → spec/common}/pod4_spec.rb +0 -0
  47. /data/{spec_common → spec/common}/shared_examples_for_interface.rb +0 -0
  48. /data/{spec_common → spec/common}/spec_helper.rb +0 -0
  49. /data/{spec_common → spec}/doc_no_pending.rb +0 -0
  50. /data/{spec_common → spec}/fixtures/database.rb +0 -0
  51. /data/{spec_mri → spec}/spec_helper.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94046b48debbb6c1be2839e60a1b2a4519f0e711
4
- data.tar.gz: 083cf3ff2f1d154d71c867878448bf9e855db67e
3
+ metadata.gz: 3413f940c1247aeff8c31bc7498b3a5d03f0a63a
4
+ data.tar.gz: ca5ba62daf452817d7b95131af0b581b940e06e5
5
5
  SHA512:
6
- metadata.gz: fd8210e95713b24475f1415dd6c60b62e3d56478ab813bbe614a2e30cb8e2a46ed9a3f62865f336e158a16a46de8b6a3e8e8c0c01e68914b25536263e0163563
7
- data.tar.gz: 48e38561b7ae5fd64c399c4ed9576be0f9f8f068bb3130cb829348472933f19862c4a70c951d7f19315886dc11cb50d48d65376909d3dbd1f12faa977a0ab10e
6
+ metadata.gz: f40df06b6b359502f201d9eae2e7a2970d96ace5166bd6932b2ea4b2b7d8e0109aa407b0e95007d2aa0e11730bfa5de420abd236443f6dbc20d2caf278776f03
7
+ data.tar.gz: d70085fb97f4911dd052a099f7744925eb3f292860819739fbdacc47fc2f196aac8ccb9e34944d9e405b04a8a1480b08fce7c6215546f23be682e0ab67806ce3
data/.hgtags CHANGED
@@ -17,3 +17,4 @@ c2743ca54c4b48c6ebe60b948d251b8d2978c90d 0.5.3
17
17
  26738ea02d5384967320ef41fc743a009faf70b8 0.6.0
18
18
  dc22541876279b47dd366ddb44d262775ccdb933 0.6.1
19
19
  4a0e392be3499d9edc9cde66dd3b8d37136a0816 0.6.2
20
+ e41769b310f2eaab5f37d285ce9ad8658b689916 0.7.1
data/Gemfile CHANGED
@@ -24,6 +24,7 @@ group :development, :test do
24
24
 
25
25
  platforms :jruby do
26
26
  gem "jruby-lint"
27
+ gem "pg", git: 'git://github.com/headinus/jruby-pg/git', branch: :master
27
28
  end
28
29
 
29
30
 
data/README.md CHANGED
@@ -167,6 +167,7 @@ Here is the model and interface definition that goes with the above example:
167
167
 
168
168
  require 'pod4'
169
169
  require 'pod4/pg_interface'
170
+ require 'pg'
170
171
 
171
172
  class ExampleModel < Pod4::Model
172
173
 
@@ -184,8 +185,8 @@ table 'example'. The table has a primary key field 'id' and columns which
184
185
  correspond to our three attributes one, two and three. There is no validation
185
186
  or error control.
186
187
 
187
- Note that we have to require pg_interface seperately. I won't bother to show
188
- this in any more model examples.
188
+ Note that we have to require pg_interface and pg seperately. I won't bother to
189
+ show this in any more model examples.
189
190
 
190
191
  ### Interface ###
191
192
 
data/Rakefile CHANGED
@@ -17,12 +17,12 @@ namespace :rspec do
17
17
 
18
18
  desc "run tests (mri)"
19
19
  task :mri do
20
- sh "rspec --default-path spec_mri"
20
+ sh "rspec spec/common spec/mri"
21
21
  end
22
22
 
23
23
  desc "run tests (jRuby)"
24
24
  task :jruby do
25
- sh "rspec --default-path spec_jruby"
25
+ sh "rspec spec/common spec/jruby"
26
26
  end
27
27
 
28
28
  end
@@ -1,5 +1,3 @@
1
- require 'nebulous_stomp'
2
-
3
1
  require_relative 'interface'
4
2
  require_relative 'errors'
5
3
 
@@ -1,4 +1,3 @@
1
- require 'pg'
2
1
  require 'octothorpe'
3
2
  require 'date'
4
3
  require 'time'
@@ -1,4 +1,3 @@
1
- require 'sequel'
2
1
  require 'octothorpe'
3
2
 
4
3
  require_relative 'interface'
@@ -1,4 +1,3 @@
1
- require 'tiny_tds'
2
1
  require 'octothorpe'
3
2
  require 'date'
4
3
  require 'time'
data/lib/pod4/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pod4
2
- VERSION = '0.7.0'
2
+ VERSION = '0.7.1'
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require 'pod4/sequel_interface'
2
2
 
3
+ require 'sequel'
3
4
  require 'date'
4
5
  require 'time'
5
6
  require 'bigdecimal'
@@ -1,7 +1,8 @@
1
1
  require 'pod4/pg_interface'
2
+ require 'pg'
2
3
 
3
- require_relative 'shared_examples_for_interface'
4
- require_relative 'fixtures/database'
4
+ require_relative '../common/shared_examples_for_interface'
5
+ require_relative '../fixtures/database'
5
6
 
6
7
 
7
8
  class TestPgInterface < PgInterface
@@ -0,0 +1,453 @@
1
+ require 'pod4/pg_interface'
2
+ require 'pg'
3
+
4
+ require_relative '../common/shared_examples_for_interface'
5
+ require_relative '../fixtures/database'
6
+
7
+
8
+ class TestPgInterface < PgInterface
9
+ set_table :customer
10
+ set_id_fld :id
11
+ end
12
+
13
+ class SchemaPgInterface < PgInterface
14
+ set_schema :public
15
+ set_table :customer
16
+ set_id_fld :id
17
+ end
18
+
19
+ class BadPgInterface1 < PgInterface
20
+ set_table :customer
21
+ end
22
+
23
+ class BadPgInterface2 < PgInterface
24
+ set_id_fld :id
25
+ end
26
+
27
+
28
+ describe TestPgInterface do
29
+
30
+ def db_setup(connect)
31
+ client = PG.connect(connect)
32
+
33
+ client.exec(%Q|drop table if exists customer;|)
34
+
35
+ client.exec(%Q|
36
+ create table customer (
37
+ id serial,
38
+ name text,
39
+ level real null,
40
+ day date null,
41
+ timestamp timestamp null,
42
+ price money null,
43
+ qty numeric null );| )
44
+
45
+ ensure
46
+ client.finish if client
47
+ end
48
+
49
+
50
+ def fill_data(ifce)
51
+ @data.each{|r| ifce.create(r) }
52
+ end
53
+
54
+
55
+ before(:all) do
56
+ @connect_hash = DB[:pg]
57
+ db_setup(@connect_hash)
58
+
59
+ @data = []
60
+ @data << { name: 'Barney',
61
+ level: 1.23,
62
+ day: Date.parse("2016-01-01"),
63
+ timestamp: Time.parse('2015-01-01 12:11'),
64
+ price: BigDecimal.new("1.24"),
65
+ qty: BigDecimal.new("1.25") }
66
+
67
+ @data << { name: 'Fred',
68
+ level: 2.34,
69
+ day: Date.parse("2016-02-02"),
70
+ timestamp: Time.parse('2015-01-02 12:22'),
71
+ price: BigDecimal.new("2.35"),
72
+ qty: BigDecimal.new("2.36") }
73
+
74
+ @data << { name: 'Betty',
75
+ level: 3.45,
76
+ day: Date.parse("2016-03-03"),
77
+ timestamp: Time.parse('2015-01-03 12:33'),
78
+ price: BigDecimal.new("3.46"),
79
+ qty: BigDecimal.new("3.47") }
80
+
81
+ end
82
+
83
+
84
+ before do
85
+ # TRUNCATE TABLE also resets the identity counter
86
+ interface.execute(%Q|truncate table customer restart identity;|)
87
+ end
88
+
89
+
90
+ let(:interface) do
91
+ TestPgInterface.new(@connect_hash)
92
+ end
93
+
94
+ #####
95
+
96
+
97
+ it_behaves_like 'an interface' do
98
+
99
+ let(:interface) do
100
+ TestPgInterface.new(@connect_hash)
101
+ end
102
+
103
+ let(:record) { {name: 'Barney'} }
104
+
105
+ end
106
+ ##
107
+
108
+
109
+ describe 'PgInterface.set_schema' do
110
+ it 'takes one argument' do
111
+ expect( PgInterface ).to respond_to(:set_schema).with(1).argument
112
+ end
113
+ end
114
+ ##
115
+
116
+
117
+ describe 'PgInterface.schema' do
118
+ it 'returns the schema' do
119
+ expect( SchemaPgInterface.schema ).to eq :public
120
+ end
121
+
122
+ it 'is optional' do
123
+ expect{ TestPgInterface.schema }.not_to raise_exception
124
+ expect( TestPgInterface.schema ).to eq nil
125
+ end
126
+ end
127
+ ##
128
+
129
+
130
+ describe 'PgInterface.set_table' do
131
+ it 'takes one argument' do
132
+ expect( PgInterface ).to respond_to(:set_table).with(1).argument
133
+ end
134
+ end
135
+ ##
136
+
137
+
138
+ describe 'PgInterface.table' do
139
+ it 'returns the table' do
140
+ expect( TestPgInterface.table ).to eq :customer
141
+ end
142
+ end
143
+ ##
144
+
145
+
146
+ describe 'PgInterface.set_id_fld' do
147
+ it 'takes one argument' do
148
+ expect( PgInterface ).to respond_to(:set_id_fld).with(1).argument
149
+ end
150
+ end
151
+ ##
152
+
153
+
154
+ describe 'PgInterface.id_fld' do
155
+ it 'returns the ID field name' do
156
+ expect( TestPgInterface.id_fld ).to eq :id
157
+ end
158
+ end
159
+ ##
160
+
161
+
162
+ describe '#new' do
163
+
164
+ it 'requires a TinyTds connection string' do
165
+ expect{ TestPgInterface.new }.to raise_exception ArgumentError
166
+ expect{ TestPgInterface.new(nil) }.to raise_exception ArgumentError
167
+ expect{ TestPgInterface.new('foo') }.to raise_exception ArgumentError
168
+
169
+ expect{ TestPgInterface.new(@connect_hash) }.not_to raise_exception
170
+ end
171
+
172
+ end
173
+ ##
174
+
175
+
176
+ describe '#quoted_table' do
177
+
178
+ it 'returns just the table when the schema is not set' do
179
+ expect( interface.quoted_table ).to eq( %Q|"customer"| )
180
+ end
181
+
182
+ it 'returns the schema plus table when the schema is set' do
183
+ ifce = SchemaPgInterface.new(@connect_hash)
184
+ expect( ifce.quoted_table ).to eq( %|"public"."customer"| )
185
+ end
186
+
187
+ end
188
+ ##
189
+
190
+
191
+ describe '#create' do
192
+
193
+ let(:hash) { {name: 'Bam-Bam', price: 4.44} }
194
+ let(:ot) { Octothorpe.new(name: 'Wilma', price: 5.55) }
195
+
196
+ it 'raises a Pod4::DatabaseError if anything goes wrong' do
197
+ expect{ interface.create(one: 'two') }.to raise_exception DatabaseError
198
+ end
199
+
200
+ it 'creates the record when given a hash' do
201
+ # kinda impossible to seperate these two tests
202
+ id = interface.create(hash)
203
+
204
+ expect{ interface.read(id) }.not_to raise_exception
205
+ expect( interface.read(id).to_h ).to include hash
206
+ end
207
+
208
+ it 'creates the record when given an Octothorpe' do
209
+ id = interface.create(ot)
210
+
211
+ expect{ interface.read(id) }.not_to raise_exception
212
+ expect( interface.read(id).to_h ).to include ot.to_h
213
+ end
214
+
215
+ it 'shouldnt have a problem with record values of nil' do
216
+ record = {name: 'Ranger', price: nil}
217
+ expect{ interface.create(record) }.not_to raise_exception
218
+ id = interface.create(record)
219
+ expect( interface.read(id).to_h ).to include(record)
220
+ end
221
+
222
+ end
223
+ ##
224
+
225
+
226
+ describe '#read' do
227
+ before { fill_data(interface) }
228
+
229
+ it 'returns the record for the id as an Octothorpe' do
230
+ rec = interface.read(2)
231
+ expect( rec ).to be_a_kind_of Octothorpe
232
+ expect( rec.>>.name ).to eq 'Fred'
233
+ end
234
+
235
+ it 'raises a Pod4::CantContinue if the ID is bad' do
236
+ expect{ interface.read(:foo) }.to raise_exception CantContinue
237
+ end
238
+
239
+ it 'returns an empty Octothorpe if no record matches the ID' do
240
+ expect{ interface.read(99) }.not_to raise_exception
241
+ expect( interface.read(99) ).to be_a_kind_of Octothorpe
242
+ expect( interface.read(99) ).to be_empty
243
+ end
244
+
245
+ it 'returns real fields as Float' do
246
+ level = interface.read(1).>>.level
247
+
248
+ expect( level ).to be_a_kind_of Float
249
+ expect( level ).to be_within(0.001).of( @data.first[:level] )
250
+ end
251
+
252
+ it 'returns date fields as Date' do
253
+ date = interface.read(1).>>.day
254
+
255
+ expect( date ).to be_a_kind_of Date
256
+ expect( date ).to eq @data.first[:day]
257
+ end
258
+
259
+ it 'returns datetime fields as Time' do
260
+ timestamp = interface.read(1).>>.timestamp
261
+
262
+ expect( timestamp ).to be_a_kind_of Time
263
+ expect( timestamp ).to eq @data.first[:timestamp]
264
+ end
265
+
266
+ it 'returns numeric fields as BigDecimal' do
267
+ qty = interface.read(1).>>.qty
268
+
269
+ expect( qty ).to be_a_kind_of BigDecimal
270
+ expect( qty ).to eq @data.first[:qty]
271
+ end
272
+
273
+ it 'returns money fields as BigDecimal' do
274
+ price = interface.read(1).>>.price
275
+
276
+ expect( price ).to be_a_kind_of BigDecimal
277
+ expect( price ).to eq @data.first[:price]
278
+ end
279
+
280
+ end
281
+ ##
282
+
283
+
284
+ describe '#list' do
285
+ before { fill_data(interface) }
286
+
287
+ it 'has an optional selection parameter, a hash' do
288
+ # Actually it does not have to be a hash, but FTTB we only support that.
289
+ expect{ interface.list(name: 'Barney') }.not_to raise_exception
290
+ end
291
+
292
+ it 'returns an array of Octothorpes that match the records' do
293
+ # convert each OT to a hash and remove the ID key
294
+ arr = interface.list.map {|ot| x = ot.to_h; x.delete(:id); x }
295
+
296
+ expect( arr ).to match_array @data
297
+ end
298
+
299
+ it 'returns a subset of records based on the selection parameter' do
300
+ expect( interface.list(name: 'Fred').size ).to eq 1
301
+
302
+ expect( interface.list(name: 'Betty').first.to_h ).
303
+ to include(name: 'Betty')
304
+
305
+ end
306
+
307
+ it 'returns an empty Array if nothing matches' do
308
+ expect( interface.list(name: 'Yogi') ).to eq([])
309
+ end
310
+
311
+ it 'raises ArgumentError if the selection criteria is nonsensical' do
312
+ expect{ interface.list('foo') }.to raise_exception ArgumentError
313
+ end
314
+
315
+ end
316
+ ##
317
+
318
+
319
+ describe '#update' do
320
+ before { fill_data(interface) }
321
+
322
+ let(:id) { interface.list.first[:id] }
323
+
324
+ def float_price(row)
325
+ row[:price] = row[:price].to_f
326
+ row
327
+ end
328
+
329
+ it 'updates the record at ID with record parameter' do
330
+ record = {name: 'Booboo', price: 99.99}
331
+ interface.update(id, record)
332
+
333
+ # It so happens that TinyTds returns money as BigDecimal --
334
+ # this is a really good thing, even though it screws with our test.
335
+ expect( float_price( interface.read(id).to_h ) ).to include(record)
336
+ end
337
+
338
+ it 'raises a CantContinue if anything weird happens with the ID' do
339
+ expect{ interface.update(99, name: 'Booboo') }.
340
+ to raise_exception CantContinue
341
+
342
+ end
343
+
344
+ it 'raises a DatabaseError if anything weird happens with the record' do
345
+ expect{ interface.update(id, smarts: 'more') }.
346
+ to raise_exception DatabaseError
347
+
348
+ end
349
+
350
+ it 'shouldnt have a problem with record values of nil' do
351
+ record = {name: 'Ranger', price: nil}
352
+ expect{ interface.update(id, record) }.not_to raise_exception
353
+ expect( interface.read(id).to_h ).to include(record)
354
+ end
355
+
356
+ end
357
+ ##
358
+
359
+
360
+ describe '#delete' do
361
+
362
+ def list_contains(id)
363
+ interface.list.find {|x| x[interface.id_fld] == id }
364
+ end
365
+
366
+ let(:id) { interface.list.first[:id] }
367
+
368
+ before { fill_data(interface) }
369
+
370
+ it 'raises CantContinue if anything hinky happens with the id' do
371
+ expect{ interface.delete(:foo) }.to raise_exception CantContinue
372
+ expect{ interface.delete(99) }.to raise_exception CantContinue
373
+ end
374
+
375
+ it 'makes the record at ID go away' do
376
+ expect( list_contains(id) ).to be_truthy
377
+ interface.delete(id)
378
+ expect( list_contains(id) ).to be_falsy
379
+ end
380
+
381
+ end
382
+ ##
383
+
384
+
385
+ describe '#execute' do
386
+
387
+ let(:sql) { 'delete from customer where cast(price as numeric) < 2.0;' }
388
+
389
+ before { fill_data(interface) }
390
+
391
+ it 'requires an SQL string' do
392
+ expect{ interface.execute }.to raise_exception ArgumentError
393
+ expect{ interface.execute(nil) }.to raise_exception ArgumentError
394
+ expect{ interface.execute(14) }.to raise_exception ArgumentError
395
+ end
396
+
397
+ it 'raises some sort of Pod4 error if it runs into problems' do
398
+ expect{ interface.execute('delete from not_a_table') }.
399
+ to raise_exception Pod4Error
400
+
401
+ end
402
+
403
+ it 'executes the string' do
404
+ expect{ interface.execute(sql) }.not_to raise_exception
405
+ expect( interface.list.size ).to eq(@data.size - 1)
406
+ expect( interface.list.map{|r| r[:name] } ).not_to include 'Barney'
407
+ end
408
+
409
+ end
410
+ ##
411
+
412
+
413
+ describe '#select' do
414
+
415
+ before { fill_data(interface) }
416
+
417
+ it 'requires an SQL string' do
418
+ expect{ interface.select }.to raise_exception ArgumentError
419
+ expect{ interface.select(nil) }.to raise_exception ArgumentError
420
+ expect{ interface.select(14) }.to raise_exception ArgumentError
421
+ end
422
+
423
+ it 'raises some sort of Pod4 error if it runs into problems' do
424
+ expect{ interface.select('select * from not_a_table') }.
425
+ to raise_exception Pod4Error
426
+
427
+ end
428
+
429
+ it 'returns the result of the sql' do
430
+ sql1 = 'select name from customer where cast(price as numeric) < 2.0;'
431
+ sql2 = 'select name from customer where cast(price as numeric) < 0.0;'
432
+
433
+ expect{ interface.select(sql1) }.not_to raise_exception
434
+ expect( interface.select(sql1) ).to eq( [{name: 'Barney'}] )
435
+ expect( interface.select(sql2) ).to eq( [] )
436
+ end
437
+
438
+ it 'works if you pass a non-select' do
439
+ # By which I mean: still executes the SQL; returns []
440
+ sql = 'delete from customer where cast(price as numeric) < 2.0;'
441
+ ret = interface.select(sql)
442
+
443
+ expect( interface.list.size ).to eq(@data.size - 1)
444
+ expect( interface.list.map{|r| r[:name] } ).not_to include 'Barney'
445
+ expect( ret ).to eq( [] )
446
+ end
447
+
448
+ end
449
+ ##
450
+
451
+
452
+ end
453
+
@@ -1,9 +1,10 @@
1
1
  require 'pod4/tds_interface'
2
2
 
3
+ require 'tiny_tds'
3
4
  require 'date'
4
5
 
5
- require_relative 'shared_examples_for_interface'
6
- require_relative 'fixtures/database'
6
+ require_relative '../common/shared_examples_for_interface'
7
+ require_relative '../fixtures/database'
7
8
 
8
9
 
9
10
  class TestTdsInterface < TdsInterface
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pod4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jones
@@ -76,45 +76,24 @@ files:
76
76
  - md/fixme.md
77
77
  - md/roadmap.md
78
78
  - pod4.gemspec
79
- - spec_common/README.md
80
- - spec_common/alert_spec.rb
81
- - spec_common/basic_model_spec.rb
82
- - spec_common/doc_no_pending.rb
83
- - spec_common/fixtures/database.rb
84
- - spec_common/model_spec.rb
85
- - spec_common/nebulous_interface_spec.rb
86
- - spec_common/null_interface_spec.rb
87
- - spec_common/param_spec.rb
88
- - spec_common/pod4_spec.rb
89
- - spec_common/sequel_interface_spec.rb
90
- - spec_common/shared_examples_for_interface.rb
91
- - spec_common/spec_helper.rb
92
- - spec_jruby/alert_spec.rb
93
- - spec_jruby/basic_model_spec.rb
94
- - spec_jruby/doc_no_pending.rb
95
- - spec_jruby/fixtures
96
- - spec_jruby/model_spec.rb
97
- - spec_jruby/nebulous_interface_spec.rb
98
- - spec_jruby/null_interface_spec.rb
99
- - spec_jruby/param_spec.rb
100
- - spec_jruby/pod4_spec.rb
101
- - spec_jruby/shared_examples_for_interface.rb
102
- - spec_jruby/spec_helper.rb
103
- - spec_mri/alert_spec.rb
104
- - spec_mri/basic_model_spec.rb
105
- - spec_mri/doc_no_pending.rb
106
- - spec_mri/fixtures
107
- - spec_mri/model_plus_typecasting_spec.rb
108
- - spec_mri/model_spec.rb
109
- - spec_mri/nebulous_interface_spec.rb
110
- - spec_mri/null_interface_spec.rb
111
- - spec_mri/param_spec.rb
112
- - spec_mri/pg_interface_spec.rb
113
- - spec_mri/pod4_spec.rb
114
- - spec_mri/sequel_interface_spec.rb
115
- - spec_mri/shared_examples_for_interface.rb
116
- - spec_mri/spec_helper.rb
117
- - spec_mri/tds_interface_spec.rb
79
+ - spec/README.md
80
+ - spec/common/alert_spec.rb
81
+ - spec/common/basic_model_spec.rb
82
+ - spec/common/model_plus_typecasting_spec.rb
83
+ - spec/common/model_spec.rb
84
+ - spec/common/nebulous_interface_spec.rb
85
+ - spec/common/null_interface_spec.rb
86
+ - spec/common/param_spec.rb
87
+ - spec/common/pod4_spec.rb
88
+ - spec/common/sequel_interface_spec.rb
89
+ - spec/common/shared_examples_for_interface.rb
90
+ - spec/common/spec_helper.rb
91
+ - spec/doc_no_pending.rb
92
+ - spec/fixtures/database.rb
93
+ - spec/jruby/pg_interface_spec.rb
94
+ - spec/mri/pg_interface_spec.rb
95
+ - spec/mri/tds_interface_spec.rb
96
+ - spec/spec_helper.rb
118
97
  - tags
119
98
  homepage: https://bitbucket.org/andy-twosticks/pod4
120
99
  licenses:
@@ -140,5 +119,23 @@ rubygems_version: 2.5.1
140
119
  signing_key:
141
120
  specification_version: 4
142
121
  summary: Totally not an ORM
143
- test_files: []
122
+ test_files:
123
+ - spec/README.md
124
+ - spec/common/alert_spec.rb
125
+ - spec/common/basic_model_spec.rb
126
+ - spec/common/model_plus_typecasting_spec.rb
127
+ - spec/common/model_spec.rb
128
+ - spec/common/nebulous_interface_spec.rb
129
+ - spec/common/null_interface_spec.rb
130
+ - spec/common/param_spec.rb
131
+ - spec/common/pod4_spec.rb
132
+ - spec/common/sequel_interface_spec.rb
133
+ - spec/common/shared_examples_for_interface.rb
134
+ - spec/common/spec_helper.rb
135
+ - spec/doc_no_pending.rb
136
+ - spec/fixtures/database.rb
137
+ - spec/jruby/pg_interface_spec.rb
138
+ - spec/mri/pg_interface_spec.rb
139
+ - spec/mri/tds_interface_spec.rb
140
+ - spec/spec_helper.rb
144
141
  has_rdoc:
@@ -1 +0,0 @@
1
- ../spec_common/alert_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/basic_model_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/doc_no_pending.rb
data/spec_jruby/fixtures DELETED
@@ -1 +0,0 @@
1
- ../spec_common/fixtures
@@ -1 +0,0 @@
1
- ../spec_common/model_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/nebulous_interface_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/null_interface_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/param_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/pod4_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/shared_examples_for_interface.rb
@@ -1,24 +0,0 @@
1
- require 'pod4'
2
-
3
-
4
- include Pod4
5
-
6
-
7
- RSpec.configure do |config|
8
- config.expect_with :rspec do |expectations|
9
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
10
- end
11
-
12
- config.mock_with :rspec do |mocks|
13
- mocks.verify_partial_doubles = true
14
- end
15
-
16
- config.filter_run :focus
17
- config.run_all_when_everything_filtered = true
18
-
19
- if config.files_to_run.one?
20
- config.default_formatter = 'doc'
21
- end
22
-
23
- end
24
-
@@ -1 +0,0 @@
1
- ../spec_common/alert_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/basic_model_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/doc_no_pending.rb
data/spec_mri/fixtures DELETED
@@ -1 +0,0 @@
1
- ../spec_common/fixtures
@@ -1 +0,0 @@
1
- ../spec_common/model_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/nebulous_interface_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/null_interface_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/param_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/pod4_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/sequel_interface_spec.rb
@@ -1 +0,0 @@
1
- ../spec_common/shared_examples_for_interface.rb
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes