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