xsv 1.0.4 → 1.0.5

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: 3f3abfccfccc78bc42a10cd71a1c1579b4498acee6b3f6e96b19da0aa13f27c6
4
- data.tar.gz: fc317c12354721f08d6ad757f147c9ba6fcf2b8cc73cc0500ae5d17e1f5675a4
3
+ metadata.gz: ade681d66101849ddf0ecd1cb0211d309153f604cbe0fc8ed3254c7930265e0a
4
+ data.tar.gz: e9c0d24538cfe42affb2690f2f00a5535277013898c781aa668eecbd3329df6b
5
5
  SHA512:
6
- metadata.gz: 92e917efe5443041dc3ac24e38518541dfedc834eaa17b866800b85a356a2072f6bf0f52c4bc977b9c4ba115a2a4f5401d782408d4528bbe44781f0c92a44161
7
- data.tar.gz: edca02d81bafea0cdf80665448d69d39325de475144dcfac10f4e4cde77a413cd3a4aed0b269b0eae88bde9b0c4723c4e1ce3608969f36af41630a4a480bc5a8
6
+ metadata.gz: fb21f559a6a3d8fd20192fab8c0543fbf430f49fc563e5c98e584258bb72cd0faa8b0cf8ce9792035d5db46f40a8db082eb2407c6a132e085d74cc69200c3e2a
7
+ data.tar.gz: 87c1ffca0e26ffdaf9a91bae58d188bffedae87508c3a91d33fb06c1fbb6c121f40dfce12af3dd5080254613ae47a5481cab996f9a6284517967fd71893ede94
data/.standard.yml ADDED
@@ -0,0 +1 @@
1
+ ruby_version: 2.5.0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Xsv Changelog
2
2
 
3
+ ## 1.0.5 2022-01-05
4
+
5
+ - Raise exception if given an empty buffer when opening workbook (thanks @kevin-j-m)
6
+
3
7
  ## 1.0.4 2021-07-05
4
8
 
5
9
  - Support for custom date/time columns
data/Rakefile CHANGED
@@ -13,4 +13,4 @@ Rake::TestTask.new(:bench) do |t|
13
13
  t.test_files = FileList["test/**/*_benchmark.rb"]
14
14
  end
15
15
 
16
- task :default => [:test, :bench]
16
+ task default: [:test, :bench]
data/lib/xsv/helpers.rb CHANGED
@@ -5,42 +5,42 @@ module Xsv
5
5
  # The default OOXML Spreadheet number formats according to the ECMA standard
6
6
  # User formats are appended from index 174 onward
