vanilla 1.0.2 → 1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +112 -109
- data/bin/vanilla +35 -6
- data/lib/vanilla.rb +10 -14
- data/lib/vanilla/app.rb +109 -41
- data/lib/vanilla/console.rb +22 -2
- data/lib/vanilla/dynasnip.rb +4 -36
- data/lib/vanilla/renderers.rb +12 -0
- data/lib/vanilla/renderers/base.rb +58 -34
- data/lib/vanilla/renderers/bold.rb +0 -2
- data/lib/vanilla/renderers/erb.rb +1 -3
- data/lib/vanilla/renderers/haml.rb +13 -0
- data/lib/vanilla/renderers/markdown.rb +0 -2
- data/lib/vanilla/renderers/raw.rb +0 -2
- data/lib/vanilla/renderers/ruby.rb +12 -6
- data/lib/vanilla/renderers/textile.rb +0 -2
- data/lib/vanilla/request.rb +19 -17
- data/lib/vanilla/routes.rb +9 -20
- data/lib/vanilla/snip_reference_parser.rb +94 -0
- data/lib/vanilla/static.rb +28 -0
- data/pristine_app/Gemfile +3 -0
- data/pristine_app/Gemfile.lock +32 -0
- data/pristine_app/README +47 -0
- data/pristine_app/config.ru +26 -0
- data/pristine_app/public/vanilla.css +15 -0
- data/pristine_app/soups/base/layout.snip +18 -0
- data/pristine_app/soups/base/start.snip +19 -0
- data/pristine_app/soups/dynasnips/current_snip.rb +29 -0
- data/{lib/vanilla → pristine_app/soups}/dynasnips/debug.rb +5 -3
- data/pristine_app/soups/dynasnips/index.rb +12 -0
- data/{lib/vanilla → pristine_app/soups}/dynasnips/link_to.rb +4 -2
- data/pristine_app/soups/dynasnips/link_to_current_snip.rb +14 -0
- data/pristine_app/soups/dynasnips/page_title.rb +9 -0
- data/{lib/vanilla → pristine_app/soups}/dynasnips/pre.rb +7 -5
- data/{lib/vanilla → pristine_app/soups}/dynasnips/raw.rb +8 -5
- data/pristine_app/soups/extras/comments.rb +78 -0
- data/{lib/vanilla/dynasnips → pristine_app/soups/extras}/kind.rb +19 -17
- data/{lib/vanilla/dynasnips → pristine_app/soups/extras}/rand.rb +2 -0
- data/pristine_app/soups/extras/url_to.rb +7 -0
- data/pristine_app/soups/tutorial/bad_dynasnip.snip +8 -0
- data/pristine_app/soups/tutorial/hello_world.snip +20 -0
- data/pristine_app/soups/tutorial/markdown_example.snip +13 -0
- data/pristine_app/soups/tutorial/snip.snip +9 -0
- data/pristine_app/soups/tutorial/soup.snip +3 -0
- data/pristine_app/soups/tutorial/test.snip +30 -0
- data/pristine_app/soups/tutorial/textile_example.snip +11 -0
- data/pristine_app/soups/tutorial/tutorial-another-snip.snip +1 -0
- data/pristine_app/soups/tutorial/tutorial-basic-snip-inclusion.snip +1 -0
- data/pristine_app/soups/tutorial/tutorial-dynasnips.snip.markdown +56 -0
- data/pristine_app/soups/tutorial/tutorial-layout.snip +56 -0
- data/pristine_app/soups/tutorial/tutorial-links.snip +4 -0
- data/pristine_app/soups/tutorial/tutorial-renderers.snip.markdown +77 -0
- data/pristine_app/soups/tutorial/tutorial.snip.markdown +69 -0
- data/pristine_app/soups/tutorial/vanilla-rb.snip +16 -0
- data/pristine_app/soups/tutorial/vanilla.snip +8 -0
- data/test/dynasnip_test.rb +42 -0
- data/test/dynasnips/link_to_current_snip_test.rb +19 -0
- data/test/dynasnips/link_to_test.rb +27 -0
- data/test/dynasnips/page_title_test.rb +19 -0
- data/test/renderers/base_renderer_test.rb +43 -0
- data/test/renderers/erb_renderer_test.rb +29 -0
- data/test/renderers/haml_renderer_test.rb +35 -0
- data/test/renderers/markdown_renderer_test.rb +31 -0
- data/test/renderers/raw_renderer_test.rb +23 -0
- data/test/renderers/ruby_renderer_test.rb +59 -0
- data/test/snip_inclusion_test.rb +56 -0
- data/test/snip_reference_parser_test.rb +123 -0
- data/test/test_helper.rb +75 -0
- data/test/vanilla_app_test.rb +83 -0
- data/test/vanilla_presenting_test.rb +125 -0
- data/test/vanilla_request_test.rb +87 -0
- metadata +179 -78
- data/config.example.yml +0 -5
- data/config.ru +0 -9
- data/lib/defensio.rb +0 -59
- data/lib/tasks/vanilla.rake +0 -177
- data/lib/vanilla/dynasnips/comments.rb +0 -108
- data/lib/vanilla/dynasnips/current_snip.rb +0 -32
- data/lib/vanilla/dynasnips/edit.rb +0 -63
- data/lib/vanilla/dynasnips/edit_link.rb +0 -24
- data/lib/vanilla/dynasnips/index.rb +0 -11
- data/lib/vanilla/dynasnips/link_to_current_snip.rb +0 -16
- data/lib/vanilla/dynasnips/login.rb +0 -56
- data/lib/vanilla/dynasnips/new.rb +0 -14
- data/lib/vanilla/dynasnips/notes.rb +0 -42
- data/lib/vanilla/dynasnips/url_to.rb +0 -7
- data/lib/vanilla/snip_handling.rb +0 -33
- data/lib/vanilla/snips/start.rb +0 -27
- data/lib/vanilla/snips/system.rb +0 -76
- data/lib/vanilla/snips/tutorial.rb +0 -157
- data/lib/vanilla/test_snips.rb +0 -85
- data/public/hatch.png +0 -0
- data/public/javascripts/jquery.js +0 -3549
- data/public/javascripts/vanilla.js +0 -21
- data/spec/dynasnip_spec.rb +0 -31
- data/spec/renderers/base_renderer_spec.rb +0 -40
- data/spec/renderers/erb_renderer_spec.rb +0 -27
- data/spec/renderers/markdown_renderer_spec.rb +0 -29
- data/spec/renderers/raw_renderer_spec.rb +0 -21
- data/spec/renderers/ruby_renderer_spec.rb +0 -42
- data/spec/renderers/vanilla_app_detecting_renderer_spec.rb +0 -35
- data/spec/spec_helper.rb +0 -64
- data/spec/vanilla_app_spec.rb +0 -38
- data/spec/vanilla_presenting_spec.rb +0 -84
- data/spec/vanilla_request_spec.rb +0 -73
- data/spec/vanilla_snip_finding_spec.rb +0 -28
@@ -0,0 +1,69 @@
|
|
1
|
+
{tutorial-links}
|
2
|
+
|
3
|
+
Snips - the basic concept
|
4
|
+
------------
|
5
|
+
|
6
|
+
Firstly, open the raw contents of this snip - either in your editor (search for `vanilla-rb-tutorial.snip`), or by opening <a href="{current_snip name}.raw">this snip in raw format</a> in a new window or tab. Ready? OK.
|
7
|
+
|
8
|
+
Every piece of information displayed here is stored as a {link_to snip}. Snips, within their contents, can also reference other snips. When you request a snip, it will render into a page (or another kind of response), and also render any snips that it internally references.
|
9
|
+
|
10
|
+
For example, consider the snip {link_to tutorial-basic-snip-inclusion}:
|
11
|
+
|
12
|
+
{raw tutorial-basic-snip-inclusion}
|
13
|
+
|
14
|
+
When this snip is rendered, it appears like this:
|
15
|
+
|
16
|
+
> {tutorial-basic-snip-inclusion}
|
17
|
+
|
18
|
+
Notice the use of curly brackets to reference one snip from inside another. {link_to vanilla-rb} finds these references to snips, then renders that snip and replaces it in the first snip. Neat!
|
19
|
+
|
20
|
+
Renderers
|
21
|
+
--------
|
22
|
+
|
23
|
+
The way that a snip is rendered depends on whether or not it has an extension, or a `render_as` attribute set. For instance, the extention of this snip is `{current_snip extension}`, and the `render_as` property of `markdown_example` is `Markdown`. Scroll to the bottom of the raw markdown_example snip in your editor, and you'll see this being declared.
|
24
|
+
|
25
|
+
This means that the `content` of this snip will be passed through `Vanilla::Renderers::Markdown` before it is then rendered to the page. There are several different renders provided by Vanilla.rb at the moment:
|
26
|
+
|
27
|
+
* Markdown - as described above
|
28
|
+
* Textile - which performs similarly for Textile. This means that you can mix how you write the content of snips!
|
29
|
+
* Raw - which simply returns the content of the snip, as-is. If you attach a `.raw` extension to this url, you'll see it in action
|
30
|
+
* Bold - simply wraps the content in bold. It's a demo, essentially.
|
31
|
+
* Erb - passes the snip contents through Ruby's `Erb` library. It also makes some information available for use by ruby code within the snip's contents
|
32
|
+
* Ruby - parses the snips content as Ruby itself.
|
33
|
+
|
34
|
+
You can see a lot of these renderers being exercised in the {link_to test} snip.
|
35
|
+
|
36
|
+
It's using this last renderer that a second concept of Vanilla is implemented - dynasnips.
|
37
|
+
|
38
|
+
|
39
|
+
Dynasnips
|
40
|
+
--------
|
41
|
+
|
42
|
+
Because the curly braces simply cause a snip to be rendered, we can use this in conjunction with the Ruby renderer to run actual code. For instance, in the snip above:
|
43
|
+
|
44
|
+
{raw tutorial-basic-snip-inclusion}
|
45
|
+
|
46
|
+
we can see a reference to the `link_to` snip - <tt>{link\_to snip}</tt>.
|
47
|
+
|
48
|
+
Lets look at the raw content of `link_to`:
|
49
|
+
|
50
|
+
{raw link_to}
|
51
|
+
|
52
|
+
As you can see, it simply refers to the Ruby class `LinkTo`, which is contained within the vanilla-rb codebase. When the Ruby renderer is called, expects the given code to evaulate to a Ruby class. It then instantiates the class, and calls a `handle` method on the instance, passing it any other arguments from the snip inclusion. So, in the case of <tt>{link\_to snip}</tt>, the only argument is `snip`.
|
53
|
+
|
54
|
+
### Included Dynasnips
|
55
|
+
|
56
|
+
Vanilla.rb includes a number of dynasnips by default. Here are a couple:
|
57
|
+
|
58
|
+
* `link_to`, to produce a link to another snip
|
59
|
+
* `raw`, which displays the raw contents of a snip
|
60
|
+
* `index`, which shows all of the available snips: {link_to index}
|
61
|
+
* ... and several others.
|
62
|
+
|
63
|
+
|
64
|
+
Anyway - that should be enough to get you started.
|
65
|
+
|
66
|
+
{tutorial-links}
|
67
|
+
|
68
|
+
|
69
|
+
:updated_at: 2011-04-28 16:21:00 +01:00
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Vanilla.rb is the software powering this site. It's a sort-of wiki/bliki thing, based on {link_to vanilla}.
|
2
|
+
|
3
|
+
Here's the [introductory blog post][3].
|
4
|
+
|
5
|
+
It's developed on [github][1], and has a [lighthouse bug tracker][2]. At the moment it's not very well documented, since I'm exploring how the concept might work and the internals are subject to change. However, please do play around with it.
|
6
|
+
|
7
|
+
Here's the tutorial (helpfully included from {link_to tutorial}).
|
8
|
+
|
9
|
+
{tutorial}
|
10
|
+
|
11
|
+
|
12
|
+
[1]: http://github.com/lazyatom/vanilla
|
13
|
+
[2]: http://lazyatom.lighthouseapp.com/projects/11797-vanilla/tickets
|
14
|
+
[3]: http://interblah.net/introducing-vanilla-rb
|
15
|
+
|
16
|
+
:render_as: Markdown
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require 'vanilla/dynasnip'
|
3
|
+
|
4
|
+
describe Dynasnip do
|
5
|
+
context "when storing attributes" do
|
6
|
+
|
7
|
+
class ::TestDyna < Dynasnip
|
8
|
+
attribute :test_attribute, "test attribute content"
|
9
|
+
end
|
10
|
+
|
11
|
+
should "make the attribute available as an instance method" do
|
12
|
+
assert_equal "test attribute content", TestDyna.new(@app).test_attribute
|
13
|
+
end
|
14
|
+
|
15
|
+
should "store the attribute in the soup" do
|
16
|
+
@app.soup << TestDyna.snip_attributes
|
17
|
+
assert_equal "test attribute content", @app.soup['test_dyna'].test_attribute
|
18
|
+
end
|
19
|
+
|
20
|
+
should "allow the attribute to be overriden by the soup contents" do
|
21
|
+
@app.soup << TestDyna.snip_attributes
|
22
|
+
snip = @app.soup['test_dyna']
|
23
|
+
snip.test_attribute = "altered content"
|
24
|
+
snip.save
|
25
|
+
|
26
|
+
assert_equal "altered content", TestDyna.new(@app).test_attribute
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when rendering usage" do
|
31
|
+
class ::ShowUsage < Dynasnip
|
32
|
+
usage "This is the usage"
|
33
|
+
def handle
|
34
|
+
usage
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
should "show the usage defined in the snip" do
|
39
|
+
assert_equal "This is the usage", ShowUsage.new(@app).handle
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../../../pristine_app/soups/dynasnips", __FILE__)
|
3
|
+
require "link_to_current_snip"
|
4
|
+
|
5
|
+
context "The link_to_current_snip dynasnip" do
|
6
|
+
setup do
|
7
|
+
@app.soup << LinkToCurrentSnip.snip_attributes
|
8
|
+
create_snip :name => "test", :content => "test {link_to_current_snip}"
|
9
|
+
end
|
10
|
+
|
11
|
+
should "render a link to the snip that was requested" do
|
12
|
+
assert_response_body %{test <a href="/test">test</a>}, "/test"
|
13
|
+
end
|
14
|
+
|
15
|
+
should "render a link to the snip that was requested even if it isn't the snip that included the dyna" do
|
16
|
+
create_snip :name => "othertest", :content => "othertest {test}"
|
17
|
+
assert_response_body %{othertest test <a href="/othertest">othertest</a>}, "/othertest"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../../../pristine_app/soups/dynasnips", __FILE__)
|
3
|
+
require "link_to"
|
4
|
+
|
5
|
+
context "The link_to dynasnip" do
|
6
|
+
setup do
|
7
|
+
create_snip :name => "start", :content => "hello"
|
8
|
+
end
|
9
|
+
|
10
|
+
should "render a link to a snip that exists" do
|
11
|
+
assert_equal %{<a href="/start">start</a>}, render_dynasnip(LinkTo, "start")
|
12
|
+
end
|
13
|
+
|
14
|
+
should "allow specification of the link text" do
|
15
|
+
assert_equal %{<a href="/start">the start snip</a>}, render_dynasnip(LinkTo, "start", "the start snip")
|
16
|
+
end
|
17
|
+
|
18
|
+
should "mark snips that are missing with a class" do
|
19
|
+
assert_equal %{<a class="missing" href="/missing">missing</a>}, render_dynasnip(LinkTo, "missing")
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def render_dynasnip(klass, *args)
|
25
|
+
klass.new(@app).handle(*args)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../../../pristine_app/soups/dynasnips", __FILE__)
|
3
|
+
require "page_title"
|
4
|
+
|
5
|
+
context "The page_title dynasnip" do
|
6
|
+
setup do
|
7
|
+
@app.soup << PageTitle.snip_attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
should "render as the requested snip name if that snip has no title" do
|
11
|
+
create_snip :name => "test", :content => "{page_title}"
|
12
|
+
assert_response_body %{test}, "/test"
|
13
|
+
end
|
14
|
+
|
15
|
+
should "render as the requested snip's page_title when that attribute is present" do
|
16
|
+
create_snip :name => "test", :content => "{page_title}", :page_title => "This is a test"
|
17
|
+
assert_response_body %{This is a test}, "/test"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Vanilla::Renderers::Base do
|
4
|
+
setup do
|
5
|
+
create_snip(:name => "test", :content => "content content", :part => "part content")
|
6
|
+
end
|
7
|
+
|
8
|
+
should "render the contents part of the snip as it is" do
|
9
|
+
assert_response_body "content content", "/test"
|
10
|
+
end
|
11
|
+
|
12
|
+
should "render the specified part of the snip" do
|
13
|
+
assert_response_body "part content", "/test/part"
|
14
|
+
end
|
15
|
+
|
16
|
+
should "include the contents of a referenced snip" do
|
17
|
+
create_snip(:name => "snip_with_inclusions", :content => "loading {test}")
|
18
|
+
assert_response_body "loading content content", "/snip_with_inclusions"
|
19
|
+
end
|
20
|
+
|
21
|
+
should "be able to render a snip attribute" do
|
22
|
+
create_snip(:name => "snip_with_inclusions", :content => "loading {test.part}")
|
23
|
+
assert_response_body "loading part content", "/snip_with_inclusions"
|
24
|
+
end
|
25
|
+
|
26
|
+
should "perform snip inclusion when rendering a part" do
|
27
|
+
create_snip(:name => "snip_with_inclusions", :content => "other content", :part => "loading {test}")
|
28
|
+
assert_response_body "loading content content", "/snip_with_inclusions/part"
|
29
|
+
end
|
30
|
+
|
31
|
+
should "include other snips using their renderers" do
|
32
|
+
create_snip(:name => "including_snip", :content => "lets include {another_snip}")
|
33
|
+
create_snip(:name => "another_snip", :content => "blah", :render_as => "Bold")
|
34
|
+
assert_equal "lets include <b>blah</b>", response_body_for("/including_snip").gsub(/\s+/, ' ')
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when trying to include a missing snip" do
|
38
|
+
should "return a string describing the missing snip" do
|
39
|
+
create_snip(:name => 'blah', :content => 'include a {missing_snip}')
|
40
|
+
assert_response_body "include a [snip 'missing_snip' cannot be found]", "/blah"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Vanilla::Renderers::Erb do
|
4
|
+
context "when rendering" do
|
5
|
+
should "insert evaluated Erb content into the snip" do
|
6
|
+
erb_snip(:name => "test", :content => "<%= 1 + 2 %>")
|
7
|
+
assert_response_body "3", "/test"
|
8
|
+
end
|
9
|
+
|
10
|
+
should "evaluate Erb content in the snip" do
|
11
|
+
erb_snip(:name => "test", :content => "<% if false %>monkey<% else %>donkey<% end %>")
|
12
|
+
assert_response_body "donkey", "/test"
|
13
|
+
end
|
14
|
+
|
15
|
+
should "expose the snip as an instance variable" do
|
16
|
+
erb_snip(:name => "test", :content => "<%= @snip.name %>")
|
17
|
+
assert_response_body "test", "/test"
|
18
|
+
end
|
19
|
+
|
20
|
+
should "expose the app as an instance variable" do
|
21
|
+
erb_snip(:name => "test", :content => "<%= @app.class.name %>")
|
22
|
+
assert_response_body "Vanilla::App", "/test"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def erb_snip(params)
|
27
|
+
create_snip(params.merge(:render_as => "Erb"))
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'haml'
|
3
|
+
|
4
|
+
describe Vanilla::Renderers::Haml do
|
5
|
+
context "when rendering" do
|
6
|
+
should "render Haml into HTML" do
|
7
|
+
haml_snip(:name => "test", :content => "#hello\n stuff")
|
8
|
+
assert_response_body %{<div id='hello'>\n stuff\n</div>}, "/test"
|
9
|
+
end
|
10
|
+
|
11
|
+
should "insert evaluated Haml content into the snip" do
|
12
|
+
haml_snip(:name => "test", :content => "= 1 + 2")
|
13
|
+
assert_response_body "3", "/test"
|
14
|
+
end
|
15
|
+
|
16
|
+
should "evaluate Erb content in the snip" do
|
17
|
+
haml_snip(:name => "test", :content => "- if false\n monkey\n- else\n donkey")
|
18
|
+
assert_response_body "donkey", "/test"
|
19
|
+
end
|
20
|
+
|
21
|
+
should "expose the snip as an instance variable" do
|
22
|
+
haml_snip(:name => "test", :content => "= @snip.name")
|
23
|
+
assert_response_body "test", "/test"
|
24
|
+
end
|
25
|
+
|
26
|
+
should "expose the app as an instance variable" do
|
27
|
+
haml_snip(:name => "test", :content => "= @app.class.name")
|
28
|
+
assert_response_body "Vanilla::App", "/test"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def haml_snip(params)
|
33
|
+
create_snip(params.merge(:render_as => "Haml"))
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Vanilla::Renderers::Markdown do
|
4
|
+
context "when rendering" do
|
5
|
+
should "return the snip contents rendered via Markdown" do
|
6
|
+
content = <<Markdown
|
7
|
+
# markdown
|
8
|
+
|
9
|
+
* totally
|
10
|
+
* [rocks](http://www.example.com)!
|
11
|
+
Markdown
|
12
|
+
markdown_snip(:name => "test", :content => content)
|
13
|
+
assert_response_body BlueCloth.new(content).to_html, "/test"
|
14
|
+
end
|
15
|
+
|
16
|
+
should "include other snips using their renderers" do
|
17
|
+
markdown_snip(:name => "test", :content => <<-Markdown
|
18
|
+
# markdown
|
19
|
+
|
20
|
+
and so lets include {another_snip}
|
21
|
+
Markdown
|
22
|
+
)
|
23
|
+
create_snip(:name => "another_snip", :content => "blah", :render_as => "Bold")
|
24
|
+
assert_equal "<h1>markdown</h1> <p>and so lets include <b>blah</b></p>", response_body_for("/test").gsub(/\s+/, ' ')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def markdown_snip(attributes)
|
29
|
+
create_snip(attributes.merge(:render_as => "Markdown"))
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Vanilla::Renderers::Raw do
|
4
|
+
context "when rendering" do
|
5
|
+
setup do
|
6
|
+
@snip = create_snip(:name => "test", :content => "raw content", :part => "raw part")
|
7
|
+
set_main_template "<tag>{current_snip}</tag>"
|
8
|
+
end
|
9
|
+
|
10
|
+
should "render the contents part of the snip as it is" do
|
11
|
+
assert_response_body "raw content", "/test.raw"
|
12
|
+
end
|
13
|
+
|
14
|
+
should "render the specified part of the snip" do
|
15
|
+
assert_response_body "raw part", "/test/part.raw"
|
16
|
+
end
|
17
|
+
|
18
|
+
should "not perform any snip inclusion" do
|
19
|
+
create_snip(:name => "snip_with_inclusions", :content => "loading {another_snip}")
|
20
|
+
assert_response_body "loading {another_snip}", "/snip_with_inclusions.raw"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Vanilla::Renderers::Ruby do
|
4
|
+
context "when rendering normally" do
|
5
|
+
class ::TestDyna < Dynasnip
|
6
|
+
def handle(*args)
|
7
|
+
'handle called'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
setup do
|
12
|
+
@app.soup << TestDyna.snip_attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
should "render the result of the handle method" do
|
16
|
+
assert_response_body 'handle called', "/test_dyna"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when responding restfully" do
|
21
|
+
class ::RestishDyna < Dynasnip
|
22
|
+
def get(*args)
|
23
|
+
'get called'
|
24
|
+
end
|
25
|
+
def post(*args)
|
26
|
+
'post called'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
setup do
|
31
|
+
@app.soup << RestishDyna.snip_attributes
|
32
|
+
end
|
33
|
+
|
34
|
+
should "render the result of the get method on GET requests" do
|
35
|
+
assert_response_body 'get called', "/restish_dyna"
|
36
|
+
end
|
37
|
+
|
38
|
+
should "render the result of the post method on POST requests" do
|
39
|
+
assert_response_body 'post called', "/restish_dyna?_method=post"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when knowing about enclosing snips" do
|
44
|
+
class ::Encloser < Dynasnip
|
45
|
+
def handle(*args)
|
46
|
+
"enclosing snip is #{enclosing_snip.name}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
setup do
|
51
|
+
@app.soup << Encloser.snip_attributes
|
52
|
+
create_snip(:name => "test", :content => "{encloser}")
|
53
|
+
end
|
54
|
+
|
55
|
+
should "know about the snip that called this dynasnip" do
|
56
|
+
assert_response_body 'enclosing snip is test', "/test"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
context "When including snips in other snips" do
|
4
|
+
setup do
|
5
|
+
create_snip :name => "test", :content => "snip content"
|
6
|
+
end
|
7
|
+
|
8
|
+
should "match simple snips" do
|
9
|
+
assert_equal "rendering snip content", render("rendering {test}")
|
10
|
+
end
|
11
|
+
|
12
|
+
should "match snips with an argument" do
|
13
|
+
assert_equal "rendering snip content", render("rendering {test arg1}")
|
14
|
+
end
|
15
|
+
|
16
|
+
should "match snips with several arguments" do
|
17
|
+
assert_equal "rendering snip content", render("rendering {test arg1, arg2}")
|
18
|
+
end
|
19
|
+
|
20
|
+
should "match snips with hyphens" do
|
21
|
+
create_snip :name => "test-snip", :content => "snip content"
|
22
|
+
assert_equal "rendering snip content", render("rendering {test-snip}")
|
23
|
+
end
|
24
|
+
|
25
|
+
should "match snips with underscores" do
|
26
|
+
create_snip :name => "test_snip", :content => "snip content"
|
27
|
+
assert_equal "rendering snip content", render("rendering {test_snip}")
|
28
|
+
end
|
29
|
+
|
30
|
+
should "match snips with numbers" do
|
31
|
+
create_snip :name => "test1", :content => "snip content"
|
32
|
+
assert_equal "rendering snip content", render("rendering {test1}")
|
33
|
+
end
|
34
|
+
|
35
|
+
should "match snips with ruby 1.9 style hashes" do
|
36
|
+
create_snip :name => "test", :content => %{
|
37
|
+
class Blah
|
38
|
+
def handle(args)
|
39
|
+
args.inspect
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
}, :render_as => "Ruby"
|
44
|
+
assert_equal %{rendering {:x=>"1"}}, render("rendering {test x:1}")
|
45
|
+
end
|
46
|
+
|
47
|
+
should "ignore references that are rubyish" do
|
48
|
+
assert_equal "10.times { |x| puts x }", render("10.times { |x| puts x }")
|
49
|
+
assert_equal "10.times {|x| puts x }", render("10.times {|x| puts x }")
|
50
|
+
end
|
51
|
+
|
52
|
+
def render(content)
|
53
|
+
snip = create_snip :name => "test-content", :content => content
|
54
|
+
Vanilla::Renderers::Base.new(@app).render(snip)
|
55
|
+
end
|
56
|
+
end
|