mab 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +19 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +12 -0
- data/README.md +224 -0
- data/Rakefile +8 -0
- data/bench.rb +37 -0
- data/lib/mab/mixin.rb +58 -42
- data/lib/mab/version.rb +1 -1
- data/mab-0.0.1.gem +0 -0
- data/mab.gemspec +20 -0
- data/markaby/CHANGELOG.rdoc +106 -0
- data/markaby/Markaby.gemspec +109 -0
- data/markaby/README.rdoc +317 -0
- data/markaby/Rakefile +78 -0
- data/markaby/VERSION +1 -0
- data/markaby/garlic.rb +29 -0
- data/markaby/init.rb +6 -0
- data/markaby/lib/markaby.rb +30 -0
- data/markaby/lib/markaby/builder.rb +314 -0
- data/markaby/lib/markaby/builder_tags.rb +64 -0
- data/markaby/lib/markaby/cssproxy.rb +55 -0
- data/markaby/lib/markaby/kernel_method.rb +7 -0
- data/markaby/lib/markaby/rails.rb +75 -0
- data/markaby/lib/markaby/rails/current.rb +85 -0
- data/markaby/lib/markaby/rails/deprecated.rb +124 -0
- data/markaby/lib/markaby/rails/rails_builder.rb +91 -0
- data/markaby/lib/markaby/sinatra.rb +18 -0
- data/markaby/lib/markaby/tags.rb +200 -0
- data/markaby/lib/markaby/tilt.rb +8 -0
- data/markaby/spec/markaby/builder_spec.rb +118 -0
- data/markaby/spec/markaby/css_proxy_test.rb +47 -0
- data/markaby/spec/markaby/fragment_test.rb +10 -0
- data/markaby/spec/markaby/markaby_other_static.mab +1 -0
- data/markaby/spec/markaby/markaby_spec.rb +184 -0
- data/markaby/spec/markaby/markaby_test.rb +251 -0
- data/markaby/spec/markaby/rails/spec_helper.rb +29 -0
- data/markaby/spec/markaby/rails/views/layouts/layout.mab +11 -0
- data/markaby/spec/markaby/rails/views/markaby/_a_partial.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb +1 -0
- data/markaby/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +1 -0
- data/markaby/spec/markaby/rails/views/markaby/access_to_helpers.mab +1 -0
- data/markaby/spec/markaby/rails/views/markaby/broken.mab +7 -0
- data/markaby/spec/markaby/rails/views/markaby/commented_out_template.mab +1 -0
- data/markaby/spec/markaby/rails/views/markaby/correct_template_values.mab +5 -0
- data/markaby/spec/markaby/rails/views/markaby/double_output.mab +8 -0
- data/markaby/spec/markaby/rails/views/markaby/form_for.mab +2 -0
- data/markaby/spec/markaby/rails/views/markaby/form_for_with_fields.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +4 -0
- data/markaby/spec/markaby/rails/views/markaby/no_values_passed.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/partial_parent.mab +1 -0
- data/markaby/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +7 -0
- data/markaby/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +1 -0
- data/markaby/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
- data/markaby/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/render_with_ivar.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/renders_erb.rhtml +1 -0
- data/markaby/spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/routes.mab +1 -0
- data/markaby/spec/markaby/rails/views/markaby/yielding.mab +3 -0
- data/markaby/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +5 -0
- data/markaby/spec/markaby/rails/views/markaby/yielding_two.mab +7 -0
- data/markaby/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +3 -0
- data/markaby/spec/markaby/rails_test.rb +380 -0
- data/markaby/spec/markaby/rails_version_spec.rb +37 -0
- data/markaby/spec/markaby/sinatra/app.rb +49 -0
- data/markaby/spec/markaby/sinatra/sinatra_spec.rb +67 -0
- data/markaby/spec/markaby/sinatra/views/helpers.mab +1 -0
- data/markaby/spec/markaby/sinatra/views/layout.mab +7 -0
- data/markaby/spec/markaby/sinatra/views/markaby_template.mab +0 -0
- data/markaby/spec/markaby/sinatra/views/scope_instance_variables.mab +3 -0
- data/markaby/spec/markaby/sinatra/views/simple_html.mab +4 -0
- data/markaby/spec/markaby/sinatra/views/variables.mab +3 -0
- data/markaby/spec/markaby/tilt/erb.erb +1 -0
- data/markaby/spec/markaby/tilt/locals.mab +1 -0
- data/markaby/spec/markaby/tilt/markaby.mab +1 -0
- data/markaby/spec/markaby/tilt/markaby_other_static.mab +1 -0
- data/markaby/spec/markaby/tilt/render_twice.mab +1 -0
- data/markaby/spec/markaby/tilt/scope.mab +1 -0
- data/markaby/spec/markaby/tilt/yielding.mab +2 -0
- data/markaby/spec/markaby/tilt_spec.rb +75 -0
- data/markaby/spec/spec.opts +2 -0
- data/markaby/spec/spec_helper.rb +44 -0
- data/test/helper.rb +4 -0
- data/test/test_mab_builder.rb +56 -0
- data/test/test_mab_indentation.rb +66 -0
- data/test/test_mab_kernel_method.rb +10 -0
- data/test/test_mab_mixin.rb +246 -0
- metadata +92 -6
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'rails', 'spec_helper')
|
2
|
+
|
3
|
+
unless RUNNING_RAILS
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
5
|
+
|
6
|
+
describe "when rails is loaded, but is not a supported version" do
|
7
|
+
module MockRails
|
8
|
+
module VERSION
|
9
|
+
STRING = ::Markaby::Rails::UNSUPPORTED_RAILS_VERSIONS.first
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def install_mock_rails
|
14
|
+
Object.const_set(:Rails, MockRails)
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove_mock_rails
|
18
|
+
Object.class_eval do
|
19
|
+
remove_const(:Rails)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
before do
|
24
|
+
install_mock_rails
|
25
|
+
end
|
26
|
+
|
27
|
+
after do
|
28
|
+
remove_mock_rails
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should raise" do
|
32
|
+
lambda {
|
33
|
+
::Markaby::Rails.load
|
34
|
+
}.should raise_error(LoadError, "Cannot load markaby under rails version 2.0.0. See Markaby::Rails::SUPPORTED_RAILS_VERSIONS for exactly that, or redefine this constant.")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
set :views, lambda { File.join(File.dirname(__FILE__), "views") }
|
2
|
+
|
3
|
+
get '/empty_action' do
|
4
|
+
"hi there"
|
5
|
+
end
|
6
|
+
|
7
|
+
get '/markaby_template' do
|
8
|
+
mab :markaby_template
|
9
|
+
end
|
10
|
+
|
11
|
+
get '/simple_html' do
|
12
|
+
mab :simple_html
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/variables' do
|
16
|
+
mab :variables, {}, :name => "Scott Taylor"
|
17
|
+
end
|
18
|
+
|
19
|
+
get '/variables_with_locals' do
|
20
|
+
mab :variables, :locals => { :name => "Scott Taylor" }
|
21
|
+
end
|
22
|
+
|
23
|
+
get '/scope_instance_variables' do
|
24
|
+
@name = "Scott Taylor"
|
25
|
+
mab :variables
|
26
|
+
end
|
27
|
+
|
28
|
+
template :layout_index do
|
29
|
+
'div.title "Hello World!"'
|
30
|
+
end
|
31
|
+
|
32
|
+
get "/named_template" do
|
33
|
+
mab :layout_index
|
34
|
+
end
|
35
|
+
|
36
|
+
get "/layout" do
|
37
|
+
@display_layout = true
|
38
|
+
mab :layout_index
|
39
|
+
end
|
40
|
+
|
41
|
+
helpers do
|
42
|
+
def chunky
|
43
|
+
"bacon"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
get "/helpers" do
|
48
|
+
mab :helpers
|
49
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
unless RUNNING_RAILS
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
3
|
+
require 'markaby/sinatra'
|
4
|
+
require 'rack/test'
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + "/app")
|
6
|
+
|
7
|
+
describe "sinatra integration" do
|
8
|
+
include Rack::Test::Methods
|
9
|
+
|
10
|
+
def app
|
11
|
+
@app ||= Sinatra::Application
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should render an empty" do
|
15
|
+
get '/empty_action'
|
16
|
+
last_response.should be_ok
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should render an empty markaby template" do
|
20
|
+
get '/markaby_template'
|
21
|
+
last_response.should be_ok
|
22
|
+
last_response.body.should == ""
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should render a template with html in it" do
|
26
|
+
get '/simple_html'
|
27
|
+
last_response.should be_ok
|
28
|
+
last_response.body.should == "<ul><li>hi</li><li>there</li></ul>"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to pass variables" do
|
32
|
+
get '/variables'
|
33
|
+
last_response.should be_ok
|
34
|
+
last_response.body.should == '<p class="name">Scott Taylor</p>'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to pass variables through locals" do
|
38
|
+
get '/variables_with_locals'
|
39
|
+
last_response.should be_ok
|
40
|
+
last_response.body.should == '<p class="name">Scott Taylor</p>'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should have scope to instance variables" do
|
44
|
+
get '/scope_instance_variables'
|
45
|
+
last_response.should be_ok
|
46
|
+
last_response.body.should == '<p class="name">Scott Taylor</p>'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be able to use named templates" do
|
50
|
+
get "/named_template"
|
51
|
+
last_response.should be_ok
|
52
|
+
last_response.body.should == '<div class="title">Hello World!</div>'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be able to use a layout with :layout" do
|
56
|
+
get '/layout'
|
57
|
+
last_response.should be_ok
|
58
|
+
last_response.body.should == '<html><div class="title">Hello World!</div></html>'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be able to access helpers in a template" do
|
62
|
+
get '/helpers'
|
63
|
+
last_response.should be_ok
|
64
|
+
last_response.body.should == "<li>bacon</li>"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
li chunky
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
hello from erb!
|
@@ -0,0 +1 @@
|
|
1
|
+
li foo
|
@@ -0,0 +1 @@
|
|
1
|
+
text "hello from markaby!"
|
@@ -0,0 +1 @@
|
|
1
|
+
text "_why?"
|
@@ -0,0 +1 @@
|
|
1
|
+
text "foo"
|
@@ -0,0 +1 @@
|
|
1
|
+
li foo
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
module Markaby
|
4
|
+
describe Tilt, "templates" do
|
5
|
+
before do
|
6
|
+
@block = lambda do |t|
|
7
|
+
File.read(File.dirname(__FILE__) + "/#{t.file}")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should have the constant ::Tilt::Markaby after registration" do
|
12
|
+
lambda {
|
13
|
+
::Tilt::MarkabyTemplate
|
14
|
+
}.should_not raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to render an erb template" do
|
18
|
+
tilt = ::Tilt::ERBTemplate.new("tilt/erb.erb", &@block)
|
19
|
+
tilt.render.should == "hello from erb!"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be able to render a markaby template with static html" do
|
23
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/markaby.mab", &@block)
|
24
|
+
tilt.render.should == "hello from markaby!"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should use the contents of the template" do
|
28
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/markaby_other_static.mab", &@block)
|
29
|
+
tilt.render.should == "_why?"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should render from a string (given as data)" do
|
33
|
+
tilt = ::Tilt::MarkabyTemplate.new { "html do; end" }
|
34
|
+
tilt.render.should == "<html></html>"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should evaluate a template file in the scope given" do
|
38
|
+
scope = mock 'scope object', :foo => "bar"
|
39
|
+
|
40
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/scope.mab", &@block)
|
41
|
+
tilt.render(scope).should == "<li>bar</li>"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should pass locals to the template" do
|
45
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/locals.mab", &@block)
|
46
|
+
tilt.render(Object.new, { :foo => "bar" }).should == "<li>bar</li>"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should yield to the block given" do
|
50
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/yielding.mab", &@block)
|
51
|
+
eval_scope = Markaby::Builder.new
|
52
|
+
|
53
|
+
output = tilt.render(Object.new, {}) do
|
54
|
+
text("Joe")
|
55
|
+
end
|
56
|
+
|
57
|
+
output.should == "Hey Joe"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should be able to render two templates in a row" do
|
61
|
+
tilt = ::Tilt::MarkabyTemplate.new("tilt/render_twice.mab", &@block)
|
62
|
+
|
63
|
+
tilt.render.should == "foo"
|
64
|
+
tilt.render.should == "foo"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should retrieve a Tilt::MarkabyTemplate when calling Tilt['hello.mab']" do
|
68
|
+
::Tilt['./tilt/markaby.mab'].should == Markaby::Tilt::Template
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return a new instance of the implementation class (when calling Tilt.new)" do
|
72
|
+
::Tilt.new(File.dirname(__FILE__) + "/tilt/markaby.mab").should be_a_kind_of(Markaby::Tilt::Template)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'test/unit/autorunner'
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
+
|
7
|
+
require 'markaby'
|
8
|
+
require 'markaby/kernel_method'
|
9
|
+
require 'markaby/rails'
|
10
|
+
|
11
|
+
require 'erb'
|
12
|
+
require 'markaby/rails/spec_helper'
|
13
|
+
|
14
|
+
module MarkabyTestHelpers
|
15
|
+
def link_to(obj)
|
16
|
+
%{<a href="">#{obj}</a>}
|
17
|
+
end
|
18
|
+
def pluralize(string)
|
19
|
+
string + "s"
|
20
|
+
end
|
21
|
+
module_function :link_to, :pluralize
|
22
|
+
end
|
23
|
+
|
24
|
+
module TestHelpers
|
25
|
+
def assert_exception(exclass, exmsg, *mab_args, &block)
|
26
|
+
begin
|
27
|
+
mab(*mab_args, &block)
|
28
|
+
rescue Exception => e
|
29
|
+
assert_equal exclass, e.class
|
30
|
+
assert_match /#{exmsg}/, e.message
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
module Test
|
36
|
+
module Unit
|
37
|
+
class TestCase
|
38
|
+
include TestHelpers
|
39
|
+
def self.it(name, &blk)
|
40
|
+
define_method("test_#{name}", &blk)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMabBuilder < MiniTest::Unit::TestCase
|
4
|
+
def test_assigns
|
5
|
+
b = Mab::Builder.new(:title => 'Mab') do
|
6
|
+
title @title
|
7
|
+
end
|
8
|
+
|
9
|
+
assert_equal '<title>Mab</title>', b.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_capture
|
13
|
+
b = Mab::Builder.new do
|
14
|
+
%w[name address].map do |key|
|
15
|
+
mab do
|
16
|
+
p key
|
17
|
+
end
|
18
|
+
end.join('<br>')
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_equal "<p>name</p><br><p>address</p>", b.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_helper
|
25
|
+
obj = Class.new {
|
26
|
+
def initialize
|
27
|
+
@a = 1
|
28
|
+
@b = 2
|
29
|
+
end
|
30
|
+
|
31
|
+
def c; @a + @b end
|
32
|
+
}.new
|
33
|
+
|
34
|
+
b = Mab::Builder.new({}, obj) do
|
35
|
+
p @a
|
36
|
+
p @b
|
37
|
+
p c
|
38
|
+
end
|
39
|
+
|
40
|
+
assert_equal '<p>1</p><p>2</p><p>3</p>', b.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_pretty
|
44
|
+
b = Mab::PrettyBuilder.new do
|
45
|
+
doctype!
|
46
|
+
html do
|
47
|
+
body do
|
48
|
+
h1 "Nice"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
assert_equal "<!DOCTYPE html>\n<html>\n <body>\n <h1>Nice</h1>\n </body>\n</html>", b.to_s
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMabIndentation < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
super
|
6
|
+
@obj = Object.new
|
7
|
+
@obj.extend Mab::Mixin
|
8
|
+
@obj.extend Mab::Indentation
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_simple
|
12
|
+
assert_equal "<p>Hello</p>", @obj.mab { tag! :p, 'Hello' }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_block
|
16
|
+
assert_equal "<p>\n Hello\n</p>", @obj.mab { tag!(:p) { text 'Hello' } }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_chaining
|
20
|
+
res = <<HTML.strip
|
21
|
+
<p class="hello">
|
22
|
+
<br>
|
23
|
+
</p>
|
24
|
+
HTML
|
25
|
+
|
26
|
+
assert_equal res, @obj.mab {
|
27
|
+
tag!(:p).hello do
|
28
|
+
tag! :br
|
29
|
+
end
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_reindent
|
34
|
+
res = <<HTML.strip
|
35
|
+
<p>
|
36
|
+
Hello
|
37
|
+
World
|
38
|
+
</p>
|
39
|
+
HTML
|
40
|
+
|
41
|
+
assert_equal res, @obj.mab {
|
42
|
+
tag! :p do
|
43
|
+
reindent! "Hello\nWorld"
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_stringification
|
49
|
+
res = <<HTML.strip
|
50
|
+
<h1>
|
51
|
+
<div><span>Hello</span> | <span>Hello</span></div>
|
52
|
+
</h1>
|
53
|
+
HTML
|
54
|
+
|
55
|
+
assert_equal res, @obj.mab {
|
56
|
+
tag!(:h1) do
|
57
|
+
s = tag!(:span, 'Hello')
|
58
|
+
tag!(:div) do
|
59
|
+
[s, s].join(' | ')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|