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.
- data/README +256 -0
- data/Rakefile +49 -0
- data/VERSION.yml +4 -0
- data/lib/markaby/builder.rb +289 -0
- data/lib/markaby/cssproxy.rb +48 -0
- data/lib/markaby/metaid.rb +16 -0
- data/lib/markaby/rails/action_controller_helpers.rb +13 -0
- data/lib/markaby/rails/template_handler.rb +21 -0
- data/lib/markaby/tags.rb +179 -0
- data/lib/markaby.rb +39 -0
- data/test/app_root/app/controllers/application_controller.rb +2 -0
- data/test/app_root/app/controllers/markaby_controller.rb +37 -0
- data/test/app_root/app/helpers/test_helper.rb +7 -0
- data/test/app_root/app/views/markaby/_monkeys.mab +12 -0
- data/test/app_root/app/views/markaby/broken.mab +7 -0
- data/test/app_root/app/views/markaby/create.mab +9 -0
- data/test/app_root/app/views/markaby/index.mab +7 -0
- data/test/app_root/app/views/markaby/multiple_forms.mab +7 -0
- data/test/app_root/config/boot.rb +115 -0
- data/test/app_root/config/database.yml +31 -0
- data/test/app_root/config/environment.rb +14 -0
- data/test/app_root/config/environments/in_memory.rb +0 -0
- data/test/app_root/config/environments/mysql.rb +0 -0
- data/test/app_root/config/environments/postgresql.rb +0 -0
- data/test/app_root/config/environments/sqlite.rb +0 -0
- data/test/app_root/config/environments/sqlite3.rb +0 -0
- data/test/app_root/config/routes.rb +4 -0
- data/test/app_root/lib/console_with_fixtures.rb +4 -0
- data/test/app_root/log/in_memory.log +4215 -0
- data/test/app_root/script/console +7 -0
- data/test/markaby_controller_test.rb +73 -0
- data/test/markaby_test.rb +122 -0
- data/test/monkeys.html +13 -0
- data/test/test_helper.rb +28 -0
- metadata +102 -0
@@ -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 & Oranges</h1>", mab { h1 'Apples & Oranges' }
|
42
|
+
assert_equal "<h1>Apples & Oranges</h1>", mab { h1 { 'Apples & Oranges' } }
|
43
|
+
assert_equal "<h1 class=\"fruits&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
data/test/test_helper.rb
ADDED
@@ -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
|