haecksler 0.1.0 → 0.1.1

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: 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