Class: MarkdownRails::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/markdown-rails/handler.rb

Overview

We cannot use MarkdownRails because it conflicts with RDiscount’s Markdown class

Constant Summary collapse

DEFAULT_EXTENSION =
:md
@@handlers =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(extension, &block) ⇒ Handler

Returns a new instance of Handler.



7
8
9
10
11
# File 'lib/markdown-rails/handler.rb', line 7

def initialize(extension, &block)
  @extension = extension
  @markdown = block
  @@handlers[@extension] = self
end

Class Method Details

.handle(*extensions, &block) ⇒ Object



34
35
36
37
38
39
# File 'lib/markdown-rails/handler.rb', line 34

def self.handle(*extensions, &block)
  Array(extensions).each do |extension|
    handler = new(extension, &block)
    ActionView::Template.register_template_handler extension, handler
  end
end

.handler_for(extension) ⇒ Object



30
31
32
# File 'lib/markdown-rails/handler.rb', line 30

def self.handler_for(extension)
  @@handlers[extension]
end

.register_defaultObject

Registers a default ‘.md` handler for Rails templates. This might be replaced by a handler in the `config/initializers/markdown.rb` file.



43
44
45
# File 'lib/markdown-rails/handler.rb', line 43

def self.register_default
  handle(DEFAULT_EXTENSION) { MarkdownRails::Renderer::Rails.new }
end

Instance Method Details

#call(template, source = template.source) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/markdown-rails/handler.rb', line 13

def call(template, source = template.source)
  # Generate code that fetches the handler and calls the block at render time
  extension = @extension
  "    begin\n      handler = MarkdownRails::Handler.handler_for(\#{extension.inspect})\n      renderer = handler.create_renderer\n      renderer.view_context = self\n      renderer.renderer.render(\#{source.inspect}).html_safe\n    end\n  RUBY\nend\n"

#create_rendererObject



26
27
28
# File 'lib/markdown-rails/handler.rb', line 26

def create_renderer
  @markdown.call
end