haecksler 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef7da91bbe042a45d61a61b11579f91eb125fed8
4
- data.tar.gz: 5cfd1b2d02724b17bf30d57e0ea8f58469397524
3
+ metadata.gz: 9e4c095944cd14cf0460c9939e3e8531c696a40f
4
+ data.tar.gz: c879ef1e55f2ed376b72baaf513dcc6ec2692dbf
5
5
  SHA512:
6
- metadata.gz: 9bf0313818a703122678602106f1f69b0038066405e7257a6b0027c3057f63ab0beddc912101043e5f6f8e06a5c5d081807e44ea7f28b15a6daf428405eab152
7
- data.tar.gz: a2db4eb25f38c413fdf75984ca5879d810cd1a90ff3e52d19ec24c3b5beb7c8d6efc438672c3026794d8377ed00b5756b89db73f89572fe00ef9e4986b28e255
6
+ metadata.gz: c16aaeece7a49f14223cf5ed42e794eac67124c0b0a3da6275769f5bae25eb462839b1c8e1c02f6b7a7f0c2635d14e4a5f56b01635d218da3752728a31afcea5
7
+ data.tar.gz: e75c15119b299c53591d81c3e3b5217023a479290a60e857d66589e6869e55120312a2fd9db4b4d9afb6b8c2ca6e3348e37d31fd99ef4880618524dc77f4f312
@@ -1,8 +1,16 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.2.0
3
4
  - 2.1.1
4
5
  - 2.0.0
5
6
  - jruby-head
7
+ - ruby-head
8
+ - rbx-2
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
12
+ - rvm: jruby-head
13
+ - rvm: rbx-2
6
14
  deploy:
7
15
  provider: rubygems
8
16
  api_key:
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'coveralls', require: false
3
4
  # Specify your gem's dependencies in haecksler.gemspec
