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.
@@ -0,0 +1,12 @@
1
+ html {
2
+ head {
3
+ title "List 'o Monkeys"
4
+ }
5
+ body {
6
+ ul {
7
+ monkeys.each { |monkey|
8
+ li monkey.name
9
+ }
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,7 @@
1
+ div {
2
+ ul {
3
+ li 'one'
4
+ li 'two'
5
+ li supercalifragilisticexpialidocious
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ unless flash[:message].nil?
2
+ p { flash[:message] }
3
+ end
4
+
5
+ form_tag '/monkeys' do
6
+ div {
7
+ submit_tag 'Save'
8
+ }
9
+ end
@@ -0,0 +1,7 @@
1
+ ul {
2
+ check_ivar_exists :monkeys
3
+
4
+ @monkeys.each { |monkey|
5
+ li monkey.name
6
+ }
7
+ }
@@ -0,0 +1,13 @@
1
+ <html>
2
+ <head>
3
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
4
+ <title>List 'o Monkeys</title>
5
+ </head>
6
+ <body>
7
+ <ul>
8
+ <li>Frank</li>
9
+ <li>Benny</li>
10
+ <li>Paul</li>
11
+ </ul>
12
+ </body>
13
+ </html>
@@ -0,0 +1,7 @@
1
+ module TestHelper
2
+ def check_ivar_exists(name)
3
+ unless instance_variables.include?(ivar_name = "@#{name}")
4
+ raise "#{ivar_name} does not exist"
5
+ end
6
+ end
7
+ end
@@ -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
@@ -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 &amp; Oranges</h1>", mab { h1 'Apples & Oranges' }
46
+ assert_equal "<h1>Apples & Oranges</h1>", mab { h1 { 'Apples & Oranges' } }
47
+ assert_equal "<h1 class=\"fruits&amp;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