workbook 0.8.0 → 0.8.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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +21 -0
  3. data/.gitignore +4 -1
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +4 -4
  6. data/CHANGELOG.md +16 -0
  7. data/Gemfile +4 -2
  8. data/README.md +9 -7
  9. data/Rakefile +9 -7
  10. data/lib/workbook/book.rb +74 -61
  11. data/lib/workbook/cell.rb +59 -12
  12. data/lib/workbook/column.rb +33 -29
  13. data/lib/workbook/format.rb +24 -23
  14. data/lib/workbook/generatetypes.rb +6 -5
  15. data/lib/workbook/modules/cache.rb +8 -7
  16. data/lib/workbook/modules/cell.rb +78 -99
  17. data/lib/workbook/modules/diff_sort.rb +93 -82
  18. data/lib/workbook/modules/raw_objects_storage.rb +7 -7
  19. data/lib/workbook/modules/type_parser.rb +31 -21
  20. data/lib/workbook/nil_value.rb +5 -9
  21. data/lib/workbook/readers/csv_reader.rb +7 -9
  22. data/lib/workbook/readers/ods_reader.rb +49 -49
  23. data/lib/workbook/readers/txt_reader.rb +7 -7
  24. data/lib/workbook/readers/xls_reader.rb +22 -32
  25. data/lib/workbook/readers/xls_shared.rb +107 -116
  26. data/lib/workbook/readers/xlsx_reader.rb +47 -46
  27. data/lib/workbook/row.rb +100 -83
  28. data/lib/workbook/sheet.rb +48 -37
  29. data/lib/workbook/table.rb +97 -71
  30. data/lib/workbook/template.rb +13 -14
  31. data/lib/workbook/types/date.rb +2 -1
  32. data/lib/workbook/types/false.rb +1 -1
  33. data/lib/workbook/types/false_class.rb +2 -1
  34. data/lib/workbook/types/nil.rb +1 -1
  35. data/lib/workbook/types/nil_class.rb +3 -2
  36. data/lib/workbook/types/numeric.rb +3 -2
  37. data/lib/workbook/types/string.rb +3 -2
  38. data/lib/workbook/types/time.rb +3 -2
  39. data/lib/workbook/types/true.rb +1 -1
  40. data/lib/workbook/types/true_class.rb +3 -2
  41. data/lib/workbook/version.rb +3 -2
  42. data/lib/workbook/writers/csv_table_writer.rb +11 -12
  43. data/lib/workbook/writers/html_writer.rb +35 -37
  44. data/lib/workbook/writers/json_table_writer.rb +9 -10
  45. data/lib/workbook/writers/xls_writer.rb +31 -35
  46. data/lib/workbook/writers/xlsx_writer.rb +46 -28
  47. data/lib/workbook.rb +17 -14
  48. data/test/helper.rb +8 -5
  49. data/test/test_book.rb +43 -38
  50. data/test/test_column.rb +29 -25
  51. data/test/test_format.rb +53 -55
  52. data/test/test_functional.rb +9 -8
  53. data/test/test_modules_cache.rb +20 -17
  54. data/test/test_modules_cell.rb +49 -46
  55. data/test/test_modules_table_diff_sort.rb +56 -63
  56. data/test/test_modules_type_parser.rb +63 -31
  57. data/test/test_readers_csv_reader.rb +50 -42
  58. data/test/test_readers_ods_reader.rb +30 -31
  59. data/test/test_readers_txt_reader.rb +23 -23
  60. data/test/test_readers_xls_reader.rb +22 -23
  61. data/test/test_readers_xls_shared.rb +5 -4
  62. data/test/test_readers_xlsx_reader.rb +46 -37
  63. data/test/test_row.rb +107 -109
  64. data/test/test_sheet.rb +43 -35
  65. data/test/test_table.rb +84 -60
  66. data/test/test_template.rb +18 -15
  67. data/test/test_types_date.rb +7 -7
  68. data/test/test_writers_csv_writer.rb +24 -0
  69. data/test/test_writers_html_writer.rb +44 -41
  70. data/test/test_writers_json_writer.rb +11 -9
  71. data/test/test_writers_xls_writer.rb +52 -35
  72. data/test/test_writers_xlsx_writer.rb +64 -34
  73. data/workbook.gemspec +26 -27
  74. metadata +93 -27
