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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c77024dc6d24098565e522967f52f27fc66932dc789c7cdd17a74a5e2fe06440
4
- data.tar.gz: e218f0064faaeadfa78e62be7b9ea806fe587db86fddc2b489b5d3feb4828a23
3
+ metadata.gz: 1a5c038c878bdee2d0369695504d66c0773c5778ca6ba27ad20960c525f0ef32
4
+ data.tar.gz: 698efcc2c97a0603b7212e35eef134a1526485bd77383bfc27a490f44a21eb87
5
5
  SHA512:
6
- metadata.gz: 40e0eb3682a2550a05e2c88c447879da8a0664530db4b87d0b97d92d3789ffea2cee951fa006436997a1275cf835badd94754aa4ff8b49d12027efba33ab30be
7
- data.tar.gz: f7a8e57b3d5873099aef7fd229788533a49376970c5cdedc070d71a404ca39f98e757b15ae9227ba0b1f92ae9ffc360fcc0f6111f9da732396969773ff26bac6
6
+ metadata.gz: 8df01bd76a566ccbbdbcd4e8efab23f20d3f7f64d8908d0cd7bbdcd6c0fe8f4aa1f4ffa1d6cc935d9843f5efaf813275e6af1f9141d188c607a19dc18490c81a
7
+ data.tar.gz: c806612b266d7a64e432490f96c5c9468e9d3739ae286728402e60822e82ce1b3f5cfcba4ec73d07c05b3e07490ccb49678a73c5fde86295b5f83576e4612f08
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019 Taichi Ishitani
3
+ Copyright (c) 2019-2020 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
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/rggen-spreadsheet-loader.svg)](https://badge.fury.io/rb/rggen-spreadsheet-loader)
2
- [![Build Status](https://travis-ci.com/rggen/rggen-spreadsheet-loader.svg?branch=master)](https://travis-ci.com/rggen/rggen-spreadsheet-loader)
2
+ [![CI](https://github.com/rggen/rggen-spreadsheet-loader/workflows/CI/badge.svg)](https://github.com/rggen/rggen-spreadsheet-loader/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/7a4090f4a7c21d29036c/maintainability)](https://codeclimate.com/github/rggen/rggen-spreadsheet-loader/maintainability)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-spreadsheet-loader/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-spreadsheet-loader)
5
5
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=rggen_rggen-spreadsheet-loader&metric=alert_status)](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, RooLoader)
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, :xls, :ods, :csv]
8
+ support_types [:xlsx, :ods]
9
9
 
10
10
  def read_spreadsheet(file, book)
11
- Roo::Spreadsheet.open(file).each_with_pagename do |pagename, page|
12
- page.first_row && book.add_sheet(pagename, collect_cells(page))
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 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
+ layer != :root ? collect_layer_data(read_data, layer) : nil
24
16
  end
25
17
 
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
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(register_block_valid_values.size) do |i|
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 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)
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 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
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
- def register_cells(row)
61
- start_column = register_start_position.column
62
- size = register_valid_values.size
63
- row.cells(start_column, size)
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 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
55
+ def collect_register_block_data(book)
56
+ book.sheets
72
57
  end
73
58
 
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)
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(register_block_valid_values.size + 2, 1)
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 + register_valid_values.size
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SpreadsheetLoader
5
- VERSION = '0.13.0'
5
+ VERSION = '0.17.0'
6
6
  end
7
7
  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.13.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: 2019-08-28 00:00:00.000000000 Z
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: roo-xls
28
+ name: spreadsheet
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.2'
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: '1.2'
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.3'
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.0.3
100
+ rubygems_version: 3.1.2
99
101
  signing_key:
100
102
  specification_version: 4
101
- summary: rggen-spreadsheet-loader-0.13.0
103
+ summary: rggen-spreadsheet-loader-0.17.0
102
104
  test_files: []