comatose-rubyisbeautiful 3.0.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/CHANGELOG +198 -0
- data/Gemfile +29 -0
- data/Gemfile.lock +130 -0
- data/INSTALL +14 -0
- data/LICENSE +20 -0
- data/Manifest +188 -0
- data/README +0 -0
- data/README.markdown +113 -0
- data/Rakefile +5 -0
- data/SPECS +61 -0
- data/app/controllers/application_controller.rb +3 -0
- data/app/controllers/comatose/admin_controller.rb +425 -0
- data/app/controllers/comatose/application_controller.rb +30 -0
- data/app/controllers/comatose/base_controller.rb +167 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/comatose/admin_helper.rb +78 -0
- data/app/helpers/comatose/application_helper.rb +2 -0
- data/app/helpers/comatose/base_helper.rb +5 -0
- data/app/models/comatose/page.rb +166 -0
- data/app/views/comatose/admin/_form.html.erb +108 -0
- data/app/views/comatose/admin/_page_list_item.html.erb +62 -0
- data/app/views/comatose/admin/delete.html.erb +18 -0
- data/app/views/comatose/admin/edit.html.erb +5 -0
- data/app/views/comatose/admin/index.html.erb +34 -0
- data/app/views/comatose/admin/new.html.erb +5 -0
- data/app/views/comatose/admin/reorder.html.erb +30 -0
- data/app/views/comatose/admin/versions.html.erb +40 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/comatose/admin.html.erb +44 -0
- data/app/views/layouts/comatose/base.html.erb +14 -0
- data/comatose-rubyisbeautiful.gemspec +65 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +26 -0
- data/config/environments/production.rb +49 -0
- data/config/environments/test.rb +35 -0
- data/config/locales/en.yml +5 -0
- data/config.ru +4 -0
- data/db/seeds.rb +11 -0
- data/lib/comatose/configuration.rb +87 -0
- data/lib/comatose/drop.rb +45 -0
- data/lib/comatose/engine.rb +28 -0
- data/lib/comatose/filters/inline_filter.rb +15 -0
- data/lib/comatose/filters/timeago_filter.rb +14 -0
- data/lib/comatose/filters/translation_filter.rb +11 -0
- data/lib/comatose/locale_constraint.rb +15 -0
- data/lib/comatose/logger.rb +10 -0
- data/lib/comatose/page_wrapper.rb +147 -0
- data/lib/comatose/processing_context.rb +103 -0
- data/lib/comatose/routes.rb +70 -0
- data/lib/comatose/tasks/admin.rb +57 -0
- data/lib/comatose/tasks/data.rb +79 -0
- data/lib/comatose/tasks/setup.rb +118 -0
- data/lib/comatose/text_filters.rb +148 -0
- data/lib/comatose/version.rb +9 -0
- data/lib/comatose.rb +88 -0
- data/lib/generators/comatose/USAGE +7 -0
- data/lib/generators/comatose/comatose_generator.rb +37 -0
- data/lib/generators/comatose/templates/comatose.rb +33 -0
- data/lib/generators/comatose/templates/migration.erb +32 -0
- data/lib/generators/comatose/templates/seeds.erb +2 -0
- data/lib/support/class_options.rb +36 -0
- data/lib/support/inline_rendering.rb +48 -0
- data/lib/support/route_mapper.rb +51 -0
- data/lib/tasks/comatose.rake +9 -0
- data/lib/text_filters/markdown.rb +14 -0
- data/lib/text_filters/markdown_smartypants.rb +15 -0
- data/lib/text_filters/none.rb +8 -0
- data/lib/text_filters/rdoc.rb +13 -0
- data/lib/text_filters/simple.rb +8 -0
- data/lib/text_filters/textile.rb +15 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/comatose/collapsed.gif +0 -0
- data/public/images/comatose/expanded.gif +0 -0
- data/public/images/comatose/no-children.gif +0 -0
- data/public/images/comatose/page.gif +0 -0
- data/public/images/comatose/rails.png +0 -0
- data/public/images/comatose/spinner.gif +0 -0
- data/public/images/comatose/title-hover-bg.gif +0 -0
- data/public/javascripts/comatose/admin.js +406 -0
- data/public/javascripts/comatose/application.js +2 -0
- data/public/javascripts/comatose/dragdrop.js +974 -0
- data/public/javascripts/editor.js +452 -0
- data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
- data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
- data/public/javascripts/jquery/README +67 -0
- data/public/javascripts/jquery/jquery.js +11 -0
- data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.js +1 -0
- data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-blockquote.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h1.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h2.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h3.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h4.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h5.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-h6.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-p.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/lbl-pre.png +0 -0
- data/public/javascripts/wymeditor/iframe/default/wymiframe.css +90 -0
- data/public/javascripts/wymeditor/iframe/default/wymiframe.html +26 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.js +4688 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.min.js +1 -0
- data/public/javascripts/wymeditor/jquery.wymeditor.pack.js +1 -0
- data/public/javascripts/wymeditor/lang/bg.js +45 -0
- data/public/javascripts/wymeditor/lang/ca.js +45 -0
- data/public/javascripts/wymeditor/lang/cs.js +45 -0
- data/public/javascripts/wymeditor/lang/cy.js +45 -0
- data/public/javascripts/wymeditor/lang/de.js +45 -0
- data/public/javascripts/wymeditor/lang/en.js +45 -0
- data/public/javascripts/wymeditor/lang/es.js +45 -0
- data/public/javascripts/wymeditor/lang/fa.js +46 -0
- data/public/javascripts/wymeditor/lang/fi.js +44 -0
- data/public/javascripts/wymeditor/lang/fr.js +45 -0
- data/public/javascripts/wymeditor/lang/gl.js +45 -0
- data/public/javascripts/wymeditor/lang/he.js +45 -0
- data/public/javascripts/wymeditor/lang/hr.js +45 -0
- data/public/javascripts/wymeditor/lang/hu.js +45 -0
- data/public/javascripts/wymeditor/lang/it.js +45 -0
- data/public/javascripts/wymeditor/lang/nb.js +45 -0
- data/public/javascripts/wymeditor/lang/nl.js +45 -0
- data/public/javascripts/wymeditor/lang/nn.js +45 -0
- data/public/javascripts/wymeditor/lang/pl.js +45 -0
- data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
- data/public/javascripts/wymeditor/lang/pt.js +45 -0
- data/public/javascripts/wymeditor/lang/ru.js +45 -0
- data/public/javascripts/wymeditor/lang/sv.js +45 -0
- data/public/javascripts/wymeditor/lang/tr.js +45 -0
- data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
- data/public/javascripts/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
- data/public/javascripts/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
- data/public/javascripts/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
- data/public/javascripts/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
- data/public/javascripts/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
- data/public/javascripts/wymeditor/plugins/resizable/readme.txt +124 -0
- data/public/javascripts/wymeditor/plugins/tidy/README +19 -0
- data/public/javascripts/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
- data/public/javascripts/wymeditor/plugins/tidy/tidy.php +36 -0
- data/public/javascripts/wymeditor/plugins/tidy/wand.png +0 -0
- data/public/javascripts/wymeditor/skins/compact/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/compact/skin.css +134 -0
- data/public/javascripts/wymeditor/skins/compact/skin.js +35 -0
- data/public/javascripts/wymeditor/skins/default/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/default/skin.css +133 -0
- data/public/javascripts/wymeditor/skins/default/skin.js +40 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.header.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
- data/public/javascripts/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/minimal/skin.css +131 -0
- data/public/javascripts/wymeditor/skins/minimal/skin.js +30 -0
- data/public/javascripts/wymeditor/skins/silver/COPYING +674 -0
- data/public/javascripts/wymeditor/skins/silver/README +27 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.header.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
- data/public/javascripts/wymeditor/skins/silver/images/icons.silver.gif +0 -0
- data/public/javascripts/wymeditor/skins/silver/skin.css +297 -0
- data/public/javascripts/wymeditor/skins/silver/skin.js +61 -0
- data/public/javascripts/wymeditor/skins/twopanels/icons.png +0 -0
- data/public/javascripts/wymeditor/skins/twopanels/skin.css +134 -0
- data/public/javascripts/wymeditor/skins/twopanels/skin.js +39 -0
- data/public/javascripts/wymeditor/skins/wymeditor_icon.png +0 -0
- data/public/javascripts/wymeditor.tar +0 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/comatose/admin.css +488 -0
- data/public/stylesheets/comatose/base.css +9 -0
- data/spec/controllers/comatose/base_controller_spec.rb +14 -0
- data/spec/controllers/foos_controller_spec.rb +5 -0
- data/spec/helpers/foos_helper_spec.rb +15 -0
- data/spec/routing/base_routing_spec.rb +12 -0
- data/spec/spec_helper.rb +27 -0
- data/test/behaviors.rb +106 -0
- data/test/fixtures/comatose_pages.yml +96 -0
- data/test/functional/comatose_admin_controller_test.rb +114 -0
- data/test/functional/comatose_controller_test.rb +45 -0
- data/test/integration/comatose_routing_test.rb +17 -0
- data/test/javascripts/test.html +26 -0
- data/test/javascripts/test_runner.js +307 -0
- data/test/old_test_helper.rb +43 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/class_options_test.rb +52 -0
- data/test/unit/comatose_page_test.rb +128 -0
- data/test/unit/processing_context_test.rb +108 -0
- data/test/unit/text_filters_test.rb +52 -0
- data.tar.gz.sig +1 -0
- metadata +379 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'support/class_options'
|
3
|
+
|
4
|
+
class ClassOptionsTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
class Opts
|
7
|
+
define_option :nothing, nil
|
8
|
+
define_option :nada
|
9
|
+
define_option :name, "Matt"
|
10
|
+
define_option :age, 30
|
11
|
+
define_option :mode, :test
|
12
|
+
define_option :listing, ['one', 'two', 'three']
|
13
|
+
define_option :opts_1, {'one'=>'ONE', 'two'=>'TWO'}
|
14
|
+
define_option :opts_2, {:one=>'ONE', :two=>'TWO'}
|
15
|
+
define_option :should_work, true
|
16
|
+
define_option :would_surprise, false
|
17
|
+
end
|
18
|
+
|
19
|
+
should "allow nil as a default" do
|
20
|
+
assert_equal nil, Opts.nothing
|
21
|
+
assert_equal nil, Opts.nada
|
22
|
+
end
|
23
|
+
|
24
|
+
should "allow boolean defaults" do
|
25
|
+
assert_equal true, Opts.should_work
|
26
|
+
assert_equal false, Opts.would_surprise
|
27
|
+
end
|
28
|
+
|
29
|
+
should "allow string defaults" do
|
30
|
+
assert_equal 'Matt', Opts.name
|
31
|
+
end
|
32
|
+
|
33
|
+
should "allow numeric defaults" do
|
34
|
+
assert_equal 30, Opts.age
|
35
|
+
end
|
36
|
+
|
37
|
+
should "allow symbolic defaults" do
|
38
|
+
assert_equal :test, Opts.mode
|
39
|
+
end
|
40
|
+
|
41
|
+
should "allow array literals as defaults" do
|
42
|
+
assert_equal ['one', 'two', 'three'], Opts.listing
|
43
|
+
end
|
44
|
+
|
45
|
+
should "allow hash literals as defaults" do
|
46
|
+
h1 = {'one'=>'ONE', 'two'=>'TWO'}
|
47
|
+
h2 = {:one=>'ONE', :two=>'TWO'}
|
48
|
+
assert_equal h1, Opts.opts_1
|
49
|
+
assert_equal h2, Opts.opts_2
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class ComatosePageTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
fixtures :comatose_pages
|
6
|
+
|
7
|
+
should "create page" do
|
8
|
+
assert_difference Page, :count do
|
9
|
+
page = create_page :title=>'New Page Name'
|
10
|
+
assert !page.new_record?, "#{page.errors.full_messages.to_sentence}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
should "create a new version of an updated page" do
|
15
|
+
page = create_page
|
16
|
+
assert_difference page, :version do
|
17
|
+
page.update_attribute :body, "I'm the new content!"
|
18
|
+
assert_equal "<p>I’m the new content!</p>", page.to_html
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
should "render content through textile and liquid processors" do
|
23
|
+
page = create_page :title=>'Title Here', :body=>'h1. {{page.title}}'
|
24
|
+
assert_equal "<h1>Title Here</h1>", page.to_html
|
25
|
+
end
|
26
|
+
|
27
|
+
should "not allow creation of page when missing a title" do
|
28
|
+
assert_no_difference Page, :count do
|
29
|
+
p = create_page(:title => nil)
|
30
|
+
assert p.errors.on(:title)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should "have good fixtures for this to work out" do
|
35
|
+
assert_equal 'Home Page', root_page.title
|
36
|
+
assert_equal 'home-page', root_page.slug
|
37
|
+
assert_equal 'Comatose', root_page.author
|
38
|
+
assert_equal "", root_page.full_path
|
39
|
+
assert_equal 'faq', faq_page.full_path
|
40
|
+
end
|
41
|
+
|
42
|
+
should "generate slugs correctly" do
|
43
|
+
assert_equal 'hello-how-are-you', new_page_slug( "Hello, How Are You?" )
|
44
|
+
assert_equal 'i-have-too-much-space', new_page_slug( "I have too much space" )
|
45
|
+
assert_equal 'i-have-leading-and-trailing-space', new_page_slug( " I have leading and trailing space " )
|
46
|
+
assert_equal 'what-about-dashes', new_page_slug( "What about - dashes?" )
|
47
|
+
assert_equal 'a-bizarre-title', new_page_slug( 'A !@!@#$%^<>&*()_+{} Bizarre TiTle!' )
|
48
|
+
assert_equal '001-numbers-too', new_page_slug( "001 Numbers too" )
|
49
|
+
end
|
50
|
+
|
51
|
+
should "generate page paths correctly" do
|
52
|
+
products = root_page.children.create( :title=>'Products' )
|
53
|
+
assert_equal 'products', products.full_path
|
54
|
+
|
55
|
+
books = products.children.create( :title=>'Books' )
|
56
|
+
assert_equal 'products/books', books.full_path
|
57
|
+
|
58
|
+
novels = books.children.create( :title=>'Novels' )
|
59
|
+
assert_equal 'products/books/novels', novels.full_path
|
60
|
+
|
61
|
+
comics = books.children.create( :title=>'Comics' )
|
62
|
+
assert_equal 'products/books/comics', comics.full_path
|
63
|
+
end
|
64
|
+
|
65
|
+
should "update page paths when pages are moved" do
|
66
|
+
page = comatose_page :params
|
67
|
+
assert_equal 'params', page.full_path
|
68
|
+
|
69
|
+
q1pg = comatose_page :question_one
|
70
|
+
page.parent_id = q1pg.id
|
71
|
+
assert page.save, "Page.save"
|
72
|
+
|
73
|
+
page.reload
|
74
|
+
assert_equal 'faq/question-one/params', page.full_path
|
75
|
+
|
76
|
+
q1pg.reload
|
77
|
+
q1pg.slug = "q-1"
|
78
|
+
assert q1pg.save, "Page.save"
|
79
|
+
assert_equal "faq/q-1", q1pg.full_path
|
80
|
+
|
81
|
+
page.reload
|
82
|
+
assert_equal 'faq/q-1/params', page.full_path
|
83
|
+
end
|
84
|
+
|
85
|
+
should "set an AR error with processor syntax error info" do
|
86
|
+
page = create_page :title=>'Title Here', :body=>'h1. {% crap %}'
|
87
|
+
assert !page.save, page.errors.full_messages.to_sentence
|
88
|
+
end
|
89
|
+
|
90
|
+
should "render body text accurately" do
|
91
|
+
assert_equal "<h1>Home Page</h1>\n\n\n\t<p>This is your <strong>home page</strong>.</p>", root_page.to_html
|
92
|
+
assert_equal "<h1>Frequently Asked Questions</h1>\n\n\n\t<h2><a href=\"/faq/question-one\">Question One?</a></h2>\n\n\n<p>Content for <strong>question one</strong>.</p>\n\n\t<h2><a href=\"/faq/question-two\">Question Two?</a></h2>\n\n\n<p>Content for <strong>question two</strong>.</p>", faq_page.to_html
|
93
|
+
end
|
94
|
+
|
95
|
+
should "render data from parameterized calls too" do
|
96
|
+
assert_equal "<p>I’m</p>", param_driven_page.to_html
|
97
|
+
assert_equal "<p>I’m From the Params Hash</p>", param_driven_page.to_html(:extra=>'From the Params Hash')
|
98
|
+
end
|
99
|
+
|
100
|
+
should "render data from a Drop" do
|
101
|
+
Comatose.define_drop "app" do
|
102
|
+
def test
|
103
|
+
"From Drop"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
p = create_page(:title=>'Test Drop', :body=>'{{ app.test }}')
|
107
|
+
assert_equal "<p>From Drop</p>", p.to_html
|
108
|
+
end
|
109
|
+
|
110
|
+
protected
|
111
|
+
|
112
|
+
def new_page_slug(title)
|
113
|
+
create_page( :title=>title ).slug
|
114
|
+
end
|
115
|
+
|
116
|
+
def root_page
|
117
|
+
Page.root
|
118
|
+
end
|
119
|
+
|
120
|
+
def faq_page
|
121
|
+
comatose_page :faq
|
122
|
+
end
|
123
|
+
|
124
|
+
def param_driven_page
|
125
|
+
comatose_page :params
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'comatose'
|
3
|
+
|
4
|
+
class ProcessingContextTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
fixtures :comatose_pages
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@root = comatose_page( :home_page )
|
10
|
+
@binding = Comatose::ProcessingContext.new(@root)
|
11
|
+
end
|
12
|
+
|
13
|
+
should "process liquid tags with no filters correctly" do
|
14
|
+
result = TextFilters.transform('{{ page.title }}', @binding, :none, :liquid)
|
15
|
+
assert_equal 'Home Page', result
|
16
|
+
end
|
17
|
+
|
18
|
+
should "process erb tags correctly" do
|
19
|
+
result = TextFilters.transform('<%= page.title %>', @binding, :none, :erb)
|
20
|
+
assert_equal 'Home Page', result
|
21
|
+
end
|
22
|
+
|
23
|
+
should "support text translation and processing with ERB" do
|
24
|
+
src = 'The title is *<%= title %>*'
|
25
|
+
if TextFilters.all.keys.include? 'None'
|
26
|
+
assert_equal "The title is *Home Page*", TextFilters.transform(src, @binding, :none, :erb)
|
27
|
+
end
|
28
|
+
if TextFilters.all.keys.include? 'Textile'
|
29
|
+
assert_equal "<p>The title is <strong>Home Page</strong></p>", TextFilters.transform(src, @binding, :textile, :erb)
|
30
|
+
end
|
31
|
+
if TextFilters.all.keys.include? 'Markdown'
|
32
|
+
assert_equal "<p>The title is <em>Home Page</em></p>", TextFilters.transform(src, @binding, 'Markdown', :erb)
|
33
|
+
end
|
34
|
+
if TextFilters.all.keys.include? 'RDoc'
|
35
|
+
assert_equal "<p>\nThe title is *Home Page*\n</p>\n", TextFilters.transform(src, @binding, :rdoc, :erb)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
should "support text translation and processing with Liquid" do
|
40
|
+
src = 'The title is *{{ page.title }}*'
|
41
|
+
assert_equal "The title is *Home Page*", TextFilters.transform(src, @binding, :none, :liquid)
|
42
|
+
if TextFilters.all_titles.include? 'Textile'
|
43
|
+
assert_equal "<p>The title is <strong>Home Page</strong></p>", TextFilters.transform(src, @binding, :textile, :liquid)
|
44
|
+
end
|
45
|
+
if TextFilters.all_titles.include? 'Markdown'
|
46
|
+
assert_equal "<p>The title is <em>Home Page</em></p>", TextFilters.transform(src, @binding, :markdown, :liquid)
|
47
|
+
end
|
48
|
+
if TextFilters.all_titles.include? 'RDoc'
|
49
|
+
assert_equal "<p>\nThe title is *Home Page*\n</p>\n", TextFilters.transform(src, @binding, :rdoc, :liquid)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
UNSAFE_PROPS = %w(version position)
|
54
|
+
SAFE_PROPS = %w(id full_path uri slug keywords title to_html filter_type author updated_at created_at)
|
55
|
+
|
56
|
+
should "allow access to safe properties and methods when processing with ERB" do
|
57
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
58
|
+
SAFE_PROPS.each do |prop|
|
59
|
+
assert_not_equal '', TextFilters.transform("<%= page.#{prop} %>", binding, :none, :liquid), "on page.#{prop}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
should "prevent access to protected properties and methods when processing with ERB" do
|
64
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
65
|
+
UNSAFE_PROPS.each do |prop|
|
66
|
+
assert_equal "<%= page.#{prop} %>", TextFilters.transform("<%= page.#{prop} %>", binding, :none, :liquid), "on page.#{prop}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
should "allow access to safe properties and methods when processing with Liquid" do
|
71
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
72
|
+
SAFE_PROPS.each do |prop|
|
73
|
+
assert_not_equal '', TextFilters.transform("{{ page.#{prop} }}", binding, :none, :liquid), "on page.#{prop}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
should "prevent access to protected properties and methods when processing with Liquid" do
|
78
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
79
|
+
UNSAFE_PROPS.each do |prop|
|
80
|
+
assert_equal '', TextFilters.transform("{{ page.#{prop} }}", binding, :none, :liquid), "on page.#{prop}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
should "allow referenceing of defined ComatoseDrops" do
|
85
|
+
Comatose.define_drop "app" do
|
86
|
+
def test
|
87
|
+
"TEST"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
result = TextFilters.transform('{{ app.test }}', @binding, :none, :liquid)
|
92
|
+
assert_equal 'TEST', result
|
93
|
+
|
94
|
+
result2 = TextFilters.transform('<%= app.test %>', @binding, :none, :erb)
|
95
|
+
assert_equal 'TEST', result2
|
96
|
+
end
|
97
|
+
|
98
|
+
should "let ComatoseDrop errors bubble upward" do
|
99
|
+
Comatose.define_drop "broken" do
|
100
|
+
def test
|
101
|
+
"TEST #{crap}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_raise(RuntimeError) { TextFilters.transform('{{ broken.test }}', @binding, :none, :liquid) }
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'liquid'
|
5
|
+
|
6
|
+
require 'text_filters'
|
7
|
+
# require 'comatose/page'
|
8
|
+
# require 'comatose/processing_context'
|
9
|
+
|
10
|
+
class TextFiltersTest < Test::Unit::TestCase
|
11
|
+
# fixtures :comatose_pages
|
12
|
+
# self.use_instantiated_fixtures = true
|
13
|
+
|
14
|
+
should "not alter output when using filter :none" do
|
15
|
+
assert_equal "line one\nline two", TextFilters.render_text("line one\nline two", :none)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "convert newlines into <br/>s when using :simple filter" do
|
19
|
+
assert_equal "line one<br/>line two", TextFilters.render_text("line one\nline two", :simple)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "support Textile, if it's available, using :textile or 'Textile' as a key" do
|
23
|
+
if TextFilters.all.keys.include? 'Textile'
|
24
|
+
assert_equal "<p>testing <strong>bold</strong></p>", TextFilters.render_text("testing *bold*", :textile)
|
25
|
+
assert_equal "<p>testing <strong>bold</strong></p>", TextFilters.render_text("testing *bold*", 'Textile')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
should "support Markdown, if it's available, using :markdown or 'Markdown' as a key" do
|
30
|
+
if TextFilters.all.keys.include? 'Markdown'
|
31
|
+
assert_equal "<p>testing <em>bold</em></p>", TextFilters.render_text("testing *bold*", :markdown)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
should "support RDoc, if it's available, using :rdoc or 'RDoc' as a key" do
|
36
|
+
if TextFilters.all.keys.include? 'RDoc'
|
37
|
+
assert_equal "<p>\ntesting <b>bold</b>\n</p>\n", TextFilters.render_text("testing *bold*", :rdoc)
|
38
|
+
assert_equal "<p>\ntesting <b>bold</b>\n</p>\n", TextFilters.render_text("testing *bold*", 'RDoc')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
should "support transformation of parameters via ERB" do
|
43
|
+
src = 'Hello, <%= name %>'
|
44
|
+
assert_equal "Hello, Matt", TextFilters.transform(src, {'name'=>'Matt'}, :none, :erb)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "support transformation of parameters via Liquid" do
|
48
|
+
src = 'Hello, {{ name }}'
|
49
|
+
assert_equal "Hello, Matt", TextFilters.transform(src, {'name'=>'Matt'}, :none, :liquid)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
v� x���/��1|�n���<���)��Υ,�s�-���k�oo(�xE�O���W�
|