@@ -1,6 +1,7 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require 'csv'
2
+ # frozen_string_literal: true
3
+
4
+ require "csv"
4
5
 
5
6
  module Workbook
6
7
  module Writers
@@ -9,15 +10,14 @@ module Workbook
9
10
  #
10
11
  # @param [Hash] options (not used)
11
12
  # @return [String] csv (comma separated values in a string)
12
- def to_csv options={}
13
+ def to_csv options = {}
13
14
  csv = ""
14
- options = {}.merge options
15
- self.each_with_index do |r, ri|
16
- line=nil
15
+ @rows.each_with_index do |r, ri|
16
+ line = nil
17
17
  begin
18
- line = CSV::generate_line(r.collect{|c| c.value if c},{:row_sep=>""})
18
+ line = CSV.generate_line(r.cells.collect { |c| c&.value }, row_sep: "")
19
19
  rescue TypeError
20
- line = CSV::generate_line(r.collect{|c| c.value if c})
20
+ line = CSV.generate_line(r.cells.collect { |c| c&.value })
21
21
  end
22
22
  csv += "#{line}\n"
23
23
  end
@@ -29,11 +29,10 @@ module Workbook
29
29
  # @param [String] filename
30
30
  # @param [Hash] options see #to_csv
31
31
  # @return [String] filename
32
- def write_to_csv filename="#{title}.csv", options={}
33
- File.open(filename, 'w') {|f| f.write(to_csv(options)) }
34
- return filename
32
+ def write_to_csv filename = "untitled document.csv", options = {}
33
+ File.open(filename, "w") { |f| f.write(to_csv(options)) }
34
+ filename
35
35
  end
36
-
37
36
  end
38
37
  end
39
38
  end
@@ -1,34 +1,34 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require 'spreadsheet'
2
+ # frozen_string_literal: true
3
+
4
+ require "spreadsheet"
4
5
 
5
6
  module Workbook
6
7
  module Writers
7
8
  module HtmlWriter
8
-
9
9
  # Generates an HTML table ()
10
10
  #
11
11
  # @param [Hash] options A hash with options
12
12
  # @return [String] A String containing the HTML code
13
- def to_html options={}
14
- builder = Nokogiri::XML::Builder.new do |doc|
13
+ def to_html options = {}
14
+ builder = Nokogiri::XML::Builder.new { |doc|
15
15
  doc.html {
16
16
  doc.body {
17
- self.each{|sheet|
18
- doc.h1 {
17
+ each do |sheet|
18
+ doc.h1 do
19
19
  doc.text sheet.name
20
- }
21
- sheet.each{|table|
22
- doc.h2 {
20
+ end
21
+ sheet.each do |table|
22
+ doc.h2 do
23
23
  doc.text table.name
24
- }
24
+ end
25
25
  doc << table.to_html(options)
26
- }
27
- }
26
+ end
27
+ end
28
28
  }
29
29
  }
30
- end
31
- return builder.doc.to_xhtml
30
+ }
31
+ builder.doc.to_xhtml
32
32
  end
33
33
 
34
34
  # Write the current workbook to HTML format
@@ -37,9 +37,9 @@ module Workbook
37
37
  # @param [Hash] options see #to_xls
38
38
  # @return [String] filename
39
39
 
40
- def write_to_html filename="#{title}.html", options={}
41
- File.open(filename, 'w') {|f| f.write(to_html(options)) }
42
- return filename
40
+ def write_to_html filename = "#{title}.html", options = {}
41
+ File.open(filename, "w") { |f| f.write(to_html(options)) }
42
+ filename
43
43
  end
44
44
  end
45
45
 
@@ -48,16 +48,16 @@ module Workbook
48
48
  #
49
49
  # @param [Hash] options A hash with options
50
50
  # @return [String] A String containing the HTML code, most importantly `:style_with_inline_css` (default false)
