Sha256: 26ccfa8308e88f22797e3ca381ef96bac9a63fdd25ed818fefe9e0cf6e7d1570

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

require "ostruct"

module Hyde
  module Renderer
    class Base
      # Reference to {Page}
      attr_reader :page

      # The filename of the file to be parsed
      attr_reader :filename

      def initialize(page, filename)
        @page = page
        @filename = filename
      end

      def render( data = {} )
        ""
      end
    end

    # Any filetype that is split with the -- separator
    class Parsable < Base
      @markup = ""

      def initialize(page, filename)
        super page, filename
        
        # Parse out the file's metadata and markup contents
        parts = get_file_parts filename, :max_parts => 2
        if parts.length == 1
          # If it doesn't come with a header, assume the whole file is the data
          @markup = parts[0]
        else
          @markup = parts[1]
          page.set_meta YAML::load("--- " + parts[0])
        end
      end

      protected
      def get_file_parts(filename, *args)
        options = { :max_parts => -1 }
        args.each_pair { |k, v| options[k] = v } if args.is_a? Hash

        data = [""]
        i = 0    # Current part number
        File.open(filename, "r").each_line do |line|
          if ((line.strip == "--") and
              ((i <= options[:max_parts]) or (options[:max_parts] == -1)))
            data[i+=1] = ""
          else
            data[i] << line
          end
        end
        data
      end
    end

    class Passthru < Base
      def render( data = {} )
        data = ""
        File.open(@page.filename, "r").each_line { |line| data << line }
        data
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hydeweb-0.0.1.pre3 lib/hyde/renderer.rb
hydeweb-0.0.1.pre2 lib/hyde/renderer.rb