rxl 0.2.1 → 0.3.0

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: 423f052155f315079efc3acd473a98ba955f378571aeba1eee1706f99d30c8a3
4
- data.tar.gz: bf910f39824c12a512b7fafdcd94a6d478d1fc64bcfdcaa26c5a45c2d5c4b8d2
3
+ metadata.gz: 5d71e3c242930b4fbd6c3e05572e51bf19231ea10483b6ca271dd42138e1959a
4
+ data.tar.gz: 14c3dfbf017573840b2c31595043f3b587e6550487c91a7de5395ff02282c0fa
5
5
  SHA512:
6
- metadata.gz: 5489f6b1c8500457e0bb093b4437614c3ac3ecda3d28d9bae9c6f519817355217fa5e7701a33b331e34d18873ac4d38e3749110ddb4ab2cc23f33255eb70ac2e
7
- data.tar.gz: dbab0226eb5a2e6bb82d5f345630f50d4f6da2bbdff5c96eeed154998821c228e5dab0610e9bbefbce2f6088f2daf09b171d343d98280843c4e7ff4909084576
6
+ metadata.gz: a64c63e260638a97ebfcc00270e8d4ca265a693fa6754be61d3307a26e27b863d9d04ef3bdd46ca908ac289102c4f964ac5ff4561dfb43f46f9578494467412d
7
+ data.tar.gz: 18d20fc11bd47c9d8f631eca7023f398ab2992817696dbd568a796cf23307b14c8be6929db0bc7c17b00e3f8c8641d5648791179fea9d7a142e7189eb7fa3aad
data/README.md CHANGED
@@ -42,7 +42,7 @@ The format of the excel read hash has the following skeleton:
42
42
 
43
43
  ```ruby
44
44
  {
45
- "Sheet1" => {
45
+ 'Sheet1' => {
46
46
  row_count: 1,
47
47
  column_count: 1,
48
48
  rows: {},
@@ -88,7 +88,7 @@ The format of the excel table read hash has the following skeleton:
88
88
 
89
89
  ```ruby