51
- def to_html options={}
52
- options = {:style_with_inline_css=>false}.merge(options)
53
- builder = Nokogiri::XML::Builder.new do |doc|
51
+ def to_html options = {}
52
+ options = {style_with_inline_css: false}.merge(options)
53
+ builder = Nokogiri::XML::Builder.new { |doc|
54
54
  doc.table do
55
55
  doc.thead do
56
56
  if header
57
57
  doc.tr do
58
58
  header.each do |cell|
59
59
  th_options = build_cell_options cell, options.merge(classnames: [cell.to_sym], data: {key: cell.to_sym})
60
- unless cell.value.class == Workbook::NilValue
60
+ unless cell.value.instance_of?(Workbook::NilValue)
61
61
  doc.th(th_options) do
62
62
  doc.text cell.value
63
63
  end
@@ -67,12 +67,12 @@ module Workbook
67
67
  end
68
68
  end
69
69
  doc.tbody do
70
- self.each do |row|
70
+ each do |row|
71
71
  unless row.header?
72
72
  doc.tr do
73
73
  row.each do |cell|
74
74
  td_options = build_cell_options cell, options
75
- unless cell.value.class == Workbook::NilValue
75
+ unless cell.value.instance_of?(Workbook::NilValue)
76
76
  doc.td(td_options) do
77
77
  doc.text cell.value
78
78
  end
@@ -83,24 +83,22 @@ module Workbook
83
83
  end
84
84
  end
85
85
  end
86
- end
87
- return builder.doc.to_xhtml
86
+ }
87
+ builder.doc.to_xhtml
88
88
  end
89
89
 
90
- def build_cell_options cell, options={}
90
+ def build_cell_options cell, options = {}
91
91
  classnames = cell.format.all_names
92
- classnames = classnames + options[:classnames] if options[:classnames]
92
+ classnames += options[:classnames] if options[:classnames]
93
93
  classnames = classnames.join(" ").strip
94
- td_options = classnames != "" ? {:class=>classnames} : {}
95
- if options[:data]
96
- options[:data].each do |key, value|
97
- td_options = td_options.merge({("data-#{key}".to_sym) => value})
98
- end
94
+ td_options = classnames != "" ? {class: classnames} : {}
95
+ options[:data]&.each do |key, value|
96
+ td_options = td_options.merge({"data-#{key}".to_sym => value})
99
97
  end
100
- td_options = td_options.merge({:style=>cell.format.to_css}) if options[:style_with_inline_css] and cell.format.to_css != ""
101
- td_options = td_options.merge({:colspan=>cell.colspan}) if cell.colspan
102
- td_options = td_options.merge({:rowspan=>cell.rowspan}) if cell.rowspan
103
- return td_options
98
+ td_options = td_options.merge({style: cell.format.to_css}) if options[:style_with_inline_css] && (cell.format.to_css != "")
99
+ td_options = td_options.merge({colspan: cell.colspan}) if cell.colspan
100
+ td_options = td_options.merge({rowspan: cell.rowspan}) if cell.rowspan
101
+ td_options
104
102
  end
105
103
  end
106
104
  end
@@ -1,6 +1,7 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require 'json'
2
+ # frozen_string_literal: true
3
+
4
+ require "json"
4
5
 
5
6
  module Workbook
6
7
  module Writers
@@ -9,7 +10,7 @@ module Workbook
9
10
  #
10
11
  # @param [Hash] options
11
12
  # @return [String] json string
12
- def to_json options={}
13
+ def to_json options = {}
13
14
  JSON.generate(to_array_of_hashes_with_values(options))
14
15
  end
15
16
 
@@ -17,9 +18,8 @@ module Workbook
17
18
  #
18
19
  # @param [Hash] options
19
20
  # @return [Array<Hash>] array with hashes (comma separated values in a string)
20
- def to_array_of_hashes_with_values options={}
21
- array_of_hashes = self.collect{|a| a.to_hash_with_values unless a.header?}.compact
22
- return array_of_hashes
21
+ def to_array_of_hashes_with_values options = {}
22
+ collect { |a| a.to_hash_with_values unless a.header? }.compact
23
23
  end
24
24
 
25
25
  # Write the current workbook to JSON format
@@ -27,11 +27,10 @@ module Workbook
27
27
  # @param [String] filename
28
28
  # @param [Hash] options see #to_json
29
29
  # @return [String] filename
30
- def write_to_json filename="#{title}.json", options={}
31
- File.open(filename, 'w') {|f| f.write(to_json(options)) }
32
- return filename
30
+ def write_to_json filename = "#{title}.json", options = {}
31
+ File.open(filename, "w") { |f| f.write(to_json(options)) }
32
+ filename
33
33
  end
