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.
Files changed (192) hide show
  1. data/CHANGELOG +198 -0
  2. data/Gemfile +29 -0
  3. data/Gemfile.lock +130 -0
  4. data/INSTALL +14 -0
  5. data/LICENSE +20 -0
  6. data/Manifest +188 -0
  7. data/README +0 -0
  8. data/README.markdown +113 -0
  9. data/Rakefile +5 -0
  10. data/SPECS +61 -0
  11. data/app/controllers/application_controller.rb +3 -0
  12. data/app/controllers/comatose/admin_controller.rb +425 -0
  13. data/app/controllers/comatose/application_controller.rb +30 -0
  14. data/app/controllers/comatose/base_controller.rb +167 -0
  15. data/app/helpers/application_helper.rb +2 -0
  16. data/app/helpers/comatose/admin_helper.rb +78 -0
  17. data/app/helpers/comatose/application_helper.rb +2 -0
  18. data/app/helpers/comatose/base_helper.rb +5 -0
  19. data/app/models/comatose/page.rb +166 -0
  20. data/app/views/comatose/admin/_form.html.erb +108 -0
  21. data/app/views/comatose/admin/_page_list_item.html.erb +62 -0
  22. data/app/views/comatose/admin/delete.html.erb +18 -0
  23. data/app/views/comatose/admin/edit.html.erb +5 -0
  24. data/app/views/comatose/admin/index.html.erb +34 -0
  25. data/app/views/comatose/admin/new.html.erb +5 -0
  26. data/app/views/comatose/admin/reorder.html.erb +30 -0
  27. data/app/views/comatose/admin/versions.html.erb +40 -0
  28. data/app/views/layouts/application.html.erb +14 -0
  29. data/app/views/layouts/comatose/admin.html.erb +44 -0
  30. data/app/views/layouts/comatose/base.html.erb +14 -0
  31. data/comatose-rubyisbeautiful.gemspec +65 -0
  32. data/config/environment.rb +5 -0
  33. data/config/environments/development.rb +26 -0
  34. data/config/environments/production.rb +49 -0
  35. data/config/environments/test.rb +35 -0
  36. data/config/locales/en.yml +5 -0
  37. data/config.ru +4 -0
  38. data/db/seeds.rb +11 -0
  39. data/lib/comatose/configuration.rb +87 -0
  40. data/lib/comatose/drop.rb +45 -0
  41. data/lib/comatose/engine.rb +28 -0
  42. data/lib/comatose/filters/inline_filter.rb +15 -0
  43. data/lib/comatose/filters/timeago_filter.rb +14 -0
  44. data/lib/comatose/filters/translation_filter.rb +11 -0
  45. data/lib/comatose/locale_constraint.rb +15 -0
  46. data/lib/comatose/logger.rb +10 -0
  47. data/lib/comatose/page_wrapper.rb +147 -0
  48. data/lib/comatose/processing_context.rb +103 -0
  49. data/lib/comatose/routes.rb +70 -0
  50. data/lib/comatose/tasks/admin.rb +57 -0
  51. data/lib/comatose/tasks/data.rb +79 -0
  52. data/lib/comatose/tasks/setup.rb +118 -0
  53. data/lib/comatose/text_filters.rb +148 -0
  54. data/lib/comatose/version.rb +9 -0
  55. data/lib/comatose.rb +88 -0
  56. data/lib/generators/comatose/USAGE +7 -0
  57. data/lib/generators/comatose/comatose_generator.rb +37 -0
  58. data/lib/generators/comatose/templates/comatose.rb +33 -0
  59. data/lib/generators/comatose/templates/migration.erb +32 -0
  60. data/lib/generators/comatose/templates/seeds.erb +2 -0
  61. data/lib/support/class_options.rb +36 -0
  62. data/lib/support/inline_rendering.rb +48 -0
  63. data/lib/support/route_mapper.rb +51 -0
  64. data/lib/tasks/comatose.rake +9 -0
  65. data/lib/text_filters/markdown.rb +14 -0
  66. data/lib/text_filters/markdown_smartypants.rb +15 -0
  67. data/lib/text_filters/none.rb +8 -0
  68. data/lib/text_filters/rdoc.rb +13 -0
  69. data/lib/text_filters/simple.rb +8 -0
  70. data/lib/text_filters/textile.rb +15 -0
  71. data/public/404.html +26 -0
  72. data/public/422.html +26 -0
  73. data/public/500.html +26 -0
  74. data/public/favicon.ico +0 -0
  75. data/public/images/comatose/collapsed.gif +0 -0
  76. data/public/images/comatose/expanded.gif +0 -0
  77. data/public/images/comatose/no-children.gif +0 -0
  78. data/public/images/comatose/page.gif +0 -0
  79. data/public/images/comatose/rails.png +0 -0
  80. data/public/images/comatose/spinner.gif +0 -0
  81. data/public/images/comatose/title-hover-bg.gif +0 -0
  82. data/public/javascripts/comatose/admin.js +406 -0
  83. data/public/javascripts/comatose/application.js +2 -0
  84. data/public/javascripts/comatose/dragdrop.js +974 -0
  85. data/public/javascripts/editor.js +452 -0
  86. data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
  87. data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
  88. data/public/javascripts/jquery/README +67 -0
  89. data/public/javascripts/jquery/jquery.js +11 -0
  90. data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
  91. data/public/javascripts/jquery/jquery.ui.js +1 -0
  92. data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
  93. data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
  94. data/public/javascripts/wymeditor/iframe/default/lbl-blockquote.png +0 -0
  95. data/public/javascripts/wymeditor/iframe/default/lbl-h1.png +0 -0
  96. data/public/javascripts/wymeditor/iframe/default/lbl-h2.png +0 -0
  97. data/public/javascripts/wymeditor/iframe/default/lbl-h3.png +0 -0
  98. data/public/javascripts/wymeditor/iframe/default/lbl-h4.png +0 -0
  99. data/public/javascripts/wymeditor/iframe/default/lbl-h5.png +0 -0
  100. data/public/javascripts/wymeditor/iframe/default/lbl-h6.png +0 -0
  101. data/public/javascripts/wymeditor/iframe/default/lbl-p.png +0 -0
  102. data/public/javascripts/wymeditor/iframe/default/lbl-pre.png +0 -0
  103. data/public/javascripts/wymeditor/iframe/default/wymiframe.css +90 -0
  104. data/public/javascripts/wymeditor/iframe/default/wymiframe.html +26 -0
  105. data/public/javascripts/wymeditor/jquery.wymeditor.js +4688 -0
  106. data/public/javascripts/wymeditor/jquery.wymeditor.min.js +1 -0
  107. data/public/javascripts/wymeditor/jquery.wymeditor.pack.js +1 -0
  108. data/public/javascripts/wymeditor/lang/bg.js +45 -0
  109. data/public/javascripts/wymeditor/lang/ca.js +45 -0
  110. data/public/javascripts/wymeditor/lang/cs.js +45 -0
  111. data/public/javascripts/wymeditor/lang/cy.js +45 -0
  112. data/public/javascripts/wymeditor/lang/de.js +45 -0
  113. data/public/javascripts/wymeditor/lang/en.js +45 -0
  114. data/public/javascripts/wymeditor/lang/es.js +45 -0
  115. data/public/javascripts/wymeditor/lang/fa.js +46 -0
  116. data/public/javascripts/wymeditor/lang/fi.js +44 -0
  117. data/public/javascripts/wymeditor/lang/fr.js +45 -0
  118. data/public/javascripts/wymeditor/lang/gl.js +45 -0
  119. data/public/javascripts/wymeditor/lang/he.js +45 -0
  120. data/public/javascripts/wymeditor/lang/hr.js +45 -0
  121. data/public/javascripts/wymeditor/lang/hu.js +45 -0
  122. data/public/javascripts/wymeditor/lang/it.js +45 -0
  123. data/public/javascripts/wymeditor/lang/nb.js +45 -0
  124. data/public/javascripts/wymeditor/lang/nl.js +45 -0
  125. data/public/javascripts/wymeditor/lang/nn.js +45 -0
  126. data/public/javascripts/wymeditor/lang/pl.js +45 -0
  127. data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
  128. data/public/javascripts/wymeditor/lang/pt.js +45 -0
  129. data/public/javascripts/wymeditor/lang/ru.js +45 -0
  130. data/public/javascripts/wymeditor/lang/sv.js +45 -0
  131. data/public/javascripts/wymeditor/lang/tr.js +45 -0
  132. data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
  133. data/public/javascripts/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
  134. data/public/javascripts/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
  135. data/public/javascripts/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
  136. data/public/javascripts/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
  137. data/public/javascripts/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
  138. data/public/javascripts/wymeditor/plugins/resizable/readme.txt +124 -0
  139. data/public/javascripts/wymeditor/plugins/tidy/README +19 -0
  140. data/public/javascripts/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
  141. data/public/javascripts/wymeditor/plugins/tidy/tidy.php +36 -0
  142. data/public/javascripts/wymeditor/plugins/tidy/wand.png +0 -0
  143. data/public/javascripts/wymeditor/skins/compact/icons.png +0 -0
  144. data/public/javascripts/wymeditor/skins/compact/skin.css +134 -0
  145. data/public/javascripts/wymeditor/skins/compact/skin.js +35 -0
  146. data/public/javascripts/wymeditor/skins/default/icons.png +0 -0
  147. data/public/javascripts/wymeditor/skins/default/skin.css +133 -0
  148. data/public/javascripts/wymeditor/skins/default/skin.js +40 -0
  149. data/public/javascripts/wymeditor/skins/minimal/images/bg.header.gif +0 -0
  150. data/public/javascripts/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
  151. data/public/javascripts/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
  152. data/public/javascripts/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
  153. data/public/javascripts/wymeditor/skins/minimal/skin.css +131 -0
  154. data/public/javascripts/wymeditor/skins/minimal/skin.js +30 -0
  155. data/public/javascripts/wymeditor/skins/silver/COPYING +674 -0
  156. data/public/javascripts/wymeditor/skins/silver/README +27 -0
  157. data/public/javascripts/wymeditor/skins/silver/images/bg.header.gif +0 -0
  158. data/public/javascripts/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
  159. data/public/javascripts/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
  160. data/public/javascripts/wymeditor/skins/silver/images/icons.silver.gif +0 -0
  161. data/public/javascripts/wymeditor/skins/silver/skin.css +297 -0
  162. data/public/javascripts/wymeditor/skins/silver/skin.js +61 -0
  163. data/public/javascripts/wymeditor/skins/twopanels/icons.png +0 -0
  164. data/public/javascripts/wymeditor/skins/twopanels/skin.css +134 -0
  165. data/public/javascripts/wymeditor/skins/twopanels/skin.js +39 -0
  166. data/public/javascripts/wymeditor/skins/wymeditor_icon.png +0 -0
  167. data/public/javascripts/wymeditor.tar +0 -0
  168. data/public/robots.txt +5 -0
  169. data/public/stylesheets/comatose/admin.css +488 -0
  170. data/public/stylesheets/comatose/base.css +9 -0
  171. data/spec/controllers/comatose/base_controller_spec.rb +14 -0
  172. data/spec/controllers/foos_controller_spec.rb +5 -0
  173. data/spec/helpers/foos_helper_spec.rb +15 -0
  174. data/spec/routing/base_routing_spec.rb +12 -0
  175. data/spec/spec_helper.rb +27 -0
  176. data/test/behaviors.rb +106 -0
  177. data/test/fixtures/comatose_pages.yml +96 -0
  178. data/test/functional/comatose_admin_controller_test.rb +114 -0
  179. data/test/functional/comatose_controller_test.rb +45 -0
  180. data/test/integration/comatose_routing_test.rb +17 -0
  181. data/test/javascripts/test.html +26 -0
  182. data/test/javascripts/test_runner.js +307 -0
  183. data/test/old_test_helper.rb +43 -0
  184. data/test/performance/browsing_test.rb +9 -0
  185. data/test/test_helper.rb +13 -0
  186. data/test/unit/class_options_test.rb +52 -0
  187. data/test/unit/comatose_page_test.rb +128 -0
  188. data/test/unit/processing_context_test.rb +108 -0
  189. data/test/unit/text_filters_test.rb +52 -0
  190. data.tar.gz.sig +1 -0
  191. metadata +379 -0
  192. 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&#8217;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&#8217;m</p>", param_driven_page.to_html
97
+ assert_equal "<p>I&#8217;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