rggen-spreadsheet-loader 0.16.0 → 0.20.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: bf9a2598faafa52f60ab349dbf8a3f8abd62bb1ce4c4a9bb146c3161194c5a0c
4
- data.tar.gz: 4c733349b76ec9c4641cb6a30c5b955a9e8551463d53806011d0af6cb3de0605
3
+ metadata.gz: e0f3c849dfe3a2e44abfe3dc1014c4a4254fe8be92bdd4b64745fd1778cb0b42
4
+ data.tar.gz: 690e61fab0e402d9171aa2ee50befbf25111ad44810acf01cd5c9af11fba7e8f
5
5
  SHA512:
6
- metadata.gz: 7abd9a096f7df1f5497daa44e917c3bc7542a0885034ebffcee415eda8b960b2b81484879cf323d2fac9beb65713d2b41536d309d51090eec7ffc6278dae2a94
7
- data.tar.gz: '09b4010e88e75ea6c49c1527e9338f04ba1a0600665ffc2b8116f41fa92efaba1211ea6a2c9260750c471d507e8bea47bc4b832f133f3f21d32ec8153cf269c8'
6
+ metadata.gz: 23770bfa1f24804808d6c75885f07338831f18833147c165783b8dd1bac3edde07e90f281f1ed2f326fcf71487ff972bb1f14353d08142491660a68997b57676
7
+ data.tar.gz: e162d610aa891cd2928370e9cb8f9bf6d4057be34f344efc855de1539ecc2b743054c4d00d4209a999747facbe579cf947fc8cdae44f2c36e72dfbd29cf33c40
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019-2020 Taichi Ishitani
3
+ Copyright (c) 2019-2021 Taichi Ishitani
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -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-2020 Taichi Ishitani. RgGen::SpreadsheetLoader is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
43
+ Copyright © 2019-2021 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
 
@@ -13,10 +13,12 @@ require_relative 'spreadsheet_loader/xls_loader'
13
13
 
14
14
  module RgGen
15
15
  module SpreadsheetLoader
16
- def self.default_setup(builder)
17
- builder.register_loader(:register_map, CSVLoader)
18
- builder.register_loader(:register_map, RooLoader)
19
- builder.register_loader(:register_map, XLSLoader)
16
+ extend Core::Plugin
17
+
18
+ setup_plugin :'rggen-spreadsheet-loader' do |plugin|
19
+ plugin.register_loader :register_map, :spreadsheet, CSVLoader
20
+ plugin.register_loader :register_map, :spreadsheet, RooLoader
21
+ plugin.register_loader :register_map, :spreadsheet, XLSLoader
20
22
  end
21
23
  end
22
24
  end
@@ -5,7 +5,7 @@ module RgGen
5
5
  class CSVLoader < Core::RegisterMap::Loader
6
6
  include SpreadsheetLoader
7
7
 
8
- support_types [:csv]
8
+ support_types [:csv, :tsv]
9
9
 
10
10
  def read_spreadsheet(file, book)
11
11
  sheet = read_csv(file)
@@ -17,7 +17,12 @@ module RgGen
17
17
 
18
18
  def read_csv(file)
19
19
  require 'csv'
20
- CSV.read(file)
20
+ CSV.read(file, col_sep: separator(file))
21
+ end
22
+
23
+ def separator(file)
24
+ ext = File.extname(file)
25
+ ext.casecmp?('.tsv') && "\t" || ','
21
26
  end
22
27
  end
23
28
  end
@@ -8,19 +8,22 @@ module RgGen
8
8
  support_types [:xlsx, :ods]
9
9
 
10
10
  def read_spreadsheet(file, book)
11
- read_roo(file) do |pagename, page|
12
- book.add_sheet(pagename, collect_cells(page))
13
- end
11
+ read_roo(file, &page_processor(book))
14
12
  end
15
13
 
16
14
  private
17
15
 
18
- def read_roo(file)
16
+ def read_roo(file, &block)
19
17
  require 'roo'
20
18
  Roo::Spreadsheet.open(file, extension: File.extname(file))
21
- .each_with_pagename do |pagename, page|
22
- page.first_row && yield(pagename, page)
23
- end
19
+ .each_with_pagename(&block)
20
+ end
21
+
22
+ def page_processor(book)
23
+ lambda do |pagename_and_page|
24
+ pagename, page = pagename_and_page
25
+ page.first_row && book.add_sheet(pagename, collect_cells(page))
26
+ end
24
27
  end
25
28
 
26
29
  def collect_cells(page)
@@ -1,4 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rggen/spreadsheet_loader'
4
- RgGen.setup :'rggen-spreadsheet-loader', RgGen::SpreadsheetLoader
4
+
5
+ RgGen.register_plugin RgGen::SpreadsheetLoader do |builder|
6
+ builder.ignore_value :register_map, :spreadsheet, :register_block, :comment
7
+ builder.ignore_value :register_map, :spreadsheet, :register, :comment
8
+ end
@@ -9,72 +9,72 @@ 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 process_sheet(sheet)
19
- register_block = parse_register_block(sheet)
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
+ return if layer == :root
16
+ collect_layer_data(read_data, layer)
24
17
  end