34
-
35
34
  end
36
35
  end
37
36
  end
@@ -1,28 +1,28 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require 'spreadsheet'
2
+ # frozen_string_literal: true
3
+
4
+ require "spreadsheet"
4
5
 
5
6
  module Workbook
6
7
  module Writers
7
8
  module XlsWriter
8
-
9
9
  # Generates an Spreadsheet (from the spreadsheet gem) in order to build an xls
10
10
  #
11
11
  # @param [Hash] options A hash with options (unused so far)
12
12
  # @return [Spreadsheet] A Spreadsheet object, ready for writing or more lower level operations
13
- def to_xls options={}
13
+ def to_xls options = {}
14
14
  book = init_spreadsheet_template
15
- self.each_with_index do |s,si|
15
+ each_with_index do |s, si|
16
16
  xls_sheet = xls_sheet(si)
17
17
  xls_sheet.name = s.name
18
18
 
19
19
  s.table.each_with_index do |r, ri|
20
- xls_sheet.row(ri).height= r.format[:height] if r.format
20
+ xls_sheet.row(ri).height = r.format[:height] if r.format
21
21
  r.each_with_index do |c, ci|
22
22
  if c
23
23
  if r.first?
24
- xls_sheet.columns[ci] ||= Spreadsheet::Column.new(ci,nil)
25
- xls_sheet.columns[ci].width= c.format[:width]
24
+ xls_sheet.columns[ci] ||= Spreadsheet::Column.new(ci, nil)
25
+ xls_sheet.columns[ci].width = c.format[:width]
26
26
  end
27
27
  xls_sheet.row(ri)[ci] = c.value
28
28
  xls_sheet.row(ri).set_format(ci, format_to_xls_format(c.format))
@@ -30,12 +30,11 @@ module Workbook
30
30
  end
31
31
  end
32
32
  (xls_sheet.last_row_index + 1 - s.table.count).times do |time|
33
- row_to_remove = s.table.count+time
34
- remove_row(xls_sheet,row_to_remove)
33
+ row_to_remove = s.table.count + time
34
+ remove_row(xls_sheet, row_to_remove)
35
35
  end
36
36
  xls_sheet.updated_from(s.table.count)
37
37
  xls_sheet.dimensions
38
-
39
38
  end
40
39
  # kind of a hack, deleting by popping from xls worksheet results in errors in MS Excel (not LibreOffice)
41
40
  # book.worksheets.pop(book.worksheets.count - self.count) if book.worksheets and book.worksheets.count > self.count
@@ -44,10 +43,10 @@ module Workbook
44
43
  xls_sheet.visibility = :visible
45
44
  else
46
45
  xls_sheet.visibility = :strong_hidden
47
- #also make sure all data is removed, in case someone finds out about this 'trick'
46
+ # also make sure all data is removed, in case someone finds out about this 'trick'
48
47
  xls_sheet.name = "RemovedSheet#{si}"
49
48
  (xls_sheet.last_row_index + 1).times do |row_index|
50
- remove_row(xls_sheet,row_index)
49
+ remove_row(xls_sheet, row_index)
51
50
  end
52
51
  end
53
52
  end
@@ -56,20 +55,17 @@ module Workbook
56
55
  book
57
56
  end
58
57
 
59
-
60
-
61
58
  # Generates an Spreadsheet (from the spreadsheet gem) in order to build an XlS
62
59
  #
63
60
  # @param [Workbook::Format, Hash] f A Workbook::Format or hash with format-options (:font_weight, :rotation, :background_color, :number_format, :text_direction, :color, :font_family)
64
61
  # @return [Spreadsheet::Format] A Spreadsheet format-object, ready for writing or more lower level operations
65
62
  def format_to_xls_format f
66
- xlsfmt = nil
67
63
  unless f.is_a? Workbook::Format
68
64
  f = Workbook::Format.new f
69
65
  end
70
66
  xlsfmt = f.return_raw_for Spreadsheet::Format
71
67
  unless xlsfmt