7
7
  BUILT_IN_NUMBER_FORMATS = {
8
- 1 => '0',
9
- 2 => '0.00',
10
- 3 => '#, ##0',
11
- 4 => '#, ##0.00',
12
- 5 => '$#, ##0_);($#, ##0)',
13
- 6 => '$#, ##0_);[Red]($#, ##0)',
14
- 7 => '$#, ##0.00_);($#, ##0.00)',
15
- 8 => '$#, ##0.00_);[Red]($#, ##0.00)',
16
- 9 => '0%',
17
- 10 => '0.00%',
18
- 11 => '0.00E+00',
19
- 12 => '# ?/?',
20
- 13 => '# ??/??',
21
- 14 => 'm/d/yyyy',
22
- 15 => 'd-mmm-yy',
23
- 16 => 'd-mmm',
24
- 17 => 'mmm-yy',
25
- 18 => 'h:mm AM/PM',
26
- 19 => 'h:mm:ss AM/PM',
27
- 20 => 'h:mm',
28
- 21 => 'h:mm:ss',
29
- 22 => 'm/d/yyyy h:mm',
30
- 37 => '#, ##0_);(#, ##0)',
31
- 38 => '#, ##0_);[Red](#, ##0)',
32
- 39 => '#, ##0.00_);(#, ##0.00)',
33
- 40 => '#, ##0.00_);[Red](#, ##0.00)',
34
- 45 => 'mm:ss',
35
- 46 => '[h]:mm:ss',
36
- 47 => 'mm:ss.0',
37
- 48 => '##0.0E+0',
38
- 49 => '@'
8
+ 1 => "0",
9
+ 2 => "0.00",
10
+ 3 => "#, ##0",
11
+ 4 => "#, ##0.00",
12
+ 5 => "$#, ##0_);($#, ##0)",
13
+ 6 => "$#, ##0_);[Red]($#, ##0)",
14
+ 7 => "$#, ##0.00_);($#, ##0.00)",
15
+ 8 => "$#, ##0.00_);[Red]($#, ##0.00)",
16
+ 9 => "0%",
17
+ 10 => "0.00%",
18
+ 11 => "0.00E+00",
19
+ 12 => "# ?/?",
20
+ 13 => "# ??/??",
21
+ 14 => "m/d/yyyy",
22
+ 15 => "d-mmm-yy",
23
+ 16 => "d-mmm",
24
+ 17 => "mmm-yy",
25
+ 18 => "h:mm AM/PM",
26
+ 19 => "h:mm:ss AM/PM",
27
+ 20 => "h:mm",
28
+ 21 => "h:mm:ss",
29
+ 22 => "m/d/yyyy h:mm",
30
+ 37 => "#, ##0_);(#, ##0)",
31
+ 38 => "#, ##0_);[Red](#, ##0)",
32
+ 39 => "#, ##0.00_);(#, ##0.00)",
33
+ 40 => "#, ##0.00_);[Red](#, ##0.00)",
34
+ 45 => "mm:ss",
35
+ 46 => "[h]:mm:ss",
36
+ 47 => "mm:ss.0",
37
+ 48 => "##0.0E+0",
38
+ 49 => "@"
39
39
  }.freeze
40
40
 
41
41
  MINUTE = 60
42
42
  HOUR = 3600
43
- A_CODEPOINT = 'A'.ord.freeze
43
+ A_CODEPOINT = "A".ord.freeze
44
44
  # The epoch for all dates in OOXML Spreadsheet documents
45
45
  EPOCH = Date.new(1899, 12, 30).freeze
46
46
 
@@ -74,7 +74,7 @@ module Xsv
74
74
  minutes = minutes % 60
75
75
  end
76
76
 
77
- format('%02d:%02d', hours, minutes)
77
+ format("%02d:%02d", hours, minutes)
78
78
  end
79
79
 
80
80
  # Returns a time including a date as a {Time} object
@@ -92,9 +92,9 @@ module Xsv
92
92
 
93
93
  # Returns a number as either Integer or Float
94
94
  def parse_number(string)
95
- if string.include? '.'
95
+ if string.include? "."
96
96
  string.to_f
97
- elsif string.include? 'E'
97
+ elsif string.include? "E"
98
98
  Complex(string).to_f
99
99
  else
100
100
  string.to_i
@@ -17,7 +17,7 @@ module Xsv
17
17
  end
18
18
 
19
19
  def start_element(name, attrs)
20
- @block.call(attrs.slice(:Id, :Type, :Target)) if name == 'Relationship'
20
+ @block.call(attrs.slice(:Id, :Type, :Target)) if name == "Relationship"
21
21
  end
22
22
  end
23
23
  end
@@ -29,16 +29,16 @@ module Xsv
29
29
  end
30
30
 
31
31
  if state == :look_start
32
- if (o = pbuf.index('<'))
33
- chars = pbuf.slice!(0, o + 1).chop!.force_encoding('utf-8')
32
+ if (o = pbuf.index("<"))
33
+ chars = pbuf.slice!(0, o + 1).chop!.force_encoding("utf-8")
34
34
 
35
35
  if respond_to?(:characters) && !chars.empty?
36
- if chars.index('&')
37
- chars.gsub!('&amp;', '&')
38
- chars.gsub!('&apos;', "'")
39
- chars.gsub!('&gt;', '>')
40
- chars.gsub!('&lt;', '<')
41
- chars.gsub!('&quot;', '"')
36
+ if chars.index("&")
37
+ chars.gsub!("&amp;", "&")
38
+ chars.gsub!("&apos;", "'")
39
+ chars.gsub!("&gt;", ">")
40
+ chars.gsub!("&lt;", "<")
41
+ chars.gsub!("&quot;", '"')
42
42
  end
