rggen-spreadsheet-loader 0.16.0 → 0.20.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: 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: []