72
- xlsfmt=Spreadsheet::Format.new :weight=>f[:font_weight]
68
+ xlsfmt = Spreadsheet::Format.new weight: f[:font_weight]
73
69
  xlsfmt.rotation = f[:rotation] if f[:rotation]
74
70
  xlsfmt.pattern_fg_color = html_color_to_xls_color(f[:background_color]) if html_color_to_xls_color(f[:background_color])
75
71
  xlsfmt.pattern = 1 if html_color_to_xls_color(f[:background_color])
@@ -81,7 +77,7 @@ module Workbook
81
77
  xlsfmt.font.color = color if color
82
78
  f.add_raw xlsfmt
83
79
  end
84
- return xlsfmt
80
+ xlsfmt
85
81
  end
86
82
 
87
83
  # Parses right font-family name
@@ -89,20 +85,20 @@ module Workbook
89
85
  # @param [Workbook::Format, hash] format to parse
90
86
  def parse_font_family(format)
91
87
  font = format[:font_family].to_s.split.last
92
- valid_values = [:none,:roman,:swiss,:modern,:script,:decorative]
88
+ valid_values = [:none, :roman, :swiss, :modern, :script, :decorative]
93
89
  if valid_values.include?(font)
94
- return font
90
+ font
95
91
  elsif valid_values.include?(font.to_s.downcase.to_sym)
96
- return font.to_s.downcase.to_sym
92
+ font.to_s.downcase.to_sym
97
93
  else
98
94
  font = font.to_s.downcase.strip
99
95
  translation = {
100
- "arial"=>:swiss,
101
- "times"=>:roman,
102
- "times new roman"=>:roman
96
+ "arial" => :swiss,
97
+ "times" => :roman,
98
+ "times new roman" => :roman
103
99
  }
104
100
  tfont = translation[font]
105
- return tfont ? tfont : :none
101
+ tfont || :none
106
102
  end
107
103
  end
108
104
 
@@ -110,40 +106,40 @@ module Workbook
110
106
  #
111
107
  # @param [String] filename
112
108
  # @param [Hash] options see #to_xls
113
- def write_to_xls filename="#{title}.xls", options={}
109
+ def write_to_xls filename = "#{title}.xls", options = {}
114
110
  if to_xls(options).write(filename)
115
- return filename
111
+ filename
116
112
  end
117
113
  end
118
114
 
119
115
  def xls_sheet a
120
116
  if xls_template.worksheet(a)
121
- return xls_template.worksheet(a)
117
+ xls_template.worksheet(a)
122
118
  else
123
119
  xls_template.create_worksheet
124
- self.xls_sheet a
120
+ xls_sheet a
125
121
  end
126
122
  end
127
123
 
128
124
  def xls_template
129
- return template.raws[Spreadsheet::Excel::Workbook] ? template.raws[Spreadsheet::Excel::Workbook] : template.raws[Spreadsheet::Workbook]
125
+ template.raws[Spreadsheet::Excel::Workbook] || template.raws[Spreadsheet::Workbook]
130
126
  end
131
127
 
132
128
  def init_spreadsheet_template
133
- if self.xls_template.is_a? Spreadsheet::Workbook
134
- return self.xls_template
129
+ if xls_template.is_a? Spreadsheet::Workbook
130
+ xls_template
135
131
  else
136
132
  t = Spreadsheet::Workbook.new
137
133
  template.add_raw t
138
- return t
134
+ t
139
135
  end
140
136
  end
141
137
 
142
138
  private
143
139
 
144
- def remove_row(xls_sheet,row_index)
140
+ def remove_row(xls_sheet, row_index)
145
141
  xls_sheet.row(row_index).each_with_index do |c, ci|
146
- xls_sheet.row(row_index)[ci]=nil
142
+ xls_sheet.row(row_index)[ci] = nil
147
143
  end
148
144
  xls_sheet.delete_row(row_index)
149
145
  xls_sheet.row_updated(row_index, xls_sheet.row(row_index))
@@ -1,35 +1,51 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require 'axlsx'
4
- require 'workbook/readers/xls_shared'
2
+
3
+ require "axlsx"
4
+ require "workbook/readers/xls_shared"
5
5
 
6
6
  module Workbook
7
7
  module Writers
8
8
  module XlsxWriter
