dinsley-markaby 0.0.5

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 (35) hide show
  1. data/README +256 -0
  2. data/Rakefile +49 -0
  3. data/VERSION.yml +4 -0
  4. data/lib/markaby/builder.rb +289 -0
  5. data/lib/markaby/cssproxy.rb +48 -0
  6. data/lib/markaby/metaid.rb +16 -0
  7. data/lib/markaby/rails/action_controller_helpers.rb +13 -0
  8. data/lib/markaby/rails/template_handler.rb +21 -0
  9. data/lib/markaby/tags.rb +179 -0
  10. data/lib/markaby.rb +39 -0
  11. data/test/app_root/app/controllers/application_controller.rb +2 -0
  12. data/test/app_root/app/controllers/markaby_controller.rb +37 -0
  13. data/test/app_root/app/helpers/test_helper.rb +7 -0
  14. data/test/app_root/app/views/markaby/_monkeys.mab +12 -0
  15. data/test/app_root/app/views/markaby/broken.mab +7 -0
  16. data/test/app_root/app/views/markaby/create.mab +9 -0
  17. data/test/app_root/app/views/markaby/index.mab +7 -0
  18. data/test/app_root/app/views/markaby/multiple_forms.mab +7 -0
  19. data/test/app_root/config/boot.rb +115 -0
  20. data/test/app_root/config/database.yml +31 -0
  21. data/test/app_root/config/environment.rb +14 -0
  22. data/test/app_root/config/environments/in_memory.rb +0 -0
  23. data/test/app_root/config/environments/mysql.rb +0 -0
  24. data/test/app_root/config/environments/postgresql.rb +0 -0
  25. data/test/app_root/config/environments/sqlite.rb +0 -0
  26. data/test/app_root/config/environments/sqlite3.rb +0 -0
  27. data/test/app_root/config/routes.rb +4 -0
  28. data/test/app_root/lib/console_with_fixtures.rb +4 -0
  29. data/test/app_root/log/in_memory.log +4215 -0
  30. data/test/app_root/script/console +7 -0
  31. data/test/markaby_controller_test.rb +73 -0
  32. data/test/markaby_test.rb +122 -0
  33. data/test/monkeys.html +13 -0
  34. data/test/test_helper.rb +28 -0
  35. metadata +102 -0
