taichi-ishitani/rggen

View on GitHub
lib/rggen/core_components/register_map/register_block_factory.rb

Summary

Maintainability
A
25 mins
Test Coverage
module RgGen
  module RegisterMap
    class RegisterBlockFactory < ComponentFactory
      def create_active_items(register_block, sheet)
        active_item_factories.each_value.with_index do |factory, index|
          cell  = sheet[index, 2]
          create_item(factory, register_block, cell)
        end
      end

      def create_children(register_block, configuration, sheet)
        cell_blocks(sheet).each do |block|
          create_child(register_block, configuration, block)
        end
      end

      def cell_blocks(sheet)
        drop_row_size     = active_item_factories.size + 2
        drop_column_size  = 1
        sheet.rows.drop(drop_row_size).each_with_object([]) do |row, blocks|
          valid_cells = row.drop(drop_column_size)
          next if valid_cells.all?(&:empty?)
          blocks      << [] unless valid_cells.first.empty?
          blocks.last << valid_cells
        end
      end
    end
  end
end