43
43
  characters(chars)
44
44
  end
@@ -55,8 +55,8 @@ module Xsv
55
55
  end
56
56
 
57
57
  if state == :look_end
58
- if (o = pbuf.index('>'))
59
- if (s = pbuf.index(' ')) && s < o
58
+ if (o = pbuf.index(">"))
59
+ if (s = pbuf.index(" ")) && s < o
60
60
  tag_name = pbuf.slice!(0, s + 1).chop!
61
61
  args = pbuf.slice!(0, o - s)
62
62
  else
@@ -64,18 +64,18 @@ module Xsv
64
64
  args = nil
65
65
  end
66
66
 
67
- if tag_name.start_with?('/')
67
+ if tag_name.start_with?("/")
68
68
  end_element(tag_name[1..-1]) if respond_to?(:end_element)
69
69
  elsif args.nil?
70
70
  start_element(tag_name, nil)
71
71
  else
72
72
  start_element(tag_name, args.scan(ATTR_REGEX).each_with_object({}) { |m, h| h[m[1].to_sym] = m[2] })
73
- end_element(tag_name) if args.end_with?('/') && respond_to?(:end_element)
73
+ end_element(tag_name) if args.end_with?("/") && respond_to?(:end_element)
74
74
  end
75
75
 
76
76
  state = :look_start
77
77
  elsif eof_reached
78
- raise 'Malformed XML document, looking for end of tag beyond EOF'
78
+ raise "Malformed XML document, looking for end of tag beyond EOF"
79
79
  else
80
80
  must_read = true
81
81
  end
@@ -18,29 +18,29 @@ module Xsv
18
18
 
19
19
  def start_element(name, _attrs)
20
20
  case name
21
- when 'si'
22
- @current_string = ''
21
+ when "si"
22
+ @current_string = ""
23
23
  @skip = false
24
- when 'rPh'
24
+ when "rPh"
25
25
  @skip = true
26
- when 't'
26
+ when "t"
27
27
  @state = name
28
28
  end
29
29
  end
30
30
 
31
31
  def characters(value)
32
- if @state == 't' && !@skip
32
+ if @state == "t" && !@skip
33
33
  @current_string += value
34
34
  end
35
35
  end
36
36
 
37
37
  def end_element(name)
38
38
  case name
39
- when 'si'
39
+ when "si"
40
40
  @block.call(@current_string)
41
- when 'rPh'
41
+ when "rPh"
42
42
  @skip = false
43
- when 't'
43
+ when "t"
44
44
  @state = nil
45
45
  end
46
46
  end
data/lib/xsv/sheet.rb CHANGED
@@ -40,7 +40,7 @@ module Xsv
40
40
  @headers = []
41
41
  @mode = :array
42
42
  @row_skip = 0
43
- @hidden = ids[:state] == 'hidden'
43
+ @hidden = ids[:state] == "hidden"
44
44
 
45
45
  @last_row, @column_count = SheetBoundsHandler.get_bounds(@io, @workbook)
46
46
  end
@@ -66,7 +66,7 @@ module Xsv
66
66
  true
67
67
  end
68
68
 
69
- alias each each_row
69
+ alias_method :each, :each_row
70
70
 
71
71
  # Get row by number, starting at 0. Returns either a hash or an array based on the current row.
72
72
  # If the specified index is out of bounds an empty row is returned.
@@ -37,20 +37,20 @@ module Xsv
37
37
 
38
38
  def start_element(name, attrs)
39
39
  case name
40
- when 'c'
40
+ when "c"
41
41
  @state = name
42
42
  @cell = attrs[:r]
43
- when 'v'
43
+ when "v"
44
44
  col = column_index(@cell)
45
45
  @maxColumn = col if col > @maxColumn
46
46
  @maxRow = @row if @row > @maxRow
47
- when 'row'
47
+ when "row"
48
48
  @state = name
49
49
  @row = attrs[:r].to_i
50
- when 'dimension'
50
+ when "dimension"
51
51
  @state = name
52
52
 
53
- _firstCell, lastCell = attrs[:ref].split(':')
53
+ _firstCell, lastCell = attrs[:ref].split(":")
54
54
 
