mab 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/COPYING +19 -0
  2. data/Gemfile +10 -0
  3. data/Gemfile.lock +12 -0
  4. data/README.md +224 -0
  5. data/Rakefile +8 -0
  6. data/bench.rb +37 -0
  7. data/lib/mab/mixin.rb +58 -42
  8. data/lib/mab/version.rb +1 -1
  9. data/mab-0.0.1.gem +0 -0
  10. data/mab.gemspec +20 -0
  11. data/markaby/CHANGELOG.rdoc +106 -0
  12. data/markaby/Markaby.gemspec +109 -0
  13. data/markaby/README.rdoc +317 -0
  14. data/markaby/Rakefile +78 -0
  15. data/markaby/VERSION +1 -0
  16. data/markaby/garlic.rb +29 -0
  17. data/markaby/init.rb +6 -0
  18. data/markaby/lib/markaby.rb +30 -0
  19. data/markaby/lib/markaby/builder.rb +314 -0
  20. data/markaby/lib/markaby/builder_tags.rb +64 -0
  21. data/markaby/lib/markaby/cssproxy.rb +55 -0
  22. data/markaby/lib/markaby/kernel_method.rb +7 -0
  23. data/markaby/lib/markaby/rails.rb +75 -0
  24. data/markaby/lib/markaby/rails/current.rb +85 -0
  25. data/markaby/lib/markaby/rails/deprecated.rb +124 -0
  26. data/markaby/lib/markaby/rails/rails_builder.rb +91 -0
  27. data/markaby/lib/markaby/sinatra.rb +18 -0
  28. data/markaby/lib/markaby/tags.rb +200 -0
  29. data/markaby/lib/markaby/tilt.rb +8 -0
  30. data/markaby/spec/markaby/builder_spec.rb +118 -0
  31. data/markaby/spec/markaby/css_proxy_test.rb +47 -0
  32. data/markaby/spec/markaby/fragment_test.rb +10 -0
  33. data/markaby/spec/markaby/markaby_other_static.mab +1 -0
  34. data/markaby/spec/markaby/markaby_spec.rb +184 -0
  35. data/markaby/spec/markaby/markaby_test.rb +251 -0
  36. data/markaby/spec/markaby/rails/spec_helper.rb +29 -0
  37. data/markaby/spec/markaby/rails/views/layouts/layout.mab +11 -0
  38. data/markaby/spec/markaby/rails/views/markaby/_a_partial.mab +3 -0
  39. data/markaby/spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb +1 -0
  40. data/markaby/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +1 -0
  41. data/markaby/spec/markaby/rails/views/markaby/access_to_helpers.mab +1 -0
  42. data/markaby/spec/markaby/rails/views/markaby/broken.mab +7 -0
  43. data/markaby/spec/markaby/rails/views/markaby/commented_out_template.mab +1 -0
  44. data/markaby/spec/markaby/rails/views/markaby/correct_template_values.mab +5 -0
  45. data/markaby/spec/markaby/rails/views/markaby/double_output.mab +8 -0
  46. data/markaby/spec/markaby/rails/views/markaby/form_for.mab +2 -0
  47. data/markaby/spec/markaby/rails/views/markaby/form_for_with_fields.mab +3 -0
  48. data/markaby/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +4 -0
  49. data/markaby/spec/markaby/rails/views/markaby/no_values_passed.mab +3 -0
  50. data/markaby/spec/markaby/rails/views/markaby/partial_parent.mab +1 -0
  51. data/markaby/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +7 -0
  52. data/markaby/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +1 -0
  53. data/markaby/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
  54. data/markaby/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +3 -0
  55. data/markaby/spec/markaby/rails/views/markaby/render_with_ivar.mab +3 -0
  56. data/markaby/spec/markaby/rails/views/markaby/renders_erb.rhtml +1 -0
  57. data/markaby/spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab +3 -0
  58. data/markaby/spec/markaby/rails/views/markaby/routes.mab +1 -0
  59. data/markaby/spec/markaby/rails/views/markaby/yielding.mab +3 -0
  60. data/markaby/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +5 -0
  61. data/markaby/spec/markaby/rails/views/markaby/yielding_two.mab +7 -0
  62. data/markaby/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +3 -0
  63. data/markaby/spec/markaby/rails_test.rb +380 -0
  64. data/markaby/spec/markaby/rails_version_spec.rb +37 -0
  65. data/markaby/spec/markaby/sinatra/app.rb +49 -0
  66. data/markaby/spec/markaby/sinatra/sinatra_spec.rb +67 -0
  67. data/markaby/spec/markaby/sinatra/views/helpers.mab +1 -0
  68. data/markaby/spec/markaby/sinatra/views/layout.mab +7 -0
  69. data/markaby/spec/markaby/sinatra/views/markaby_template.mab +0 -0
  70. data/markaby/spec/markaby/sinatra/views/scope_instance_variables.mab +3 -0
  71. data/markaby/spec/markaby/sinatra/views/simple_html.mab +4 -0
  72. data/markaby/spec/markaby/sinatra/views/variables.mab +3 -0
  73. data/markaby/spec/markaby/tilt/erb.erb +1 -0
  74. data/markaby/spec/markaby/tilt/locals.mab +1 -0
  75. data/markaby/spec/markaby/tilt/markaby.mab +1 -0
  76. data/markaby/spec/markaby/tilt/markaby_other_static.mab +1 -0
  77. data/markaby/spec/markaby/tilt/render_twice.mab +1 -0
  78. data/markaby/spec/markaby/tilt/scope.mab +1 -0
  79. data/markaby/spec/markaby/tilt/yielding.mab +2 -0
  80. data/markaby/spec/markaby/tilt_spec.rb +75 -0
  81. data/markaby/spec/spec.opts +2 -0
  82. data/markaby/spec/spec_helper.rb +44 -0
  83. data/test/helper.rb +4 -0
  84. data/test/test_mab_builder.rb +56 -0
  85. data/test/test_mab_indentation.rb +66 -0
  86. data/test/test_mab_kernel_method.rb +10 -0
  87. data/test/test_mab_mixin.rb +246 -0
  88. 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,7 @@
1
+ if @display_layout
2
+ html do
3
+ yield
4
+ end
5
+ else
6
+ yield
7
+ end
@@ -0,0 +1,3 @@
1
+ p :class => "name" do
2
+ @name
3
+ end
@@ -0,0 +1,4 @@
1
+ ul do
2
+ li "hi"
3
+ li "there"
4
+ end
@@ -0,0 +1,3 @@
1
+ p :class => "name" do
2
+ name
3
+ end
@@ -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 "foo"
@@ -0,0 +1 @@
1
+ li foo
@@ -0,0 +1,2 @@
1
+ text("Hey ")
2
+ yield
@@ -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,2 @@
1
+ --color
2
+ --backtrace
@@ -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
@@ -0,0 +1,4 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'mab'
4
+
@@ -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
+