sepparator 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9f7be8183b19d92ca4a0bbcb0f113702c9682c8
4
- data.tar.gz: 226038e8750deb96d9d71294cbaafc1ccdd355b7
3
+ metadata.gz: 0ccf7dde4f64b081fb5014eb763d95e112c79233
4
+ data.tar.gz: 4160d2d8940adcbb79112fcb672c65eeb1d14fee
5
5
  SHA512:
6
- metadata.gz: 165cd593157953ec6934819eb3d819f2af585074deec298773c94a32bd81bc9cd60899af84ba58c9b74a4ed4da316ea9c5667663c0c227d10459a3bd1097abb1
7
- data.tar.gz: d8e7ee0c773fa5a10a6bbd683e6080ae66c96f60ae1d6bef8e270b162c97aa52cbea295c84c6452cacfd2d19f30c96d8a888a5e4ab98ce5804df07e2da12109a
6
+ metadata.gz: 7dd59a02e1a3c6e27702c9bbf3f4e6f642859826f5826fc8867bcc0b24a4c79d6bc4ac976e3c55f1f3eb4ef53f8fb6aa4503e4a2d3f391cca1124cbf6dde3a69
7
+ data.tar.gz: 4175441d828bfb3a7a7cd9a78285ecdbea7845d34a71e77432c92f18ae350852c1cd98c3463747ad8299badc19590a81aec1e4c18fbbb9cc7a063dafb9618a95
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sepparator (0.0.1)
4
+ sepparator (0.0.2)
5
5
  simple_xlsx_writer
6
6
  thor
7
7
 
data/sepparator.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "sepparator"
7
- spec.version = '0.0.1'
7
+ spec.version = '0.0.2'
8
8
  spec.authors = ["Andreas Brandl"]
9
9
  spec.email = ["github@andreas-brandl.de"]
10
10
  spec.description = %q{tool for working with CSV files, it supports conversion to Excel files and import to databases.}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sepparator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Brandl
@@ -143,11 +143,9 @@ files:
143
143
  - bin/sepp
144
144
  - lib/sepparator.rb
145
145
  - lib/sepparator/console.rb
146
- - lib/sepparator/schema_detector.rb
147
146
  - lib/sepparator/spreadsheet_converter.rb
148
147
  - sepparator.gemspec
149
148
  - spec/sepparator/example.csv
150
- - spec/sepparator/schema_detector_spec.rb
151
149
  - spec/sepparator/spreadsheet_converter.rb
152
150
  - spec/sepparator/spreadsheet_converter_spec.rb
153
151
  - spec/spec_helper.rb
@@ -178,7 +176,6 @@ summary: tool for working with CSV files, it supports conversion to Excel files
178
176
  import to databases.
179
177
  test_files:
180
178
  - spec/sepparator/example.csv
181
- - spec/sepparator/schema_detector_spec.rb
182
179
  - spec/sepparator/spreadsheet_converter.rb
183
180
  - spec/sepparator/spreadsheet_converter_spec.rb
184
181
  - spec/spec_helper.rb
@@ -1,50 +0,0 @@
1
- module Sepparator
2
-
3
- class SchemaDetector
4
-
5
- def for_hash(hash)
6
- schema = {}
7
- hash.each_with_object(schema) do |(k,v),schema|
8
- schema[k] = type_of_value(v)
9
- end
10
- end
11
-
12
- def for_array(array)
13
- return {} if array.empty?
14
- start_schema = for_hash(array.first)
15
- schema = array.reduce(start_schema) do |schema, entry|
16
- fit_schema entry, schema
17
- end
18
- schema.each do |key, type|
19
- if type.nil?
20
- # when all values were nil, set to Object
21
- schema[key] = Object
22
- end
23
- end
24
- end
25
-
26
- private
27
- def fit_schema(entry, schema=nil)
28
- entry_schema = for_hash entry
29
- return entry_schema unless schema
30
- raise ArgumentError, 'different key entries not (yet) supported' if entry_schema.keys != schema.keys
31
-
32
- schema.each do |key, type|
33
- if type == nil && entry_schema[key] != nil
34
- schema[key] = entry_schema[key] # first not-nil value
35
- elsif type != nil && entry_schema[key] == nil
36
- # just ignore subsequent nil-values
37
- elsif type != Object && type != entry_schema[key]
38
- schema[key] = Object # differing types, generalize to Object
39
- end
40
- end
41
- schema
42
- end
43
-
44
- def type_of_value(value)
45
- (value.nil?) ? nil : value.class
46
- end
47
-
48
- end
49
-
50
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sepparator::SchemaDetector do
4
- let(:hash) {
5
- {
6
- integer: 1,
7
- float: 0.1,
8
- string: 'foobar',
9
- date: Date.today,
10
- timestamp: DateTime.now
11
- }
12
- }
13
-
14
- let(:expected_schema) {
15
- Hash[hash.keys.zip(hash.values.map { |v| v.class })]
16
- }
17
-
18
- context '#for_hash' do
19
- it 'detects a schema given a hash' do
20
- schema = subject.for_hash(hash)
21
- expect(schema).to eq(expected_schema)
22
- end
23
- it 'ignores nil values' do
24
- schema = subject.for_hash(hash.merge({nilvalue: nil}))
25
- expect(schema[:nilvalue]).to be_nil
26
- end
27
- end
28
-
29
- context '#for_array' do
30
- it 'detects a schema given an array of hashes' do
31
- input = 10.times.map { |_| hash }
32
- schema = subject.for_array(input)
33
- expect(schema).to eq(expected_schema)
34
- end
35
- it 'detects Object type when different types present' do
36
- differing_type_hash = hash.merge({integer: 'not-an-int'})
37
- input = 10.times.map { |_| hash } + [differing_type_hash]
38
- schema = subject.for_array(input)
39
- expect(schema[:integer]).to eq(Object)
40
- end
41
- it 'raises when different key entries are given' do
42
- different_keys = hash.dup.merge({extra: 'extra-column'})
43
- different_keys.delete(:integer) # remove one column
44
- input = 10.times.map { |_| hash } + [different_keys]
45
- expect {subject.for_array(input)}.to raise_error(ArgumentError, "different key entries not (yet) supported")
46
- end
47
- it 'ignores nil values' do
48
- input = [hash.dup.merge({date: nil})] + 10.times.map { |_| hash } + [hash.dup.merge({integer: nil})]
49
- schema = subject.for_array(input)
50
- expect(schema).to eq(expected_schema)
51
- end
52
- it 'set type to Object when all values are nil for one key' do
53
- input = [hash.merge({allnil: nil})]
54
- schema = subject.for_array input
55
- expect(schema[:allnil]).to eq(Object)
56
- end
57
- it 'returns empty hash when given empty array' do
58
- expect(subject.for_array([])).to eq({})
59
- end
60
- end
61
-
62
- end