90
90
  {
91
- "Sheet1" => [
91
+ 'Sheet1' => [
92
92
  {
93
93
  header_a: value,
94
94
  header_b: value
@@ -120,18 +120,20 @@ Returns the files with sheet contents populated with hash of cells (or array of
120
120
  ```ruby
121
121
  {
122
122
  first_file: {
123
- "Sheet1" => 'sheet_contents',
124
- "Sheet2" => 'sheet_contents'
123
+ 'Sheet1' => 'sheet_contents',
124
+ 'Sheet2' => 'sheet_contents'
125
125
  },
126
126
  second_file: {
127
- "Sheet1" => 'sheet_contents',
128
- "Sheet2" => 'sheet_contents'
127
+ 'Sheet1' => 'sheet_contents',
128
+ 'Sheet2' => 'sheet_contents'
129
129
  },
130
130
  }
131
131
  ```
132
132
 
133
133
  ### Write to file
134
134
 
135
+ Any exception is swallowed and returned.
136
+
135
137
  To write a file pass the filename and hash:
136
138
 
137
139
  ```ruby
@@ -142,7 +144,7 @@ The format of the excel hash_workbook has sheet names as keys and hashes of cell
142
144
 
143
145
  ```ruby
144
146
  {
145
- "Sheet1" => {
147
+ 'Sheet1' => {
146
148
  'A1' => {
147
149
  value: 'abc'
148
150
  }
@@ -150,6 +152,39 @@ The format of the excel hash_workbook has sheet names as keys and hashes of cell
150
152
  }
151
153
  ```
152
154
 
155
+ ### Write to file as tables
156
+
157
+ Any exception is swallowed and returned.
158
+
159
+ To write a file as pass the filename and hash:
160
+
161
+ ```ruby
162
+ Rxl.write_file_as_tables('path/to/save.xlsx', hash_tables, order)
163
+ ```
164
+
165
+ The worsheets' top row will be populated with values specified in the `order` array. Those array items will also be used to extract the current row from the current hash.
166
+
167
+ * use `nil` in the `order` array to leave blank columns (including blank header)
168
+ * string or symbol keys can be used, so long as the key in order is the same as in the hashes
169
+
170
+ The format of the excel hash_workbook has sheet names as keys and hashes of rows as values:
171
+
172
+ ```ruby
173
+ order = %i[header_a header_b]
174
+ hash_tables = {
175
+ 'Sheet1' => [
176
+ {
177
+ header_a: 'some_value',
178
+ header_b: 'other_value'
179
+ },
180
+ {
181
+ header_a: 'some_value',
182
+ header_b: 'other_value'
183
+ }
184
+ ]
185
+ }
186
+ ```
187
+
153
188
  #### Cell specification
154
189
 
155
190
  All cells are written with the format set to general except those with a number format specified
data/lib/rxl.rb CHANGED
@@ -7,10 +7,16 @@ module Rxl
7
7
  def self.write_file(filepath, hash_workbook)
8
8
  begin
9
9
  rubyxl_workbook = Workbook.hash_workbook_to_rubyxl_workbook(hash_workbook)
10
+ rubyxl_workbook.write(filepath)
11
+ nil
10
12
  rescue => e
11
13
  return e
12
14
  end
13
- rubyxl_workbook.write(filepath)
15
+ end
16
+
17
+ def self.write_file_as_tables(filepath, hash_tables, order, write_headers: true)
18
+ hash_workbook = Workbook.hashes_to_hash_workbook(hash_tables, order, write_headers: write_headers)
19
+ write_file(filepath, hash_workbook)
14
20
  end
15
21
 
16
22
  def self.read_file(filepath)
data/lib/rxl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rxl
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/workbook.rb CHANGED
@@ -26,6 +26,12 @@ module Workbook
26
26
  rubyxl_workbook
27
27
  end
28
28
 
29
+ def self.hashes_to_hash_workbook(hash_tables, order, write_headers: true)
30
+ hash_workbook = {}
31
+ hash_tables.each { |k, v| hash_workbook[k] = Worksheet.hashes_to_hash_worksheet(v, order, write_headers: write_headers) }
32
+ hash_workbook
33
+ end
34
+
29
35
  def self.hash_workbook_to_hash_tables(hash_workbook)
30
36
  hash_workbook.keys.each_with_object({}) do |key, hash_tables|
31
37
  hash_tables[key] = Worksheet.hash_worksheet_to_hash_table(hash_workbook[key])
data/lib/worksheet.rb CHANGED
@@ -34,6 +34,29 @@ module Worksheet
34
34
  end
35
35
 
36
36
 
37
+ ################################################
38
+ ### GET RUBYXL WORKSHEET FROM HASHES ###
39
+ ################################################
40
+
41
+ def self.hashes_to_hash_worksheet(hashes, order, write_headers: true)
42
+ rows = hashes.map do |hash|
43
+ order.map { |item| hash[item] }
44
+ end
45
+ rows.unshift(order.map { |item| "#{item}" }) if write_headers
46
+ rows_to_hash_worksheet(rows)
47
+ end
48
+
49
+ def self.rows_to_hash_worksheet(rows)
50
+ rxl_worksheet = {}
51
+ rows.count.times do |i|
52
+ rows[i].each_with_index do |cell_value, index|
53
+ rxl_worksheet["#{column_name(index)}#{i + 1}"] = { value: cell_value }
54
+ end
55
+ end
56
+ rxl_worksheet
57
+ end
58
+
59
+
37
60
  ##############################
38
61
  ### SHARED METHODS ###
39
62
  ##############################
@@ -89,4 +112,10 @@ module Worksheet
89
112
  end
90
113
  end
91
114
 
115
+ def self.column_name(int)
116
+ name = 'A'
117
+ int.times { name.succ! }
118
+ name
119
+ end
120
+
92
121
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rxl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian McWilliams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-09 00:00:00.000000000 Z
11
+ date: 2019-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler