joho-Markaby 0.6.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 +43 -0
- data/Markaby.gemspec +69 -0
- data/README +256 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/init.rb +13 -0
- data/lib/markaby.rb +35 -0
- data/lib/markaby/builder.rb +289 -0
- data/lib/markaby/cssproxy.rb +48 -0
- data/lib/markaby/kernel_method.rb +7 -0
- data/lib/markaby/metaid.rb +16 -0
- data/lib/markaby/rails.rb +90 -0
- data/lib/markaby/tags.rb +179 -0
- data/lib/markaby/template.rb +31 -0
- data/setup.rb +1551 -0
- data/test/rails/markaby/_monkeys.mab +12 -0
- data/test/rails/markaby/broken.mab +7 -0
- data/test/rails/markaby/create.mab +9 -0
- data/test/rails/markaby/index.mab +7 -0
- data/test/rails/monkeys.html +13 -0
- data/test/rails/test_helper.rb +7 -0
- data/test/rails/test_preamble.rb +30 -0
- data/test/rails_test.rb +99 -0
- data/test/test_markaby.rb +126 -0
- data/tools/rakehelp.rb +106 -0
- metadata +94 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
MARKABY_ROOT = File.join(File.dirname(__FILE__), '..', '..')
|
4
|
+
|
5
|
+
require File.join(MARKABY_ROOT,
|
6
|
+
'..', # plugins/
|
7
|
+
'..', # vendor/
|
8
|
+
'..', # RAILS_ROOT
|
9
|
+
'config',
|
10
|
+
'boot'
|
11
|
+
)
|
12
|
+
|
13
|
+
Rails::Initializer.run
|
14
|
+
|
15
|
+
require 'action_controller/test_process'
|
16
|
+
|
17
|
+
Dependencies.load_paths.unshift File.dirname(__FILE__)
|
18
|
+
|
19
|
+
$:.unshift MARKABY_ROOT
|
20
|
+
|
21
|
+
require 'init'
|
22
|
+
|
23
|
+
require 'markaby/kernel_method'
|
24
|
+
|
25
|
+
|
26
|
+
class Monkey < Struct.new(:name)
|
27
|
+
def self.find(*args)
|
28
|
+
@@monkeys ||= ['Frank', 'Benny', 'Paul'].map { |name| Monkey.new name }
|
29
|
+
end
|
30
|
+
end
|
data/test/rails_test.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'rails', 'test_preamble')
|
2
|
+
|
3
|
+
class MarkabyController < ActionController::Base
|
4
|
+
|
5
|
+
helper :test
|
6
|
+
|
7
|
+
@@locals = { :monkeys => Monkey.find(:all) }
|
8
|
+
|
9
|
+
def rescue_action(e) raise e end;
|
10
|
+
|
11
|
+
def index
|
12
|
+
@monkeys = Monkey.find(:all)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
flash[:message] = 'Hello World'
|
17
|
+
end
|
18
|
+
|
19
|
+
def broken
|
20
|
+
end
|
21
|
+
|
22
|
+
def partial_rendering
|
23
|
+
render :partial => 'monkeys', :locals => @@locals
|
24
|
+
end
|
25
|
+
|
26
|
+
def partial_rendering_with_stringy_keys_in_local_assigns
|
27
|
+
render :partial => 'monkeys', :locals => { 'monkeys' => Monkey.find(:all) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def inline_helper_rendering
|
31
|
+
render_markaby(:locals => @@locals) { ul { monkeys.each { |m| li m.name } } }
|
32
|
+
end
|
33
|
+
|
34
|
+
def basic_inline_rendering
|
35
|
+
render :inline => mab { ul { Monkey.find(:all).each { |m| li m.name } } }
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
class MarkabyOnRailsTest < Test::Unit::TestCase
|
41
|
+
def setup
|
42
|
+
@request = ActionController::TestRequest.new
|
43
|
+
@response = ActionController::TestResponse.new
|
44
|
+
@controller = MarkabyController.new
|
45
|
+
@controller.template_root = File.join(File.dirname(__FILE__), 'rails')
|
46
|
+
@expected_monkey_names = '<ul><li>Frank</li><li>Benny</li><li>Paul</li></ul>'
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_index
|
50
|
+
process :index
|
51
|
+
assert_response :success
|
52
|
+
assert_template 'markaby/index'
|
53
|
+
assert_equal @expected_monkey_names, @response.body
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_partial_rendering
|
57
|
+
Markaby::Builder.set :indent, 2
|
58
|
+
process :partial_rendering
|
59
|
+
expected_html = File.read(File.join(File.dirname(__FILE__), 'rails', 'monkeys.html'))
|
60
|
+
assert_response :success
|
61
|
+
assert_template 'markaby/_monkeys'
|
62
|
+
assert_equal expected_html, @response.body
|
63
|
+
|
64
|
+
# From actionpack/lib/action_view/base.rb:
|
65
|
+
# String keys are deprecated and will be removed shortly.
|
66
|
+
#
|
67
|
+
assert_raises ActionView::TemplateError do
|
68
|
+
process :partial_rendering_with_stringy_keys_in_local_assigns
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_inline_helper_rendering
|
73
|
+
process :inline_helper_rendering
|
74
|
+
assert_response :success
|
75
|
+
assert_equal @expected_monkey_names, @response.body
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_basic_inline_rendering
|
79
|
+
process :basic_inline_rendering
|
80
|
+
assert_response :success
|
81
|
+
assert_equal @expected_monkey_names, @response.body
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_flash_and_form_tag
|
85
|
+
process :create
|
86
|
+
assert_response :success
|
87
|
+
assert_select 'form div input[type=submit]', 1
|
88
|
+
assert_select 'p', 'Hello World'
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_template_error_has_correct_line_number
|
92
|
+
begin
|
93
|
+
process :broken
|
94
|
+
rescue ActionView::TemplateError => error
|
95
|
+
assert_equal 5, error.line_number.to_i
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
|
5
|
+
require 'markaby'
|
6
|
+
require 'markaby/kernel_method'
|
7
|
+
|
8
|
+
module MarkabyTestHelpers
|
9
|
+
def link_to(obj)
|
10
|
+
%{<a href="">#{obj}</a>}
|
11
|
+
end
|
12
|
+
def pluralize(string)
|
13
|
+
string + "s"
|
14
|
+
end
|
15
|
+
module_function :link_to, :pluralize
|
16
|
+
end
|
17
|
+
|
18
|
+
class MarkabyTest < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def assert_exception(exclass, exmsg, *mab_args, &block)
|
21
|
+
begin
|
22
|
+
mab(*mab_args, &block)
|
23
|
+
rescue Exception => e
|
24
|
+
assert_equal exclass, e.class
|
25
|
+
assert_equal exmsg, e.message
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_simple
|
30
|
+
assert_equal "<hr/>", mab { hr }
|
31
|
+
assert_equal "<hr/><br/>", mab { hr; br }
|
32
|
+
assert_equal "<p>foo</p>", mab { p 'foo' }
|
33
|
+
assert_equal "<p>foo</p>", mab { p { 'foo' } }
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_classes_and_ids
|
37
|
+
assert_equal %{<div class="one"></div>}, mab { div.one '' }
|
38
|
+
assert_equal %{<div class="one two"></div>}, mab { div.one.two '' }
|
39
|
+
assert_equal %{<div id="three"></div>}, mab { div.three! '' }
|
40
|
+
assert_equal %{<hr class="hidden"/>}, mab { hr.hidden }
|
41
|
+
assert_equal %{<input class="foo" name="bar" id="bar"/>}, mab { input.foo :id => 'bar' }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_escaping
|
45
|
+
assert_equal "<h1>Apples & Oranges</h1>", mab { h1 'Apples & Oranges' }
|
46
|
+
assert_equal "<h1>Apples & Oranges</h1>", mab { h1 { 'Apples & Oranges' } }
|
47
|
+
assert_equal "<h1 class=\"fruits&floots\">Apples</h1>", mab { h1 'Apples', :class => 'fruits&floots' }
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_capture
|
51
|
+
builder = Markaby::Builder.new
|
52
|
+
assert builder.to_s.empty?
|
53
|
+
assert_equal "<h1>TEST</h1>", builder.capture { h1 'TEST' }
|
54
|
+
assert builder.to_s.empty?
|
55
|
+
assert mab { capture { h1 'hello world' }; nil }.empty?
|
56
|
+
assert_equal mab { div { h1 'TEST' } }, mab { div { capture { h1 'TEST' } } }
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_ivars
|
60
|
+
html = "<div><h1>Steve</h1><div><h2>Gerald</h2></div><h3>Gerald</h3></div>"
|
61
|
+
assert_equal html, mab { div { @name = 'Steve'; h1 @name; div { @name = 'Gerald'; h2 @name }; h3 @name } }
|
62
|
+
assert_equal html, mab { div { @name = 'Steve'; h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
|
63
|
+
assert_equal html, mab(:name => 'Steve') { div { h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_ivars_without_at_symbol
|
67
|
+
assert_equal "<h1>Hello World</h1>", mab { @message = 'Hello World'; h1 message }
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_helpers
|
71
|
+
Markaby::Builder.ignored_helpers.clear
|
72
|
+
assert_equal %{squirrels}, mab({}, MarkabyTestHelpers) { pluralize('squirrel') }
|
73
|
+
assert_equal %{<a href="">edit</a>}, mab({}, MarkabyTestHelpers) { link_to('edit') }
|
74
|
+
assert mab({}, MarkabyTestHelpers) { @output_helpers = false; link_to('edit'); nil }.empty?
|
75
|
+
Markaby::Builder.ignore_helpers :pluralize
|
76
|
+
assert_exception(NoMethodError, "no such method `pluralize'", {}, MarkabyTestHelpers) { pluralize('squirrel') }
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_builder_bang_methods
|
80
|
+
assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", mab { instruct! }
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_fragments
|
84
|
+
assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <small>Miniature</small> and <strong>Large</strong></h2><h3>Donkeys</h3><h4>Parakeet <b><i>Innocent IV</i></b> in Classic Chartreuse</h4></div>},
|
85
|
+
mab { div { h1 "Monkeys"; h2 { "Giraffes #{small 'Miniature' } and #{strong 'Large'}" }; h3 "Donkeys"; h4 { "Parakeet #{b { i 'Innocent IV' }} in Classic Chartreuse" } } }
|
86
|
+
assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <strong>Miniature</strong></h2><h3>Donkeys</h3></div>},
|
87
|
+
mab { div { h1 "Monkeys"; h2 { "Giraffes #{strong 'Miniature' }" }; h3 "Donkeys" } }
|
88
|
+
assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <small>Miniature</small> and <strong>Large</strong></h2><h3>Donkeys</h3><h4>Parakeet <strong>Large</strong> as well...</h4></div>},
|
89
|
+
mab { div { @a = small 'Miniature'; @b = strong 'Large'; h1 "Monkeys"; h2 { "Giraffes #{@a} and #{@b}" }; h3 "Donkeys"; h4 { "Parakeet #{@b} as well..." } } }
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_invalid_xhtml
|
93
|
+
assert_exception(NoMethodError, "no such method `dav'") { dav {} }
|
94
|
+
assert_exception(Markaby::InvalidXhtmlError, "no attribute `styl' on div elements") { div(:styl => 'ok') {} }
|
95
|
+
assert_exception(Markaby::InvalidXhtmlError, "no attribute `class' on tbody elements") { tbody.okay {} }
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_full_doc_transitional
|
99
|
+
doc = mab { xhtml_transitional { head { title 'OKay' } } }
|
100
|
+
assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
|
101
|
+
assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">})
|
102
|
+
assert doc.include?(%{<title>OKay</title>})
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_full_doc_strict
|
106
|
+
doc = mab { xhtml_strict { head { title 'OKay' } } }
|
107
|
+
assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
|
108
|
+
assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
|
109
|
+
assert doc.include?(%{<title>OKay</title>})
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_full_doc_frameset
|
113
|
+
doc = mab { xhtml_frameset { head { title 'OKay' } } }
|
114
|
+
assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
|
115
|
+
assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">})
|
116
|
+
assert doc.include?(%{<title>OKay</title>})
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_root_attributes_can_be_changed
|
120
|
+
doc = mab { xhtml_strict(:lang => 'fr') { head { title { 'Salut!' } } } }
|
121
|
+
assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
|
122
|
+
assert doc.include?(%{<title>Salut!</title>})
|
123
|
+
assert doc.include?(%{ lang="fr"})
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
data/tools/rakehelp.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
|
2
|
+
def make(makedir)
|
3
|
+
Dir.chdir(makedir) do
|
4
|
+
sh 'make'
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
def extconf(dir)
|
10
|
+
Dir.chdir(dir) do ruby "extconf.rb" end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def setup_tests
|
15
|
+
Rake::TestTask.new do |t|
|
16
|
+
t.libs << "test"
|
17
|
+
t.test_files = FileList['test/test*.rb']
|
18
|
+
t.verbose = true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def setup_clean otherfiles
|
24
|
+
files = ['build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log'] + otherfiles
|
25
|
+
CLEAN.include(files)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def setup_rdoc files
|
30
|
+
Rake::RDocTask.new do |rdoc|
|
31
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
32
|
+
rdoc.options << '--line-numbers'
|
33
|
+
rdoc.rdoc_files.add(files)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def setup_extension(dir, extension)
|
39
|
+
ext = "ext/#{dir}"
|
40
|
+
ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
|
41
|
+
ext_files = FileList[
|
42
|
+
"#{ext}/*.c",
|
43
|
+
"#{ext}/*.h",
|
44
|
+
"#{ext}/extconf.rb",
|
45
|
+
"#{ext}/Makefile",
|
46
|
+
"lib"
|
47
|
+
]
|
48
|
+
|
49
|
+
task "lib" do
|
50
|
+
directory "lib"
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "Builds just the #{extension} extension"
|
54
|
+
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
55
|
+
|
56
|
+
file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
|
57
|
+
extconf "#{ext}"
|
58
|
+
end
|
59
|
+
|
60
|
+
file ext_so => ext_files do
|
61
|
+
make "#{ext}"
|
62
|
+
cp ext_so, "lib"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def setup_gem(pkg_name, pkg_version, author, summary, dependencies, test_file)
|
68
|
+
pkg_version = pkg_version
|
69
|
+
pkg_name = pkg_name
|
70
|
+
pkg_file_name = "#{pkg_name}-#{pkg_version}"
|
71
|
+
|
72
|
+
spec = Gem::Specification.new do |s|
|
73
|
+
s.name = pkg_name
|
74
|
+
s.version = pkg_version
|
75
|
+
s.platform = Gem::Platform::RUBY
|
76
|
+
s.author = author
|
77
|
+
s.summary = summary
|
78
|
+
s.test_file = test_file
|
79
|
+
s.has_rdoc = true
|
80
|
+
s.extra_rdoc_files = [ "README" ]
|
81
|
+
dependencies.each do |dep|
|
82
|
+
s.add_dependency(*dep)
|
83
|
+
end
|
84
|
+
s.files = %w(README Rakefile setup.rb) +
|
85
|
+
Dir.glob("{bin,doc,test,lib}/**/*") +
|
86
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
87
|
+
Dir.glob("examples/**/*.rb") +
|
88
|
+
Dir.glob("tools/*.rb")
|
89
|
+
|
90
|
+
s.require_path = "lib"
|
91
|
+
s.extensions = FileList["ext/**/extconf.rb"].to_a
|
92
|
+
|
93
|
+
s.bindir = "bin"
|
94
|
+
end
|
95
|
+
|
96
|
+
Rake::GemPackageTask.new(spec) do |p|
|
97
|
+
p.gem_spec = spec
|
98
|
+
p.need_tar = true
|
99
|
+
end
|
100
|
+
|
101
|
+
task :install do
|
102
|
+
sh %{rake package}
|
103
|
+
sh %{gem install pkg/#{pkg_name}-#{pkg_version}}
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: joho-Markaby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- _why
|
8
|
+
- Tim Fletcher
|
9
|
+
- John Barton
|
10
|
+
- spox
|
11
|
+
- smtlaissezfaire
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2009-08-23 00:00:00 -07:00
|
17
|
+
default_executable:
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
20
|
+
name: builder
|
21
|
+
type: :runtime
|
22
|
+
version_requirement:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 2.0.0
|
28
|
+
version:
|
29
|
+
description: Tim Fletcher and _why's ruby driven HTML templating system
|
30
|
+
email: jrbarton@gmail.com
|
31
|
+
executables: []
|
32
|
+
|
33
|
+
extensions: []
|
34
|
+
|
35
|
+
extra_rdoc_files:
|
36
|
+
- README
|
37
|
+
files:
|
38
|
+
- CHANGELOG
|
39
|
+
- Markaby.gemspec
|
40
|
+
- README
|
41
|
+
- Rakefile
|
42
|
+
- VERSION
|
43
|
+
- init.rb
|
44
|
+
- lib/markaby.rb
|
45
|
+
- lib/markaby/builder.rb
|
46
|
+
- lib/markaby/cssproxy.rb
|
47
|
+
- lib/markaby/kernel_method.rb
|
48
|
+
- lib/markaby/metaid.rb
|
49
|
+
- lib/markaby/rails.rb
|
50
|
+
- lib/markaby/tags.rb
|
51
|
+
- lib/markaby/template.rb
|
52
|
+
- setup.rb
|
53
|
+
- test/rails/markaby/_monkeys.mab
|
54
|
+
- test/rails/markaby/broken.mab
|
55
|
+
- test/rails/markaby/create.mab
|
56
|
+
- test/rails/markaby/index.mab
|
57
|
+
- test/rails/monkeys.html
|
58
|
+
- test/rails/test_helper.rb
|
59
|
+
- test/rails/test_preamble.rb
|
60
|
+
- test/rails_test.rb
|
61
|
+
- test/test_markaby.rb
|
62
|
+
- tools/rakehelp.rb
|
63
|
+
has_rdoc: false
|
64
|
+
homepage: http://joho.github.com/markaby/
|
65
|
+
licenses:
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options:
|
68
|
+
- --charset=UTF-8
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 1.3.5
|
87
|
+
signing_key:
|
88
|
+
specification_version: 3
|
89
|
+
summary: Markup as Ruby, write HTML in your native Ruby tongue
|
90
|
+
test_files:
|
91
|
+
- test/rails/test_helper.rb
|
92
|
+
- test/rails/test_preamble.rb
|
93
|
+
- test/rails_test.rb
|
94
|
+
- test/test_markaby.rb
|