bashaus/gbtiles

View on GitHub
lib/gbtiles/gbt/export/asm/asm.rb

Summary

Maintainability
A
45 mins
Test Coverage
require "gbtiles/gbt/export/asm/converter"
require "erb"

module GBTiles
  module GBT
    module Export
      module ASM
        class ASM
          include ERB::Util

          attr_accessor :bank
          attr_accessor :label
          attr_accessor :mod_data
          attr_accessor :converter

          def initialize
            @converter = GBTiles::GBT::Export::ASM::Converter.new
          end

          def prerender
            if !@bank.is_a? Numeric then
              raise "Bank must be numeric"
            end

            if @mod_data.nil? then
              raise "Missing required mod data"
            end

            @label ||= mod_data.name
          end

          def render_s
            prerender

            template = File.open(File.join(__dir__, "asm.s.erb"), "r").read

            ERB.new(template, nil, "-").result(binding)
          end

          def render_h
            prerender

            template = File.open(File.join(__dir__, "asm.h.erb"), "r").read

            ERB.new(template, nil, "-").result(binding)
          end

          def write output_stream
            output_stream.write(render_s)

            if output_stream.is_a? File then
              header_filename = "#{File.basename(output_stream.path, ".s")}.h"
              header_path = "#{File.dirname(File.expand_path(output_stream.path))}/#{header_filename}"
              header_stream = File.open(header_path, "w")
              header_stream.write(render_h)
              header_stream.close
            end
          end
        end
      end
    end
  end
end