Skip to content

Commit

Permalink
change row/column index (#54, rggen/rggen#210)
Browse files Browse the repository at this point in the history
  • Loading branch information
taichi-ishitani authored Jun 7, 2024
1 parent 617730f commit a239a2e
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 38 deletions.
24 changes: 20 additions & 4 deletions lib/rggen/spreadsheet_loader/spreadsheet/position.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,27 @@
module RgGen
module SpreadsheetLoader
module Spreadsheet
Position = Struct.new(:file, :sheet, :row, :column) do
class Position
def initialize(file, sheet, row, column)
@file = file
@sheet = sheet
@row = row
@column = column
end

attr_reader :file
attr_reader :sheet

def row
@row + 1
end

def column
@column.times.inject('A') { |l, _| l.next }
end

def to_s
to_h
.map { |field, value| "#{field}: #{value}" }
.join(' ')
"file: #{file} sheet: #{sheet} row: #{row} column: #{column}"
end
end
end
Expand Down
5 changes: 2 additions & 3 deletions spec/rggen/spreadsheet_loader/spreadsheet/book_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ def flat_table(table)
end

def match_cell(value, sheet, row, column)
position = RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet, row, column)
if value.nil?
be_empty_cell(position)
be_empty_cell(match_cell_position(file, sheet, row, column))
else
match_value(value, position)
match_value(value, match_cell_position(file, sheet, row, column))
end
end

Expand Down
2 changes: 1 addition & 1 deletion spec/rggen/spreadsheet_loader/spreadsheet/row_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
let(:row_index) { (0..10).to_a.sample }

def cell_position(column_index)
RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet_name, row_index, column_index)
match_cell_position(file, sheet_name, row_index, column_index)
end

describe '#[]=' do
Expand Down
2 changes: 1 addition & 1 deletion spec/rggen/spreadsheet_loader/spreadsheet/sheet_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def cell_value(row, column)
end

def cell_position(row, column)
RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet_name, row, column)
match_cell_position(file, sheet_name, row, column)
end

describe '#from_table' do
Expand Down
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

require 'bundler/setup'
require 'rggen/devtools/spec_helper'
require 'support/helper_methods'
require 'support/custom_matchers'
require 'support/shared_contexts'

Expand All @@ -11,6 +12,7 @@
RgGen.builder(builder)

RSpec.configure do |config|
config.include RgGen::SpreadsheetLoader::HelperMethods
RgGen::Devtools::SpecHelper.setup(config)
end

Expand Down
10 changes: 9 additions & 1 deletion spec/support/custom_matchers/be_empty_cell_matcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
RSpec::Matchers.define(:be_empty_cell) do |position = nil|
match do |actual|
return false unless actual.empty_cell?
return false if position && (actual.position != position)
return false unless match_position?(position, actual.position)
true
end

Expand All @@ -16,4 +16,12 @@
'expected cell to be empty but not'
end
end

private

def match_position?(expected_position, actual_position)
return true unless expected_position

values_match?(expected_position, actual_position)
end
end
16 changes: 16 additions & 0 deletions spec/support/helper_methods.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module RgGen
module SpreadsheetLoader
module HelperMethods
def match_cell_position(file, sheet, row, column)
be_instance_of(RgGen::SpreadsheetLoader::Spreadsheet::Position)
.and have_attributes(file: file, sheet: sheet, row: row + 1, column: column_letter(column))
end

def column_letter(column)
column.times.inject('A') { |l, _| l.next }
end
end
end
end
52 changes: 24 additions & 28 deletions spec/support/shared_contexts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,51 +29,47 @@

def match_with_sheet_0(file, sheet)
expect(register_blocks[0])
.to have_value(:register_block_foo, 'register_block_foo_0', cell_position(file, sheet, 0, 2))
.and have_value(:register_block_bar, 'register_block_bar_0', cell_position(file, sheet, 1, 2))
.to have_value(:register_block_foo, 'register_block_foo_0', match_cell_position(file, sheet, 0, 2))
.and have_value(:register_block_bar, 'register_block_bar_0', match_cell_position(file, sheet, 1, 2))

