class RBS::Template - rbs: Ruby Standard Library Documentation

# class RBS::Template

### Public Class Methods

render(out_file) click to toggle source

    # File rbs-3.8.0/templates/template.rb, line 61
          def render(out_file)
            filepath = "templates/#{out_file}.erb"
            template = File.expand_path("../#{filepath}", __dir__)

            erb = read_template(template)
            extension = File.extname(filepath.gsub(".erb", ""))

            heading = <<~HEADING
              /*----------------------------------------------------------------------------*/
              /* This file is generated by the templates/template.rb script and should not  */
              /* be modified manually.                                                      */
              /* To change the template see                                                 */
              /* #{filepath + " " * (74 - filepath.size) } */
              /*----------------------------------------------------------------------------*/
            HEADING

            write_to = File.expand_path("../#{out_file}", __dir__)
            contents = heading + "\n" + erb.result_with_hash(locals)

            if (extension == ".c" || extension == ".h") && !contents.ascii_only?
              # Enforce that we only have ASCII characters here. This is necessary
              # for non-UTF-8 locales that only allow ASCII characters in C source
              # files.
              contents.each_line.with_index(1) do |line, line_number|
                raise "Non-ASCII character on line #{line_number} of #{write_to}" unless line.ascii_only?
              end
            end

            FileUtils.mkdir_p(File.dirname(write_to))
            File.write(write_to, contents)
          end

### Private Class Methods

erb(template) click to toggle source

    # File rbs-3.8.0/templates/template.rb, line 102
    def erb(template)
      ERB.new(template, trim_mode: "-")
    end

locals() click to toggle source

    # File rbs-3.8.0/templates/template.rb, line 106
    def locals
      config = YAML.load_file(File.expand_path("../config.yml", __dir__))
      {
        nodes: config.fetch("nodes").map { |node| Type.new(node) }.sort_by(&:ruby_full_name),
      }
    end

read_template(filepath) click to toggle source

    # File rbs-3.8.0/templates/template.rb, line 95
    def read_template(filepath)
      template = File.read(filepath, encoding: Encoding::UTF_8)
      erb = erb(template)
      erb.filename = filepath
      erb
    end