isaac-malline 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/COPYING +674 -0
  2. data/COPYING.LESSER +165 -0
  3. data/History.txt +34 -0
  4. data/Manifest.txt +72 -0
  5. data/README +24 -0
  6. data/README.txt +33 -0
  7. data/Rakefile +74 -0
  8. data/bin/malline +20 -0
  9. data/github.rb +6 -0
  10. data/init.rb +2 -0
  11. data/lib/malline.rb +109 -0
  12. data/lib/malline/adapters/rails-2.0.rb +72 -0
  13. data/lib/malline/adapters/rails-2.1.rb +103 -0
  14. data/lib/malline/erb_out.rb +34 -0
  15. data/lib/malline/form_builder.rb +44 -0
  16. data/lib/malline/plugin.rb +34 -0
  17. data/lib/malline/plugins/xhtml.rb +77 -0
  18. data/lib/malline/rails.rb +46 -0
  19. data/lib/malline/template.rb +185 -0
  20. data/lib/malline/view_proxy.rb +87 -0
  21. data/lib/malline/view_wrapper.rb +95 -0
  22. data/malline.gemspec +34 -0
  23. data/scripts/html2mn.rb +93 -0
  24. data/test/examples/_action.mn +4 -0
  25. data/test/examples/_action.target +1 -0
  26. data/test/examples/_one.mn +1 -0
  27. data/test/examples/_one.target +1 -0
  28. data/test/examples/_partial.mn +2 -0
  29. data/test/examples/_partial.target +1 -0
  30. data/test/examples/_three.rhtml +2 -0
  31. data/test/examples/_two.mn +1 -0
  32. data/test/examples/_two.target +1 -0
  33. data/test/examples/capture.mn +13 -0
  34. data/test/examples/capture.target +1 -0
  35. data/test/examples/class.mn +6 -0
  36. data/test/examples/class.target +1 -0
  37. data/test/examples/escape.mn +4 -0
  38. data/test/examples/escape.target +1 -0
  39. data/test/examples/frontpage.mn +6 -0
  40. data/test/examples/frontpage.target +1 -0
  41. data/test/examples/hello_world.mn +2 -0
  42. data/test/examples/hello_world.target +1 -0
  43. data/test/examples/helper.mn +5 -0
  44. data/test/examples/helper.target +1 -0
  45. data/test/examples/helper2.mn +5 -0
  46. data/test/examples/helper2.target +1 -0
  47. data/test/examples/helper_shortcut.mn +5 -0
  48. data/test/examples/helper_shortcut.target +1 -0
  49. data/test/examples/id.mn +3 -0
  50. data/test/examples/id.target +1 -0
  51. data/test/examples/layout.mn +8 -0
  52. data/test/examples/layout.target +4 -0
  53. data/test/examples/lists.mn +13 -0
  54. data/test/examples/lists.target +1 -0
  55. data/test/examples/nested.mn +6 -0
  56. data/test/examples/nested.target +1 -0
  57. data/test/examples/options.mn +10 -0
  58. data/test/examples/options.target +1 -0
  59. data/test/examples/partials.mn +5 -0
  60. data/test/examples/partials.target +1 -0
  61. data/test/examples/self.mn +2 -0
  62. data/test/examples/self.target +1 -0
  63. data/test/examples/text.mn +4 -0
  64. data/test/examples/text.target +1 -0
  65. data/test/examples/whitespace.mn +9 -0
  66. data/test/examples/whitespace.target +1 -0
  67. data/test/examples/xhtml.mn +11 -0
  68. data/test/examples/xhtml.target +4 -0
  69. data/test/kernel.org.html +107 -0
  70. data/test/kernel.org.mn +657 -0
  71. data/test/malline_test.rb +171 -0
  72. data/test/malline_test_helpers.rb +82 -0
  73. metadata +136 -0
@@ -0,0 +1,171 @@
1
+ # Copyright © 2007,2008 Riku Palomäki
2
+ #
3
+ # This file is part of Malline.
4
+ #
5
+ # Malline is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # Malline is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with Malline. If not, see <http://www.gnu.org/licenses/>.
17
+ t = File.expand_path(File.join(File.dirname(__FILE__), '..'))
18
+ $: << t
19
+ $: << File.join(t, 'lib')
20
+ require 'test/unit'
21
+ require 'test/malline_test_helpers.rb'
22
+
23
+ class MallineTest < Test::Unit::TestCase
24
+ include Malline
25
+ include MallineTestHelpers
26
+
27
+ def test_simple
28
+ Base.setopt :strict => false, :xhtml => false do
29
+ assert_xml_equal('<foo id="a"><bar class="a b"/>blabla</foo>',
30
+ Base.render do
31
+ foo.a! do
32
+ bar.a.b
33
+ _'blabla'
34
+ end
35
+ end
36
+ )
37
+ end
38
+ end
39
+
40
+ def test_basics
41
+ images = [Image.new(1, '/image/img1', 'Image 1'), Image.new(2, '/2', 'Image 2')]
42
+
43
+ out = Base.new(View.new).render nil, :images => images do
44
+ html do
45
+ body do
46
+ div.header!
47
+ div.imagelist.images! "There are some images:" do
48
+ @images.each do |im|
49
+ a(:href => image_path(im)) { img :src => im.url }
50
+ span.caption.imagetext im.caption
51
+ end
52
+ txt! "No more images"
53
+ end
54
+ div.footer! { span 'footer' }
55
+ end
56
+ end
57
+ end
58
+ assert_xml_equal('<html><body><div id="header"></div><div class="imagelist" id="images">There are some images:<a href="/images/1"><img src="/image/img1"/></a><span class="caption imagetext">Image 1</span><a href="/images/2"><img src="/2"/></a><span class="caption imagetext">Image 2</span>No more images</div><div id="footer"><span>footer</span></div></body></html>', out)
59
+ end
60
+
61
+ def test_tag!
62
+ Base.setopt :strict => false, :xhtml => false do
63
+ out = Base.render do
64
+ foo do
65
+ tag!('foobar', :foobar => 'foobar') do
66
+ tag!('foobar2', :foobar => 'foobar2') do
67
+ bar do
68
+ foo
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ assert_xml_equal('<foo><foobar foobar="foobar"><foobar2 foobar="foobar2"><bar><foo/></bar></foobar2></foobar></foo>', out)
75
+ end
76
+ end
77
+
78
+ def test_defined_tags
79
+ tpl = Base.setopt :strict => false, :xhtml => false do
80
+ Base.new(View.new)
81
+ end
82
+ b = Proc.new do
83
+ foo do
84
+ zoo :a => 'b' do
85
+ bar
86
+ end
87
+ _zoo
88
+ xoo.bar
89
+ end
90
+ end
91
+ out = tpl.render nil, &b
92
+ # zoo isn't rendered, because there is helper named zoo
93
+ assert_xml_equal('<foo>zoo output<xoo class="bar"/></foo>', out)
94
+
95
+ tpl.definetags :zoo
96
+ out = tpl.render nil, &b
97
+ assert_xml_equal('<foo>zoo output<xoo class="bar"/></foo>', out)
98
+
99
+ tpl.definetags! :zoo
100
+ out = tpl.render nil, &b
101
+ assert_xml_equal('<foo><zoo a="b"><bar/></zoo>zoo output<xoo class="bar"/></foo>', out)
102
+
103
+ out = Base.setopt :strict => false, :xhtml => false do
104
+ Base.render &b
105
+ end
106
+ assert_xml_equal('<foo><zoo a="b"><bar/></zoo><_zoo/><xoo class="bar"/></foo>', out)
107
+ end
108
+
109
+ def test_xhtml
110
+ Base.setopt :strict => true, :xhtml => true do
111
+ out = Base.render do
112
+ html do
113
+ body do
114
+ end
115
+ end
116
+ end
117
+
118
+ assert_xml_equal('<html><body></body></html>', out)
119
+
120
+ error = ''
121
+ begin
122
+ Base.render do
123
+ foo
124
+ end
125
+ rescue => e
126
+ error = e.message
127
+ end
128
+ assert(error =~ /undefined local variable or method/)
129
+ end
130
+ end
131
+
132
+ def test_file
133
+ Base.setopt :strict => true, :xhtml => true do
134
+ tpl = Base.new(View.new)
135
+ html = File.read(File.join(File.dirname(__FILE__), 'kernel.org.html'))
136
+ mn = tpl.render(File.read(File.join(File.dirname(__FILE__), 'kernel.org.mn')))
137
+ assert_xml_equal(html, mn)
138
+ end
139
+ end
140
+
141
+ def test_capture
142
+ Base.setopt :strict => false, :xhtml => false do
143
+ out = Base.render do
144
+ foo do
145
+ @captured = capture do
146
+ a { b 'Yo' }
147
+ end
148
+ x
149
+ end
150
+ bar { self << @captured }
151
+ txt! 'EOF'
152
+ end
153
+ assert_xml_equal('<foo><x/></foo><bar><a><b>Yo</b></a></bar>EOF', out)
154
+ end
155
+ end
156
+
157
+ def test_examples
158
+ Dir.glob(File.join(File.dirname(__FILE__), 'examples', '*.mn')).each do |file|
159
+ assert_xml_equal(File.read(file.sub(/\.mn$/, '.target')),
160
+ Base.new(View.new).render(File.read(file))+"\n", file)
161
+ end
162
+ end
163
+
164
+ def test_erbout
165
+ string = ""
166
+ erb = ErbOut.new string
167
+ erb.concat 'Foo'
168
+ erb << 'Bar'
169
+ assert_equal('FooBar', string)
170
+ end
171
+ end
@@ -0,0 +1,82 @@
1
+ # Copyright © 2007,2008 Riku Palomäki
2
+ #
3
+ # This file is part of Malline.
4
+ #
5
+ # Malline is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # Malline is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with Malline. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ require "rexml/document"
19
+ require 'malline.rb'
20
+
21
+ module MallineTestHelpers
22
+ include REXML
23
+ Image = Struct.new "Image", :id, :url, :caption
24
+ def assert_xml_equal a, b, c=""
25
+ if convert(Document.new(a)) != convert(Document.new(b))
26
+ assert_equal a, b, c
27
+ else
28
+ assert true
29
+ end
30
+ rescue
31
+ assert_equal a, b, c
32
+ end
33
+ def attributes element
34
+ element.attributes.keys.sort.collect {|k| " #{k}=\"#{element.attributes[k]}\""}.join
35
+ end
36
+ # quick hack to compare two html files
37
+ def convert e
38
+ output = ''
39
+ if e.is_a?(Array)
40
+ e.each {|el| output << convert(el) }
41
+ elsif e.respond_to?(:children) or e.is_a?(Element)
42
+ output << "<#{e.name}"
43
+ output << attributes(e) if e.respond_to?(:has_attributes?) and e.has_attributes?
44
+ output << ">"
45
+ e.children.each {|el| output << convert(el) } unless e.children.empty?
46
+ output << "</#{e.name}>"
47
+ else
48
+ output << e.to_s
49
+ end
50
+ output
51
+ end
52
+ end
53
+
54
+ class Controller
55
+ def perform_caching
56
+ false
57
+ end
58
+ end
59
+
60
+ class Comment
61
+ end
62
+
63
+ class View
64
+ def initialize
65
+ @controller = Controller.new
66
+ end
67
+ def image_path(im)
68
+ "/images/#{im.is_a?(MallineTestHelpers::Image) ? im.id : 'img'}"
69
+ end
70
+ def truncate(str, size = 10)
71
+ str[0...size]
72
+ end
73
+ def render hash
74
+ Malline::Base.new(View.new).render File.read(File.join(File.dirname(__FILE__), hash[:partial].sub(/\//, '/_') + '.mn')) rescue ''
75
+ end
76
+ def link_to *args
77
+ 'link'
78
+ end
79
+ def zoo *args
80
+ 'zoo output'
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isaac-malline
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - "Riku Palom\xC3\xA4ki"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-09-06 00:00:00 -07:00
13
+ default_executable: malline
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.3
23
+ version:
24
+ description: "Malline is a full-featured template system designed to be a replacement for ERB views in Rails or any other framework. It also includes standalone bin/malline to compile Malline templates to XML in commandline. All Malline templates are pure Ruby, see http://www.malline.org/ for more info. See documentation on http://www.malline.org/ Copyright \xC2\xA9 2007,2008 Riku Palom\xC3\xA4ki, riku@palomaki.fi Malline is released under GNU Lesser General Public License. Example Rails template file images.html.mn: xhtml do _render :partial => 'head' body do div.images! \"There are some images:\" do images.each do |im| a(:href => img_path(im)) { img :src => im.url } span.caption im.caption end _\"No more images\" end div.footer! { _render :partial => 'footer' } end end"
25
+ email:
26
+ - riku@palomaki.fi
27
+ executables:
28
+ - malline
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - History.txt
33
+ - Manifest.txt
34
+ - README.txt
35
+ files:
36
+ - COPYING
37
+ - COPYING.LESSER
38
+ - History.txt
39
+ - Manifest.txt
40
+ - README
41
+ - README.txt
42
+ - Rakefile
43
+ - bin/malline
44
+ - github.rb
45
+ - init.rb
46
+ - lib/malline.rb
47
+ - lib/malline/adapters/rails-2.0.rb
48
+ - lib/malline/adapters/rails-2.1.rb
49
+ - lib/malline/erb_out.rb
50
+ - lib/malline/form_builder.rb
51
+ - lib/malline/plugin.rb
52
+ - lib/malline/plugins/xhtml.rb
53
+ - lib/malline/rails.rb
54
+ - lib/malline/template.rb
55
+ - lib/malline/view_proxy.rb
56
+ - lib/malline/view_wrapper.rb
57
+ - malline.gemspec
58
+ - scripts/html2mn.rb
59
+ - test/examples/_action.mn
60
+ - test/examples/_action.target
61
+ - test/examples/_one.mn
62
+ - test/examples/_one.target
63
+ - test/examples/_partial.mn
64
+ - test/examples/_partial.target
65
+ - test/examples/_three.rhtml
66
+ - test/examples/_two.mn
67
+ - test/examples/_two.target
68
+ - test/examples/capture.mn
69
+ - test/examples/capture.target
70
+ - test/examples/class.mn
71
+ - test/examples/class.target
72
+ - test/examples/escape.mn
73
+ - test/examples/escape.target
74
+ - test/examples/frontpage.mn
75
+ - test/examples/frontpage.target
76
+ - test/examples/hello_world.mn
77
+ - test/examples/hello_world.target
78
+ - test/examples/helper.mn
79
+ - test/examples/helper.target
80
+ - test/examples/helper2.mn
81
+ - test/examples/helper2.target
82
+ - test/examples/helper_shortcut.mn
83
+ - test/examples/helper_shortcut.target
84
+ - test/examples/id.mn
85
+ - test/examples/id.target
86
+ - test/examples/layout.mn
87
+ - test/examples/layout.target
88
+ - test/examples/lists.mn
89
+ - test/examples/lists.target
90
+ - test/examples/nested.mn
91
+ - test/examples/nested.target
92
+ - test/examples/options.mn
93
+ - test/examples/options.target
94
+ - test/examples/partials.mn
95
+ - test/examples/partials.target
96
+ - test/examples/self.mn
97
+ - test/examples/self.target
98
+ - test/examples/text.mn
99
+ - test/examples/text.target
100
+ - test/examples/whitespace.mn
101
+ - test/examples/whitespace.target
102
+ - test/examples/xhtml.mn
103
+ - test/examples/xhtml.target
104
+ - test/kernel.org.html
105
+ - test/kernel.org.mn
106
+ - test/malline_test.rb
107
+ - test/malline_test_helpers.rb
108
+ has_rdoc: true
109
+ homepage: http://www.malline.org/
110
+ post_install_message:
111
+ rdoc_options:
112
+ - --main
113
+ - README.txt
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: "0"
121
+ version:
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: "0"
127
+ version:
128
+ requirements: []
129
+
130
+ rubyforge_project: malline
131
+ rubygems_version: 1.2.0
132
+ signing_key:
133
+ specification_version: 2
134
+ summary: Malline is a full-featured template system designed to be a replacement for ERB views in Rails or any other framework
135
+ test_files: []
136
+