spreadsheet_architect 4.1.0 → 4.2.0

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: b0e103cc275bf05dabe10a86cb7f74dcc4a412daa2328e607ca70d7af22ea40b
4
- data.tar.gz: 5799934cf9f9e177ca49ed33d749d01e535143cc18bf6990082b834fe6d9a6d5
3
+ metadata.gz: f453f3bd541db38744f93c7803a473dea7f8dee0c9c45ab86523992c78bd6317
4
+ data.tar.gz: 5c92d3ac4e35db0c17bd4da1e4325d08700decf476546fde20a66aa6057dacdd
5
5
  SHA512:
6
- metadata.gz: cee7b3f8dfc727d63c1f84f06f94c1bf3eaf46283b15b698724a5d0f57d3ef39728838b5295376df6e112bbb3141579c6ebc4189e8af85bd82558abe0cbd2546
7
- data.tar.gz: 13c7e7db2193bb37be8911592e5eab725700e047dc8437c455adcad0ae8574f3187ac2d40412b82e706e90a286ec38b15be248c013b0fc5ed9db1d0c0b943e98
6
+ metadata.gz: e89d0f1f1968275084495fdd420af039b61d7033606be0d9b63428fc3aab944baf82377103057fbf1ec43c91c02a7c48210bd81617ba55893ef998c3848265c0
7
+ data.tar.gz: ddfdcd2c578a1aa10dd2839368cdf99b897a49abf1a888bae40dbd08ad310f4ee26a5bc93ce9fdd484092b5f32ee4d5195c7cb5bdb466fcdf5dec6250e79603e
data/CHANGELOG.md CHANGED
@@ -1,14 +1,23 @@
1
1
  CHANGELOG
2
2
  ---------
3
3
 
4
- - **Unreleased**
4
+ - **Unreleased** - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v4.2.0...master)
5
5
  - Nothing yet
6
- - **4.1.0**
6
+
7
+ - **4.2.0** - May 27, 2021 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v4.1.0...v4.2.0)
8
+ - Add option `:skip_defaults` which removes the defaults and default styles. Particularily useful for heavily customized spreadsheets where the default styles get in the way.
9
+ - Fix bug where styles werent being un-applied when using the `false` value.
10
+ - Add style aliases for `:valign` and `:wrap_text`
11
+ - Fix error with `headers: false`, previously had to use `headers: []`
12
+
13
+ - **4.1.0** - Nov 20, 2020 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v4.0.1...v4.1.0)
7
14
  - Raise ArgumentError when invalid option names are given
8
- - **4.0.1**
15
+
16
+ - **4.0.1** - Nov 20, 2020 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v4.0.0...v4.0.1)
9
17
  - Fix bug with `headers: false` where a blank header row is still added
10
18
  - Fix Bug for older version of `caxlsx` v2.0.2
11
- - **4.0.0**
19
+
20
+ - **4.0.0** - Mar 3, 2020 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.3.1...v4.0.0)
12
21
  - Switch to the `caxlsx` gem (Community Axlsx) from the legacy unmaintained `axlsx` gem. Axlsx has had a long history of being poorly maintained so this community gem improves the situation.
13
22
  - Require Ruby 2.3+
14
23
  - Ensure all options using Hash are automatically converted to symbol only hashes
@@ -16,29 +25,35 @@ CHANGELOG
16
25
  - Add XLSX option `:freeze_headers` to freeze the headers of your spreadsheet
17
26
  - Remove old Axlsx patch for column width
18
27
  - Backport new code for `string_width` calculations to Axlsx 3.0.1 and below.
19
- - **3.3.1**
28
+
29
+ - **3.3.1** - Dec 2, 2019 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.3.0...v3.3.1)
20
30
  - [Issue #30](https://github.com/westonganger/spreadsheet_architect/issues/30) - Fix duplicate constant warning for XLSX_COLUMN_TYPES
21
- - **3.3.0**
31
+
32
+ - **3.3.0** - Nov 28, 2019 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.2.1...v3.3.0)
22
33
  - Fix `:borders` option, was broken in v3.2.1