9
-
9
+ CELL_TYPE_MAPPING = {
10
+ decimal: :integer,
11
+ integer: :integer,
12
+ float: :float,
13
+ string: :text,
14
+ time: :time,
15
+ date: :date,
16
+ datetime: :time,
17
+ boolean: :boolean,
18
+ nil: :string
19
+ }
10
20
  # Generates an axlsx doc, ready for export to XLSX
11
21
  #
12
22
  # @param [Hash] options A hash with options (unused so far)
13
23
  # @return [Axlsx::Package] An object, ready for writing or more lower level operations
14
- def to_xlsx options={}
24
+ def to_xlsx options = {}
15
25
  formats_to_xlsx_format
26
+
16
27
  book = init_xlsx_spreadsheet_template.workbook
17
- book.worksheets.pop(book.worksheets.count - self.count) if book.worksheets and book.worksheets.count > self.count
18
- self.each_with_index do |s,si|
28
+ book.worksheets.pop(book.worksheets.count - count) if book.worksheets && (book.worksheets.count > count)
29
+ each_with_index do |s, si|
19
30
  xlsx_sheet = xlsx_sheet(si)
20
31
  xlsx_sheet.name = s.name
21
32
  s.table.each_with_index do |r, ri|
22
- xlsx_row = xlsx_sheet[ri] ? xlsx_sheet[ri] : xlsx_sheet.add_row
33
+ xlsx_row = xlsx_sheet[ri] || xlsx_sheet.add_row
23
34
  xlsx_row.height = 16
24
35
  xlsx_row_a = xlsx_row.to_ary
25
36
  r.each_with_index do |c, ci|
26
37
  xlsx_row.add_cell(c.value) unless xlsx_row_a[ci]
27
38
  xlsx_cell = xlsx_row_a[ci]
39
+
40
+ xlsx_cell.type = CELL_TYPE_MAPPING[c.cell_type]
28
41
  xlsx_cell.value = c.value
29
- # if c.format?
30
- # format_to_xlsx_format(c.format) unless c.format.raws[Fixnum]
31
- # xlsx_cell.style = c.format.raws[Fixnum]
32
- # end
42
+
43
+ if c.format? && c.format.raws[Integer]
44
+ xlsx_cell.style = c.format.raws[Integer]
45
+ elsif c.format? && !(c.value.is_a?(Date) || !c.value.is_a?(DateTime) || !c.value.is_a?(Time))
46
+ # TODO: disable formatting
47
+ # xlsx_cell.style = format_to_xlsx_format(c.format)
48
+ end
33
49
  end
34
50
  xlsx_sheet.send(:update_column_info, xlsx_row.cells, [])
35
51
  end
@@ -52,39 +68,39 @@ module Workbook
52
68
  #
53
69
  # @param [String] filename
54
70
  # @param [Hash] options see #to_xlsx
55
- def write_to_xlsx filename="#{title}.xlsx", options={}
71
+ def write_to_xlsx filename = "#{title}.xlsx", options = {}
56
72
  if to_xlsx(options).serialize(filename)
57
- return filename
73
+ filename
58
74
  end
59
75
  end
60
76
 
61
77
  def xlsx_sheet a
62
78
  if xlsx_template.workbook.worksheets[a]
63
- return xlsx_template.workbook.worksheets[a]
79
+ xlsx_template.workbook.worksheets[a]
64
80
  else
65
81
  xlsx_template.workbook.add_worksheet
66
- self.xlsx_sheet a
82
+ xlsx_sheet a
67
83
  end
68
84
  end
69
85
 
70
86
  def xlsx_template
71
- return template.raws[Axlsx::Package]
87
+ template.raws[Axlsx::Package]
72
88
  end
73
89
 
74
90
  def init_xlsx_spreadsheet_template
75
- if self.xlsx_template.is_a? Axlsx::Package
76
- return self.xlsx_template
91
+ if xlsx_template.is_a? Axlsx::Package
92
+ xlsx_template
77
93
  else
78
94
  t = Axlsx::Package.new
79
95
  template.add_raw t
80
96
  # template.set_default_formats!
81
- return t
97
+ t
82
98
  end
83
99
  end
84
100
 
85
101
  def formats_to_xlsx_format
86
- template.formats.each do |n,v|
87
- v.each do | t,s |
102
+ template.formats.each do |n, v|
103
+ v.each do |t, s|
88
104
  format_to_xlsx_format(s)
