squcumber-postgres 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70197c6e99837cc7f6a50448932fbf35ec302afe947c4bfcd44a01e7f3932e92
4
- data.tar.gz: 922ede0dc2311200bbc309d216237f9e79034642801503d837453c2c6a6ed183
3
+ metadata.gz: c74c69c04c7b06dc21cf98c9fc940036cd29fe30034295ea81e7dbf11af2a33b
4
+ data.tar.gz: edef6b6fb8b544916e05bbfa97d2057f6b5540234a38662304f73090f22e4a88
5
5
  SHA512:
6
- metadata.gz: 0356e70c0657e311013139b44759f6b321ec16b31c8354e763892293d86e796dabc0e6cfb5e4c2f25a379abee5fc0af0a44f1036c497cccac2747ebb28358db8
7
- data.tar.gz: 5cce4bb175805a4e90e34e248279885e012f092fb74eb94aa84825b159eea95976719e6ef04383d33b29a011e8281af46d7e861d831b1351f2297fa33e547754
6
+ metadata.gz: 5c54f1a70bc5f7d949e58686dedf27586372d353e8c032f99ddef7bb1f06c8cbff9cf0380cb78d06be75f693dc3ba97b540a73246d2f2d5970df7a39a015998f
7
+ data.tar.gz: bfeddaac3fc25e521fedc2eb3560843b7942c0dc1730a9782230f827c9d975678b91e8a30ac64716c95785428987e772849767106670e4a8a56b87a43b36d223
@@ -117,10 +117,31 @@ module Squcumber
117
117
 
118
118
  def _get_column_definitions(table_definition)
119
119
  table_definition.map do |definition|
120
- if definition['data_type'].eql?('character')
121
- definition['data_type'] = "#{definition['data_type']}(#{definition['character_maximum_length'].to_s})"
120
+ schema_column_type = ''
121
+ is_array = false
122
+ if definition['data_type'].eql?('ARRAY')
123
+ is_array = true
124
+ schema_column_type = definition['udt_name'].gsub(/^\_/, '')
125
+ else
126
+ schema_column_type = definition['data_type']
122
127
  end
123
- "#{definition['column_name']} #{definition['data_type']} default null"
128
+
129
+ # Deal with (var)chars
130
+ if definition['character_maximum_length']
131
+ schema_column_type = schema_column_type + "(#{definition['character_maximum_length'].to_s})"
132
+ end
133
+
134
+ # Deal with decimals
135
+ if definition['udt_name'].eql?('numeric') and definition['numeric_precision'] and definition['numeric_scale']
136
+ schema_column_type = schema_column_type + "(#{definition['numeric_precision'].to_s},#{definition['numeric_scale'].to_s})"
137
+ end
138
+
139
+ # Deal with arrays
140
+ if is_array
141
+ schema_column_type = schema_column_type + '[]'
142
+ end
143
+
144
+ "#{definition['column_name']} #{schema_column_type} default null"
124
145
  end
125
146
  end
126
147
  end
@@ -335,6 +335,139 @@ module Squcumber::Postgres::Mock
335
335
  end
336
336
  end
337
337
 