23
34
  - Fix bug when passing `false` to `:headers` option
24
35
  - Raise error when unsupported column type is passed
25
36
  - Remove claimed support for `:currency` and `:percent` for ODS spreadsheets as they were not working. PR Wanted.
26
- - **3.2.1** - April 10, 2019
37
+
38
+ - **3.2.1** - April 10, 2019 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.2.0...v3.2.1)
27
39
  - Fix bug when using `column_style` option with `include_header: true` & letter based column numbering
28
- - **3.2.0** - September 14, 2018
40
+
41
+ - **3.2.0** - September 14, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.1.0...v3.2.0)
29
42
  - Change implementation of `:column_styles` option to utilize `axlsx_styler` instead of the built-in axlsx `col_style` method. The reason for the switch is that `col_style` would overwrite all previously set styles. `axlsx_styler` already has the ability to add onto existing styles and is what is currently utilized by `range_styles`.
30
43
  - Date / Time formatting is now set per cell instead of on the entire column.
31
44
  - Default Date formatting for `xlsx` changed from `m/d/yyyy` to `yyyy-mm-dd`
32
45
  - Default Time/DateTime formatting for `xlsx` changed from `yyyy/m/d h:mm AM/PM` to `yyyy-mm-dd h:mm AM/PM`
33
46
  - Fix bug where the ActionController::Renderer `:filename` option was ignored when an AR::Relation passed directly to the renderer without first calling `to_#{format}`
34
- - **3.1.0** - August 19, 2018
47
+
48
+ - **3.1.0** - August 19, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v3.0.0...v3.1.0)
35
49
  - Add new option `:conditional_row_styles` to `to_xlsx`.
36
50
  - Add ability to pass an alternative method name as a Symbol/String to the `:spreadsheet_columns` option.
37
51
  - Replace all usage of the legacy method `instance_eval` with the proper method `send`.
