Sha256: 891d18d2b96d174de32e86b38f25f74e73f3c6329008fc0f49811a4a43bc6305

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

require 'front_matter_parser'

module WriteDown
  module Model
    # 基类, 定义了一些接口
    class Base

      attr_accessor :draft
      attr_accessor :created_at
      attr_accessor :link_to
      attr_accessor :content

      def initialize(source_file, target_file = nil)
        @source_file   = source_file
        @base_name     = source_file.split("/").last.split(".").first
        @ext_name      = source_file.split("/").last.split(".").last
        meta_file      = File.join("source", "meta", "#{@base_name}.json")
        @meta          = File.exist?(meta_file) ? JSON.parse(File.open(meta_file).read) : read_from_head
        @draft         = @meta['draft'].to_s == "true" ? true : false
        @created_at    = @meta['date'] || File.open(@source_file).ctime #.iso8610
        @content       = File.open(@source_file).read
        if target_file
          @target_file = target_file
        elsif @base_name.end_with?"index"
          @target_file = "dist/#{@base_name}.html"
        else
          @target_file = "dist/#{@base_name}/index.html"
        end
        @link_to       = @target_file.gsub("index.html", "")
      end

      def converter
        if @ext_name == "md" || @ext_name == "markdown"
          return WriteDown::Converter::Markdown
        end
        if @ext_name == "org"
          return WriteDown::Converter::Org
        end
      end

      def body
        # binding.pry
        converter.new(self).render
      end

      # 接口 render
      # 用于找到自己的 erb 然后生成 html 字符串
      def render
        raise "Not impl..."
      end

      # 接口 build
      # 用于把自己序列化到磁盘上
      def build
        raise "Not impl..."
      end

      def read_from_head
        FrontMatterParser.parse_file(@source_file).front_matter
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
write_down-0.2.0 lib/write_down/model/base.rb