xsv 0.2.2 → 0.2.3

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: 2b097ec44b4cee4a7f6331a3a94f15e24f33c88258d375923f965dafe88ee13e
4
- data.tar.gz: c2da68b26d04cb6bd28496d810f7721e327a655c1c96b695d9b091e569767d21
3
+ metadata.gz: 9493c51a049db036f7fcfacbdf911d69255008cb15fd4853eafd12a6d9eeaaf1
4
+ data.tar.gz: '008dfbfa456e9a07e7e301290388a23bb18e3e61f79ce480e5cff5f8b050253f'
5
5
  SHA512:
6
- metadata.gz: b0a7b30c258e16d391990881f4574577eeee6ec3424524cdc360901ffa62033102c518b005d3b181d0b6e7887f52afa7dfc9415cb2cd762f3f0779d9801aaf5a
7
- data.tar.gz: 32ab543df470d94eb4a81e2b271a18ba9295c0d7d9fd63cf918a18baa02b6c01e6bcfb35e6d6e42021d36f773affce5ace52fb07dd7d2ea4110b4a0cbe22fc9c
6
+ metadata.gz: 154e166f904d5c964d44ad7886d8b5dbc350073d8c01b22f6490c1bf65ec376e06474b249f781314deb3541ee14bbb103e3acd096938bd1b7d8bb118b94b1ab1
7
+ data.tar.gz: ac24357f40b3aba550668a4d2ba4be75625751868f180a07b981dc931fcf28c2a714eac72443d123dd0a22ac28e1e6c67e56ca3423eb89a716b4e78b7ce8de59
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xsv (0.2.1)
4
+ xsv (0.2.2)
5
5
  nokogiri (~> 1.10)
6
6
  rubyzip (~> 2.2)
7
7
 
data/README.md CHANGED
@@ -68,6 +68,11 @@ sheet[1] # => {"header1" => "value1", "header2" => "value2"}
68
68
  Be aware that hash mode will lead to unpredictable results if you have multiple
69
69
  columns with the same name!
70
70
 
71
+ `Xsv::Workbook.open` accepts a filename, or a IO or String containing a workbook.
72
+
73
+ `Xsv::Sheet` implements `Enumerable` so you can call methods like `#first`,
74
+ `#filter` and `#map` on it.
75
+
71
76
  ### Assumptions
72
77
 
73
78
  Since Xsv treats worksheets like csv files it makes certain assumptions about your
data/lib/xsv/helpers.rb CHANGED
@@ -96,6 +96,20 @@ module Xsv
96
96
  end
97
97
  end
98
98
 
99
+ def parse_number_format(number, format)
100
+ number = parse_number(number) if number.is_a?(String)
101
+
102
+ if is_datetime_format?(format)
103
+ parse_datetime(number)
104
+ elsif is_date_format?(format)
105
+ parse_date(number)
106
+ elsif is_time_format?(format)
107
+ parse_time(number)
108
+ else
109
+ number
110
+ end
111
+ end
112
+
99
113
  # Tests if the given format string includes both date and time
100
114
  def is_datetime_format?(format)
101
115
  is_date_format?(format) && is_time_format?(format)
data/lib/xsv/sheet.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module Xsv
2
2
  class Sheet
3
+ include Enumerable
3
4
  include Xsv::Helpers
4
5
 
5
6
  attr_reader :xml, :mode
@@ -57,6 +58,8 @@ module Xsv
57
58
  true
58
59
  end
59
60
 
61
+ alias each each_row
62
+
60
63
  # Get row by number, starting at 0
61
64
  def [](number)
62
65
  row_xml = xml.at_css("sheetData row[r=#{number + @row_skip + 1}]")
@@ -118,22 +121,10 @@ module Xsv
118
121
  if v.nil?
119
122
  nil
120
123
  elsif c_xml["s"]
121
- value = parse_number(v.inner_text)
122
-
123
124
  style = @workbook.xfs[c_xml["s"].to_i]
124
- numFmtId = style[:numFmtId].to_i
125
- numFmt = @workbook.numFmts[numFmtId]
126
- if numFmtId == 0
127
- value
128
- elsif is_datetime_format?(numFmt)
129
- parse_datetime(value)
130
- elsif is_date_format?(numFmt)
131
- parse_date(value)
132
- elsif is_time_format?(numFmt)
133
- parse_time(value)
134
- else
135
- value
136
- end
125
+ numFmt = @workbook.numFmts[style[:numFmtId].to_i]
126
+
127
+ parse_number_format(v.inner_text, numFmt)
137
128
  else
138
129
  parse_number(v.inner_text)
139
130
  end
data/lib/xsv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xsv
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
data/lib/xsv/workbook.rb CHANGED
@@ -6,9 +6,15 @@ module Xsv
6
6
 
7
7
  attr_reader :sheets, :shared_strings, :xfs, :numFmts
8
8
 
9
- # Open the workbook of the given filename
10
- def self.open(file)
11
- @workbook = self.new(Zip::File.open(file))
9
+ # Open the workbook of the given filename, string or buffer
10
+ def self.open(data)
11
+ if data.is_a?(IO)
12
+ @workbook = self.new(Zip::File.open_buffer(data))
13
+ elsif data.start_with?("PK\x03\x04")
14
+ @workbook = self.new(Zip::File.open_buffer(data))
15
+ else
16
+ @workbook = self.new(Zip::File.open(data))
17
+ end
12
18
  end
13
19
 
14
20
  # Open a workbook from an instance of Zip::File
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xsv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martijn Storck
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-20 00:00:00.000000000 Z
11
+ date: 2020-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip