rggen-spreadsheet-loader 0.13.0 → 0.17.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 +4 -4
- data/LICENSE +1 -1
- data/README.md +2 -2
- data/lib/rggen/spreadsheet_loader.rb +5 -3
- data/lib/rggen/spreadsheet_loader/csv_loader.rb +24 -0
- data/lib/rggen/spreadsheet_loader/roo_loader.rb +11 -3
- data/lib/rggen/spreadsheet_loader/setup.rb +4 -1
- data/lib/rggen/spreadsheet_loader/spreadsheet_loader.rb +40 -59
- data/lib/rggen/spreadsheet_loader/version.rb +1 -1
- data/lib/rggen/spreadsheet_loader/xls_loader.rb +26 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a5c038c878bdee2d0369695504d66c0773c5778ca6ba27ad20960c525f0ef32
|
4
|
+
data.tar.gz: 698efcc2c97a0603b7212e35eef134a1526485bd77383bfc27a490f44a21eb87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8df01bd76a566ccbbdbcd4e8efab23f20d3f7f64d8908d0cd7bbdcd6c0fe8f4aa1f4ffa1d6cc935d9843f5efaf813275e6af1f9141d188c607a19dc18490c81a
|
7
|
+
data.tar.gz: c806612b266d7a64e432490f96c5c9468e9d3739ae286728402e60822e82ce1b3f5cfcba4ec73d07c05b3e07490ccb49678a73c5fde86295b5f83576e4612f08
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
[](https://badge.fury.io/rb/rggen-spreadsheet-loader)
|
2
|
-
[](https://github.com/rggen/rggen-spreadsheet-loader/actions?query=workflow%3ACI)
|
3
3
|
[](https://codeclimate.com/github/rggen/rggen-spreadsheet-loader/maintainability)
|
4
4
|
[](https://codecov.io/gh/rggen/rggen-spreadsheet-loader)
|
5
5
|
[](https://sonarcloud.io/dashboard?id=rggen_rggen-spreadsheet-loader)
|
@@ -40,7 +40,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
40
40
|
|
41
41
|
## Copyright & License
|
42
42
|
|
43
|
-
Copyright © 2019 Taichi Ishitani. RgGen::SpreadsheetLoader is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
43
|
+
Copyright © 2019-2020 Taichi Ishitani. RgGen::SpreadsheetLoader is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
44
44
|
|
45
45
|
## Code of Conduct
|
46
46
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'roo'
|
4
|
-
require 'roo-xls'
|
5
3
|
require_relative 'spreadsheet_loader/version'
|
6
4
|
require_relative 'spreadsheet_loader/spreadsheet/position'
|
7
5
|
require_relative 'spreadsheet_loader/spreadsheet/cell'
|
@@ -9,12 +7,16 @@ require_relative 'spreadsheet_loader/spreadsheet/row'
|
|
9
7
|
require_relative 'spreadsheet_loader/spreadsheet/sheet'
|
10
8
|
require_relative 'spreadsheet_loader/spreadsheet/book'
|
11
9
|
require_relative 'spreadsheet_loader/spreadsheet_loader'
|
10
|
+
require_relative 'spreadsheet_loader/csv_loader'
|
12
11
|
require_relative 'spreadsheet_loader/roo_loader'
|
12
|
+
require_relative 'spreadsheet_loader/xls_loader'
|
13
13
|
|
14
14
|
module RgGen
|
15
15
|
module SpreadsheetLoader
|
16
16
|
def self.default_setup(builder)
|
17
|
-
builder.register_loader(:register_map,
|
17
|
+
builder.register_loader(:register_map, :spreadsheet, CSVLoader)
|
18
|
+
builder.register_loader(:register_map, :spreadsheet, RooLoader)
|
19
|
+
builder.register_loader(:register_map, :spreadsheet, XLSLoader)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RgGen
|
4
|
+
module SpreadsheetLoader
|
5
|
+
class CSVLoader < Core::RegisterMap::Loader
|
6
|
+
include SpreadsheetLoader
|
7
|
+
|
8
|
+
support_types [:csv]
|
9
|
+
|
10
|
+
def read_spreadsheet(file, book)
|
11
|
+
sheet = read_csv(file)
|
12
|
+
sheet_name = File.basename(file, '.*')
|
13
|
+
book.add_sheet(sheet_name, sheet)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def read_csv(file)
|
19
|
+
require 'csv'
|
20
|
+
CSV.read(file)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -5,16 +5,24 @@ module RgGen
|
|
5
5
|
class RooLoader < Core::RegisterMap::Loader
|
6
6
|
include SpreadsheetLoader
|
7
7
|
|
8
|
-
support_types [:xlsx, :
|
8
|
+
support_types [:xlsx, :ods]
|
9
9
|
|
10
10
|
def read_spreadsheet(file, book)
|
11
|
-
|
12
|
-
|
11
|
+
read_roo(file) do |pagename, page|
|
12
|
+
book.add_sheet(pagename, collect_cells(page))
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
+
def read_roo(file)
|
19
|
+
require 'roo'
|
20
|
+
Roo::Spreadsheet.open(file, extension: File.extname(file))
|
21
|
+
.each_with_pagename do |pagename, page|
|
22
|
+
page.first_row && yield(pagename, page)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
18
26
|
def collect_cells(page)
|
19
27
|
(1..page.last_row).map do |row|
|
20
28
|
(1..page.last_column).map { |column| page.cell(row, column) }
|
@@ -1,4 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rggen/spreadsheet_loader'
|
4
|
-
RgGen.setup :'spreadsheet-loader', RgGen::SpreadsheetLoader
|
4
|
+
RgGen.setup :'rggen-spreadsheet-loader', RgGen::SpreadsheetLoader do |builder|
|
5
|
+
builder.ignore_value :register_map, :spreadsheet, :register_block, :comment
|
6
|
+
builder.ignore_value :register_map, :spreadsheet, :register, :comment
|
7
|
+
end
|
@@ -9,72 +9,65 @@ module RgGen
|
|
9
9
|
Spreadsheet::Book.new(file) { |book| read_spreadsheet(file, book) }
|
10
10
|
end
|
11
11
|
|
12
|
-
def format(book, _file)
|
13
|
-
book.sheets.each(&method(:process_sheet))
|
14
|
-
end
|
15
|
-
|
16
12
|
private
|
17
13
|
|
18
|
-
def
|
19
|
-
|
20
|
-
sheet
|
21
|
-
.rows(register_start_position.row)
|
22
|
-
.reject { |row| row.cells.all?(&:empty_cell?) }
|
23
|
-
.each { |row| process_row(row, register_block) }
|
14
|
+
def format_layer_data(read_data, layer, _file)
|
15
|
+
layer != :root ? collect_layer_data(read_data, layer) : nil
|
24
16
|
end
|
25
17
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
.each { |value_name, cell| value(value_name, cell) }
|
31
|
-
end
|
18
|
+
def collect_layer_data(read_data, layer)
|
19
|
+
values = valid_values(layer)
|
20
|
+
cells = __send__("#{layer}_cells", read_data)
|
21
|
+
values.zip(cells).to_h
|
32
22
|
end
|
33
23
|
|
34
24
|
def register_block_cells(sheet)
|
35
25
|
start_row = register_block_start_position.row
|
36
26
|
start_column = register_block_start_position.column
|
37
|
-
Array.new(
|
27
|
+
Array.new(valid_values(:register_block).size) do |i|
|
38
28
|
sheet[start_row + i, start_column]
|
39
29
|
end
|
40
30
|
end
|
41
31
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
else
|
47
|
-
parse_register(row, register_block)
|
48
|
-
end
|
49
|
-
parse_bit_field(row, register)
|
32
|
+
def register_cells(rows)
|
33
|
+
start_column = register_start_position.column
|
34
|
+
size = valid_values(:register).size
|
35
|
+
rows.first.cells(start_column, size)
|
50
36
|
end
|
51
37
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
.each { |value_name, cell| value(value_name, cell) }
|
57
|
-
end
|
38
|
+
def bit_field_cells(row)
|
39
|
+
start_column = bit_field_start_position.column
|
40
|
+
size = valid_values(:bit_field).size
|
41
|
+
row.cells(start_column, size)
|
58
42
|
end
|
59
43
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
44
|
+
SUB_LAYERS = {
|
45
|
+
root: :register_block,
|
46
|
+
register_block: :register,
|
47
|
+
register: :bit_field
|
48
|
+
}.freeze
|
49
|
+
|
50
|
+
def format_sub_layer_data(read_data, layer, _file)
|
51
|
+
sub_layer = SUB_LAYERS[layer]
|
52
|
+
sub_layer && { sub_layer => __send__("collect_#{sub_layer}_data", read_data) }
|
64
53
|
end
|
65
54
|
|
66
|
-
def
|
67
|
-
|
68
|
-
bit_field_valid_values
|
69
|
-
.zip(bit_field_cells(row))
|
70
|
-
.each { |value_name, cell| value(value_name, cell) }
|
71
|
-
end
|
55
|
+
def collect_register_block_data(book)
|
56
|
+
book.sheets
|
72
57
|
end
|
73
58
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
59
|
+
def collect_register_data(sheet)
|
60
|
+
sheet.rows(register_start_position.row)
|
61
|
+
.reject { |row| row.cells.all?(&:empty_cell?) }
|
62
|
+
.each_with_object([]) do |row, row_sets|
|
63
|
+
row[register_start_position.column].empty_cell? ||
|
64
|
+
(row_sets << [])
|
65
|
+
row_sets.last << row
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def collect_bit_field_data(rows)
|
70
|
+
rows
|
78
71
|
end
|
79
72
|
|
80
73
|
def register_block_start_position
|
@@ -83,29 +76,17 @@ module RgGen
|
|
83
76
|
|
84
77
|
def register_start_position
|
85
78
|
@register_start_position ||=
|
86
|
-
Position.new(
|
79
|
+
Position.new(valid_values(:register_block).size + 2, 1)
|
87
80
|
end
|
88
81
|
|
89
82
|
def bit_field_start_position
|
90
83
|
@bit_field_start_position ||=
|
91
84
|
begin
|
92
85
|
column =
|
93
|
-
register_start_position.column +
|
86
|
+
register_start_position.column + valid_values(:register).size
|
94
87
|
Position.new(0, column)
|
95
88
|
end
|
96
89
|
end
|
97
|
-
|
98
|
-
def register_block_valid_values
|
99
|
-
valid_value_lists[1]
|
100
|
-
end
|
101
|
-
|
102
|
-
def register_valid_values
|
103
|
-
valid_value_lists[2]
|
104
|
-
end
|
105
|
-
|
106
|
-
def bit_field_valid_values
|
107
|
-
valid_value_lists[3]
|
108
|
-
end
|
109
90
|
end
|
110
91
|
end
|
111
92
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RgGen
|
4
|
+
module SpreadsheetLoader
|
5
|
+
class XLSLoader < Core::RegisterMap::Loader
|
6
|
+
include SpreadsheetLoader
|
7
|
+
|
8
|
+
support_types [:xls]
|
9
|
+
|
10
|
+
def read_spreadsheet(file, book)
|
11
|
+
read_xls(file).each do |sheet|
|
12
|
+
book.add_sheet(sheet.name, sheet.rows)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def read_xls(file)
|
19
|
+
require 'spreadsheet'
|
20
|
+
::Spreadsheet.open(file, 'rb') do |book|
|
21
|
+
book.worksheets.select { |sheet| sheet.row_count.positive? }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen-spreadsheet-loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roo
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.8'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: spreadsheet
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.2.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- LICENSE
|
64
64
|
- README.md
|
65
65
|
- lib/rggen/spreadsheet_loader.rb
|
66
|
+
- lib/rggen/spreadsheet_loader/csv_loader.rb
|
66
67
|
- lib/rggen/spreadsheet_loader/roo_loader.rb
|
67
68
|
- lib/rggen/spreadsheet_loader/setup.rb
|
68
69
|
- lib/rggen/spreadsheet_loader/spreadsheet/book.rb
|
@@ -72,6 +73,7 @@ files:
|
|
72
73
|
- lib/rggen/spreadsheet_loader/spreadsheet/sheet.rb
|
73
74
|
- lib/rggen/spreadsheet_loader/spreadsheet_loader.rb
|
74
75
|
- lib/rggen/spreadsheet_loader/version.rb
|
76
|
+
- lib/rggen/spreadsheet_loader/xls_loader.rb
|
75
77
|
homepage: https://github.com/rggen/rggen-spreadsheet-loader
|
76
78
|
licenses:
|
77
79
|
- MIT
|
@@ -88,15 +90,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
90
|
requirements:
|
89
91
|
- - ">="
|
90
92
|
- !ruby/object:Gem::Version
|
91
|
-
version: '2.
|
93
|
+
version: '2.4'
|
92
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
95
|
requirements:
|
94
96
|
- - ">="
|
95
97
|
- !ruby/object:Gem::Version
|
96
98
|
version: '0'
|
97
99
|
requirements: []
|
98
|
-
rubygems_version: 3.
|
100
|
+
rubygems_version: 3.1.2
|
99
101
|
signing_key:
|
100
102
|
specification_version: 4
|
101
|
-
summary: rggen-spreadsheet-loader-0.
|
103
|
+
summary: rggen-spreadsheet-loader-0.17.0
|
102
104
|
test_files: []
|