tabular 0.4.0 → 0.4.2

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