55
55
  if lastCell
56
56
  @maxColumn = column_index(lastCell)
@@ -63,7 +63,7 @@ module Xsv
63
63
  end
64
64
 
65
65
  def end_element(name)
66
- @block.call(@maxRow, @maxColumn) if name == 'sheetData'
66
+ @block.call(@maxRow, @maxColumn) if name == "sheetData"
67
67
  end
68
68
  end
69
69
  end
@@ -20,39 +20,39 @@ module Xsv
20
20
  @current_row = {}
21
21
  @current_row_attrs = {}
22
22
  @current_cell = {}
23
- @current_value = String.new
23
+ @current_value = +""
24
24
 
25
25
  @headers = @empty_row.keys if @mode == :hash
26
26
  end
27
27
 
28
28
  def start_element(name, attrs)
29
29
  case name
30
- when 'c'
30
+ when "c"
31
31
  @state = name
32
32
  @current_cell = attrs
33
33
  @current_value.clear
34
- when 'v', 'is'
34
+ when "v", "is"
35
35
  @state = name
36
- when 'row'
36
+ when "row"
37
37
  @state = name
38
38
  @current_row = @empty_row.dup
39
39
  @current_row_attrs = attrs
40
- when 't'
41
- @state = nil unless @state == 'is'
40
+ when "t"
41
+ @state = nil unless @state == "is"
42
42
  else
43
43
  @state = nil
44
44
  end
45
45
  end
46
46
 
47
47
  def characters(value)
48
- @current_value << value if @state == 'v' || @state == 'is'
48
+ @current_value << value if @state == "v" || @state == "is"
49
49
  end
50
50
 
51
51
  def end_element(name)
52
52
  case name
53
- when 'v'
53
+ when "v"
54
54
  @state = nil
55
- when 'c'
55
+ when "c"
56
56
  col_index = column_index(@current_cell[:r])
57
57
 
58
58
  case @mode
@@ -61,7 +61,7 @@ module Xsv
61
61
  when :hash
62
62
  @current_row[@headers[col_index]] = format_cell
63
63
  end
64
- when 'row'
64
+ when "row"
65
65
  real_row_number = @current_row_attrs[:r].to_i
66
66
  adjusted_row_number = real_row_number - @row_skip
67
67
 
@@ -90,13 +90,13 @@ module Xsv
90
90
  return nil if @current_value.empty?
91
91
 
92
92
  case @current_cell[:t]
93
- when 's'
93
+ when "s"
94
94
  @workbook.shared_strings[@current_value.to_i]
95
- when 'str', 'inlineStr'
95
+ when "str", "inlineStr"
96
96
  @current_value.strip
97
- when 'e' # N/A
97
+ when "e" # N/A
98
98
  nil
99
- when nil, 'n'
99
+ when nil, "n"
100
100
  if @current_cell[:s]
101
101
  style = @workbook.xfs[@current_cell[:s].to_i]
102
102
  numFmt = @workbook.numFmts[style[:numFmtId].to_i]
@@ -105,9 +105,9 @@ module Xsv
105
105
  else
106
106
  parse_number(@current_value)
107
107
  end
108
- when 'b'
109
- @current_value == '1'
110
- when 'd'
108
+ when "b"
109
+ @current_value == "1"
110
+ when "d"
111
111
  DateTime.parse(@current_value)
112
112
  else
113
113
  raise Xsv::Error, "Encountered unknown column type #{@current_cell[:t]}"
@@ -17,7 +17,7 @@ module Xsv
17
17
  end
18
18
 
19
19
  def start_element(name, attrs)
20
- @block.call(attrs.slice(:name, :sheetId, :state, :'r:id')) if name == 'sheet'
20
+ @block.call(attrs.slice(:name, :sheetId, :state, :'r:id')) if name == "sheet"
21
21
  end
22
22
  end
23
23
  end
@@ -24,20 +24,20 @@ module Xsv
24
24
 
25
25
  def start_element(name, attrs)
26
26
  case name