338
+ describe '#_get_column_definitions' do
339
+ let(:column_definition_integer) do
340
+ {
341
+ 'table_schema' => 'some_schema',
342
+ 'table_name' => 'some_table',
343
+ 'column_name' => 'some_column',
344
+ 'udt_name' => 'int4',
345
+ 'data_type' => 'integer',
346
+ 'character_maximum_length' => nil,
347
+ 'numeric_precision' => 32,
348
+ 'numeric_scale' => 0
349
+ }
350
+ end
351
+ let(:column_definition_varchar) do
352
+ {
353
+ 'table_schema' => 'some_schema',
354
+ 'table_name' => 'some_table',
355
+ 'column_name' => 'some_column',
356
+ 'udt_name' => 'varchar',
357
+ 'data_type' => 'character varying',
358
+ 'character_maximum_length' => 255,
359
+ 'numeric_precision' => nil,
360
+ 'numeric_scale' => nil
361
+ }
362
+ end
363
+ let(:column_definition_varchar_array) do
364
+ {
365
+ 'table_schema' => 'some_schema',
366
+ 'table_name' => 'some_table',
367
+ 'column_name' => 'some_column',
368
+ 'udt_name' => '_varchar',
369
+ 'data_type' => 'ARRAY',
370
+ 'character_maximum_length' => nil,
371
+ 'numeric_precision' => nil,
372
+ 'numeric_scale' => nil
373
+ }
374
+ end
375
+ let(:column_definition_char) do
376
+ {
377
+ 'table_schema' => 'some_schema',
378
+ 'table_name' => 'some_table',
379
+ 'column_name' => 'some_column',
380
+ 'udt_name' => '_bpchar',
381
+ 'data_type' => 'character',
382
+ 'character_maximum_length' => 50,
383
+ 'numeric_precision' => nil,
384
+ 'numeric_scale' => nil
385
+ }
386
+ end
387
+ let(:column_definition_jsonb) do
388
+ {
389
+ 'table_schema' => 'some_schema',
390
+ 'table_name' => 'some_table',
391
+ 'column_name' => 'some_column',
392
+ 'udt_name' => 'jsonb',
393
+ 'data_type' => 'jsonb',
394
+ 'character_maximum_length' => nil,
395
+ 'numeric_precision' => nil,
396
+ 'numeric_scale' => nil
397
+ }
398
+ end
399
+ let(:column_definition_timestamp) do
400
+ {
401
+ 'table_schema' => 'some_schema',
402
+ 'table_name' => 'some_table',
403
+ 'column_name' => 'some_column',
404
+ 'udt_name' => 'timestamp',
405
+ 'data_type' => 'timestamp without time zone',
406
+ 'character_maximum_length' => nil,
407
+ 'numeric_precision' => nil,
408
+ 'numeric_scale' => nil
409
+ }
410
+ end
411
+ let(:column_definition_numeric) do
412
+ {
413
+ 'table_schema' => 'some_schema',
414
+ 'table_name' => 'some_table',
415
+ 'column_name' => 'some_column',
416
+ 'udt_name' => 'numeric',
417
+ 'data_type' => 'numeric',
418
+ 'character_maximum_length' => nil,
419
+ 'numeric_precision' => 6,
420
+ 'numeric_scale' => 2
421
+ }
422
+ end
423
+
424
+ before(:each) do
425
+ @dummy = described_class.new(production_database)
426
+ end
427
+
428
+ it 'parses integer columns correctly' do
429
+ expect(@dummy.send(:_get_column_definitions, [column_definition_integer])).to match([
430
+ 'some_column integer default null'
431
+ ])
432
+ end
433
+
434
+ it 'parses varchar columns correctly' do
435
+ expect(@dummy.send(:_get_column_definitions, [column_definition_varchar])).to match([
436
+ 'some_column character varying(255) default null'
437
+ ])
438
+ end
439
+
440
+ it 'parses array varchar columns correctly' do
441
+ expect(@dummy.send(:_get_column_definitions, [column_definition_varchar_array])).to match([
442
+ 'some_column varchar[] default null'
443
+ ])
444
+ end
445
+
446
+ it 'parses char columns correctly' do
447
+ expect(@dummy.send(:_get_column_definitions, [column_definition_char])).to match([
448
+ 'some_column character(50) default null'
449
+ ])
450
+ end
451
+
452
+ it 'parses jsonb columns correctly' do
453
+ expect(@dummy.send(:_get_column_definitions, [column_definition_jsonb])).to match([
454
+ 'some_column jsonb default null'
455
+ ])
456
+ end
457
+
458
+ it 'parses timestamp columns correctly' do
459
+ expect(@dummy.send(:_get_column_definitions, [column_definition_timestamp])).to match([
460
+ 'some_column timestamp without time zone default null'
461
+ ])
462
+ end
463
+
464
+ it 'parses numeric columns correctly' do
465
+ expect(@dummy.send(:_get_column_definitions, [column_definition_numeric])).to match([
466
+ 'some_column numeric(6,2) default null'
467
+ ])
468
+ end
469
+ end
470
+
338
471
  describe '#_get_create_table_statement' do
339
472
  let(:schema) { 'some_schema' }
340
473
  let(:table) { 'some_table' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squcumber-postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefanie Grunwald
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-03 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg