metadown 1.0.1 → 1.1.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -23,6 +23,9 @@ at the head of your file:
23
23
  Woudn't that be neat to use on other projects? I thought so too! Hence,
24
24
  metadown.
25
25
 
26
+ Furthermore, you don't have to have just markdown. Inject any kind of
27
+ parser you'd like!
28
+
26
29
  ## Installation
27
30
 
28
31
  Add this line to your application's Gemfile:
@@ -60,6 +63,17 @@ back with two attributes: output and metadata.
60
63
  data.output #=> "<p>hello, world</p>\n"
61
64
  data.metadata #=> {"key" => "value"}
62
65
 
66
+ If you don't want to use Markdown, I assume you're using a Tilt
67
+ template of some kind:
68
+
69
+ require 'metadown'
70
+ require 'erb'
71
+ require 'tilt'
72
+
73
+ data = Metadown.render("<h1><%= 'Hi' %></h1>", Tilt::ERBTemplate)
74
+ data.output #=> "<h1>Hi</h1>"
75
+ data.metadata #=> "{}"
76
+
63
77
  ## Contributing
64
78
 
65
79
  1. Fork it
@@ -1,4 +1,5 @@
1
1
  require "metadown/renderer"
2
+ require "metadown/metadata_parser"
2
3
  require "metadown/version"
3
4
 
4
5
  # This module namespaces everything in the gem. It's also where the factory
@@ -11,13 +12,26 @@ module Metadown
11
12
  # output.
12
13
  Data = Struct.new(:metadata, :output)
13
14
 
14
- # The render method is a convenient factory. It parses some text via our
15
- # Renderer class and Redcarpet's own class, and gives us a Data back.
16
- def render(text)
17
- renderer = Metadown::Renderer.new
15
+ # The render method is a convenient factory. If we give it text, it
16
+ # delegates to the classic markdown renderer, otherwise, we can inject
17
+ # one of our own.
18
+ def render(text, renderer=nil)
19
+ return redcarpet_render(text) if renderer.nil?
20
+
21
+ metadata = MetadataParser.new(text).parse
22
+
23
+ Data.new(metadata, renderer.new { text }.render)
24
+ end
25
+ module_function :render
26
+
27
+ # Classic compatiblity mode: fall back to old redcarpet renderer
28
+ def redcarpet_render(text)
29
+ renderer = Renderer.new
18
30
  markdown = Redcarpet::Markdown.new(renderer)
31
+
19
32
  output = markdown.render(text)
33
+
20
34
  Data.new(renderer.metadata, output)
21
35
  end
22
- module_function :render
36
+ module_function :redcarpet_render
23
37
  end
@@ -0,0 +1,13 @@
1
+ module Metadown
2
+ class MetadataParser
3
+ def initialize(text)
4
+ @text = text
5
+ @metadata = {}
6
+ end
7
+
8
+ def parse
9
+ @text =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
10
+ @mtext = YAML.load($1) if $1
11
+ end
12
+ end
13
+ end
@@ -1,4 +1,4 @@
1
1
  module Metadown
2
2
  # The current released version of Metadown
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0.beta"
4
4
  end
@@ -2,18 +2,30 @@ $:.unshift("lib")
2
2
  require 'metadown'
3
3
 
4
4
  describe Metadown do
5
- it "provides a factory" do
5
+ let(:text) do
6
6
  text = <<-MARKDOWN
7
7
  ---
8
8
  key: "value"
9
9
  ---
10
10
  hello world
11
11
  MARKDOWN
12
+ end
12
13
 
14
+ it "provides a factory" do
13
15
  Metadown.render(text).tap do |data|
14
16
  data.should be_kind_of(Metadown::Data)
15
17
  data.metadata.should eql({"key" => "value"})
16
18
  data.output.should eql("<p>hello world</p>\n")
17
19
  end
18
20
  end
21
+
22
+ it "allows you to inject a parser" do
23
+ parser = stub(:new => stub(:render => "wat"))
24
+
25
+ Metadown.render(text, parser).tap do |data|
26
+ data.should be_kind_of(Metadown::Data)
27
+ data.metadata.should eql({"key" => "value"})
28
+ data.output.should eql("wat")
29
+ end
30
+ end
19
31
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metadown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.1.0.beta
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Steve Klabnik
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-23 00:00:00.000000000 Z
12
+ date: 2012-01-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redcarpet
16
- requirement: &2152515300 !ruby/object:Gem::Requirement
16
+ requirement: &2156246880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152515300
24
+ version_requirements: *2156246880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2152514460 !ruby/object:Gem::Requirement
27
+ requirement: &2156246380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152514460
35
+ version_requirements: *2156246380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &2152514020 !ruby/object:Gem::Requirement
38
+ requirement: &2156245820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152514020
46
+ version_requirements: *2156245820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard
49
- requirement: &2152513500 !ruby/object:Gem::Requirement
49
+ requirement: &2156245360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152513500
57
+ version_requirements: *2156245360
58
58
  description: This gem gives you a custom markdown parser that allows you to prefix
59
59
  the markdown itself with YAML metadata.
60
60
  email:
@@ -72,6 +72,7 @@ files:
72
72
  - README.md
73
73
  - Rakefile
74
74
  - lib/metadown.rb
75
+ - lib/metadown/metadata_parser.rb
75
76
  - lib/metadown/renderer.rb
76
77
  - lib/metadown/version.rb
77
78
  - metadown.gemspec
@@ -92,9 +93,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
93
  required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  none: false
94
95
  requirements:
95
- - - ! '>='
96
+ - - ! '>'
96
97
  - !ruby/object:Gem::Version
97
- version: '0'
98
+ version: 1.3.1
98
99
  requirements: []
99
100
  rubyforge_project:
100
101
  rubygems_version: 1.8.10