27
- when 'cellXfs'
28
- @state = 'cellXfs'
29
- when 'xf'
30
- @xfs << attrs if @state == 'cellXfs'
31
- when 'numFmt'
27
+ when "cellXfs"
28
+ @state = "cellXfs"
29
+ when "xf"
30
+ @xfs << attrs if @state == "cellXfs"
31
+ when "numFmt"
32
32
  @numFmts[attrs[:numFmtId].to_i] = attrs[:formatCode]
33
33
  end
34
34
  end
35
35
 
36
36
  def end_element(name)
37
37
  case name
38
- when 'styleSheet'
38
+ when "styleSheet"
39
39
  @block.call(@xfs, @numFmts)
40
- when 'cellXfs'
40
+ when "cellXfs"
41
41
  @state = nil
42
42
  end
43
43
  end
data/lib/xsv/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xsv
4
- VERSION = '1.0.4'
4
+ VERSION = "1.0.5"
5
5
  end
data/lib/xsv/workbook.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zip'
3
+ require "zip"
4
4
 
5
5
  module Xsv
6
6
  # An OOXML Spreadsheet document is called a Workbook. A Workbook consists of
@@ -16,12 +16,12 @@ module Xsv
16
16
  # options see {.initialize}
17
17
  def self.open(data, **kws)
18
18
  @workbook = if data.is_a?(IO) || data.respond_to?(:read) # is it a buffer?
19
- new(Zip::File.open_buffer(data), **kws)
20
- elsif data.start_with?("PK\x03\x04") # is it a string containing a file?
21
- new(Zip::File.open_buffer(data), **kws)
22
- else # must be a filename
23
- new(Zip::File.open(data), **kws)
24
- end
19
+ new(Zip::File.open_buffer(data), **kws)
20
+ elsif data.start_with?("PK\x03\x04") # is it a string containing a file?
21
+ new(Zip::File.open_buffer(data), **kws)
22
+ else # must be a filename
23
+ new(Zip::File.open(data), **kws)
24
+ end
25
25
 
26
26
  if block_given?
27
27
  begin
@@ -43,6 +43,7 @@ module Xsv
43
43
  #
44
44
  def initialize(zip, trim_empty_rows: false)
45
45
  raise ArgumentError, "Passed argument is not an instance of Zip::File. Did you mean to use Workbook.open?" unless zip.is_a?(Zip::File)
46
+ raise Xsv::Error, "Zip::File is empty" if zip.size.zero?
46
47
 
47
48
  @zip = zip
48
49
  @trim_empty_rows = trim_empty_rows
@@ -85,7 +86,7 @@ module Xsv
85
86
  private
86
87
 
87
88
  def fetch_shared_strings
88
- handle = @zip.glob('xl/sharedStrings.xml').first
89
+ handle = @zip.glob("xl/sharedStrings.xml").first
89
90
  return if handle.nil?
90
91
 
91
92
  stream = handle.get_input_stream
@@ -95,7 +96,7 @@ module Xsv
95
96
  end
96
97
 
97
98
  def fetch_styles
98
- stream = @zip.glob('xl/styles.xml').first.get_input_stream
99
+ stream = @zip.glob("xl/styles.xml").first.get_input_stream
99
100
 
100
101
  StylesHandler.get_styles(stream)
101
102
  ensure
@@ -103,24 +104,24 @@ module Xsv
103
104
  end
104
105
 
105
106
  def fetch_sheets
106
- @zip.glob('xl/worksheets/sheet*.xml').sort do |a, b|
107
+ @zip.glob("xl/worksheets/sheet*.xml").sort do |a, b|
107
108
  a.name[/\d+/].to_i <=> b.name[/\d+/].to_i
108
109
  end.map do |entry|
109
- rel = @relationships.detect { |r| entry.name.end_with?(r[:Target]) && r[:Type].end_with?('worksheet') }
110
+ rel = @relationships.detect { |r| entry.name.end_with?(r[:Target]) && r[:Type].end_with?("worksheet") }
110
111
  sheet_ids = @sheet_ids.detect { |i| i[:"r:id"] == rel[:Id] }
111
112
  Xsv::Sheet.new(self, entry.get_input_stream, entry.size, sheet_ids)
112
113
  end
113
114
  end
114
115
 