89
105
  end
90
106
  end
@@ -97,20 +113,22 @@ module Workbook
97
113
  def format_to_xlsx_format f
98
114
  f = make_sure_f_is_a_workbook_format f
99
115
 
100
- xlsfmt={}
101
- xlsfmt[:fg_color] = "FF#{f[:color].to_s.upcase}".gsub("#",'') if f[:color]
102
- xlsfmt[:b] = true if f[:font_weight].to_s == "bold" or f[:font_weight].to_i >= 600 or f[:"font_style"].to_s.match "oblique"
116
+ xlsfmt = {}
117
+ xlsfmt[:fg_color] = "FF#{f[:color].to_s.upcase}".delete("#") if f[:color]
118
+ xlsfmt[:b] = true if (f[:font_weight].to_s == "bold") || (f[:font_weight].to_i >= 600) || f[:font_style].to_s.match("oblique")
103
119
  xlsfmt[:i] = true if f[:font_style].to_s == "italic"
104
- xlsfmt[:u] = true if f[:text_decoration].to_s.match("underline")
120
+ xlsfmt[:u] = true if f[:text_decoration].to_s.include?("underline")
105
121
  xlsfmt[:bg_color] = f[:background_color] if f[:background_color]
106
122
  xlsfmt[:format_code] = strftime_to_ms_format(f[:number_format]) if f[:number_format]
107
123
  xlsfmt[:font_name] = f[:font_family].split.first if f[:font_family]
108
124
  # xlsfmt[:family] = parse_font_family(f) if f[:font_family]
109
125
 
110
- f.add_raw init_xlsx_spreadsheet_template.workbook.styles.add_style(xlsfmt)
126
+ style_reference = init_xlsx_spreadsheet_template.workbook.styles.add_style(xlsfmt)
127
+
128
+ f.add_raw style_reference
111
129
  f.add_raw xlsfmt
112
130
 
113
- return xlsfmt
131
+ style_reference
114
132
  end
115
133
  end
116
134
  end
data/lib/workbook.rb CHANGED
@@ -1,28 +1,31 @@
1
- # -*- encoding : utf-8 -*-
2
1
  # frozen_string_literal: true
3
- require_relative 'workbook/modules/cache'
4
- require_relative 'workbook/modules/cell'
5
- require_relative 'workbook/types/date'
6
- require_relative 'workbook/book'
7
- require_relative 'workbook/sheet'
8
- require_relative 'workbook/table'
9
- require_relative 'workbook/nil_value'
10
- require_relative 'workbook/row'
11
- require_relative 'workbook/cell'
12
- require_relative 'workbook/format'
13
- require_relative 'workbook/template'
14
- require_relative 'workbook/version'
15
- require_relative 'workbook/column'
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "workbook/modules/cache"
5
+ require_relative "workbook/modules/cell"
6
+ require_relative "workbook/types/date"
7
+ require_relative "workbook/book"
8
+ require_relative "workbook/sheet"
9
+ require_relative "workbook/table"
10
+ require_relative "workbook/nil_value"
11
+ require_relative "workbook/row"
12
+ require_relative "workbook/cell"
13
+ require_relative "workbook/format"
14
+ require_relative "workbook/template"
15
+ require_relative "workbook/version"
16
+ require_relative "workbook/column"
16
17
 
17
18
  module Workbook
18
19
  class << self
19
20
  def caching_enabled?
20
21
  @@caching_enabled ||= true
21
22
  end
23
+
22
24
  # Disable caching globally (wherever applicable)
23
25
  def disable_caching!
24
26
  @@caching_enabled = false
25
27
  end
28
+
26
29
  # Enable caching globally (wherever applicable)
27
30
  def enable_caching!
28
31
  @@caching_enabled = true
data/test/helper.rb CHANGED
@@ -1,5 +1,8 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'minitest/autorun'
3
- # require 'test/unit'
4
- require 'rubygems'
5
- require File.join(File.dirname(__FILE__), '../lib/workbook')
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ SimpleCov.start
5
+
6
+ require "minitest/autorun"
7
+ require "rubygems"
8
+ require File.join(File.dirname(__FILE__), "../lib/workbook")