25
18
 
26
- def parse_register_block(sheet)
27
- root.register_block do
28
- register_block_valid_values
29
- .zip(register_block_cells(sheet))
30
- .each { |value_name, cell| value(value_name, cell) }
31
- end
19
+ def collect_layer_data(read_data, layer)
20
+ values = valid_values(layer)
21
+ cells = __send__("#{layer}_cells", read_data)
22
+ values.zip(cells).to_h
32
23
  end
33
24
 
34
25
  def register_block_cells(sheet)
35
26
  start_row = register_block_start_position.row
36
27
  start_column = register_block_start_position.column
37
- Array.new(register_block_valid_values.size) do |i|
28
+ Array.new(valid_values(:register_block).size) do |i|
38
29
  sheet[start_row + i, start_column]
39
30
  end
40
31
  end
41
32
 
42
- def process_row(row, register_block)
43
- register =
44
- if row[register_start_position.column].empty_cell?
45
- register_block.children.last
46
- else
47
- parse_register(row, register_block)
48
- end
49
- parse_bit_field(row, register)
33
+ def register_cells(rows)
34
+ start_column = register_start_position.column
35
+ size = valid_values(:register).size
36
+ rows.first.cells(start_column, size)
50
37
  end
51
38
 
52
- def parse_register(row, register_block)
53
- register_block.register do
54
- register_valid_values
55
- .zip(register_cells(row))
56
- .each { |value_name, cell| value(value_name, cell) }
57
- end
39
+ def bit_field_cells(row)
40
+ start_column = bit_field_start_position.column
41
+ size = valid_values(:bit_field).size
42
+ row.cells(start_column, size)
58
43
  end
59
44
 
60
- def register_cells(row)
61
- start_column = register_start_position.column
62
- size = register_valid_values.size
63
- row.cells(start_column, size)
45
+ SUB_LAYERS = {
46
+ root: :register_block,
47
+ register_block: :register,
48
+ register: :bit_field
49
+ }.freeze
50
+
51
+ def format_sub_layer_data(read_data, layer, _file)
52
+ sub_layer = SUB_LAYERS[layer]
53
+ sub_layer && { sub_layer => __send__("collect_#{sub_layer}_data", read_data) }
64
54
  end
65
55
 
66
- def parse_bit_field(row, register)
67
- register.bit_field do
68
- bit_field_valid_values
69
- .zip(bit_field_cells(row))
70
- .each { |value_name, cell| value(value_name, cell) }
71
- end
56
+ def collect_register_block_data(book)
57
+ book.sheets
72
58
  end
73
59
 
74
- def bit_field_cells(row)
75
- start_column = bit_field_start_position.column
76
- size = bit_field_valid_values.size
77
- row.cells(start_column, size)
60
+ def collect_register_data(sheet)
61
+ sheet
62
+ .rows(register_start_position.row)
63
+ .reject { |row| row.cells.all?(&:empty_cell?) }
64
+ .each_with_object([], &method(:collect_register_rows))
65
+ end
66
+
67
+ def collect_register_rows(row, row_sets)
68
+ register_begin?(row) && (row_sets << [])
69
+ row_sets.last << row
70
+ end
71
+
72
+ def register_begin?(row)
73
+ !row[register_start_position.column].empty_cell?
74
+ end
75
+
76
+ def collect_bit_field_data(rows)
77
+ rows
78
78
  end
79
79
 
80
80
  def register_block_start_position
@@ -83,28 +83,16 @@ module RgGen
83
83
 
84
84
  def register_start_position
85
85
  @register_start_position ||=
86
- Position.new(register_block_valid_values.size + 2, 1)
86
+ Position.new(valid_values(:register_block).size + 2, 1)
87
87
  end
88
88
 
89
89
  def bit_field_start_position
90
90
  @bit_field_start_position ||=
91
- begin
92
- column =
93
- register_start_position.column + register_valid_values.size
94
- Position.new(0, column)
95
- end
96
- end
97
-
98
- def register_block_valid_values
99
- valid_value_lists[:register_block]
100
- end
101
-
102
- def register_valid_values
103
- valid_value_lists[:register]
91
+ Position.new(0, bit_field_start_column)
104
92
  end
105
93
 
106
- def bit_field_valid_values
107
- valid_value_lists[:bit_field]
94
+ def bit_field_start_column
95
+ register_start_position.column + valid_values(:register).size
108
96
  end
109
97
  end
110
98
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SpreadsheetLoader
5
- VERSION = '0.16.0'
5
+ VERSION = '0.20.0'
6
6
  end
7
7
  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.16.0
4
+ version: 0.20.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: 2020-07-06 00:00:00.000000000 Z
11
+ date: 2021-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roo
@@ -90,15 +90,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
90
  requirements:
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: '2.4'
93
+ version: '2.5'
94
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  requirements: []
100
- rubygems_version: 3.1.2
100
+ rubygems_version: 3.2.3
101
101
  signing_key:
102
102
  specification_version: 4
103
- summary: rggen-spreadsheet-loader-0.16.0
103
+ summary: rggen-spreadsheet-loader-0.20.0
104
104
  test_files: []