xsv 0.2.2 → 0.2.3

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