tabular 0.4.0 → 0.4.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: 24ea155d9007a4c02fb223ef654916c81ca40a8a
4
- data.tar.gz: 67bf2a31432324f4d9dd1a4545c91d925df0ed95
3
+ metadata.gz: 06bed6b335edf9465b7f56b489f5544ec11b4ee4
4
+ data.tar.gz: 8679fb4cd37f748c6f9f0f6e9fe80e01af31cb49
5
5
  SHA512:
6
- metadata.gz: 97d41fd3815402be84700509fc51db7ff53ed392327c2168faf4fb5f8e389e0d5861b1d154b9ada63dd445410ca396a4beb7d7d804f473e6da393955175c8cc8
7
- data.tar.gz: 9202f7626394eaf0b6af0fcb3c2cb202f6e507390b14a8b1d6f849b586f73cd1f715e73c4a9ddf72ac1c7c2c62aae8fe101434fd48ab54adac5f0ed7f7b9c15c
6
+ metadata.gz: 70e496dbbf3fce7bc1350905279fb895d64197f8f4403de65572317661b6d64024ee94d2377aa0e5225840e5c9a8cc80ae3bf1fe9b09d5fca4b44ff142ac7ab3
7
+ data.tar.gz: 3a35d6603c2c8fe97b8db93ed19817e347530f2b596d2cf9fc8a6b681e55a26f05271fbca172581f8e36123d48457038a82a347e1320e16b5d237b834a110c0c
data/README CHANGED
@@ -62,6 +62,7 @@ There's basic test coverage. More comprehensive test coverage needs to be extrac
62
62
 
63
63
  Changes
64
64
  -------
65
+ 0.4.2 Refactor minor ugly things. No behavior changes.
65
66
  0.4.0 rchristensen: Add sheet argument to Table.read
66
67
  0.3.0 Revise Table creation methods to something sensible. Use Roo to read
67
68
  spreadsheets. Support for xlsx.
@@ -15,7 +15,7 @@ module Tabular
15
15
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
16
16
  tr("-", "_").
17
17
  gsub(/ +/, "_").
18
- gsub(";", "").
18
+ delete(";").
19
19
  downcase.
20
20
  to_sym
21
21
  rescue
@@ -115,7 +115,7 @@ module Tabular
115
115
  def to_space_delimited
116
116
  _cells = []
117
117
 
118
- hash.each do |key, value|
118
+ hash.each do |key, _|
119
119
  _cells << (render(key) || "").ljust(columns[key].width)
120
120
  end
121
121
 
@@ -134,45 +134,61 @@ module Tabular
134
134
  protected
135
135
 
136
136
  def hash #:nodoc:
137
- unless @hash
138
- @hash = Hash.new
139
- columns.each do |column|
140
- index = columns.index(column.key)
141
- if index
142
- case column.column_type
143
- when :boolean
144
- @hash[column.key] = [1, "1", true, "true"].include?(@array[index])
145
- when :date
146
- if @array[index].is_a?(Date) || @array[index].is_a?(DateTime) || @array[index].is_a?(Time)
147
- @hash[column.key] = @array[index]
148
- else
149
- begin
150
- if @array[index]
151
- @hash[column.key] = Date.parse(@array[index].to_s, true)
152
- else
153
- @hash[column.key] = nil
154
- end
155
- rescue ArgumentError
156
- date = parse_invalid_date(@array[index])
157
- if date
158
- @hash[column.key] = date
159
- else
160
- raise ArgumentError, "'#{column.key}' index #{index} #{@array[index]}' is not a valid date"
161
- end
162
- end
163
- end
164
- else
165
- @hash[column.key] = @array[index]
166
- end
167
- end
137
+ @hash ||= build_hash
138
+ end
139
+
140
+ def build_hash #:nodoc:
141
+ _hash = Hash.new
142
+ columns.each do |column|
143
+ if column.key
144
+ _hash[column.key] = value_for_hash(column)
145
+ end
146
+ end
147
+ _hash
148
+ end
149
+
150
+ def value_for_hash(column) #:nodoc:
151
+ index = columns.index(column.key)
152
+ return nil unless index
153
+
154
+ value = @array[index]
155
+
156
+ case column.column_type
157
+ when :boolean
158
+ [ 1, "1", true, "true" ].include?(value)
159
+ when :date
160
+ if date?(value)
161
+ value
162
+ else
163
+ parse_date value, column.key, index
168
164
  end
165
+ else
166
+ value
169
167
  end
170
- @hash
171
168
  end
172
169
 
173
170
 
174
171
  private
175
172
 
173
+ def date?(value)
174
+ value.is_a?(Date) || value.is_a?(DateTime) || value.is_a?(Time)
175
+ end
176
+
177
+ def parse_date(value, key, index)
178
+ return nil unless value
179
+
180
+ begin
181
+ Date.parse(value.to_s, true)
182
+ rescue ArgumentError
183
+ date = parse_invalid_date(value)
184
+ if date
185
+ date
186
+ else
187
+ raise ArgumentError, "'#{key}' index #{index} #{value}' is not a valid date"
188
+ end
189
+ end
190
+ end
191
+
176
192
  # Handle common m/d/yy case that Date.parse dislikes
177
193
  def parse_invalid_date(value)
178
194
  return unless value
@@ -183,19 +199,23 @@ module Tabular
183
199
  month = parts[0].to_i
184
200
  day = parts[1].to_i
185
201
  year = parts[2].to_i
186
- return unless month >=1 && month <= 12 && day >= 1 && day <= 31
202
+ return unless month >= 1 && month <= 12 && day >= 1 && day <= 31
203
+
204
+ year = add_century_to(year)
187
205
 
188
- if year == 0
189
- year = 2000
190
- elsif year > 0 && year < 69
191
- year = 2000 + year
206
+ Date.new(year, month, day)
207
+ end
208
+
209
+ def add_century_to(year)
210
+ if year >= 0 && year < 69
211
+ 2000 + year
192
212
  elsif year > 69 && year < 100
193
- year = 1900 + year
213
+ 1900 + year
194
214
  elsif year < 1900 || year > 2050
195
- return nil
215
+ nil
216
+ else
217
+ year
196
218
  end
197
-
198
- Date.new(year, month, day)
199
219
  end
200
220
  end
201
221
  end
@@ -50,7 +50,7 @@ module Tabular
50
50
  file
51
51
  end
52
52
 
53
- raise "Could not find '#{file_path}'" unless File.exists?(file_path)
53
+ raise "Could not find '#{file_path}'" unless File.exist?(file_path)
54
54
 
55
55
  file_path
56
56
  end
@@ -1,3 +1,3 @@
1
1
  module Tabular
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -37,6 +37,6 @@ Gem::Specification.new do |s|
37
37
  s.require_paths = ["lib"]
38
38
  s.summary = "Read, write, and manipulate CSV, tab-delimited and Excel data"
39
39
 
40
- s.add_development_dependency "roo", "~> 1.3"
41
- s.add_development_dependency "roo-xls"
40
+ s.add_development_dependency "roo", "~> 2.0"
41
+ s.add_development_dependency "roo-xls", "~> 0.0.1"
42
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Willson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-14 00:00:00.000000000 Z
11
+ date: 2015-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roo
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
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.3'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: roo-xls
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.0.1
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
- version: '0'
40
+ version: 0.0.1
41
41
  description: Tabular is a Ruby library for reading, writing, and manipulating CSV,
42
42
  tab-delimited and Excel data.
43
43
  email: scott.willson@gmail.com