rggen-spreadsheet-loader 0.15.1 → 0.19.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: 7b1603acefd8a9ca6048b41152da67046cd9107378cadef93918f53957ea5306
4
- data.tar.gz: 7789dca828cfb3ba59aee1b009fd774799994aade28b70d391ef942c7027c088
3
+ metadata.gz: 9a9e3cd2d0e9852524f09edcecf3d62cab2a6b496f4f59571052cb0c7b879aba
4
+ data.tar.gz: 491fb225fd336ccc3640d1359849fe0383850e1d94b0a70502dbccdec111191d
5
5
  SHA512:
6
- metadata.gz: 7e83ece7dd05d0d827c3070a85255af2cf873a4c841b801599ad1a21d00d22d14ca72cce0b5fafb60e86d7aa8898ddf9add2dbd062a483c9e2755b65ac98f472
7
- data.tar.gz: d3aa50a6640fa53dad732f00f9ed56663f25cd378155e768bc137fc20094906e7f778e802ce26d9062fca8776d9c5f5a8f4d08fa77304323f6d3d9aaf38be803
6
+ metadata.gz: 88dd693a44503622b944dc5ddead75f8c1845ba48ab8dd9c7e1ff2d69096f6e491ae6dbb67ad0f96015e9dcdbc8dfd04761ced92a289cff893f13fbbad04dc91
7
+ data.tar.gz: e1544ef459e4f3dc3a4ade4e8d5396b66d9be1f4eaac30adaf77e0330c9bd08567ed8ae520712e77c77edd2831aaafb06665ece1f94dc5a7f8cd475df20bfe5a
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
@@ -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,71 @@ 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
- register_map.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.rows(register_start_position.row)
62
+ .reject { |row| row.cells.all?(&:empty_cell?) }
63
+ .each_with_object([], &method(:collect_register_rows))
64
+ end
65
+
66
+ def collect_register_rows(row, row_sets)
67
+ register_begin?(row) && (row_sets << [])
68
+ row_sets.last << row
69
+ end
70
+
71
+ def register_begin?(row)
72
+ !row[register_start_position.column].empty_cell?
73
+ end
74
+
75
+ def collect_bit_field_data(rows)
76
+ rows
78
77
  end
79
78
 
80
79
  def register_block_start_position
@@ -83,28 +82,16 @@ module RgGen
83
82
 
84
83
  def register_start_position
85
84
  @register_start_position ||=
86
- Position.new(register_block_valid_values.size + 2, 1)
85
+ Position.new(valid_values(:register_block).size + 2, 1)
87
86
  end
88
87
 
89
88
  def bit_field_start_position
90
89
  @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[1]
100
- end
101
-
102
- def register_valid_values
103
- valid_value_lists[2]
90
+ Position.new(0, bit_field_start_column)
104
91
  end
105
92
 
106
- def bit_field_valid_values
107
- valid_value_lists[3]
93
+ def bit_field_start_column
94
+ register_start_position.column + valid_values(:register).size
108
95
  end
109
96
  end
110
97
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SpreadsheetLoader
5
- VERSION = '0.15.1'
5
+ VERSION = '0.19.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.15.1
4
+ version: 0.19.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-02-17 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roo
@@ -97,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
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.15.1
103
+ summary: rggen-spreadsheet-loader-0.19.0
104
104
  test_files: []