4
5
  gemspec
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Code Climate](https://codeclimate.com/github/falti/haecksler.png)](https://codeclimate.com/github/falti/haecksler)
4
4
  [![Build Status](https://travis-ci.org/falti/haecksler.svg?branch=master)](https://travis-ci.org/falti/haecksler)
5
5
  [![Dependency Status](https://gemnasium.com/falti/haecksler.svg)](https://gemnasium.com/falti/haecksler)
6
+ [![Coverage Status](https://coveralls.io/repos/falti/haecksler/badge.png?branch=master)](https://coveralls.io/r/falti/haecksler)
6
7
 
7
8
 
8
9
  Read fixed-length files:
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Frank Falkenberg"]
10
10
  spec.email = ["faltibrain@gmail.com"]
11
11
  spec.summary = %q{Library to parse fixed-length files}
12
- spec.description = %q{Haecksler is the German word for a wood chipper}
12
+ spec.description = %q{Haecksler is the German word for a wood chipper, the library processes fixed-length files}
13
13
  spec.homepage = "https://github.com/falti/haecksler"
14
14
  spec.license = "MIT"
15
15
 
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec", '~> 2.14'
23
+ spec.add_development_dependency "rspec", '~> 3.0'
24
+ spec.add_development_dependency "rspec-collection_matchers"
24
25
  end
@@ -11,6 +11,10 @@ module Haecksler
11
11
  @type = column.type
12
12
  end
13
13
 
14
+ def ==(another_type_error)
15
+ self.value == another_type_error.value && self.type == another_type_error.type
16
+ end
17
+
14
18
  def to_s
15
19
  "Could not parse '#{value}' to '#{type}"
16
20
  end
@@ -21,6 +21,9 @@ module Haecksler
21
21
 
22
22
  def parse(input)
23
23
 
24
+ total_number_of_characters = columns.map(&:size).reduce(&:+)
25
+ input = input.slice(0, total_number_of_characters)
26
+
24
27
  indizes = columns.map(&:size).reduce([0]) do |memo,item|
25
28
  memo << (memo.last.to_i + item)
26
29
  memo
@@ -35,7 +38,6 @@ module Haecksler
35
38
  @columns = parsed_columns
36
39
 
37
40
  self
38
-
39
41
  end
40
42
 
41
43
  def header?
@@ -1,3 +1,3 @@
1
1
  module Haecksler
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -41,6 +41,7 @@ module Haecksler
41
41
 
42
42
  it "should yield a TypeError for wrong type column" do
43
43
  expect(subject.parse("x ").value).to be_a TypeError
44
+ expect(subject.parse("x ").value).to eq TypeError.new("x ",subject)
44
45
  end
45
46
 
46
47
  end
@@ -57,6 +58,7 @@ module Haecksler
57
58
 
58
59
  it "should yield a TypeError for wrong type column" do
59
60
  expect(subject.parse("x ").value).to be_a TypeError
61
+ expect(subject.parse("x").value).to eq TypeError.new("x",subject)
60
62
  end
61
63
  end
62
64
 
@@ -73,6 +75,11 @@ module Haecksler
73
75
  c = Column.new(name:"I2", size: 10, type: :date, date_format: '%d.%m.%Y')
74
76
  expect(c.parse("03.12.2008").value).to eq Date.new(2008,12,3)
75
77
  end
78
+
79
+ it "should fail to parse if date format was not followed" do
80
+ c = Column.new(name:"I2", size: 10, type: :date, date_format: '%d.%m.%Y')
81
+ expect(c.parse("2008/03/12").value).to eq TypeError.new("2008/03/12", c)
82
+ end
76
83
  end
77
84
 
78
85
  describe "DateTime column" do
@@ -80,13 +87,22 @@ module Haecksler
80
87
  Column.new(name: "I1", size: 8, type: :datetime)
81
88
  end
82
89
 
83
- it "should handle date column" do
90
+ it "should handle datetime column" do
84
91
  expect(subject.parse("20130304").value).to eq DateTime.new(2013,3,4)
85
92
  end
86
93
 
94
+ it "should respect datetime format" do
95
+ c = Column.new(name:"I2", size: 10, type: :datetime, date_format: '%d.%m.%Y')
96
+ expect(c.parse("03.12.2008").value).to eq DateTime.new(2008,12,3)
97
+ end
98
+
99
+ it "should fail to parse non-datetime column" do
100
+ expect(subject.parse("xxx").value).to eq TypeError.new("xxx",subject)
101
+ end
102
+
87
103
  end
88
104
 
89
- describe "Nil row" do
105
+ describe "Nil column" do
90
106
  subject do
91
107
  Column.new(name: "Nil", size: 3, type: :nil)
92
108
  end
@@ -96,5 +112,26 @@ module Haecksler
96
112
  end
97
113
  end
98
114
 
115
+ describe "Unhandled Column" do
116
+ subject do
117
+ Column.new(name: "Unknown", size: 3, type: :something_i_dont_know)
118
+ end
119
+
120
+ it "should handle nil column" do
121
+ expect(subject.parse("XXX").value).to eq nil
122
+ end
123
+ end
124
+
125
+ describe TypeError do
126
+ subject do
127
+ column = double("column", :type => :string)
128
+ TypeError.new("x",column)
129
+ end
130
+
131
+ it "should give a nice to_s" do
132
+ expect(subject.to_s).to eq "Could not parse 'x' to 'string"
133
+ end
134
+ end
135
+
99
136
  end
100
137
  end
@@ -104,6 +104,18 @@ module Haecksler
104
104
 
105
105
  end
106
106
 
107
+ it "should allow to ignore trailing garbage" do
108
+ data = ["Name SomethingElse Banana Idontcare atall whatgoes here"]
109
+ result = Haecksler.chop(data) do |h|
110
+ h.column "Name", 7
111
+ h.skip 16
112
+ h.column "Fruit", 9
113
+ end
114
+
115
+ first = result.first
116
+ expect(first["Name"]).to eq "Name"
117
+ expect(first["Fruit"]).to eq "Banana"
107
118
 
119
+ end
108
120
  end
109
121
  end
@@ -1,5 +1,10 @@
1
+ require 'rspec/collection_matchers'
2
+ require 'coveralls'
3
+
4
+ Coveralls.wear!
1
5
  require 'haecksler'
2
6
 
7
+
3
8
  # This file was generated by the `rspec --init` command. Conventionally, all
4
9
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
5
10
  # Require this file using `require "spec_helper"` to ensure that it is only
@@ -7,7 +12,6 @@ require 'haecksler'
7
12
  #
8
13
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
9
14
  RSpec.configure do |config|
10
- config.treat_symbols_as_metadata_keys_with_true_values = true
11
15
  config.run_all_when_everything_filtered = true
12
16
  config.filter_run :focus
13
17
 
@@ -17,3 +21,7 @@ RSpec.configure do |config|
17
21
  # --seed 1234
18
22
  config.order = 'random'
19
23
  end
24
+
25
+
26
+
27
+
metadata CHANGED
@@ -1,67 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haecksler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Falkenberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-25 00:00:00.000000000 Z
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.14'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.14'
55
- description: Haecksler is the German word for a wood chipper
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-collection_matchers
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Haecksler is the German word for a wood chipper, the library processes
70
+ fixed-length files
56
71
  email:
57
72
  - faltibrain@gmail.com
58
73
  executables: []
59
74
  extensions: []
60
75
  extra_rdoc_files: []
61
76
  files:
62
- - .gitignore
63
- - .rspec
64
- - .travis.yml
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - ".travis.yml"
65
80
  - Gemfile
66
81
  - LICENSE.txt
67
82
  - README.md
@@ -90,17 +105,17 @@ require_paths:
90
105
  - lib
91
106
  required_ruby_version: !ruby/object:Gem::Requirement
92
107
  requirements:
93
- - - '>='
108
+ - - ">="
94
109
  - !ruby/object:Gem::Version
95
110
  version: '0'
96
111
  required_rubygems_version: !ruby/object:Gem::Requirement
97
112
  requirements:
98
- - - '>='
113
+ - - ">="
99
114
  - !ruby/object:Gem::Version
100
115
  version: '0'
101
116
  requirements: []
102
117
  rubyforge_project:
103
- rubygems_version: 2.1.11
118
+ rubygems_version: 2.4.5
104
119
  signing_key:
105
120
  specification_version: 4
106
121
  summary: Library to parse fixed-length files