Sha256: 62cf8dcfa015ad3d597196244907a1f47907899cfb424cbb8bcff8e3c84dbc71

Contents?: true

Size: 1.86 KB

Versions: 2

Compression:

Stored size: 1.86 KB

Contents

require 'redcarpet'

module MongoidMarkdownExtension
  class Markdown < String

    def initialize str
      super str.to_s
      @str = str.to_s
    end

    def to_s
      @str
    end

    def to_html
      markdown_renderer.render(@str).html_safe
    end

    def to_inline_html
      markdown_inline_renderer.render(@str).html_safe
    end

    def mongoize
      @str
    end

    private # =============================================================

    def markdown_renderer
      Redcarpet::Markdown.new(
        Redcarpet::Render::HTML.new(self.class.configuration.render_options),
        self.class.configuration.extensions
      )
    end

    def markdown_inline_renderer
      Redcarpet::Markdown.new(InlineRenderer, tables: false)
    end

    # ---------------------------------------------------------------------

    class << self

      attr_accessor :configuration

      def configure
        @configuration ||= Configuration.new
        yield @configuration
      end

      def configuration
        @configuration ||= Configuration.new
      end

      def demongoize value
        Markdown.new(value)
      end

      def mongoize value
        case value
        when Markdown then value.mongoize
        else value
        end
      end

      def evolve value
        case value
        when Markdown then value.mongoize
        else value
        end
      end

    end
  end

  # ---------------------------------------------------------------------

  class Configuration
    attr_accessor :extensions
    attr_accessor :render_options

    def initialize
      @extensions = {
        autolink: true,
        footnotes: true,
        highlight: true,
        space_after_headers: true,
        strikethrough: true,
        superscript: true
      }
      @render_options = {}
    end
  end

  # ---------------------------------------------------------------------
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mongoid_markdown_extension-0.1.0 lib/mongoid_markdown_extension/markdown.rb
mongoid_markdown_extension-0.0.2 lib/mongoid_markdown_extension/markdown.rb