115
116
  def fetch_sheet_ids
116
- stream = @zip.glob('xl/workbook.xml').first.get_input_stream
117
+ stream = @zip.glob("xl/workbook.xml").first.get_input_stream
117
118
  SheetsIdsHandler.get_sheets_ids(stream)
118
119
  ensure
119
120
  stream.close
120
121
  end
121
122
 
122
123
  def fetch_relationships
123
- stream = @zip.glob('xl/_rels/workbook.xml.rels').first.get_input_stream
124
+ stream = @zip.glob("xl/_rels/workbook.xml.rels").first.get_input_stream
124
125
  RelationshipsHandler.get_relations(stream)
125
126
  ensure
126
127
  stream.close
data/lib/xsv.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'date'
3
+ require "date"
4
4
 
5
- require 'xsv/helpers'
6
- require 'xsv/sax_parser'
7
- require 'xsv/relationships_handler'
8
- require 'xsv/shared_strings_parser'
9
- require 'xsv/sheet'
10
- require 'xsv/sheet_bounds_handler'
11
- require 'xsv/sheet_rows_handler'
12
- require 'xsv/sheets_ids_handler'
13
- require 'xsv/styles_handler'
14
- require 'xsv/version'
15
- require 'xsv/workbook'
5
+ require "xsv/helpers"
6
+ require "xsv/sax_parser"
7
+ require "xsv/relationships_handler"
8
+ require "xsv/shared_strings_parser"
9
+ require "xsv/sheet"
10
+ require "xsv/sheet_bounds_handler"
11
+ require "xsv/sheet_rows_handler"
12
+ require "xsv/sheets_ids_handler"
13
+ require "xsv/styles_handler"
14
+ require "xsv/version"
15
+ require "xsv/workbook"
16
16
 
17
17
  # XSV is a fast, lightweight parser for Office Open XML spreadsheet files
18
18
  # (commonly known as Excel or .xlsx files). It strives to be minimal in the
data/xsv.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  (commonly known as Excel or .xlsx files). It strives to be minimal in the
15
15
  sense that it provides nothing a CSV reader wouldn't, meaning it only
16
16
  deals with minimal formatting and cannot create or modify documents.
17
- EOF
17
+ EOF
18
18
  spec.homepage = "https://github.com/martijn/xsv"
19
19
  spec.license = "MIT"
20
20
 
@@ -43,4 +43,5 @@ Gem::Specification.new do |spec|
43
43
  spec.add_development_dependency "bundler", "< 3"
44
44
  spec.add_development_dependency "rake", "~> 13.0"
45
45
  spec.add_development_dependency "minitest", "~> 5.14.2"
46
+ spec.add_development_dependency "standardrb", "~> 1.0"
46
47
  end
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: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martijn Storck
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2022-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 5.14.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: standardrb
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
75
89
  description: |2
76
90
  Xsv is a fast, lightweight parser for Office Open XML spreadsheet files
77
91
  (commonly known as Excel or .xlsx files). It strives to be minimal in the
@@ -85,6 +99,7 @@ extra_rdoc_files: []
85
99
  files:
86
100
  - ".github/workflows/ruby.yml"
87
101
  - ".gitignore"
102
+ - ".standard.yml"
88
103
  - CHANGELOG.md
89
104
  - Gemfile
90
105
  - LICENSE.txt
@@ -112,7 +127,7 @@ metadata:
112
127
  homepage_uri: https://github.com/martijn/xsv
113
128
  source_code_uri: https://github.com/martijn/xsv
114
129
  changelog_uri: https://github.com/martijn/xsv/CHANGELOG.md
115
- post_install_message:
130
+ post_install_message:
116
131
  rdoc_options: []
117
132
  require_paths:
118
133
  - lib
@@ -127,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
142
  - !ruby/object:Gem::Version
128
143
  version: '0'
129
144
  requirements: []
130
- rubygems_version: 3.2.15
131
- signing_key:
145
+ rubygems_version: 3.3.3
146
+ signing_key:
132
147
  specification_version: 4
133
148
  summary: A fast and lightweight xlsx parser that provides nothing a CSV parser wouldn't
134
149
  test_files: []