38
52
  - [#23](https://github.com/westonganger/spreadsheet_architect/issues/23#issuecomment-412803761) - Fix bug where custom `columns_widths` in xlsx spreadsheets might not get set correctly.
39
53
  - All exceptions now inherit from the appropriate ruby core exception classes
40
54
  - `SpreadsheetArchitect::Exceptions::InvalidOptionError` renamed to `SpreadsheetArchitect::Exceptions::OptionTypeError`
41
- - **3.0.0** - July 6, 2018
55
+
56
+ - **3.0.0** - July 6, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.1.2...v3.0.0)
42
57
  - [#16](https://github.com/westonganger/spreadsheet_architect/issues/16) - Add ability to pass :instances option to SpreadsheetArchitect class methods
43
58
  - [#16](https://github.com/westonganger/spreadsheet_architect/issues/16) - Remove Plain Ruby syntax `Post.to_xlsx(instances: posts_array)` in favor of `SpreadsheetArchitect.to_xlsx(instance: posts_array)`. However, it may still work at this time if configured correctly.
44
59
  - Fix project-wide and model-level defaults before only `header_style`, `row_style`, & `sheet_name` were being utilized.
@@ -53,12 +68,15 @@ CHANGELOG
53
68
  - Remove all Rails generators `spreadsheet_architect:add_default_options`. No need since its just as easy to copy from the README
54
69
  - Major overhaul of test suite, add a ton more tests, for DRYness use resursion for tests when appropriate
55
70
  - Use appraisal to test various `axlsx` versions
56
- - **2.1.2** - July 6, 2018
71
+
72
+ - **2.1.2** - July 6, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.1.1...v2.1.2)
57
73
  - Fix bug where everything was underlined by default in Excel (LibreOffice was working correctly). For some reason, `false` in `:u` or `:underline` was incorrectly being treated as `true` but only within Excel. Now anytime `false` is encountered for either `:u` or `:underline` it is now converted to `nil`
58
74
  - Fix bug where empty xlsx spreadsheets were corrupt when trying to open with Excel (LibreOffice was working correctly). This only occured when containing no headers and empty `:data` option which resulted in a package with no sheets.
59
- - **2.1.1** - July 4, 2018
75
+
76
+ - **2.1.1** - July 4, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.1.0...v2.1.1)
60
77
  - [#18](https://github.com/westonganger/spreadsheet_architect/pull/18) - Fix controller bug when using an non-ActiveRecord ORM only within Rails
61
- - **2.1.0** - June 20, 2018
78
+
79
+ - **2.1.0** - June 20, 2018 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.0.2...v2.1.0)
62
80
  - [#15](https://github.com/westonganger/spreadsheet_architect/pull/15) - Improved the method symbolize_keys. This method did not work properly for nested objects.
63
81
  - [PR #15](https://github.com/westonganger/spreadsheet_architect/pull/15) - Added the ability to pass `:text_wrap` option within the `:alignment` style
64
82
  - Make axlsx styles higher precendence over Spreadsheet Architect style aliases
@@ -66,14 +84,17 @@ CHANGELOG
66
84
  - Due to [RODF bug](https://github.com/thiagoarrais/rodf/issues/19) convert all Date and Time cells to String in ODS spreadsheets
67
85
  - Improve test suite
68
86
  - Dont test against Ruby versions that Rails no longer supports. Gem code should remain compatible with Ruby 1.9.3.
69
- - **2.0.2** - July 14 2017
87
+
88
+ - **2.0.2** - July 14 2017 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.0.1...v2.0.2)
70
89
  - Fix bug with range styles rows option not counting headers
71
90
  - Fix bug with range styles rows :all option
72
- - **2.0.1** - February 16 2017
91
+
92
+ - **2.0.1** - February 16 2017 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v2.0.0...v2.0.1)
73
93
  - Fix bug where `SpreadsheetArchitect.default_options` and `SPREADSHEET_OPTIONS` were being overwritten
74
94
  - Fix bug where col_styles ignored previous styles on header when using `include_header` option
75
95
  - Errors now try to provide which value is the cause
76
- - **2.0.0** - January 28 2017
96
+
97
+ - **2.0.0** - January 28 2017 - [View Diff](https://github.com/westonganger/spreadsheet_architect/compare/v1.4.8...v2.0.0)
77
98
  - Add to xlsx: `merges`, `column_styles`, `range_styles`, `borders`, `column_widths` multi-row headers, date/time default format_code
78
99
  - Add `column_types` option for xlsx and ods
79
100
  - Add ability to make multi-sheet spreadsheets in XLSX & ODS
@@ -81,52 +102,74 @@ CHANGELOG
81
102
  - Add Examples
82
103
  - Add Axlsx Style Reference
83
104
  - Refractor into smaller files
105
+
84
106
  - **1.4.8** - December 6 2016
85
107
  - Lock `rodf` gem to v0.3.7 for last v1 version of this gem
108
+
86
109
  - **1.4.7** - November 7 2016
87
110
  - Fix method arguments for `to_rodf_spreadsheet` method
111
+
88
112
  - **1.4.6** - May 16 2016
89
113
  - Fix hash syntax for support of ruby v2.1 and below
114
+
90
115
  - **1.4.5** - May 4 2016
91
116
  - Bug fixes
117
+
92
118
  - **1.4.4** - May 3 2016
93
119
  - Add Ability to add format_code to all numbers body rows
120
+
94
121
  - **1.4.3** - May 3 2016
95
122
  - Bug fixes
123
+
96
124
  - **1.4.2** - May 3 2016
97
125
  - Add to_axlsx_package, to_rodf_spreadsheet methods for the item to be further manipulated. Ex. axlsx_styler
126
+
98
127
  - **1.4.1** - May 2 2016
99
128
  - Add rails generator for project defaults initializer
129
+
100
130
  - **1.4.0** - April 29 2016
101
131
  - Add to_xlsx, to_ods, & to_csv to SpreadsheetArchitect model for direct calling by passing in cell data
132
+
102
133
  - **1.3.0** - April 21 2016
103
134
  - Add ability to create class/model and project option defaults
135
+
104
136
  - **1.2.5** - March 25 2016
105
137
  - Fix each_with_index bug
138
+
106
139
  - **1.2.4** - March 24 2016
107
140
  - Fix cell type logic for symbol methods
141
+
108
142
  - **1.2.3** - March 20 2016
109
143
  - Fix cell type logic
144
+
110
145
  - **1.2.2** - March 19 2016
111
146
  - Make cell type numeric if value is numeric
147
+
112
148
  - **1.2.1** - March 13 2016
113
149
  - Better error reporting
114
150
  - Fix for Plain ruby models
151
+
115
152
  - **1.2.0** - March 10 2016
116
153
  - Fix Bug: first row data repeated for all records on custom values
154
+
117
155
  - **1.1.0** - March 3 2016
118
156
  - Breaking Change - Move spreadsheet_columns method from the class to the instance
119
157
  - Fix Bug: remove default underline on cells
158
+
120
159
  - **1.0.4** - March 1 2016
121
160
  - Extract helper methods to seperate module
122
161
  - Improve readme
162
+
123
163
  - **1.0.3** - March 1 2016
124
164
  - Fix/Improve renderers
125
165
  - Fix header default background color
126
166
  - Fix default columns
167
+
127
168
  - **1.0.2** - February 26 2016
128
169
  - Enhance Style options
170
+
129
171
  - **1.0.1** - February 26 2016
130
172
  - Fix bug in renderers
173
+
131
174
  - **1.0.0** - February 26 2016
132
175
  - Gem Initial Release
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # Spreadsheet Architect
2
2
 
3
3
  <a href="https://badge.fury.io/rb/spreadsheet_architect" target="_blank"><img height="21" style='border:0px;height:21px;' border='0' src="https://badge.fury.io/rb/spreadsheet_architect.svg" alt="Gem Version"></a>
4
- <a href='https://travis-ci.com/westonganger/spreadsheet_architect' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://api.travis-ci.org/westonganger/spreadsheet_architect.svg?branch=master' border='0' alt='Build Status' /></a>
4
+ <a href='https://github.com/westonganger/spreadsheet_architect/actions' target='_blank'><img src="https://github.com/westonganger/spreadsheet_architect/workflows/Tests/badge.svg" style="max-width:100%;" height='21' style='border:0px;height:21px;' border='0' alt="CI Status"></a>
5
5
  <a href='https://rubygems.org/gems/spreadsheet_architect' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://ruby-gem-downloads-badge.herokuapp.com/spreadsheet_architect?label=rubygems&type=total&total_label=downloads&color=brightgreen' border='0' alt='RubyGems Downloads' /></a>
6
- <a href='https://ko-fi.com/A5071NK' target='_blank'><img height='22' style='border:0px;height:22px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=a' border='0' alt='Buy Me a Coffee' /></a>
7
6
 
8
7
  Spreadsheet Architect is a library that allows you to create XLSX, ODS, or CSV spreadsheets super easily from ActiveRecord relations, plain Ruby objects, or tabular data.
9
8
 
@@ -190,7 +189,7 @@ File.open('path/to/multi_sheet_file.xlsx', 'w+b') do |f|
190
189
  end
191
190
  ```
192
191
 
193
- See this file for more details: https://github.com/westonganger/spreadsheet_architect/blob/master/test/spreadsheet_architect/multi_sheet_test.rb
192
+ See this file for more details: [test/unit/multi_sheet_test.rb](./test/unit/multi_sheet_test.rb)
194
193
 
195
194
  ### ODS
196
195
  ```ruby
@@ -202,7 +201,7 @@ File.open('path/to/multi_sheet_file.ods', 'w+b') do |f|
202
201
  end
203
202
  ```
204
203
 
205
- See this file for more details: https://github.com/westonganger/spreadsheet_architect/blob/master/test/spreadsheet_architect/multi_sheet_test.rb
204
+ See this file for more details: [test/unit/multi_sheet_test.rb](./test/unit/multi_sheet_test.rb)
206
205
 
207
206
  # Methods
208
207
 
@@ -215,17 +214,18 @@ See this file for more details: https://github.com/westonganger/spreadsheet_arch
215
214
  |**spreadsheet_columns**<br>*Proc/Symbol/String*| Use this option to override or define the spreadsheet columns. Normally, if this option is not specified and are using the instances option/ActiveRecord relation, it uses the classes custom `spreadsheet_columns` method or any custom defaults defined.<br>If neither of those and is an ActiveRecord model, then it will falls back to the models `self.column_names` | Cannot be used with the `:data` option.<br><br>If a Proc value is passed it will be evaluated on the instance object.<br><br>If a Symbol or String value is passed then it will search the instance for a method name that matches and call it. |
216
215
  |**headers**<br>*Array / 2D Array*| |Data for the header row cells. If using on a class/relation, this defaults to the ones provided via `spreadsheet_columns`. Pass `false` to skip the header row. |
217
216
  |**sheet_name**<br>*String*|`Sheet1`||
218
- |**header_style**<br>*Hash*|`{background_color: "AAAAAA", color: "FFFFFF", align: :center, font_name: 'Arial', font_size: 10, bold: false, italic: false, underline: false}`|See all available style options [here](https://github.com/westonganger/spreadsheet_architect/blob/master/docs/axlsx_style_reference.md)|
219
- |**row_style**<br>*Hash*|`{background_color: nil, color: "000000", align: :left, font_name: 'Arial', font_size: 10, bold: false, italic: false, underline: false, format_code: nil}`|Styles for non-header rows. See all available style options [here](https://github.com/westonganger/spreadsheet_architect/blob/master/docs/axlsx_style_reference.md)|
220
- |**column_styles**<br>*Array*||[See this example for usage](https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb)|
221
- |**range_styles**<br>*Array*||[See this example for usage](https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb)|
222
- |**conditional_row_styles**<br>*Array*||[See this example for usage](https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb). The if/unless proc will called with the following args: `row_index`, `row_data`|
223
- |**merges**<br>*Array*||Merge cells. [See this example for usage](https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb). Warning merges cannot overlap eachother, if you attempt to do so Excel will claim your spreadsheet is corrupt and refuse to open your spreadsheet.|
224
- |**borders**<br>*Array*||[See this example for usage](https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb)|
217
+ |**header_style**<br>*Hash*|`{background_color: "AAAAAA", color: "FFFFFF", align: :center, font_name: 'Arial', font_size: 10, bold: false, italic: false, underline: false}`|See all available style options [here](./docs/axlsx_style_reference.md)|
218
+ |**row_style**<br>*Hash*|`{background_color: nil, color: "000000", align: :left, font_name: 'Arial', font_size: 10, bold: false, italic: false, underline: false, format_code: nil}`|Styles for non-header rows. See all available style options [here](./docs/axlsx_style_reference.md)|
219
+ |**column_styles**<br>*Array*||[See this example for usage](./test/unit/kitchen_sink_test.rb)|
220
+ |**range_styles**<br>*Array*||[See this example for usage](./test/unit/kitchen_sink_test.rb)|
221
+ |**conditional_row_styles**<br>*Array*||[See this example for usage](./test/unit/kitchen_sink_test.rb). The if/unless proc will called with the following args: `row_index`, `row_data`|
222
+ |**merges**<br>*Array*||Merge cells. [See this example for usage](./test/unit/kitchen_sink_test.rb). Warning merges cannot overlap eachother, if you attempt to do so Excel will claim your spreadsheet is corrupt and refuse to open your spreadsheet.|
223
+ |**borders**<br>*Array*||[See this example for usage](./test/unit/kitchen_sink_test.rb)|
225
224
  |**column_types**<br>*Array*||Valid types for XLSX are :string, :integer, :float, :date, :time, :boolean, nil = auto determine.|
226
225
  |**column_widths**<br>*Array*||Sometimes you may want explicit column widths. Use nil if you want a column to autofit again.|
227
226
  |**freeze_headers**<br>*Boolean*||Make all header rows frozen/fixed so they do not scroll.|
228
- |**freeze**<br>* Hash*|`{rows: (1..4), columns: :all}`|Make all specified rows and columns frozen/fixed so they do not scroll.|
227
+ |**freeze**<br>*Hash*|`{rows: (1..4), columns: :all}`|Make all specified rows and columns frozen/fixed so they do not scroll.|
228
+ |**skip_defaults**<br>*Boolean*|`false`|Removes defaults and default styles. Particularily useful for heavily customized spreadsheets where the default styles get in the way.|
229
229
 
230
230
  ## `to_axlsx_spreadsheet(options={}, axlsx_package_to_join=nil)`
231
231
  Same options as `to_xlsx`
@@ -242,6 +242,7 @@ Same options as `to_xlsx`
242
242
  |**header_style**<br>*Hash*|`{background_color: "AAAAAA", color: "FFFFFF", align: :center, font_size: 10, bold: true}`|Note: Currently ODS only supports these options|
243
243
  |**row_style**<br>*Hash*|`{background_color: nil, color: "000000", align: :left, font_size: 10, bold: false}`|Styles for non-header rows. Currently ODS only supports these options|
244
244
  |**column_types**<br>*Array*||Valid types for ODS are :string, :float, :date, :time, :boolean, nil = auto determine. Due to [RODF Issue #19](https://github.com/thiagoarrais/rodf/issues/19), :date/:time will be converted to :string |
245
+ |**skip_defaults**<br>*Boolean*|`false`|Skip defaults and default styles. Particularily useful for heavily customized spreadsheets where the default styles get in the way.|
245
246
 
246
247
  ## `to_rodf_spreadsheet(options={}, spreadsheet_to_join=nil)`
247
248
  Same options as `to_ods`
@@ -306,11 +307,11 @@ SpreadsheetArchitect.default_options = {
306
307
  ```
307
308
 
308
309
  # Kitchen Sink Examples with Styling for XLSX and ODS
309
- See this example: https://github.com/westonganger/spreadsheet_architect/blob/master/test/unit/kitchen_sink_test.rb
310
+ See this example: [test/unit/kitchen_sink_test.rb](./test/unit/kitchen_sink_test.rb)
310
311
 
311
312
  # Axlsx Style Reference
312
313
 
313
- I have compiled a list of all available style options for axlsx here: https://github.com/westonganger/spreadsheet_architect/blob/master/docs/axlsx_style_reference.md
314
+ I have compiled a list of all available style options for axlsx here: [docs/axlsx_style_reference.md](./docs/axlsx_style_reference.md)
314
315
 
315
316
  # Testing / Validating your Spreadsheets
316
317
 
@@ -112,24 +112,22 @@ module SpreadsheetArchitect
112
112
  def self.get_options(options, klass)
113
113
  verify_option_types(options)
114
114
 
115
- if options[:freeze] && options[:freeze_headers]
116
- raise SpreadsheetArchitect::Exceptions::ArgumentError.new('Cannot use both :freeze and :freeze_headers options at the same time')
117
- end
118
-
119
- if defined?(klass::SPREADSHEET_OPTIONS)
120
- if klass::SPREADSHEET_OPTIONS.is_a?(Hash)
121
- options = SpreadsheetArchitect.default_options.merge(
122
- klass::SPREADSHEET_OPTIONS.merge(options)
123
- )
115
+ if !options[:skip_defaults]
116
+ if defined?(klass::SPREADSHEET_OPTIONS)
117
+ if klass::SPREADSHEET_OPTIONS.is_a?(Hash)
118
+ defaults = SpreadsheetArchitect.default_options.merge(klass::SPREADSHEET_OPTIONS)
119
+ else
120
+ raise SpreadsheetArchitect::Exceptions::OptionTypeError.new("#{klass}::SPREADSHEET_OPTIONS constant")
121
+ end
124
122
  else
125
- raise SpreadsheetArchitect::Exceptions::OptionTypeError.new("#{klass}::SPREADSHEET_OPTIONS constant")
123
+ defaults = SpreadsheetArchitect.default_options
126
124
  end
127
- else
128
- options = SpreadsheetArchitect.default_options.merge(options)
125
+
126
+ options = defaults.merge(options)
129
127
  end
130
128
 
131
129
  if !options[:headers]
132
- options[:header_style] = false
130
+ options.delete(:header_style)
133
131
  end
134
132
 
135
133
  if !options[:sheet_name]
@@ -144,8 +142,12 @@ module SpreadsheetArchitect
144
142
  end
145
143
  end
146
144
 
147
- if options[:freeze] && options[:freeze].is_a?(Hash) && !options[:freeze][:rows]
148
- raise SpreadsheetArchitect::Exceptions::ArgumentError.new('Must provide a :rows key when passing a hash to the :freeze option')
145
+ if options[:freeze]
146
+ if options[:freeze_headers]
147
+ raise SpreadsheetArchitect::Exceptions::ArgumentError.new('Cannot use both :freeze and :freeze_headers options at the same time')
148
+ elsif options[:freeze].is_a?(Hash) && !options[:freeze][:rows]
149
+ raise SpreadsheetArchitect::Exceptions::ArgumentError.new('Must provide a :rows key when passing a hash to the :freeze option')
150
+ end
149
151
  end
150
152
 
151
153
  return options
@@ -284,6 +286,7 @@ module SpreadsheetArchitect
284
286
  instances: Array,
285
287
  merges: Array,
286
288
  range_styles: Array,
289
+ skip_defaults: [TrueClass, FalseClass],
287
290
  row_style: Hash,
288
291
  sheet_name: String,
289
292
  spreadsheet_columns: [Proc, Symbol, String],
@@ -25,10 +25,30 @@ module SpreadsheetArchitect
25
25
  end
26
26
 
27
27
  def self.convert_styles_to_axlsx(styles={})
28
- styles = {} unless styles.is_a?(Hash)
28
+ if [nil, false, true].include?(styles)
29
+ return {}
30
+ end
29
31
 
30
32
  styles = SpreadsheetArchitect::Utils.symbolize_keys(styles)
31
33
 
34
+ ### BOOLEAN VALUES
35
+ if styles[:b].nil? && styles.has_key?(:bold)
36
+ styles[:b] = !!styles.delete(:bold)
37
+ end
38
+
39
+ if styles[:i].nil? && styles.has_key?(:italic)
40
+ styles[:i] = !!styles.delete(:italic)
41
+ end
42
+
43
+ if styles[:u].nil? && styles.has_key?(:underline)
44
+ styles[:u] = !!styles.delete(:underline)
45
+ end
46
+
47
+ ### OTHER VALUES
48
+ if styles[:sz].nil? && !styles[:font_size].nil?
49
+ styles[:sz] = styles.delete(:font_size)
50
+ end
51
+
32
52
  if styles[:fg_color].nil? && styles[:color] && styles[:color].respond_to?(:sub) && !styles[:color].empty?
33
53
  styles[:fg_color] = styles.delete(:color).sub('#','')
34
54
  end
@@ -37,7 +57,7 @@ module SpreadsheetArchitect
37
57
  styles[:bg_color] = styles.delete(:background_color).sub('#','')
38
58
  end
39
59
 
40
- if styles[:alignment].nil? && styles[:align]
60
+ if styles[:alignment].nil? && [:align, :valign, :wrap_text].any?{|k| styles.has_key?(k) }
41
61
  if styles[:align].is_a?(Hash)
42
62
  styles[:alignment] = {
43
63
  horizontal: styles[:align][:horizontal],
@@ -45,34 +65,22 @@ module SpreadsheetArchitect
45
65
  wrap_text: styles[:align][:wrap_text]
46
66
  }
47
67
  else
48
- styles[:alignment] = {horizontal: (styles.delete(:align) || nil) }
68
+ styles[:alignment] = {horizontal: styles.delete(:align), vertical: styles.delete(:valign), wrap_text: styles.delete(:wrap_text) }.compact
49
69
  end
50
-
51
- styles.delete(:align)
52
- end
53
-
54
- if styles[:b].nil?
55
- styles[:b] = styles.delete(:bold) || nil
56
- end
57
-
58
- if styles[:sz].nil?
59
- styles[:sz] = styles.delete(:font_size) || nil
60
- end
61
-
62
- if styles[:i].nil?
63
- styles[:i] = styles.delete(:italic) || nil
64
- end
65
-
66
- if styles[:u].nil?
67
- styles[:u] = styles.delete(:underline) || nil
68
70
  end
69
71
 
72
+ ### COMMENT SEEMS WRONG, TO BE RECONFIRMED
70
73
  ### If `:u` is false instead of nil, it may be incorrectly rendered as true in Excel
71
- if styles[:u] == false
72
- styles[:u] = nil
74
+ #if styles[:u] == false
75
+ # styles[:u] = nil
76
+ #end
77
+
78
+ ### ENSURE CLEANUP OF ALL ALIAS KEYS
79
+ [:bold, :font_size, :italic, :underline, :align, :valign, :wrap_text, :color, :background_color].each do |k|
80
+ styles.delete(k)
73
81
  end
74
82
 
75
- styles.delete_if{|k,v| v.nil?}
83
+ return styles
76
84
  end
77
85
 
78
86
  def self.range_hash_to_str(hash, num_columns, num_rows)
@@ -1,3 +1,3 @@
1
1
  module SpreadsheetArchitect
2
- VERSION = "4.1.0"
2
+ VERSION = "4.2.0"
3
3
  end
@@ -15,8 +15,11 @@ class SpreadsheetsController < ApplicationController
15
15
  end
16
16
 
17
17
  def alt_xlsx
18
- @posts = Post.all
19
- respond_with @posts
18
+ if Rails::VERSION::MAJOR >= 5
19
+ @posts = Post.all
20
+
21
+ respond_with @posts
22
+ end
20
23
  end
21
24
 
22
25
  def test_xlsx
@@ -58,7 +58,7 @@ module Dummy
58
58
 
59
59
  if ActiveRecord.respond_to?(:gem_version)
60
60
  gem_version = ActiveRecord.gem_version
61
- if gem_version.to_s.starts_with?("5.2.")
61
+ if gem_version.to_s.start_with?("5.2.")
62
62
  config.active_record.sqlite3.represent_boolean_as_integer = true
63
63
  end
64
64
  end
@@ -9,7 +9,7 @@ Dummy::Application.configure do
9
9
 
10
10
  # Configure static asset server for tests with Cache-Control for performance
11
11
  config.serve_static_files = true
12
- config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
12
+ config.public_file_server.enabled = true
13
13
 
14
14
  # Log error messages when you accidentally call methods on nil
15
15
  config.whiny_nils = true