@@ -0,0 +1,7 @@
1
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
2
+ libs = " -r irb/completion"
3
+ libs << " -r test/test_helper"
4
+ libs << " -r console_app"
5
+ libs << " -r console_with_helpers"
6
+ libs << " -r console_with_fixtures"
7
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,73 @@
1
+ require File.expand_path(File.join('test', 'test_helper'))
2
+
3
+ # The Markaby Rails tests themselves.
4
+ class MarkabyControllerTest < Test::Unit::TestCase
5
+ include ActionController::TestProcess
6
+ include ActionController::TestCase::Assertions
7
+ include ActionController::Assertions::ResponseAssertions
8
+
9
+ def setup
10
+ @controller = MarkabyController.new
11
+ @request = ActionController::TestRequest.new
12
+ @response = ActionController::TestResponse.new
13
+ @expected_monkey_names = '<ul><li>Frank</li><li>Benny</li><li>Paul</li></ul>'
14
+ end
15
+
16
+ def test_index
17
+ get :index
18
+ assert_response :success
19
+ assert_template 'markaby/index'
20
+ assert_equal @expected_monkey_names, @response.body
21
+ end
22
+
23
+ def test_partial_rendering
24
+ Markaby::Builder.set :indent, 2
25
+ process :partial_rendering
26
+ expected_html = File.read(File.join(File.dirname(__FILE__), 'monkeys.html'))
27
+ assert_response :success
28
+ assert_template 'markaby/_monkeys'
29
+ assert_equal expected_html, @response.body
30
+
31
+ # From actionpack/lib/action_view/base.rb:
32
+ # String keys are deprecated and will be removed shortly.
33
+ #
34
+ assert_raise ActionView::TemplateError do
35
+ process :partial_rendering_with_stringy_keys_in_local_assigns
36
+ end
37
+ end
38
+
39
+ def test_inline_helper_rendering
40
+ process :inline_helper_rendering
41
+ assert_response :success
42
+ assert_equal @expected_monkey_names, @response.body
43
+ end
44
+
45
+ def test_basic_inline_rendering
46
+ process :basic_inline_rendering
47
+ assert_response :success
48
+ assert_equal @expected_monkey_names, @response.body
49
+ end
50
+
51
+ def test_flash_and_form_tag
52
+ process :create
53
+ assert_response :success
54
+ assert_select 'form div input[type=submit]', 1
55
+ assert_select 'p', 'Hello World'
56
+ end
57
+
58
+ def test_multiple_form_tags
59
+ process :multiple_forms
60
+ assert_response :success
61
+ assert_select 'form[id=monkeys]', 1
62
+ assert_select 'form[id=bananas]', 1
63
+ end
64
+
65
+ def test_template_error_has_correct_line_number
66
+ begin
67
+ process :broken
68
+ rescue ActionView::TemplateError => error
69
+ assert_equal 5, error.line_number.to_i
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,122 @@
1
+ require 'test/unit'
2
+ require 'markaby'
3
+
4
+ module MarkabyTestHelpers
5
+ def link_to(obj)
6
+ %{<a href="">#{obj}</a>}
7
+ end
8
+ def pluralize(string)
9
+ string + "s"
10
+ end
11
+ module_function :link_to, :pluralize
12
+ end
13
+
14
+ class MarkabyTest < Test::Unit::TestCase
15
+
16
+ def assert_exception(exclass, exmsg, *mab_args, &block)
17
+ begin
18
+ mab(*mab_args, &block)
19
+ rescue Exception => e
20
+ assert_equal exclass, e.class
21
+ assert_equal exmsg, e.message
22
+ end
23
+ end
24
+
25
+ def test_simple
26
+ assert_equal "<hr/>", mab { hr }
27
+ assert_equal "<hr/><br/>", mab { hr; br }
28
+ assert_equal "<p>foo</p>", mab { p 'foo' }
29
+ assert_equal "<p>foo</p>", mab { p { 'foo' } }
30
+ end
31
+
32
+ def test_classes_and_ids
33
+ assert_equal %{<div class="one"></div>}, mab { div.one '' }
34
+ assert_equal %{<div class="one two"></div>}, mab { div.one.two '' }
35
+ assert_equal %{<div id="three"></div>}, mab { div.three! '' }
36
+ assert_equal %{<hr class="hidden"/>}, mab { hr.hidden }
37
+ assert_equal %{<input class="foo" name="bar" id="bar"/>}, mab { input.foo :id => 'bar' }
38
+ end
39
+
40
+ def test_escaping
41
+ assert_equal "<h1>Apples &amp; Oranges</h1>", mab { h1 'Apples & Oranges' }
42
+ assert_equal "<h1>Apples & Oranges</h1>", mab { h1 { 'Apples & Oranges' } }
43
+ assert_equal "<h1 class=\"fruits&amp;floots\">Apples</h1>", mab { h1 'Apples', :class => 'fruits&floots' }
44
+ end
45
+
46
+ def test_capture
47
+ builder = Markaby::Builder.new
48
+ assert builder.to_s.empty?
49
+ assert_equal "<h1>TEST</h1>", builder.capture { h1 'TEST' }
50
+ assert builder.to_s.empty?
51
+ assert mab { capture { h1 'hello world' }; nil }.empty?
52
+ assert_equal mab { div { h1 'TEST' } }, mab { div { capture { h1 'TEST' } } }
53
+ end
54
+
55
+ def test_ivars
56
+ html = "<div><h1>Steve</h1><div><h2>Gerald</h2></div><h3>Gerald</h3></div>"
57
+ assert_equal html, mab { div { @name = 'Steve'; h1 @name; div { @name = 'Gerald'; h2 @name }; h3 @name } }
58
+ assert_equal html, mab { div { @name = 'Steve'; h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
59
+ assert_equal html, mab(:name => 'Steve') { div { h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
60
+ end
61
+
62
+ def test_ivars_without_at_symbol
63
+ assert_equal "<h1>Hello World</h1>", mab { @message = 'Hello World'; h1 message }
64
+ end
65
+
66
+ def test_helpers
67
+ Markaby::Builder.ignored_helpers.clear
68
+ assert_equal %{squirrels}, mab({}, MarkabyTestHelpers) { pluralize('squirrel') }
69
+ assert_equal %{<a href="">edit</a>}, mab({}, MarkabyTestHelpers) { link_to('edit') }
70
+ assert mab({}, MarkabyTestHelpers) { @output_helpers = false; link_to('edit'); nil }.empty?
71
+ Markaby::Builder.ignore_helpers :pluralize
72
+ assert_exception(NoMethodError, "no such method `pluralize'", {}, MarkabyTestHelpers) { pluralize('squirrel') }
73
+ end
74
+
75
+ def test_builder_bang_methods
76
+ assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", mab { instruct! }
77
+ end
78
+
79
+ def test_fragments
80
+ 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>},
81
+ mab { div { h1 "Monkeys"; h2 { "Giraffes #{small 'Miniature' } and #{strong 'Large'}" }; h3 "Donkeys"; h4 { "Parakeet #{b { i 'Innocent IV' }} in Classic Chartreuse" } } }
82
+ assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <strong>Miniature</strong></h2><h3>Donkeys</h3></div>},
83
+ mab { div { h1 "Monkeys"; h2 { "Giraffes #{strong 'Miniature' }" }; h3 "Donkeys" } }
84
+ 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>},
85
+ mab { div { @a = small 'Miniature'; @b = strong 'Large'; h1 "Monkeys"; h2 { "Giraffes #{@a} and #{@b}" }; h3 "Donkeys"; h4 { "Parakeet #{@b} as well..." } } }
86
+ end
87
+
88
+ def test_invalid_xhtml
89
+ assert_exception(NoMethodError, "no such method `dav'") { dav {} }
90
+ assert_exception(Markaby::InvalidXhtmlError, "no attribute `styl' on div elements") { div(:styl => 'ok') {} }
91
+ assert_exception(Markaby::InvalidXhtmlError, "no attribute `class' on tbody elements") { tbody.okay {} }
92
+ end
93
+
94
+ def test_full_doc_transitional
95
+ doc = mab { xhtml_transitional { head { title 'OKay' } } }
96
+ assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
97
+ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">})
98
+ assert doc.include?(%{<title>OKay</title>})
99
+ end
100
+
101
+ def test_full_doc_strict
102
+ doc = mab { xhtml_strict { head { title 'OKay' } } }
103
+ assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
104
+ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
105
+ assert doc.include?(%{<title>OKay</title>})
106
+ end
107
+
108
+ def test_full_doc_frameset
109
+ doc = mab { xhtml_frameset { head { title 'OKay' } } }
110
+ assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
111
+ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">})
112
+ assert doc.include?(%{<title>OKay</title>})
113
+ end
114
+
115
+ def test_root_attributes_can_be_changed
116
+ doc = mab { xhtml_strict(:lang => 'fr') { head { title { 'Salut!' } } } }
117
+ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
118
+ assert doc.include?(%{<title>Salut!</title>})
119
+ assert doc.include?(%{ lang="fr"})
120
+ end
121
+
122
+ end
data/test/monkeys.html ADDED
@@ -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,28 @@
1
+ # Set the default environment to sqlite3's in_memory database
2
+ ENV['RAILS_ENV'] ||= 'in_memory'
3
+
4
+ # Load the Rails environment and testing framework
5
+ require "#{File.dirname(__FILE__)}/app_root/config/environment"
6
+ require 'test_help'
7
+
8
+ # Undo changes to RAILS_ENV
9
+ silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
10
+
11
+ # Run the migrations
12
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
13
+
14
+ # Set default fixture loading properties
15
+ ActiveSupport::TestCase.class_eval do
16
+ self.use_transactional_fixtures = true
17
+ self.use_instantiated_fixtures = false
18
+ self.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
19
+
20
+ fixtures :all
21
+ end
22
+
23
+ # Little dummy class that returns some data for use in the views.
24
+ class Monkey < Struct.new(:name)
25
+ def self.find(*args)
26
+ @@monkeys ||= ['Frank', 'Benny', 'Paul'].map { |name| Monkey.new name }
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dinsley-markaby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Tim Fletcher
8
+ - why_
9
+ - Daniel Insley
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2009-04-24 00:00:00 -07:00
15
+ default_executable:
16
+ dependencies: []
17
+
18
+ description: Markaby is a very short bit of code for writing HTML pages in pure Ruby.
19
+ email: dinsley@gmail.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files:
25
+ - README
26
+ files:
27
+ - Rakefile
28
+ - VERSION.yml
29
+ - lib/markaby.rb
30
+ - lib/markaby/builder.rb
31
+ - lib/markaby/cssproxy.rb
32
+ - lib/markaby/metaid.rb
33
+ - lib/markaby/rails/action_controller_helpers.rb
34
+ - lib/markaby/rails/template_handler.rb
35
+ - lib/markaby/tags.rb
36
+ - test/app_root/app/controllers/application_controller.rb
37
+ - test/app_root/app/controllers/markaby_controller.rb
38
+ - test/app_root/app/helpers/test_helper.rb
39
+ - test/app_root/app/views/markaby/_monkeys.mab
40
+ - test/app_root/app/views/markaby/broken.mab
41
+ - test/app_root/app/views/markaby/create.mab
42
+ - test/app_root/app/views/markaby/index.mab
43
+ - test/app_root/app/views/markaby/multiple_forms.mab
44
+ - test/app_root/config/boot.rb
45
+ - test/app_root/config/database.yml
46
+ - test/app_root/config/environment.rb
47
+ - test/app_root/config/environments/in_memory.rb
48
+ - test/app_root/config/environments/mysql.rb
49
+ - test/app_root/config/environments/postgresql.rb
50
+ - test/app_root/config/environments/sqlite.rb
51
+ - test/app_root/config/environments/sqlite3.rb
52
+ - test/app_root/config/routes.rb
53
+ - test/app_root/lib/console_with_fixtures.rb
54
+ - test/app_root/log/in_memory.log
55
+ - test/app_root/script/console
56
+ - test/markaby_controller_test.rb
57
+ - test/markaby_test.rb
58
+ - test/monkeys.html
59
+ - test/test_helper.rb
60
+ - README
61
+ has_rdoc: true
62
+ homepage: http://github.com/dinsley/markaby
63
+ post_install_message:
64
+ rdoc_options:
65
+ - --charset=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.2.0
84
+ signing_key:
85
+ specification_version: 2
86
+ summary: Markaby is a very short bit of code for writing HTML pages in pure Ruby.
87
+ test_files:
88
+ - test/app_root/app/controllers/application_controller.rb
89
+ - test/app_root/app/controllers/markaby_controller.rb
90
+ - test/app_root/app/helpers/test_helper.rb
91
+ - test/app_root/config/boot.rb
92
+ - test/app_root/config/environment.rb
93
+ - test/app_root/config/environments/in_memory.rb
94
+ - test/app_root/config/environments/mysql.rb
95
+ - test/app_root/config/environments/postgresql.rb
96
+ - test/app_root/config/environments/sqlite.rb
97
+ - test/app_root/config/environments/sqlite3.rb
98
+ - test/app_root/config/routes.rb
99
+ - test/app_root/lib/console_with_fixtures.rb
100
+ - test/markaby_controller_test.rb
101
+ - test/markaby_test.rb
102
+ - test/test_helper.rb