builder 3.0.0 → 3.0.1
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/CHANGES +13 -1
- data/README +4 -3
- data/README.rdoc +5 -4
- data/Rakefile +10 -11
- data/TAGS +17 -55279
- data/lib/builder/xmlbase.rb +44 -16
- data/lib/builder/xmlmarkup.rb +1 -1
- data/test/test_blankslate.rb +35 -12
- data/test/test_markupbuilder.rb +14 -8
- data/test/test_method_caching.rb +56 -0
- metadata +33 -41
data/lib/builder/xmlbase.rb
CHANGED
@@ -11,6 +11,10 @@ module Builder
|
|
11
11
|
# Builder::XmlMarkup and Builder::XmlEvents for examples.
|
12
12
|
class XmlBase < BlankSlate
|
13
13
|
|
14
|
+
class << self
|
15
|
+
attr_accessor :cache_method_calls
|
16
|
+
end
|
17
|
+
|
14
18
|
# Create an XML markup builder.
|
15
19
|
#
|
16
20
|
# out:: Object receiving the markup. +out+ must respond to
|
@@ -26,21 +30,15 @@ module Builder
|
|
26
30
|
@level = initial
|
27
31
|
@encoding = encoding.downcase
|
28
32
|
end
|
29
|
-
|
33
|
+
|
30
34
|
# Create a tag named +sym+. Other than the first argument which
|
31
35
|
# is the tag name, the arguments are the same as the tags
|
32
36
|
# implemented via <tt>method_missing</tt>.
|
33
37
|
def tag!(sym, *args, &block)
|
34
|
-
method_missing(sym.to_sym, *args, &block)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Create XML markup based on the name of the method. This method
|
38
|
-
# is never invoked directly, but is called for each markup method
|
39
|
-
# in the markup block.
|
40
|
-
def method_missing(sym, *args, &block)
|
41
38
|
text = nil
|
42
39
|
attrs = nil
|
43
40
|
sym = "#{sym}:#{args.shift}" if args.first.kind_of?(::Symbol)
|
41
|
+
sym = sym.to_sym unless sym.class == ::Symbol
|
44
42
|
args.each do |arg|
|
45
43
|
case arg
|
46
44
|
when ::Hash
|
@@ -80,6 +78,14 @@ module Builder
|
|
80
78
|
@target
|
81
79
|
end
|
82
80
|
|
81
|
+
# Create XML markup based on the name of the method. This method
|
82
|
+
# is never invoked directly, but is called for each markup method
|
83
|
+
# in the markup block that isn't cached.
|
84
|
+
def method_missing(sym, *args, &block)
|
85
|
+
cache_method_call(sym) if ::Builder::XmlBase.cache_method_calls
|
86
|
+
tag!(sym, *args, &block)
|
87
|
+
end
|
88
|
+
|
83
89
|
# Append text to the output target. Escape any markup. May be
|
84
90
|
# used within the markup brackets as:
|
85
91
|
#
|
@@ -87,7 +93,7 @@ module Builder
|
|
87
93
|
def text!(text)
|
88
94
|
_text(_escape(text))
|
89
95
|
end
|
90
|
-
|
96
|
+
|
91
97
|
# Append text to the output target without escaping any markup.
|
92
98
|
# May be used within the markup brackets as:
|
93
99
|
#
|
@@ -104,7 +110,7 @@ module Builder
|
|
104
110
|
def <<(text)
|
105
111
|
_text(text)
|
106
112
|
end
|
107
|
-
|
113
|
+
|
108
114
|
# For some reason, nil? is sent to the XmlMarkup object. If nil?
|
109
115
|
# is not defined and method_missing is invoked, some strange kind
|
110
116
|
# of recursion happens. Since nil? won't ever be an XML tag, it
|
@@ -116,7 +122,7 @@ module Builder
|
|
116
122
|
end
|
117
123
|
|
118
124
|
private
|
119
|
-
|
125
|
+
|
120
126
|
require 'builder/xchar'
|
121
127
|
if ::String.method_defined?(:encode)
|
122
128
|
def _escape(text)
|
@@ -132,29 +138,51 @@ module Builder
|
|
132
138
|
end
|
133
139
|
else
|
134
140
|
def _escape(text)
|
135
|
-
text.to_xs
|
141
|
+
if (text.method(:to_xs).arity == 0)
|
142
|
+
text.to_xs
|
143
|
+
else
|
144
|
+
text.to_xs((@encoding != 'utf-8' or $KCODE != 'UTF8'))
|
145
|
+
end
|
136
146
|
end
|
137
147
|
end
|
138
148
|
|
139
|
-
def
|
140
|
-
_escape(text).gsub(
|
149
|
+
def _escape_attribute(text)
|
150
|
+
_escape(text).gsub("\n", " ").gsub("\r", " ").
|
151
|
+
gsub(%r{"}, '"') # " WART
|
141
152
|
end
|
142
153
|
|
143
154
|
def _newline
|
144
155
|
return if @indent == 0
|
145
156
|
text! "\n"
|
146
157
|
end
|
147
|
-
|
158
|
+
|
148
159
|
def _indent
|
149
160
|
return if @indent == 0 || @level == 0
|
150
161
|
text!(" " * (@level * @indent))
|
151
162
|
end
|
152
|
-
|
163
|
+
|
153
164
|
def _nested_structures(block)
|
154
165
|
@level += 1
|
155
166
|
block.call(self)
|
156
167
|
ensure
|
157
168
|
@level -= 1
|
158
169
|
end
|
170
|
+
|
171
|
+
# If XmlBase.cache_method_calls = true, we dynamicly create the method
|
172
|
+
# missed as an instance method on the XMLBase object. Because XML
|
173
|
+
# documents are usually very repetative in nature, the next node will
|
174
|
+
# be handled by the new method instead of method_missing. As
|
175
|
+
# method_missing is very slow, this speeds up document generation
|
176
|
+
# significantly.
|
177
|
+
def cache_method_call(sym)
|
178
|
+
instance_eval <<-NEW_METHOD
|
179
|
+
def #{sym.to_s}(*args, &block)
|
180
|
+
tag!(:#{sym.to_s}, *args, &block)
|
181
|
+
end
|
182
|
+
NEW_METHOD
|
183
|
+
end
|
159
184
|
end
|
185
|
+
|
186
|
+
XmlBase.cache_method_calls = true
|
187
|
+
|
160
188
|
end
|
data/lib/builder/xmlmarkup.rb
CHANGED
data/test/test_blankslate.rb
CHANGED
@@ -58,7 +58,7 @@ end
|
|
58
58
|
|
59
59
|
# Introduce some late methods (both module and direct) into the Object
|
60
60
|
# class.
|
61
|
-
class Object
|
61
|
+
class Object
|
62
62
|
include LateObject
|
63
63
|
def another_late_addition
|
64
64
|
4321
|
@@ -82,17 +82,23 @@ end
|
|
82
82
|
#
|
83
83
|
class TestBlankSlate < Test::Unit::TestCase
|
84
84
|
if Object::const_defined?(:BasicObject)
|
85
|
-
def
|
86
|
-
|
87
|
-
|
85
|
+
def skipping?
|
86
|
+
true
|
87
|
+
end
|
88
|
+
else
|
89
|
+
def skipping?
|
90
|
+
false
|
88
91
|
end
|
89
92
|
end
|
90
93
|
|
91
94
|
def setup
|
95
|
+
return if skipping?
|
96
|
+
@skip = Object::const_defined?(:BasicObject)
|
92
97
|
@bs = BlankSlate.new
|
93
98
|
end
|
94
99
|
|
95
100
|
def test_undefined_methods_remain_undefined
|
101
|
+
return if skipping?
|
96
102
|
assert_raise(NoMethodError) { @bs.no_such_method }
|
97
103
|
assert_raise(NoMethodError) { @bs.nil? }
|
98
104
|
end
|
@@ -101,6 +107,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
101
107
|
# NOTE: NameError is acceptable because the lack of a '.' means that
|
102
108
|
# Ruby can't tell if it is a method or a local variable.
|
103
109
|
def test_undefined_methods_remain_undefined_during_instance_eval
|
110
|
+
return if skipping?
|
104
111
|
assert_raise(NoMethodError, NameError) do
|
105
112
|
@bs.instance_eval do nil? end
|
106
113
|
end
|
@@ -110,62 +117,73 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
110
117
|
end
|
111
118
|
|
112
119
|
def test_private_methods_are_undefined
|
120
|
+
return if skipping?
|
113
121
|
assert_raise(NoMethodError) do
|
114
122
|
@bs.puts "HI"
|
115
123
|
end
|
116
124
|
end
|
117
|
-
|
125
|
+
|
118
126
|
def test_targetted_private_methods_are_undefined_during_instance_eval
|
127
|
+
return if skipping?
|
119
128
|
assert_raise(NoMethodError, NameError) do
|
120
129
|
@bs.instance_eval do self.puts "HI" end
|
121
130
|
end
|
122
131
|
end
|
123
|
-
|
132
|
+
|
124
133
|
def test_untargetted_private_methods_are_defined_during_instance_eval
|
125
134
|
oldstdout = $stdout
|
135
|
+
return if skipping?
|
126
136
|
$stdout = StringIO.new
|
127
|
-
@bs.instance_eval do
|
137
|
+
@bs.instance_eval do
|
128
138
|
puts "HI"
|
129
139
|
end
|
130
140
|
ensure
|
131
141
|
$stdout = oldstdout
|
132
142
|
end
|
133
|
-
|
143
|
+
|
134
144
|
def test_methods_added_late_to_kernel_remain_undefined
|
145
|
+
return if skipping?
|
135
146
|
assert_equal 1234, nil.late_addition
|
136
147
|
assert_raise(NoMethodError) { @bs.late_addition }
|
137
148
|
end
|
138
149
|
|
139
150
|
def test_methods_added_late_to_object_remain_undefined
|
151
|
+
return if skipping?
|
140
152
|
assert_equal 4321, nil.another_late_addition
|
141
153
|
assert_raise(NoMethodError) { @bs.another_late_addition }
|
142
154
|
end
|
143
|
-
|
155
|
+
|
144
156
|
def test_methods_added_late_to_global_remain_undefined
|
157
|
+
return if skipping?
|
145
158
|
assert_equal 42, global_inclusion
|
146
159
|
assert_raise(NoMethodError) { @bs.global_inclusion }
|
147
160
|
end
|
148
161
|
|
149
162
|
def test_preload_method_added
|
163
|
+
return if skipping?
|
150
164
|
assert Kernel.k_added_names.include?(:late_addition)
|
151
165
|
assert Object.o_added_names.include?(:another_late_addition)
|
152
166
|
end
|
153
167
|
|
154
168
|
def test_method_defined_late_multiple_times_remain_undefined
|
169
|
+
return if skipping?
|
155
170
|
assert_equal 22, nil.double_late_addition
|
156
171
|
assert_raise(NoMethodError) { @bs.double_late_addition }
|
157
172
|
end
|
158
173
|
|
159
174
|
def test_late_included_module_in_object_is_ok
|
175
|
+
return if skipping?
|
160
176
|
assert_equal 33, 1.late_object
|
161
177
|
assert_raise(NoMethodError) { @bs.late_object }
|
162
178
|
end
|
163
179
|
|
164
180
|
def test_late_included_module_in_kernel_is_ok
|
181
|
+
return if skipping?
|
165
182
|
assert_raise(NoMethodError) { @bs.late_kernel }
|
166
183
|
end
|
167
184
|
|
168
185
|
def test_revealing_previously_hidden_methods_are_callable
|
186
|
+
return if skipping?
|
169
187
|
with_to_s = Class.new(BlankSlate) do
|
170
188
|
reveal :to_s
|
171
189
|
end
|
@@ -173,12 +191,13 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
173
191
|
end
|
174
192
|
|
175
193
|
def test_revealing_previously_hidden_methods_are_callable_with_block
|
194
|
+
return if skipping?
|
176
195
|
Object.class_eval <<-EOS
|
177
196
|
def given_block(&block)
|
178
197
|
block
|
179
|
-
end
|
198
|
+
end
|
180
199
|
EOS
|
181
|
-
|
200
|
+
|
182
201
|
with_given_block = Class.new(BlankSlate) do
|
183
202
|
reveal :given_block
|
184
203
|
end
|
@@ -186,6 +205,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
186
205
|
end
|
187
206
|
|
188
207
|
def test_revealing_a_hidden_method_twice_is_ok
|
208
|
+
return if skipping?
|
189
209
|
with_to_s = Class.new(BlankSlate) do
|
190
210
|
reveal :to_s
|
191
211
|
reveal :to_s
|
@@ -194,6 +214,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
194
214
|
end
|
195
215
|
|
196
216
|
def test_revealing_unknown_hidden_method_is_an_error
|
217
|
+
return if skipping?
|
197
218
|
assert_raises(RuntimeError) do
|
198
219
|
Class.new(BlankSlate) do
|
199
220
|
reveal :xyz
|
@@ -202,6 +223,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
202
223
|
end
|
203
224
|
|
204
225
|
def test_global_includes_still_work
|
226
|
+
return if skipping?
|
205
227
|
assert_nothing_raised do
|
206
228
|
assert_equal 42, global_inclusion
|
207
229
|
assert_equal 42, Object.new.global_inclusion
|
@@ -211,6 +233,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
211
233
|
end
|
212
234
|
|
213
235
|
def test_reveal_should_not_bind_to_an_instance
|
236
|
+
return if skipping?
|
214
237
|
with_object_id = Class.new(BlankSlate) do
|
215
238
|
reveal(:object_id)
|
216
239
|
end
|
@@ -218,7 +241,7 @@ class TestBlankSlate < Test::Unit::TestCase
|
|
218
241
|
obj1 = with_object_id.new
|
219
242
|
obj2 = with_object_id.new
|
220
243
|
|
221
|
-
assert obj1.object_id != obj2.object_id,
|
244
|
+
assert obj1.object_id != obj2.object_id,
|
222
245
|
"Revealed methods should not be bound to a particular instance"
|
223
246
|
end
|
224
247
|
end
|
data/test/test_markupbuilder.rb
CHANGED
@@ -78,7 +78,13 @@ class TestMarkup < Test::Unit::TestCase
|
|
78
78
|
@xml.a("link", :href=>"http://onestepback.org")
|
79
79
|
assert_equal %{<a href="http://onestepback.org">link</a>}, @xml.target!
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
|
+
def test_attributes_with_newlines
|
83
|
+
@xml.abbr("W3C", :title=>"World\nWide\rWeb\r\nConsortium")
|
84
|
+
assert_equal %{<abbr title="World Wide Web Consortium">W3C</abbr>},
|
85
|
+
@xml.target!
|
86
|
+
end
|
87
|
+
|
82
88
|
def test_complex
|
83
89
|
@xml.body(:bg=>"#ffffff") { |x|
|
84
90
|
x.title("T", :style=>"red")
|
@@ -114,9 +120,9 @@ class TestMarkup < Test::Unit::TestCase
|
|
114
120
|
|
115
121
|
def test_append_text
|
116
122
|
@xml.p { |x| x.br; x.text! "HI" }
|
117
|
-
assert_equal "<p><br/>HI</p>", @xml.target!
|
123
|
+
assert_equal "<p><br/>HI</p>", @xml.target!
|
118
124
|
end
|
119
|
-
|
125
|
+
|
120
126
|
def test_ambiguous_markup
|
121
127
|
ex = assert_raise(ArgumentError) {
|
122
128
|
@xml.h1("data1") { b }
|
@@ -207,7 +213,7 @@ class TestNameSpaces < Test::Unit::TestCase
|
|
207
213
|
def test_long
|
208
214
|
xml = Builder::XmlMarkup.new(:indent=>2)
|
209
215
|
xml.instruct!
|
210
|
-
xml.rdf :RDF,
|
216
|
+
xml.rdf :RDF,
|
211
217
|
"xmlns:rdf" => :"&rdf;",
|
212
218
|
"xmlns:rdfs" => :"&rdfs;",
|
213
219
|
"xmlns:xsd" => :"&xsd;",
|
@@ -227,7 +233,7 @@ class TestNameSpaces < Test::Unit::TestCase
|
|
227
233
|
assert_match /xmlns:rdf="&rdf;"/m, xml.target!
|
228
234
|
assert_match /<owl:Restriction>/m, xml.target!
|
229
235
|
end
|
230
|
-
|
236
|
+
|
231
237
|
def test_ensure
|
232
238
|
xml = Builder::XmlMarkup.new
|
233
239
|
xml.html do
|
@@ -446,7 +452,8 @@ class TestIndentedXmlMarkup < Test::Unit::TestCase
|
|
446
452
|
end
|
447
453
|
end
|
448
454
|
|
449
|
-
|
455
|
+
# PENDING: Until we figure out how to gsub on non-UTF-8 text.
|
456
|
+
def xtest_use_entities_if_kcode_is_utf_but_encoding_is_something_else
|
450
457
|
xml = Builder::XmlMarkup.new
|
451
458
|
xml.instruct!(:xml, :encoding => 'UTF-16')
|
452
459
|
xml.p(encode("\xE2\x80\x99", 'UTF8'))
|
@@ -527,7 +534,7 @@ class TestIndentedXmlMarkup < Test::Unit::TestCase
|
|
527
534
|
def initialize
|
528
535
|
@events = []
|
529
536
|
end
|
530
|
-
|
537
|
+
|
531
538
|
def start_tag(sym, attrs)
|
532
539
|
@events << [:start, sym, attrs]
|
533
540
|
end
|
@@ -543,4 +550,3 @@ class TestIndentedXmlMarkup < Test::Unit::TestCase
|
|
543
550
|
end
|
544
551
|
|
545
552
|
end
|
546
|
-
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#--
|
4
|
+
# Portions copyright 2011 by Bart ten Brinke (info@retrosync.com).
|
5
|
+
# All rights reserved.
|
6
|
+
|
7
|
+
# Permission is granted for use, copying, modification, distribution,
|
8
|
+
# and distribution of modified versions of this work as long as the
|
9
|
+
# above copyright notice is included.
|
10
|
+
#++
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'test/preload'
|
14
|
+
require 'builder'
|
15
|
+
|
16
|
+
class TestMethodCaching < Test::Unit::TestCase
|
17
|
+
|
18
|
+
# We can directly ask if xml object responds to the cache_me or
|
19
|
+
# do_not_cache_me methods because xml is derived from BasicObject
|
20
|
+
# (and repond_to? is not defined in BasicObject).
|
21
|
+
#
|
22
|
+
# Instead we are going to stub out method_missing so that it throws
|
23
|
+
# an error, and then make sure that error is either thrown or not
|
24
|
+
# thrown as appropriate.
|
25
|
+
|
26
|
+
def teardown
|
27
|
+
super
|
28
|
+
Builder::XmlBase.cache_method_calls = true
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_method_call_caching
|
32
|
+
xml = Builder::XmlMarkup.new
|
33
|
+
xml.cache_me
|
34
|
+
|
35
|
+
def xml.method_missing(*args)
|
36
|
+
::Kernel.fail StandardError, "SHOULD NOT BE CALLED"
|
37
|
+
end
|
38
|
+
assert_nothing_raised do
|
39
|
+
xml.cache_me
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_method_call_caching_disabled
|
44
|
+
Builder::XmlBase.cache_method_calls = false
|
45
|
+
xml = Builder::XmlMarkup.new
|
46
|
+
xml.do_not_cache_me
|
47
|
+
|
48
|
+
def xml.method_missing(*args)
|
49
|
+
::Kernel.fail StandardError, "SHOULD BE CALLED"
|
50
|
+
end
|
51
|
+
assert_raise(StandardError, /SHOULD BE CALLED/) do
|
52
|
+
xml.do_not_cache_me
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
metadata
CHANGED
@@ -1,36 +1,31 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: builder
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 3
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
version: 3.0.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.1
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Jim Weirich
|
13
|
-
autorequire:
|
9
|
+
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2010-11-17 00:00:00 -05:00
|
18
|
-
default_executable:
|
12
|
+
date: 2012-09-06 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
14
|
+
description: ! 'Builder provides a number of builder objects that make creating structured
|
15
|
+
data
|
20
16
|
|
21
|
-
description: |
|
22
|
-
Builder provides a number of builder objects that make creating structured data
|
23
17
|
simple to do. Currently the following builder objects are supported:
|
24
|
-
|
18
|
+
|
19
|
+
|
25
20
|
* XML Markup
|
21
|
+
|
26
22
|
* XML Events
|
27
23
|
|
24
|
+
'
|
28
25
|
email: jim@weirichhouse.org
|
29
26
|
executables: []
|
30
|
-
|
31
27
|
extensions: []
|
32
|
-
|
33
|
-
extra_rdoc_files:
|
28
|
+
extra_rdoc_files:
|
34
29
|
- CHANGES
|
35
30
|
- Rakefile
|
36
31
|
- README
|
@@ -39,7 +34,7 @@ extra_rdoc_files:
|
|
39
34
|
- doc/releases/builder-1.2.4.rdoc
|
40
35
|
- doc/releases/builder-2.0.0.rdoc
|
41
36
|
- doc/releases/builder-2.1.1.rdoc
|
42
|
-
files:
|
37
|
+
files:
|
43
38
|
- lib/blankslate.rb
|
44
39
|
- lib/builder/blankslate.rb
|
45
40
|
- lib/builder/xchar.rb
|
@@ -53,6 +48,7 @@ files:
|
|
53
48
|
- test/test_cssbuilder.rb
|
54
49
|
- test/test_eventbuilder.rb
|
55
50
|
- test/test_markupbuilder.rb
|
51
|
+
- test/test_method_caching.rb
|
56
52
|
- test/test_namecollision.rb
|
57
53
|
- test/test_xchar.rb
|
58
54
|
- CHANGES
|
@@ -63,44 +59,40 @@ files:
|
|
63
59
|
- doc/releases/builder-1.2.4.rdoc
|
64
60
|
- doc/releases/builder-2.0.0.rdoc
|
65
61
|
- doc/releases/builder-2.1.1.rdoc
|
66
|
-
has_rdoc: true
|
67
62
|
homepage: http://onestepback.org
|
68
63
|
licenses: []
|
69
|
-
|
70
64
|
post_install_message:
|
71
|
-
rdoc_options:
|
65
|
+
rdoc_options:
|
72
66
|
- --title
|
73
67
|
- Builder -- Easy XML Building
|
74
68
|
- --main
|
75
69
|
- README.rdoc
|
76
70
|
- --line-numbers
|
77
|
-
require_paths:
|
71
|
+
require_paths:
|
78
72
|
- lib
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
- 0
|
92
|
-
version: "0"
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
93
85
|
requirements: []
|
94
|
-
|
95
86
|
rubyforge_project:
|
96
|
-
rubygems_version: 1.
|
87
|
+
rubygems_version: 1.8.15
|
97
88
|
signing_key:
|
98
89
|
specification_version: 3
|
99
90
|
summary: Builders for MarkUp.
|
100
|
-
test_files:
|
91
|
+
test_files:
|
101
92
|
- test/test_blankslate.rb
|
102
93
|
- test/test_cssbuilder.rb
|
103
94
|
- test/test_eventbuilder.rb
|
104
95
|
- test/test_markupbuilder.rb
|
96
|
+
- test/test_method_caching.rb
|
105
97
|
- test/test_namecollision.rb
|
106
98
|
- test/test_xchar.rb
|