sinatra-rdiscount 0.9.4.0

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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ pkg
2
+ *~
3
+ \#*
4
+ .\#*
5
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2009 Wlodek Bzyl
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,100 @@
1
+ # Sinatra RDiscount Extension for Sinatra v0.9.4
2
+
3
+ The *sinatra-rdiscount* extension provides `rdiscount` helper method
4
+ for rendering RDiscount templates.
5
+
6
+ To install it, run:
7
+
8
+ sudo gem install -v0.9.4.0 sinatra-rdiscount -s http://gemcutter.com
9
+
10
+ To test it, create a simple Sinatra application:
11
+
12
+ # app.rb
13
+ require 'rubygems'
14
+ require 'sinatra'
15
+
16
+ require 'sinatra/rdiscount'
17
+
18
+ get "/" do
19
+ rdiscount "# Hello RDiscount"
20
+ end
21
+
22
+ and run it with:
23
+
24
+ ruby app.rb
25
+
26
+ The result could be seen at *http://localhost:4567*.
27
+
28
+ Another example could be find in the *examples* directory. Run it with:
29
+
30
+ rackup -p 4567 config.ru
31
+
32
+
33
+ ## Template Languages (*update to The Sinatra Book*)
34
+
35
+ One important thing to remember is that you always have to reference
36
+ templates and layouts with **symbols**, even if they’re in a subdirectory,
37
+ for example `:'subdir/template'`.
38
+ Rendering methods will render any strings passed to them directly.
39
+
40
+
41
+ ### RDiscount Templates
42
+
43
+ The following gems are required to render RDiscount templates:
44
+ *rdiscount*, *erubis*.
45
+
46
+ This helper method:
47
+
48
+ get '/' do
49
+ rdiscount :index
50
+ end
51
+
52
+ renders template *./views/index.rdiscount*.
53
+
54
+ If a layout named *layout.rdiscount* exists, it will be used each time
55
+ a template is rendered.
56
+
57
+ You can disable layouts by passing `:layout => false`
58
+ to *rdiscount* helper. For example
59
+
60
+ get '/' do
61
+ rdiscount :index, :layout => false
62
+ end
63
+
64
+ You can set a different layout from the default one with:
65
+
66
+ get '/' do
67
+ rdiscount :index, :layout => :application
68
+ end
69
+
70
+ This renders *./views/index.rdiscount* template
71
+ within *./views/application.rdiscount* layout.
72
+
73
+
74
+ ## Important Info
75
+
76
+ Layouts are **RHTML** — not RDiscount — files.
77
+ Layout example:
78
+
79
+ <!DOCTYPE html>
80
+ <html>
81
+ <head>
82
+ <title><%= @title || "My Sinatra App" %></title>
83
+ </head>
84
+ <body>
85
+ <%= yield %>
86
+ </body>
87
+ </html>
88
+
89
+ Templates are **Markdown** files with ERB insertions delimited
90
+ by `'{% %}'`. Template example:
91
+
92
+ # Hello {%= @name %}
93
+
94
+ Such a change in embedded code pattern was necessary,
95
+ to avoid messing with RDiscount engine,
96
+ which converts bare `&lt;` to `&amp;lt;`.
97
+ Also I think that there is no way for RDiscount renderer
98
+ to generate that line:
99
+
100
+ <!DOCTYPE html>
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require "rake/clean"
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "sinatra-rdiscount"
9
+ gem.summary = "Sinatra extension providing RDiscount templates for Sinatra application."
10
+ gem.email = "matwb@univ.gda.pl"
11
+ gem.homepage = "http://github.com/wbzyl/sinatra-rdiscount"
12
+ gem.description = gem.summary
13
+ gem.authors = ["Wlodek Bzyl"]
14
+
15
+ gem.add_runtime_dependency 'sinatra', '=0.9.4'
16
+ gem.add_runtime_dependency 'erubis', '>=2.6.5'
17
+ gem.add_runtime_dependency 'rdiscount', '>=1.5.8'
18
+
19
+ gem.add_development_dependency 'rack', '>=1.1.0'
20
+ gem.add_development_dependency 'rack-test', '>=0.5.3'
21
+ end
22
+ Jeweler::GemcutterTasks.new
23
+ rescue LoadError
24
+ puts "Jeweler not available."
25
+ puts "Install it with:"
26
+ puts " sudo gem install jeweler"
27
+ end
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib' << 'test'
31
+ t.pattern = 'test/**/*_test.rb'
32
+ t.verbose = false
33
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 9
4
+ :patch: 4
5
+ :build: 0
data/examples/app.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ require 'sinatra/rdiscount'
5
+
6
+ get "/?" do
7
+ @name = "RDiscount"
8
+ rdiscount :hello, :layout => false
9
+ end
10
+
11
+ get "/2" do
12
+ @name = "RDiscount"
13
+ rdiscount :hello2, :layout => :layout2
14
+ end
@@ -0,0 +1,4 @@
1
+ # run i: rackup config.ru -p 4567
2
+
3
+ require 'app'
4
+ run Sinatra::Application
data/examples/mapp.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+
3
+ require 'rack'
4
+ require 'sinatra/base'
5
+
6
+ require 'sinatra/rdiscount'
7
+
8
+ class MApp < Sinatra::Base
9
+ helpers Sinatra::RDiscount
10
+
11
+ get '/?' do
12
+ rdiscount "## hello form modular app"
13
+ end
14
+ end
15
+
16
+ Rack::Handler::Thin.run MApp.new, :Port => 4567
@@ -0,0 +1,29 @@
1
+ html {
2
+ margin: 0;
3
+ padding: 0;
4
+ background-color: #0C7D85;
5
+ line-height: 1.6;
6
+ }
7
+
8
+ body {
9
+ margin: 1em auto 1em auto;
10
+ padding: 1em 2em 2em 1em;
11
+ width: 760px;
12
+ border: 1px solid black;
13
+ background-color: #E8DDCB;
14
+ }
15
+
16
+ pre {
17
+ padding: 0.5em 0 0.5em 2em;
18
+ background-color: #D7D3C1;
19
+ }
20
+
21
+ h1, h2, h3 {
22
+ color: #0C7D85;
23
+ }
24
+
25
+ /* rdiscount comments */
26
+
27
+ h6 {
28
+ display: none;
29
+ }
@@ -0,0 +1,4 @@
1
+ # Hello {%= @name %}
2
+
3
+ Try [http://localhost:4567/2](http://localhost:4567/2)
4
+ to get styled page with intro to *Markdown*.
@@ -0,0 +1,305 @@
1
+ ###### {% @title = "Sinatra is Awesome!" %}
2
+
3
+ Hello {%= @name %}: Markdown Basics
4
+ ===================================
5
+
6
+ <ul>
7
+ <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li>
8
+ <li><a class="selected" title="Markdown Basics">Basics</a></li>
9
+ <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li>
10
+ <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li>
11
+ <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li>
12
+ </ul>
13
+
14
+
15
+ Getting the Gist of Markdown's Formatting Syntax
16
+ ------------------------------------------------
17
+
18
+ This page offers a brief overview of what it's like to use Markdown.
19
+ The [syntax page] [s] provides complete, detailed documentation for
20
+ every feature, but Markdown should be very easy to pick up simply by
21
+ looking at a few examples of it in action. The examples on this page
22
+ are written in a before/after style, showing example syntax and the
23
+ HTML output produced by Markdown.
24
+
25
+ It's also helpful to simply try Markdown out; the [Dingus] [d] is a
26
+ web application that allows you type your own Markdown-formatted text
27
+ and translate it to XHTML.
28
+
29
+ [s]: /projects/markdown/syntax "Markdown Syntax"
30
+ [d]: /projects/markdown/dingus "Markdown Dingus"
31
+ [src]: /projects/markdown/basics.text
32
+
33
+
34
+ ## Paragraphs, Headers, Blockquotes ##
35
+
36
+ A paragraph is simply one or more consecutive lines of text, separated
37
+ by one or more blank lines. (A blank line is any line that looks like a
38
+ blank line -- a line containing nothing spaces or tabs is considered
39
+ blank.) Normal paragraphs should not be intended with spaces or tabs.
40
+
41
+ Markdown offers two styles of headers: *Setext* and *atx*.
42
+ Setext-style headers for `<h1>` and `<h2>` are created by
43
+ "underlining" with equal signs (`=`) and hyphens (`-`), respectively.
44
+ To create an atx-style header, you put 1-6 hash marks (`#`) at the
45
+ beginning of the line -- the number of hashes equals the resulting
46
+ HTML header level.
47
+
48
+ Blockquotes are indicated using email-style '`>`' angle brackets.
49
+
50
+ Markdown:
51
+
52
+ A First Level Header
53
+ ====================
54
+
55
+ A Second Level Header
56
+ ---------------------
57
+
58
+ Now is the time for all good men to come to
59
+ the aid of their country. This is just a
60
+ regular paragraph.
61
+
62
+ The quick brown fox jumped over the lazy
63
+ dog's back.
64
+
65
+ ### Header 3
66
+
67
+ > This is a blockquote.
68
+ >
69
+ > This is the second paragraph in the blockquote.
70
+ >
71
+ > ## This is an H2 in a blockquote
72
+
73
+
74
+ Output:
75
+
76
+ <h1>A First Level Header</h1>
77
+
78
+ <h2>A Second Level Header</h2>
79
+
80
+ <p>Now is the time for all good men to come to
81
+ the aid of their country. This is just a
82
+ regular paragraph.</p>
83
+
84
+ <p>The quick brown fox jumped over the lazy
85
+ dog's back.</p>
86
+
87
+ <h3>Header 3</h3>
88
+
89
+ <blockquote>
90
+ <p>This is a blockquote.</p>
91
+
92
+ <p>This is the second paragraph in the blockquote.</p>
93
+
94
+ <h2>This is an H2 in a blockquote</h2>
95
+ </blockquote>
96
+
97
+
98
+
99
+ ### Phrase Emphasis ###
100
+
101
+ Markdown uses asterisks and underscores to indicate spans of emphasis.
102
+
103
+ Markdown:
104
+
105
+ Some of these words *are emphasized*.
106
+ Some of these words _are emphasized also_.
107
+
108
+ Use two asterisks for **strong emphasis**.
109
+ Or, if you prefer, __use two underscores instead__.
110
+
111
+ Output:
112
+
113
+ <p>Some of these words <em>are emphasized</em>.
114
+ Some of these words <em>are emphasized also</em>.</p>
115
+
116
+ <p>Use two asterisks for <strong>strong emphasis</strong>.
117
+ Or, if you prefer, <strong>use two underscores instead</strong>.</p>
118
+
119
+
120
+
121
+ ## Lists ##
122
+
123
+ Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,
124
+ `+`, and `-`) as list markers. These three markers are
125
+ interchangable; this:
126
+
127
+ * Candy.
128
+ * Gum.
129
+ * Booze.
130
+
131
+ this:
132
+
133
+ + Candy.
134
+ + Gum.
135
+ + Booze.
136
+
137
+ and this:
138
+
139
+ - Candy.
140
+ - Gum.
141
+ - Booze.
142
+
143
+ all produce the same output:
144
+
145
+ <ul>
146
+ <li>Candy.</li>
147
+ <li>Gum.</li>
148
+ <li>Booze.</li>
149
+ </ul>
150
+
151
+ Ordered (numbered) lists use regular numbers, followed by periods, as
152
+ list markers:
153
+
154
+ 1. Red
155
+ 2. Green
156
+ 3. Blue
157
+
158
+ Output:
159
+
160
+ <ol>
161
+ <li>Red</li>
162
+ <li>Green</li>
163
+ <li>Blue</li>
164
+ </ol>
165
+
166
+ If you put blank lines between items, you'll get `<p>` tags for the
167
+ list item text. You can create multi-paragraph list items by indenting
168
+ the paragraphs by 4 spaces or 1 tab:
169
+
170
+ * A list item.
171
+
172
+ With multiple paragraphs.
173
+
174
+ * Another item in the list.
175
+
176
+ Output:
177
+
178
+ <ul>
179
+ <li><p>A list item.</p>
180
+ <p>With multiple paragraphs.</p></li>
181
+ <li><p>Another item in the list.</p></li>
182
+ </ul>
183
+
184
+
185
+
186
+ ### Links ###
187
+
188
+ Markdown supports two styles for creating links: *inline* and
189
+ *reference*. With both styles, you use square brackets to delimit the
190
+ text you want to turn into a link.
191
+
192
+ Inline-style links use parentheses immediately after the link text.
193
+ For example:
194
+
195
+ This is an [example link](http://example.com/).
196
+
197
+ Output:
198
+
199
+ <p>This is an <a href="http://example.com/">
200
+ example link</a>.</p>
201
+
202
+ Optionally, you may include a title attribute in the parentheses:
203
+
204
+ This is an [example link](http://example.com/ "With a Title").
205
+
206
+ Output:
207
+
208
+ <p>This is an <a href="http://example.com/" title="With a Title">
209
+ example link</a>.</p>
210
+
211
+ Reference-style links allow you to refer to your links by names, which
212
+ you define elsewhere in your document:
213
+
214
+ I get 10 times more traffic from [Google][1] than from
215
+ [Yahoo][2] or [MSN][3].
216
+
217
+ [1]: http://google.com/ "Google"
218
+ [2]: http://search.yahoo.com/ "Yahoo Search"
219
+ [3]: http://search.msn.com/ "MSN Search"
220
+
221
+ Output:
222
+
223
+ <p>I get 10 times more traffic from <a href="http://google.com/"
224
+ title="Google">Google</a> than from <a href="http://search.yahoo.com/"
225
+ title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
226
+ title="MSN Search">MSN</a>.</p>
227
+
228
+ The title attribute is optional. Link names may contain letters,
229
+ numbers and spaces, but are *not* case sensitive:
230
+
231
+ I start my morning with a cup of coffee and
232
+ [The New York Times][NY Times].
233
+
234
+ [ny times]: http://www.nytimes.com/
235
+
236
+ Output:
237
+
238
+ <p>I start my morning with a cup of coffee and
239
+ <a href="http://www.nytimes.com/">The New York Times</a>.</p>
240
+
241
+
242
+ ### Images ###
243
+
244
+ Image syntax is very much like link syntax.
245
+
246
+ Inline (titles are optional):
247
+
248
+ ![alt text](/path/to/img.jpg "Title")
249
+
250
+ Reference-style:
251
+
252
+ ![alt text][id]
253
+
254
+ [id]: /path/to/img.jpg "Title"
255
+
256
+ Both of the above examples produce the same output:
257
+
258
+ <img src="/path/to/img.jpg" alt="alt text" title="Title" />
259
+
260
+
261
+
262
+ ### Code ###
263
+
264
+ In a regular paragraph, you can create code span by wrapping text in
265
+ backtick quotes. Any ampersands (`&`) and angle brackets (`<` or
266
+ `>`) will automatically be translated into HTML entities. This makes
267
+ it easy to use Markdown to write about HTML example code:
268
+
269
+ I strongly recommend against using any `<blink>` tags.
270
+
271
+ I wish SmartyPants used named entities like `&mdash;`
272
+ instead of decimal-encoded entites like `&#8212;`.
273
+
274
+ Output:
275
+
276
+ <p>I strongly recommend against using any
277
+ <code>&lt;blink&gt;</code> tags.</p>
278
+
279
+ <p>I wish SmartyPants used named entities like
280
+ <code>&amp;mdash;</code> instead of decimal-encoded
281
+ entites like <code>&amp;#8212;</code>.</p>
282
+
283
+
284
+ To specify an entire block of pre-formatted code, indent every line of
285
+ the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`,
286
+ and `>` characters will be escaped automatically.
287
+
288
+ Markdown:
289
+
290
+ If you want your page to validate under XHTML 1.0 Strict,
291
+ you've got to put paragraph tags in your blockquotes:
292
+
293
+ <blockquote>
294
+ <p>For example.</p>
295
+ </blockquote>
296
+
297
+ Output:
298
+
299
+ <p>If you want your page to validate under XHTML 1.0 Strict,
300
+ you've got to put paragraph tags in your blockquotes:</p>
301
+
302
+ <pre><code>&lt;blockquote&gt;
303
+ &lt;p&gt;For example.&lt;/p&gt;
304
+ &lt;/blockquote&gt;
305
+ </code></pre>
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
5
+ <link rel="stylesheet" href="/stylesheets/application.css"
6
+ type="text/css" media="screen" charset="utf-8">
7
+ <title><%= @title || "My Sinatra App" %></title>
8
+ </head>
9
+
10
+ <body>
11
+
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
@@ -0,0 +1,33 @@
1
+ require 'erubis'
2
+ require 'rdiscount'
3
+
4
+ require 'sinatra/base'
5
+
6
+ module Sinatra
7
+ module RDiscount
8
+
9
+ def rdiscount(template, options={}, locals={})
10
+ render :rdiscount, template, options, locals
11
+ end
12
+
13
+ private
14
+
15
+ def render_rdiscount(template, data, options, locals, &block)
16
+ if block_given?
17
+ # render layout
18
+ instance = ::Erubis::Eruby.new(data)
19
+ else
20
+ # render template
21
+ markdown = ::RDiscount.new(data)
22
+ html = markdown.to_html
23
+ instance = ::Erubis::Eruby.new(html, :pattern => '\{% %\}')
24
+ end
25
+ locals_assigns = locals.to_a.collect { |k,v| "#{k} = locals[:#{k}]" }
26
+ src = "#{locals_assigns.join("\n")}\n#{instance.src}"
27
+ eval src, binding, '(__ERB__)', locals_assigns.length + 1
28
+ end
29
+
30
+ end
31
+
32
+ helpers RDiscount
33
+ end
@@ -0,0 +1,76 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{sinatra-rdiscount}
8
+ s.version = "0.9.4.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Wlodek Bzyl"]
12
+ s.date = %q{2010-02-08}
13
+ s.description = %q{Sinatra extension providing RDiscount templates for Sinatra application.}
14
+ s.email = %q{matwb@univ.gda.pl}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.markdown",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "examples/app.rb",
26
+ "examples/config.ru",
27
+ "examples/mapp.rb",
28
+ "examples/public/stylesheets/application.css",
29
+ "examples/views/hello.rdiscount",
30
+ "examples/views/hello2.rdiscount",
31
+ "examples/views/layout2.rdiscount",
32
+ "lib/sinatra/rdiscount.rb",
33
+ "sinatra-rdiscount.gemspec",
34
+ "test/sinatra_rdiscount_test.rb",
35
+ "test/test_helper.rb",
36
+ "test/views/hello.rdiscount",
37
+ "test/views/layout2.rdiscount"
38
+ ]
39
+ s.homepage = %q{http://github.com/wbzyl/sinatra-rdiscount}
40
+ s.rdoc_options = ["--charset=UTF-8"]
41
+ s.require_paths = ["lib"]
42
+ s.rubygems_version = %q{1.3.5}
43
+ s.summary = %q{Sinatra extension providing RDiscount templates for Sinatra application.}
44
+ s.test_files = [
45
+ "test/test_helper.rb",
46
+ "test/sinatra_rdiscount_test.rb",
47
+ "examples/mapp.rb",
48
+ "examples/app.rb"
49
+ ]
50
+
51
+ if s.respond_to? :specification_version then
52
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
+ s.specification_version = 3
54
+
55
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
56
+ s.add_runtime_dependency(%q<sinatra>, ["= 0.9.4"])
57
+ s.add_runtime_dependency(%q<erubis>, [">= 2.6.5"])
58
+ s.add_runtime_dependency(%q<rdiscount>, [">= 1.5.8"])
59
+ s.add_development_dependency(%q<rack>, [">= 1.1.0"])
60
+ s.add_development_dependency(%q<rack-test>, [">= 0.5.3"])
61
+ else
62
+ s.add_dependency(%q<sinatra>, ["= 0.9.4"])
63
+ s.add_dependency(%q<erubis>, [">= 2.6.5"])
64
+ s.add_dependency(%q<rdiscount>, [">= 1.5.8"])
65
+ s.add_dependency(%q<rack>, [">= 1.1.0"])
66
+ s.add_dependency(%q<rack-test>, [">= 0.5.3"])
67
+ end
68
+ else
69
+ s.add_dependency(%q<sinatra>, ["= 0.9.4"])
70
+ s.add_dependency(%q<erubis>, [">= 2.6.5"])
71
+ s.add_dependency(%q<rdiscount>, [">= 1.5.8"])
72
+ s.add_dependency(%q<rack>, [">= 1.1.0"])
73
+ s.add_dependency(%q<rack-test>, [">= 0.5.3"])
74
+ end
75
+ end
76
+
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SinatraRDiscountTest < Test::Unit::TestCase
4
+ include Rack::Test::Methods
5
+
6
+ def rdiscount_app(&block)
7
+ mock_app {
8
+ set :views, File.dirname(__FILE__) + '/views'
9
+ helpers Sinatra::RDiscount
10
+ set :show_exceptions, false
11
+ get '/', &block
12
+ }
13
+ get '/'
14
+ end
15
+
16
+ def test_renders_inline_strings
17
+ rdiscount_app { rdiscount 'hello world' }
18
+ assert last_response.ok?
19
+ assert_equal "<p>hello world</p>\n", last_response.body
20
+ end
21
+
22
+ def test_renders_inline_erb_string
23
+ rdiscount_app { rdiscount '{%= 1 + 1 %}' }
24
+ assert last_response.ok?
25
+ assert_equal "<p>2</p>\n", last_response.body
26
+ end
27
+
28
+ def test_renders_files_in_views_path
29
+ rdiscount_app { rdiscount :hello }
30
+ assert last_response.ok?
31
+ assert_equal "<h1>hello world</h1>\n", last_response.body
32
+ end
33
+
34
+ def test_takes_locals_option
35
+ rdiscount_app {
36
+ locals = {:foo => 'Bar'}
37
+ rdiscount "{%= foo %}", :locals => locals
38
+ }
39
+ assert last_response.ok?
40
+ assert_equal "<p>Bar</p>\n", last_response.body
41
+ end
42
+
43
+ def test_renders_with_inline_layouts
44
+ rdiscount_app {
45
+ rdiscount 'Sparta', :layout => 'THIS. IS. <%= yield.upcase %>'
46
+ }
47
+ assert last_response.ok?
48
+ assert_equal "THIS. IS. <P>SPARTA</P>\n", last_response.body
49
+ end
50
+
51
+ def test_renders_with_file_layouts
52
+ rdiscount_app {
53
+ rdiscount 'hello world', :layout => :layout2
54
+ }
55
+ assert last_response.ok?
56
+ assert_equal "erb layout\n<p>hello world</p>\n\n", last_response.body
57
+ end
58
+
59
+ def test_renders_erb_with_blocks
60
+ mock_app {
61
+ set :views, File.dirname(__FILE__) + '/views'
62
+ helpers Sinatra::RDiscount
63
+
64
+ def container
65
+ yield
66
+ end
67
+ def is;
68
+ "THIS. IS. SPARTA!"
69
+ end
70
+
71
+ get '/' do
72
+ rdiscount '{% container do %} {%= is %} {% end %}'
73
+ end
74
+ }
75
+
76
+ get '/'
77
+ assert last_response.ok?
78
+ assert_equal "<p> THIS. IS. SPARTA! </p>\n", last_response.body
79
+ end
80
+
81
+ def test_raises_error_if_template_not_found
82
+ mock_app {
83
+ set :views, File.dirname(__FILE__) + '/views'
84
+ helpers Sinatra::RDiscount
85
+ set :show_exceptions, false
86
+
87
+ get('/') { rdiscount :no_such_template }
88
+ }
89
+ assert_raise(Errno::ENOENT) { get('/') }
90
+ end
91
+ end
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rack/test'
4
+
5
+ path = File.expand_path("../lib" + File.dirname(__FILE__))
6
+ $:.unshift(path) unless $:.include?(path)
7
+
8
+ require 'sinatra/rdiscount'
9
+ require 'rdiscount'
10
+
11
+ class Test::Unit::TestCase
12
+ include Rack::Test::Methods
13
+
14
+ attr_reader :app
15
+
16
+ # Sets up a Sinatra::Base subclass defined with the block
17
+ # given. Used in setup or individual spec methods to establish
18
+ # the application.
19
+ def mock_app(base=Sinatra::Base, &block)
20
+ @app = Sinatra.new(base, &block)
21
+ end
22
+ end
@@ -0,0 +1 @@
1
+ # hello world
@@ -0,0 +1,2 @@
1
+ erb layout
2
+ <%= yield %>
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-rdiscount
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Wlodek Bzyl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-02-08 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sinatra
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.4
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: erubis
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.6.5
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rdiscount
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.5.8
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: rack
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.1.0
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-test
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.5.3
64
+ version:
65
+ description: Sinatra extension providing RDiscount templates for Sinatra application.
66
+ email: matwb@univ.gda.pl
67
+ executables: []
68
+
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - LICENSE
73
+ - README.markdown
74
+ files:
75
+ - .gitignore
76
+ - LICENSE
77
+ - README.markdown
78
+ - Rakefile
79
+ - VERSION.yml
80
+ - examples/app.rb
81
+ - examples/config.ru
82
+ - examples/mapp.rb
83
+ - examples/public/stylesheets/application.css
84
+ - examples/views/hello.rdiscount
85
+ - examples/views/hello2.rdiscount
86
+ - examples/views/layout2.rdiscount
87
+ - lib/sinatra/rdiscount.rb
88
+ - sinatra-rdiscount.gemspec
89
+ - test/sinatra_rdiscount_test.rb
90
+ - test/test_helper.rb
91
+ - test/views/hello.rdiscount
92
+ - test/views/layout2.rdiscount
93
+ has_rdoc: true
94
+ homepage: http://github.com/wbzyl/sinatra-rdiscount
95
+ licenses: []
96
+
97
+ post_install_message:
98
+ rdoc_options:
99
+ - --charset=UTF-8
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: "0"
107
+ version:
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ version:
114
+ requirements: []
115
+
116
+ rubyforge_project:
117
+ rubygems_version: 1.3.5
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: Sinatra extension providing RDiscount templates for Sinatra application.
121
+ test_files:
122
+ - test/test_helper.rb
123
+ - test/sinatra_rdiscount_test.rb
124
+ - examples/mapp.rb
125
+ - examples/app.rb