xsv 0.1.1 → 0.1.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
  SHA256:
3
- metadata.gz: cd294b7a34e4551d8d86fce762b4c632a2b6b0906665b321b4e0bf586880f0a9
4
- data.tar.gz: 204862fa72e99e0cb67c3bc54c21e0e652e6028070d81dd993d5df012e264ca5
3
+ metadata.gz: 2eed2bd4654d89a75f817365a919f2ca4c8f4f9bee17e63f5fc938b574826696
4
+ data.tar.gz: ddfa4e09f2d9378a79943cef340b1af20ae49764b64bcb28478b672d676e4565
5
5
  SHA512:
6
- metadata.gz: 6f4063b90b0d9c30586fa4ac9cecda89fbd2f6bf6ef2ab8ba379039c32cff0d0d2072946b598accc64f05cb3949c6039bae0848a1119180902e0561448153d4b
7
- data.tar.gz: '01932836f664fb61d285edd4d6b88ca84a5141ac2c20c09b177d30e15a039e406311505fc0c111f9fdcd0be18da8a0e0baf020d3a4c0a748e8384485ad25c91c'
6
+ metadata.gz: 6b79348311d076d9397b7cd0629ac4502dc8a3410835b68682e4410af64dea2603d6ea2a68157e0a0bd933f9cdc3b3780034e645d7df9036d7696bda927b858d
7
+ data.tar.gz: e40fa7237b12c4d83639f797ba38c9928e6d412bb658b0fa6855dc2bbca6004d89f36a306c74b207e453d2a5e3597b7e45fd76b464c1c5b3a45a716d09d876f0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xsv (0.1.0)
4
+ xsv (0.1.1)
5
5
  nokogiri (~> 1.10)
6
6
  rubyzip (~> 2.2)
7
7
 
@@ -0,0 +1,14 @@
1
+ module Xsv
2
+ module Helpers
3
+ # Return the index number for the given Excel column name
4
+ def column_index(col)
5
+ val = 0
6
+ while col.length > 0
7
+ val *= 26
8
+ val += (col[0].ord - "A".ord + 1)
9
+ col = col[1..-1]
10
+ end
11
+ return val - 1
12
+ end
13
+ end
14
+ end
data/lib/xsv/sheet.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Xsv
2
2
  class Sheet
3
+ include Xsv::Helpers
4
+
3
5
  attr_reader :xml
4
6
 
5
7
  def initialize(workbook, xml)
@@ -17,7 +19,9 @@ module Xsv
17
19
  def each_row(read_headers: false)
18
20
  @parse_headers if read_headers
19
21
 
20
- @xml.css("sheetData row").each do |row_xml|
22
+ @xml.css("sheetData row").each_with_index do |row_xml, i|
23
+ next if i == 0 && @headers.any?
24
+
21
25
  yield(parse_row(row_xml))
22
26
  end
23
27
 
@@ -50,14 +54,14 @@ module Xsv
50
54
  row = []
51
55
  end
52
56
 
53
- xml.css("c").each_with_index do |c_xml, i|
54
- next if @headers.any? && i == 0
57
+ next_index = 0
55
58
 
59
+ xml.css("c").each do |c_xml|
56
60
  value = case c_xml["t"]
57
61
  when "s"
58
62
  @workbook.shared_strings[c_xml.css("v").inner_text.to_i]
59
63
  when "str"
60
- c_xml.css("v").inner_text
64
+ c_xml.css("v").inner_text.to_s
61
65
  when "e" # N/A
62
66
  nil
63
67
  when nil
@@ -66,11 +70,25 @@ module Xsv
66
70
  raise Xsv::Error, "Encountered unknown column type #{c_xml["t"]}"
67
71
  end
68
72
 
73
+ # Determine column position and pad row with nil values
74
+ col_index = column_index(c_xml["r"].scan(/^[A-Z]+/).first)
75
+
76
+ (col_index - next_index).times do
77
+ if @headers.any?
78
+ row[@headers[next_index]] = nil
79
+ else
80
+ row << nil
81
+ end
82
+ next_index += 1
83
+ end
84
+
69
85
  if @headers.any?
70
- row[@headers[i]] = value
86
+ row[@headers[next_index]] = value
71
87
  else
72
88
  row << value
73
89
  end
90
+
91
+ next_index += 1
74
92
  end
75
93
 
76
94
  row
data/lib/xsv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xsv
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/xsv.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "xsv/file"
2
+ require "xsv/helpers"
2
3
  require "xsv/sheet"
3
4
  require "xsv/version"
4
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xsv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martijn Storck
@@ -98,6 +98,7 @@ files:
98
98
  - bin/setup
99
99
  - lib/xsv.rb
100
100
  - lib/xsv/file.rb
101
+ - lib/xsv/helpers.rb
101
102
  - lib/xsv/sheet.rb
102
103
  - lib/xsv/version.rb
103
104
  - xsv.gemspec