expect(registers[0])
.to have_value(:register_foo, 'register_foo_0_0', cell_position(file, sheet, 4, 1))
.and have_value(:register_bar, 'register_bar_0_0', cell_position(file, sheet, 4, 2))
.to have_value(:register_foo, 'register_foo_0_0', match_cell_position(file, sheet, 4, 1))
.and have_value(:register_bar, 'register_bar_0_0', match_cell_position(file, sheet, 4, 2))
expect(registers[1])
.to have_value(:register_foo, 'register_foo_0_1', cell_position(file, sheet, 6, 1))
.and have_value(:register_bar, 'register_bar_0_1', cell_position(file, sheet, 6, 2))
.to have_value(:register_foo, 'register_foo_0_1', match_cell_position(file, sheet, 6, 1))
.and have_value(:register_bar, 'register_bar_0_1', match_cell_position(file, sheet, 6, 2))

expect(bit_fields[0])
.to have_value(:bit_field_foo, 'bit_field_foo_0_0_0', cell_position(file, sheet, 4, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_0_0', cell_position(file, sheet, 4, 4))
.to have_value(:bit_field_foo, 'bit_field_foo_0_0_0', match_cell_position(file, sheet, 4, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_0_0', match_cell_position(file, sheet, 4, 4))
expect(bit_fields[1])
.to have_value(:bit_field_foo, 'bit_field_foo_0_0_1', cell_position(file, sheet, 5, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_0_1', cell_position(file, sheet, 5, 4))
.to have_value(:bit_field_foo, 'bit_field_foo_0_0_1', match_cell_position(file, sheet, 5, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_0_1', match_cell_position(file, sheet, 5, 4))
expect(bit_fields[2])
.to have_value(:bit_field_foo, 'bit_field_foo_0_1_0', cell_position(file, sheet, 6, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_1_0', cell_position(file, sheet, 6, 4))
.to have_value(:bit_field_foo, 'bit_field_foo_0_1_0', match_cell_position(file, sheet, 6, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_0_1_0', match_cell_position(file, sheet, 6, 4))
end

def match_with_sheet_1(file, sheet)
expect(register_blocks[1])
.to have_value(:register_block_foo, 'register_block_foo_1', cell_position(file, sheet, 0, 2))
.and have_value(:register_block_bar, 'register_block_bar_1', cell_position(file, sheet, 1, 2))
.to have_value(:register_block_foo, 'register_block_foo_1', match_cell_position(file, sheet, 0, 2))
.and have_value(:register_block_bar, 'register_block_bar_1', match_cell_position(file, sheet, 1, 2))

expect(registers[2])
.to have_value(:register_foo, 'register_foo_1_0', cell_position(file, sheet, 4, 1))
.and have_value(:register_bar, 'register_bar_1_0', cell_position(file, sheet, 4, 2))
.to have_value(:register_foo, 'register_foo_1_0', match_cell_position(file, sheet, 4, 1))
.and have_value(:register_bar, 'register_bar_1_0', match_cell_position(file, sheet, 4, 2))
expect(registers[3])
.to have_value(:register_foo, 'register_foo_1_1', cell_position(file, sheet, 6, 1))
.and have_value(:register_bar, 'register_bar_1_1', cell_position(file, sheet, 6, 2))
.to have_value(:register_foo, 'register_foo_1_1', match_cell_position(file, sheet, 6, 1))
.and have_value(:register_bar, 'register_bar_1_1', match_cell_position(file, sheet, 6, 2))

expect(bit_fields[3])
.to have_value(:bit_field_foo, 'bit_field_foo_1_0_0', cell_position(file, sheet, 4, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_0_0', cell_position(file, sheet, 4, 4))
.to have_value(:bit_field_foo, 'bit_field_foo_1_0_0', match_cell_position(file, sheet, 4, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_0_0', match_cell_position(file, sheet, 4, 4))
expect(bit_fields[4])
.to have_value(:bit_field_foo, 'bit_field_foo_1_1_0', cell_position(file, sheet, 6, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_1_0', cell_position(file, sheet, 6, 4))
.to have_value(:bit_field_foo, 'bit_field_foo_1_1_0', match_cell_position(file, sheet, 6, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_1_0', match_cell_position(file, sheet, 6, 4))
expect(bit_fields[5])
.to have_value(:bit_field_foo, 'bit_field_foo_1_1_1', cell_position(file, sheet, 7, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_1_1', cell_position(file, sheet, 7, 4))
end

def cell_position(file, sheet, row, column)
RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet, row, column)
.to have_value(:bit_field_foo, 'bit_field_foo_1_1_1', match_cell_position(file, sheet, 7, 3))
.and have_value(:bit_field_bar, 'bit_field_bar_1_1_1', match_cell_position(file, sheet, 7, 4))
end
end

0 comments on commit a239a2e

Please sign in to comment.