builder 3.2.3 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGES +22 -1
- data/Gemfile +8 -0
- data/Gemfile.lock +22 -0
- data/README.md +2 -2
- data/Rakefile +5 -46
- data/builder.blurb +27 -0
- data/builder.gemspec +49 -0
- data/doc/jamis.rb +1 -0
- data/doc/releases/builder-2.1.1.rdoc +0 -0
- data/lib/builder/version.rb +3 -2
- data/lib/builder/xchar.rb +1 -0
- data/lib/builder/xmlbase.rb +3 -4
- data/lib/builder/xmlevents.rb +1 -0
- data/lib/builder/xmlmarkup.rb +11 -5
- data/lib/builder.rb +1 -0
- data/rakelib/publish.rake +1 -0
- data/rakelib/tags.rake +2 -1
- data/rakelib/testing.rake +1 -0
- data/test/helper.rb +1 -0
- data/test/performance.rb +2 -1
- data/test/test_eventbuilder.rb +1 -1
- data/test/test_markupbuilder.rb +8 -3
- data/test/test_method_caching.rb +1 -1
- data/test/test_namecollision.rb +1 -0
- data/test/test_xchar.rb +13 -6
- metadata +19 -15
- data/lib/blankslate.rb +0 -137
- data/lib/builder/blankslate.rb +0 -23
- data/test/preload.rb +0 -39
- data/test/test_blankslate.rb +0 -213
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3806a31277af2b4c8c09c0ff00fefc48c53897b6e15ec50d6a3aaf3c38fddcd6
|
4
|
+
data.tar.gz: ab52ac5dfa0d775075f8331a926257cc2f5d6ae2d8b872847694f7073278e7be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e14cca2d3f260c05a824b26db49271c106b8616b98b41bac4eb4e9ff13326a9309647173240e6ea3a7c84c5f671987b7108d186171b97cc66daa48708dbeef8
|
7
|
+
data.tar.gz: 284523129dae9e151677655c21ab3a2d248a3d9f3a38bea5c20eb984b4bfacc9792acc70d4141af744c0815676bca3132b2c25c13e0b406db9599f28ec6967ae
|
data/CHANGES
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
= Change Log
|
2
2
|
|
3
|
-
== Version 3.
|
3
|
+
== Version 3.3.0 (2024-06-06)
|
4
|
+
|
5
|
+
* Fix broken call to `File.exists?` in `tags.rake`.
|
6
|
+
* Use BasicObject instead of BlankSlate for better compatibility with modern rubies.
|
7
|
+
|
8
|
+
== Version 3.2.4 (2019-12-10)
|
9
|
+
|
10
|
+
* Strings were frozen by adding `# frozen_string_literal: true` to all files
|
11
|
+
|
12
|
+
== Version 3.2.3 (2017-01-13)
|
13
|
+
|
14
|
+
* Support for Ruby 2.4
|
15
|
+
|
16
|
+
== Version 3.2.2 (2013-06-01
|
17
|
+
|
18
|
+
* Misc minor fixes
|
19
|
+
|
20
|
+
== Version 3.2.1 (2013-05-30)
|
21
|
+
|
22
|
+
* Travis & Rdoc fixes
|
23
|
+
|
24
|
+
== Version 3.2.0 (2013-02-23)
|
4
25
|
|
5
26
|
* Ruby 2.0 compatibility changes.
|
6
27
|
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
builder (3.3.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
minitest (5.23.1)
|
10
|
+
rake (13.2.1)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
arm64-darwin-23
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
builder!
|
18
|
+
minitest
|
19
|
+
rake
|
20
|
+
|
21
|
+
BUNDLED WITH
|
22
|
+
2.5.9
|
data/README.md
CHANGED
@@ -245,8 +245,8 @@ incompatibility are:
|
|
245
245
|
| Description | Link |
|
246
246
|
| :----: | :----: |
|
247
247
|
| Documents | http://builder.rubyforge.org/ |
|
248
|
-
| Github Clone | git://github.com/
|
249
|
-
| Issue / Bug Reports | https://github.com/
|
248
|
+
| Github Clone | git://github.com/rails/builder.git |
|
249
|
+
| Issue / Bug Reports | https://github.com/rails/builder/issues?state=open |
|
250
250
|
|
251
251
|
## Contact
|
252
252
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Rakefile for rake -*- ruby -*-
|
2
3
|
|
3
4
|
# Copyright 2004, 2005, 2006 by Jim Weirich (jim@weirichhouse.org).
|
@@ -7,6 +8,7 @@
|
|
7
8
|
# and distribution of modified versions of this work as long as the
|
8
9
|
# above copyright notice is included.
|
9
10
|
|
11
|
+
require 'bundler/gem_tasks'
|
10
12
|
require 'rake/clean'
|
11
13
|
require 'rake/testtask'
|
12
14
|
begin
|
@@ -22,7 +24,7 @@ require './lib/builder/version'
|
|
22
24
|
# Determine the current version of the software
|
23
25
|
|
24
26
|
CLOBBER.include('pkg', 'html')
|
25
|
-
CLEAN.include('pkg/builder-*').
|
27
|
+
CLEAN.include('pkg/builder-*').exclude('pkg/*.gem')
|
26
28
|
|
27
29
|
PKG_VERSION = Builder::VERSION
|
28
30
|
|
@@ -43,7 +45,7 @@ task :tu => [:test_units]
|
|
43
45
|
|
44
46
|
Rake::TestTask.new("test_units") do |t|
|
45
47
|
t.test_files = FileList['test/test*.rb']
|
46
|
-
t.libs << "."
|
48
|
+
t.libs << "." << "test"
|
47
49
|
t.verbose = false
|
48
50
|
end
|
49
51
|
|
@@ -76,11 +78,6 @@ PKG_FILES.exclude('test/test_cssbuilder.rb')
|
|
76
78
|
PKG_FILES.exclude('lib/builder/css.rb')
|
77
79
|
PKG_FILES.exclude('TAGS')
|
78
80
|
|
79
|
-
BLANKSLATE_FILES = FileList[
|
80
|
-
'lib/blankslate.rb',
|
81
|
-
'test/test_blankslate.rb'
|
82
|
-
]
|
83
|
-
|
84
81
|
if ! defined?(Gem)
|
85
82
|
puts "Package Target requires RubyGEMs"
|
86
83
|
else
|
@@ -104,7 +101,6 @@ simple to do. Currently the following builder objects are supported:
|
|
104
101
|
|
105
102
|
s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
|
106
103
|
|
107
|
-
s.has_rdoc = true
|
108
104
|
s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
109
105
|
s.rdoc_options <<
|
110
106
|
'--title' << 'Builder -- Easy XML Building' <<
|
@@ -117,50 +113,13 @@ simple to do. Currently the following builder objects are supported:
|
|
117
113
|
s.license = 'MIT'
|
118
114
|
end
|
119
115
|
|
120
|
-
blankslate_spec = Gem::Specification.new do |s|
|
121
|
-
|
122
|
-
#### Basic information.
|
123
|
-
|
124
|
-
s.name = 'blankslate'
|
125
|
-
s.version = PKG_VERSION
|
126
|
-
s.summary = "Blank Slate base class."
|
127
|
-
s.description = %{\
|
128
|
-
BlankSlate provides a base class where almost all of the methods from Object and
|
129
|
-
Kernel have been removed. This is useful when providing proxy object and other
|
130
|
-
classes that make heavy use of method_missing.
|
131
|
-
}
|
132
|
-
|
133
|
-
s.files = BLANKSLATE_FILES.to_a
|
134
|
-
s.require_path = 'lib'
|
135
|
-
|
136
|
-
s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
|
137
|
-
|
138
|
-
s.has_rdoc = true
|
139
|
-
s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
140
|
-
s.rdoc_options <<
|
141
|
-
'--title' << 'BlankSlate -- Base Class for building proxies.' <<
|
142
|
-
'--main' << 'README.rdoc' <<
|
143
|
-
'--line-numbers'
|
144
|
-
|
145
|
-
s.author = "Jim Weirich"
|
146
|
-
s.email = "jim.weirich@gmail.com"
|
147
|
-
s.homepage = "http://onestepback.org"
|
148
|
-
s.license = 'MIT'
|
149
|
-
end
|
150
|
-
|
151
116
|
namespace 'builder' do
|
152
117
|
Gem::PackageTask.new(spec) do |t|
|
153
118
|
t.need_tar = false
|
154
119
|
end
|
155
120
|
end
|
156
121
|
|
157
|
-
|
158
|
-
Gem::PackageTask.new(blankslate_spec) do |t|
|
159
|
-
t.need_tar = false
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
task :package => [:remove_tags, 'builder:package', 'blankslate:package']
|
122
|
+
task :package => [:remove_tags, 'builder:package']
|
164
123
|
end
|
165
124
|
|
166
125
|
task :remove_tags do
|
data/builder.blurb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
name: builder
|
2
|
+
document: http://builder.rubyforge.org
|
3
|
+
download: http://rubyforge.org/frs/?group_id=415
|
4
|
+
description: >
|
5
|
+
<p>This package contains Builder, a simple ruby library for
|
6
|
+
building XML document quickly and easily.</p>
|
7
|
+
|
8
|
+
<p>Here's an example:</p>
|
9
|
+
|
10
|
+
<pre>
|
11
|
+
xml = Builder::XmlMarkup.new(:indent=>2)
|
12
|
+
xml.person {
|
13
|
+
xml.first_name("Jim")
|
14
|
+
xml.last_name("Weirich")
|
15
|
+
}
|
16
|
+
puts xml.target!
|
17
|
+
</pre>
|
18
|
+
|
19
|
+
<p>Produces:</p>
|
20
|
+
|
21
|
+
<pre>
|
22
|
+
<person>
|
23
|
+
<first_name>Jim</first_name>
|
24
|
+
<last_name>Weirich</last_name>
|
25
|
+
</person>
|
26
|
+
</pre>
|
27
|
+
|
data/builder.gemspec
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require './lib/builder/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
|
6
|
+
#### Basic information.
|
7
|
+
|
8
|
+
s.name = 'builder'
|
9
|
+
s.version = Builder::VERSION
|
10
|
+
s.summary = "Builders for MarkUp."
|
11
|
+
s.description = %{\
|
12
|
+
Builder provides a number of builder objects that make creating structured data
|
13
|
+
simple to do. Currently the following builder objects are supported:
|
14
|
+
|
15
|
+
* XML Markup
|
16
|
+
* XML Events
|
17
|
+
}
|
18
|
+
|
19
|
+
pkg_files = Dir[
|
20
|
+
'[A-Z]*',
|
21
|
+
'doc/**/*',
|
22
|
+
'lib/**/*.rb',
|
23
|
+
'test/**/*.rb',
|
24
|
+
'rakelib/**/*'
|
25
|
+
]
|
26
|
+
|
27
|
+
s.files = pkg_files
|
28
|
+
s.require_path = 'lib'
|
29
|
+
|
30
|
+
s.test_files = pkg_files.select { |fn| fn =~ /^test\/test/ }
|
31
|
+
|
32
|
+
# s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
33
|
+
s.rdoc_options <<
|
34
|
+
'--title' << 'Builder -- Easy XML Building' <<
|
35
|
+
'--main' << 'README.rdoc' <<
|
36
|
+
'--line-numbers'
|
37
|
+
|
38
|
+
s.authors = ["Jim Weirich", "Aaron Patterson"]
|
39
|
+
s.email = "aron.patterson@gmail.com"
|
40
|
+
s.homepage = "https://github.com/rails/builder"
|
41
|
+
s.license = 'MIT'
|
42
|
+
s.metadata = {
|
43
|
+
"bug_tracker_uri" => "#{s.homepage}/issues",
|
44
|
+
"changelog_uri" => "#{s.homepage}/blob/master/CHANGES",
|
45
|
+
"documentation_uri" => "https://www.rubydoc.info/gems/builder/#{s.version}",
|
46
|
+
"homepage_uri" => s.homepage,
|
47
|
+
"source_code_uri" => "#{s.homepage}/tree/v#{s.version}"
|
48
|
+
}
|
49
|
+
end
|
data/doc/jamis.rb
CHANGED
File without changes
|
data/lib/builder/version.rb
CHANGED
data/lib/builder/xchar.rb
CHANGED
data/lib/builder/xmlbase.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'builder/blankslate'
|
2
|
+
# frozen_string_literal: true
|
4
3
|
|
5
4
|
module Builder
|
6
5
|
|
@@ -9,7 +8,7 @@ module Builder
|
|
9
8
|
|
10
9
|
# XmlBase is a base class for building XML builders. See
|
11
10
|
# Builder::XmlMarkup and Builder::XmlEvents for examples.
|
12
|
-
class XmlBase <
|
11
|
+
class XmlBase < BasicObject
|
13
12
|
|
14
13
|
class << self
|
15
14
|
attr_accessor :cache_method_calls
|
@@ -52,7 +51,7 @@ module Builder
|
|
52
51
|
attrs ||= {}
|
53
52
|
attrs.merge!({:nil => true}) if explicit_nil_handling?
|
54
53
|
else
|
55
|
-
text ||= ''
|
54
|
+
text ||= ''.dup
|
56
55
|
text << arg.to_s
|
57
56
|
end
|
58
57
|
end
|
data/lib/builder/xmlevents.rb
CHANGED
data/lib/builder/xmlmarkup.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
#--
|
3
4
|
# Copyright 2004, 2005 by Jim Weirich (jim@weirichhouse.org).
|
4
5
|
# All rights reserved.
|
@@ -117,15 +118,15 @@ module Builder
|
|
117
118
|
#
|
118
119
|
# Example:
|
119
120
|
#
|
120
|
-
# xm = Builder.new(:indent=>2)
|
121
|
+
# xm = Builder::XmlMarkup.new(:indent=>2)
|
121
122
|
# # xm will produce nicely formatted and indented XML.
|
122
123
|
#
|
123
|
-
# xm = Builder.new(:indent=>2, :margin=>4)
|
124
|
+
# xm = Builder::XmlMarkup.new(:indent=>2, :margin=>4)
|
124
125
|
# # xm will produce nicely formatted and indented XML with 2
|
125
126
|
# # spaces per indent and an over all indentation level of 4.
|
126
127
|
#
|
127
128
|
# builder = Builder::XmlMarkup.new(:target=>$stdout, :indent=>2)
|
128
|
-
# builder.name { |b| b.first("Jim"); b.last("Weirich) }
|
129
|
+
# builder.name { |b| b.first("Jim"); b.last("Weirich") }
|
129
130
|
# # prints:
|
130
131
|
# # <name>
|
131
132
|
# # <first>Jim</first>
|
@@ -154,7 +155,7 @@ module Builder
|
|
154
155
|
#
|
155
156
|
# xml_builder = Builder::XmlMarkup.new
|
156
157
|
# xml_builder.div { |xml|
|
157
|
-
# xml.
|
158
|
+
# xml.strong("text")
|
158
159
|
# }
|
159
160
|
#
|
160
161
|
class XmlMarkup < XmlBase
|
@@ -192,7 +193,7 @@ module Builder
|
|
192
193
|
@quote = (options[:quote] == :single) ? "'" : '"'
|
193
194
|
@explicit_nil_handling = options[:explicit_nil_handling]
|
194
195
|
super(indent, margin)
|
195
|
-
@target = options[:target] || ""
|
196
|
+
@target = options[:target] || "".dup
|
196
197
|
end
|
197
198
|
|
198
199
|
# Return the target of the builder.
|
@@ -271,6 +272,11 @@ module Builder
|
|
271
272
|
_special("<![CDATA[", "]]>", text.gsub(']]>', ']]]]><![CDATA[>'), nil)
|
272
273
|
end
|
273
274
|
|
275
|
+
def cdata_value!(open, text)
|
276
|
+
_ensure_no_block ::Kernel::block_given?
|
277
|
+
_special("<#{open}>", "</#{open}>", "<![CDATA[#{text.gsub(']]>', ']]]]><![CDATA[>')}]]>", nil)
|
278
|
+
end
|
279
|
+
|
274
280
|
private
|
275
281
|
|
276
282
|
# NOTE: All private methods of a builder object are prefixed when
|
data/lib/builder.rb
CHANGED
data/rakelib/publish.rake
CHANGED
data/rakelib/tags.rake
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Tags
|
4
5
|
extend Rake::DSL if defined?(Rake::DSL)
|
@@ -13,7 +14,7 @@ module Tags
|
|
13
14
|
PROJECT_DIR = ['.']
|
14
15
|
|
15
16
|
RVM_GEMDIR = File.join(`rvm gemdir`.strip, "gems") rescue nil
|
16
|
-
SYSTEM_DIRS = RVM_GEMDIR && File.
|
17
|
+
SYSTEM_DIRS = RVM_GEMDIR && File.exist?(RVM_GEMDIR) ? RVM_GEMDIR : []
|
17
18
|
|
18
19
|
module_function
|
19
20
|
|
data/rakelib/testing.rake
CHANGED
data/test/helper.rb
CHANGED
data/test/performance.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
# encoding: iso-8859-1
|
3
4
|
|
4
5
|
#--
|
@@ -14,7 +15,7 @@
|
|
14
15
|
require 'builder/xmlmarkup'
|
15
16
|
require 'benchmark'
|
16
17
|
|
17
|
-
text = "This is a test of the new xml markup. I
|
18
|
+
text = "This is a test of the new xml markup. I�t�rn�ti�n�liz�ti�n\n" * 10000
|
18
19
|
|
19
20
|
include Benchmark # we need the CAPTION and FMTSTR constants
|
20
21
|
include Builder
|
data/test/test_eventbuilder.rb
CHANGED
data/test/test_markupbuilder.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
#--
|
4
5
|
# Portions copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
@@ -11,7 +12,6 @@
|
|
11
12
|
#++
|
12
13
|
|
13
14
|
require 'helper'
|
14
|
-
require 'preload'
|
15
15
|
require 'builder'
|
16
16
|
require 'builder/xmlmarkup'
|
17
17
|
|
@@ -417,6 +417,11 @@ class TestSpecialMarkup < Builder::Test
|
|
417
417
|
assert_equal "<![CDATA[TEST]]>\n", @xml.target!
|
418
418
|
end
|
419
419
|
|
420
|
+
def test_cdata_value
|
421
|
+
@xml.cdata_value!("content:encoded", "<p>TEST</p>")
|
422
|
+
assert_equal "<content:encoded><![CDATA[<p>TEST</p>]]></content:encoded>\n", @xml.target!
|
423
|
+
end
|
424
|
+
|
420
425
|
def test_cdata_with_ampersand
|
421
426
|
@xml.cdata!("TEST&CHECK")
|
422
427
|
assert_equal "<![CDATA[TEST&CHECK]]>\n", @xml.target!
|
@@ -499,7 +504,7 @@ class TestIndentedXmlMarkup < Builder::Test
|
|
499
504
|
$KCODE = encoding
|
500
505
|
string
|
501
506
|
elsif encoding == 'UTF8'
|
502
|
-
string.force_encoding('UTF-8')
|
507
|
+
string.dup.force_encoding('UTF-8')
|
503
508
|
else
|
504
509
|
string
|
505
510
|
end
|
@@ -580,7 +585,7 @@ class TestIndentedXmlMarkup < Builder::Test
|
|
580
585
|
end
|
581
586
|
|
582
587
|
def pop_text
|
583
|
-
result = ''
|
588
|
+
result = ''.dup
|
584
589
|
while ! @handler.events.empty? && @handler.events[0][0] == :text
|
585
590
|
result << @handler.events[0][1]
|
586
591
|
@handler.events.shift
|
data/test/test_method_caching.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
#--
|
4
5
|
# Portions copyright 2011 by Bart ten Brinke (info@retrosync.com).
|
@@ -10,7 +11,6 @@
|
|
10
11
|
#++
|
11
12
|
|
12
13
|
require 'helper'
|
13
|
-
require 'preload'
|
14
14
|
require 'builder'
|
15
15
|
|
16
16
|
class TestMethodCaching < Builder::Test
|
data/test/test_namecollision.rb
CHANGED
data/test/test_xchar.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
# encoding: us-ascii
|
3
4
|
|
4
5
|
#--
|
@@ -22,9 +23,9 @@ if String.method_defined?(:encode)
|
|
22
23
|
|
23
24
|
# shim method for testing purposes
|
24
25
|
def to_xs(escape=true)
|
25
|
-
raise NameError.new('to_xs') unless caller[0].index(__FILE__)
|
26
|
+
# raise NameError.new('to_xs') unless caller[0].index(__FILE__)
|
26
27
|
|
27
|
-
result = Builder::XChar.encode(self)
|
28
|
+
result = Builder::XChar.encode(self.dup)
|
28
29
|
if escape
|
29
30
|
result.gsub(/[^\u0000-\u007F]/) {|c| "&##{c.ord};"}
|
30
31
|
else
|
@@ -70,9 +71,15 @@ class TestXmlEscaping < Builder::Test
|
|
70
71
|
end
|
71
72
|
|
72
73
|
def test_utf8_verbatim
|
73
|
-
assert_equal "\xE2\x80\x99", "\xE2\x80\x99".to_xs(false) # right single quote
|
74
|
-
assert_equal "\xC2\xA9", "\xC2\xA9".to_xs(false) # copy
|
75
|
-
assert_equal "\xC2\xA9&\xC2\xA9",
|
76
|
-
"\xC2\xA9&\xC2\xA9".to_xs(false)
|
74
|
+
assert_equal binary("\xE2\x80\x99"), "\xE2\x80\x99".to_xs(false) # right single quote
|
75
|
+
assert_equal binary("\xC2\xA9"), "\xC2\xA9".to_xs(false) # copy
|
76
|
+
assert_equal binary("\xC2\xA9&\xC2\xA9"),
|
77
|
+
"\xC2\xA9&\xC2\xA9".to_xs(false) # copy with ampersand
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def binary(string)
|
83
|
+
string.dup.force_encoding(Encoding::BINARY)
|
77
84
|
end
|
78
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
8
|
-
|
8
|
+
- Aaron Patterson
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2024-06-06 00:00:00.000000000 Z
|
12
13
|
dependencies: []
|
13
14
|
description: |
|
14
15
|
Builder provides a number of builder objects that make creating structured data
|
@@ -16,22 +17,24 @@ description: |
|
|
16
17
|
|
17
18
|
* XML Markup
|
18
19
|
* XML Events
|
19
|
-
email:
|
20
|
+
email: aron.patterson@gmail.com
|
20
21
|
executables: []
|
21
22
|
extensions: []
|
22
23
|
extra_rdoc_files: []
|
23
24
|
files:
|
24
25
|
- CHANGES
|
26
|
+
- Gemfile
|
27
|
+
- Gemfile.lock
|
25
28
|
- MIT-LICENSE
|
26
29
|
- README.md
|
27
30
|
- Rakefile
|
31
|
+
- builder.blurb
|
32
|
+
- builder.gemspec
|
28
33
|
- doc/jamis.rb
|
29
34
|
- doc/releases/builder-1.2.4.rdoc
|
30
35
|
- doc/releases/builder-2.0.0.rdoc
|
31
36
|
- doc/releases/builder-2.1.1.rdoc
|
32
|
-
- lib/blankslate.rb
|
33
37
|
- lib/builder.rb
|
34
|
-
- lib/builder/blankslate.rb
|
35
38
|
- lib/builder/version.rb
|
36
39
|
- lib/builder/xchar.rb
|
37
40
|
- lib/builder/xmlbase.rb
|
@@ -42,18 +45,21 @@ files:
|
|
42
45
|
- rakelib/testing.rake
|
43
46
|
- test/helper.rb
|
44
47
|
- test/performance.rb
|
45
|
-
- test/preload.rb
|
46
|
-
- test/test_blankslate.rb
|
47
48
|
- test/test_eventbuilder.rb
|
48
49
|
- test/test_markupbuilder.rb
|
49
50
|
- test/test_method_caching.rb
|
50
51
|
- test/test_namecollision.rb
|
51
52
|
- test/test_xchar.rb
|
52
|
-
homepage:
|
53
|
+
homepage: https://github.com/rails/builder
|
53
54
|
licenses:
|
54
55
|
- MIT
|
55
|
-
metadata:
|
56
|
-
|
56
|
+
metadata:
|
57
|
+
bug_tracker_uri: https://github.com/rails/builder/issues
|
58
|
+
changelog_uri: https://github.com/rails/builder/blob/master/CHANGES
|
59
|
+
documentation_uri: https://www.rubydoc.info/gems/builder/3.3.0
|
60
|
+
homepage_uri: https://github.com/rails/builder
|
61
|
+
source_code_uri: https://github.com/rails/builder/tree/v3.3.0
|
62
|
+
post_install_message:
|
57
63
|
rdoc_options:
|
58
64
|
- "--title"
|
59
65
|
- Builder -- Easy XML Building
|
@@ -73,13 +79,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
79
|
- !ruby/object:Gem::Version
|
74
80
|
version: '0'
|
75
81
|
requirements: []
|
76
|
-
|
77
|
-
|
78
|
-
signing_key:
|
82
|
+
rubygems_version: 3.5.9
|
83
|
+
signing_key:
|
79
84
|
specification_version: 4
|
80
85
|
summary: Builders for MarkUp.
|
81
86
|
test_files:
|
82
|
-
- test/test_blankslate.rb
|
83
87
|
- test/test_eventbuilder.rb
|
84
88
|
- test/test_markupbuilder.rb
|
85
89
|
- test/test_method_caching.rb
|
data/lib/blankslate.rb
DELETED
@@ -1,137 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#--
|
3
|
-
# Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org).
|
4
|
-
# All rights reserved.
|
5
|
-
|
6
|
-
# Permission is granted for use, copying, modification, distribution,
|
7
|
-
# and distribution of modified versions of this work as long as the
|
8
|
-
# above copyright notice is included.
|
9
|
-
#++
|
10
|
-
|
11
|
-
class String
|
12
|
-
if instance_methods.first.is_a?(Symbol)
|
13
|
-
def _blankslate_as_name
|
14
|
-
to_sym
|
15
|
-
end
|
16
|
-
else
|
17
|
-
def _blankslate_as_name
|
18
|
-
self
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Symbol
|
24
|
-
if instance_methods.first.is_a?(Symbol)
|
25
|
-
def _blankslate_as_name
|
26
|
-
self
|
27
|
-
end
|
28
|
-
else
|
29
|
-
def _blankslate_as_name
|
30
|
-
to_s
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
######################################################################
|
36
|
-
# BlankSlate provides an abstract base class with no predefined
|
37
|
-
# methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
|
38
|
-
# BlankSlate is useful as a base class when writing classes that
|
39
|
-
# depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
|
40
|
-
#
|
41
|
-
class BlankSlate
|
42
|
-
class << self
|
43
|
-
|
44
|
-
# Hide the method named +name+ in the BlankSlate class. Don't
|
45
|
-
# hide +instance_eval+ or any method beginning with "__".
|
46
|
-
def hide(name)
|
47
|
-
warn_level = $VERBOSE
|
48
|
-
$VERBOSE = nil
|
49
|
-
if instance_methods.include?(name._blankslate_as_name) &&
|
50
|
-
name !~ /^(__|instance_eval$)/
|
51
|
-
@hidden_methods ||= {}
|
52
|
-
@hidden_methods[name.to_sym] = instance_method(name)
|
53
|
-
undef_method name
|
54
|
-
end
|
55
|
-
ensure
|
56
|
-
$VERBOSE = warn_level
|
57
|
-
end
|
58
|
-
|
59
|
-
def find_hidden_method(name)
|
60
|
-
@hidden_methods ||= {}
|
61
|
-
@hidden_methods[name] || superclass.find_hidden_method(name)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Redefine a previously hidden method so that it may be called on a blank
|
65
|
-
# slate object.
|
66
|
-
def reveal(name)
|
67
|
-
hidden_method = find_hidden_method(name)
|
68
|
-
fail "Don't know how to reveal method '#{name}'" unless hidden_method
|
69
|
-
define_method(name, hidden_method)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
instance_methods.each { |m| hide(m) }
|
74
|
-
end
|
75
|
-
|
76
|
-
######################################################################
|
77
|
-
# Since Ruby is very dynamic, methods added to the ancestors of
|
78
|
-
# BlankSlate <em>after BlankSlate is defined</em> will show up in the
|
79
|
-
# list of available BlankSlate methods. We handle this by defining a
|
80
|
-
# hook in the Object and Kernel classes that will hide any method
|
81
|
-
# defined after BlankSlate has been loaded.
|
82
|
-
#
|
83
|
-
module Kernel
|
84
|
-
class << self
|
85
|
-
alias_method :blank_slate_method_added, :method_added
|
86
|
-
|
87
|
-
# Detect method additions to Kernel and remove them in the
|
88
|
-
# BlankSlate class.
|
89
|
-
def method_added(name)
|
90
|
-
result = blank_slate_method_added(name)
|
91
|
-
return result if self != Kernel
|
92
|
-
BlankSlate.hide(name)
|
93
|
-
result
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
######################################################################
|
99
|
-
# Same as above, except in Object.
|
100
|
-
#
|
101
|
-
class Object
|
102
|
-
class << self
|
103
|
-
alias_method :blank_slate_method_added, :method_added
|
104
|
-
|
105
|
-
# Detect method additions to Object and remove them in the
|
106
|
-
# BlankSlate class.
|
107
|
-
def method_added(name)
|
108
|
-
result = blank_slate_method_added(name)
|
109
|
-
return result if self != Object
|
110
|
-
BlankSlate.hide(name)
|
111
|
-
result
|
112
|
-
end
|
113
|
-
|
114
|
-
def find_hidden_method(name)
|
115
|
-
nil
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
######################################################################
|
121
|
-
# Also, modules included into Object need to be scanned and have their
|
122
|
-
# instance methods removed from blank slate. In theory, modules
|
123
|
-
# included into Kernel would have to be removed as well, but a
|
124
|
-
# "feature" of Ruby prevents late includes into modules from being
|
125
|
-
# exposed in the first place.
|
126
|
-
#
|
127
|
-
class Module
|
128
|
-
alias blankslate_original_append_features append_features
|
129
|
-
def append_features(mod)
|
130
|
-
result = blankslate_original_append_features(mod)
|
131
|
-
return result if mod != Object
|
132
|
-
instance_methods.each do |name|
|
133
|
-
BlankSlate.hide(name)
|
134
|
-
end
|
135
|
-
result
|
136
|
-
end
|
137
|
-
end
|
data/lib/builder/blankslate.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#--
|
3
|
-
# Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org).
|
4
|
-
# All rights reserved.
|
5
|
-
|
6
|
-
# Permission is granted for use, copying, modification, distribution,
|
7
|
-
# and distribution of modified versions of this work as long as the
|
8
|
-
# above copyright notice is included.
|
9
|
-
#++
|
10
|
-
|
11
|
-
######################################################################
|
12
|
-
# BlankSlate has been promoted to a top level name and is now
|
13
|
-
# available as a standalone gem. We make the name available in the
|
14
|
-
# Builder namespace for compatibility.
|
15
|
-
#
|
16
|
-
module Builder
|
17
|
-
if Object::const_defined?(:BasicObject)
|
18
|
-
BlankSlate = ::BasicObject
|
19
|
-
else
|
20
|
-
require 'blankslate'
|
21
|
-
BlankSlate = ::BlankSlate
|
22
|
-
end
|
23
|
-
end
|
data/test/preload.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Portions copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
5
|
-
# Portions copyright 2005 by Sam Ruby (rubys@intertwingly.net).
|
6
|
-
# All rights reserved.
|
7
|
-
|
8
|
-
# Permission is granted for use, copying, modification, distribution,
|
9
|
-
# and distribution of modified versions of this work as long as the
|
10
|
-
# above copyright notice is included.
|
11
|
-
#++
|
12
|
-
|
13
|
-
# We are defining method_added in Kernel and Object so that when
|
14
|
-
# BlankSlate overrides them later, we can verify that it correctly
|
15
|
-
# calls the older hooks.
|
16
|
-
|
17
|
-
module Kernel
|
18
|
-
class << self
|
19
|
-
attr_reader :k_added_names
|
20
|
-
alias_method :preload_method_added, :method_added
|
21
|
-
def method_added(name)
|
22
|
-
preload_method_added(name)
|
23
|
-
@k_added_names ||= []
|
24
|
-
@k_added_names << name
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Object
|
30
|
-
class << self
|
31
|
-
attr_reader :o_added_names
|
32
|
-
alias_method :preload_method_added, :method_added
|
33
|
-
def method_added(name)
|
34
|
-
preload_method_added(name)
|
35
|
-
@o_added_names ||= []
|
36
|
-
@o_added_names << name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/test/test_blankslate.rb
DELETED
@@ -1,213 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Portions copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
5
|
-
# Portions copyright 2005 by Sam Ruby (rubys@intertwingly.net).
|
6
|
-
# All rights reserved.
|
7
|
-
|
8
|
-
# Permission is granted for use, copying, modification, distribution,
|
9
|
-
# and distribution of modified versions of this work as long as the
|
10
|
-
# above copyright notice is included.
|
11
|
-
#++
|
12
|
-
|
13
|
-
require 'helper'
|
14
|
-
require 'preload'
|
15
|
-
require 'blankslate'
|
16
|
-
require 'stringio'
|
17
|
-
|
18
|
-
# Methods to be introduced into the Object class late.
|
19
|
-
module LateObject
|
20
|
-
def late_object
|
21
|
-
33
|
22
|
-
end
|
23
|
-
def LateObject.included(mod)
|
24
|
-
# Modules defining an included method should not prevent blank
|
25
|
-
# slate erasure!
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# Methods to be introduced into the Kernel module late.
|
30
|
-
module LateKernel
|
31
|
-
def late_kernel
|
32
|
-
44
|
33
|
-
end
|
34
|
-
def LateKernel.included(mod)
|
35
|
-
# Modules defining an included method should not prevent blank
|
36
|
-
# slate erasure!
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Introduce some late methods (both module and direct) into the Kernel
|
41
|
-
# module.
|
42
|
-
module Kernel
|
43
|
-
include LateKernel
|
44
|
-
|
45
|
-
def late_addition
|
46
|
-
1234
|
47
|
-
end
|
48
|
-
|
49
|
-
def double_late_addition
|
50
|
-
22
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
# Introduce some late methods (both module and direct) into the Object
|
56
|
-
# class.
|
57
|
-
class Object
|
58
|
-
include LateObject
|
59
|
-
def another_late_addition
|
60
|
-
4321
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Introduce some late methods by inclusion.
|
65
|
-
module GlobalModule
|
66
|
-
def global_inclusion
|
67
|
-
42
|
68
|
-
end
|
69
|
-
end
|
70
|
-
include GlobalModule
|
71
|
-
|
72
|
-
def direct_global
|
73
|
-
43
|
74
|
-
end
|
75
|
-
|
76
|
-
######################################################################
|
77
|
-
# Test case for blank slate.
|
78
|
-
#
|
79
|
-
class TestBlankSlate < Builder::Test
|
80
|
-
def setup
|
81
|
-
@bs = BlankSlate.new
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_undefined_methods_remain_undefined
|
85
|
-
assert_raise(NoMethodError) { @bs.no_such_method }
|
86
|
-
assert_raise(NoMethodError) { @bs.nil? }
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
# NOTE: NameError is acceptable because the lack of a '.' means that
|
91
|
-
# Ruby can't tell if it is a method or a local variable.
|
92
|
-
def test_undefined_methods_remain_undefined_during_instance_eval
|
93
|
-
assert_raise(NoMethodError, NameError) do
|
94
|
-
@bs.instance_eval do nil? end
|
95
|
-
end
|
96
|
-
assert_raise(NoMethodError, NameError) do
|
97
|
-
@bs.instance_eval do no_such_method end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_private_methods_are_undefined
|
102
|
-
assert_raise(NoMethodError) do
|
103
|
-
@bs.puts "HI"
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_targetted_private_methods_are_undefined_during_instance_eval
|
108
|
-
assert_raise(NoMethodError, NameError) do
|
109
|
-
@bs.instance_eval do self.puts "HI" end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_untargetted_private_methods_are_defined_during_instance_eval
|
114
|
-
oldstdout = $stdout
|
115
|
-
$stdout = StringIO.new
|
116
|
-
@bs.instance_eval do
|
117
|
-
puts "HI"
|
118
|
-
end
|
119
|
-
ensure
|
120
|
-
$stdout = oldstdout
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_methods_added_late_to_kernel_remain_undefined
|
124
|
-
assert_equal 1234, nil.late_addition
|
125
|
-
assert_raise(NoMethodError) { @bs.late_addition }
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_methods_added_late_to_object_remain_undefined
|
129
|
-
assert_equal 4321, nil.another_late_addition
|
130
|
-
assert_raise(NoMethodError) { @bs.another_late_addition }
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_methods_added_late_to_global_remain_undefined
|
134
|
-
assert_equal 42, global_inclusion
|
135
|
-
assert_raise(NoMethodError) { @bs.global_inclusion }
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_preload_method_added
|
139
|
-
assert Kernel.k_added_names.include?(:late_addition)
|
140
|
-
assert Object.o_added_names.include?(:another_late_addition)
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_method_defined_late_multiple_times_remain_undefined
|
144
|
-
assert_equal 22, nil.double_late_addition
|
145
|
-
assert_raise(NoMethodError) { @bs.double_late_addition }
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_late_included_module_in_object_is_ok
|
149
|
-
assert_equal 33, 1.late_object
|
150
|
-
assert_raise(NoMethodError) { @bs.late_object }
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_late_included_module_in_kernel_is_ok
|
154
|
-
assert_raise(NoMethodError) { @bs.late_kernel }
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_revealing_previously_hidden_methods_are_callable
|
158
|
-
with_to_s = Class.new(BlankSlate) do
|
159
|
-
reveal :to_s
|
160
|
-
end
|
161
|
-
assert_match(/^#<.*>$/, with_to_s.new.to_s)
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_revealing_previously_hidden_methods_are_callable_with_block
|
165
|
-
Object.class_eval <<-EOS
|
166
|
-
def given_block(&block)
|
167
|
-
block
|
168
|
-
end
|
169
|
-
EOS
|
170
|
-
|
171
|
-
with_given_block = Class.new(BlankSlate) do
|
172
|
-
reveal :given_block
|
173
|
-
end
|
174
|
-
assert_not_nil with_given_block.new.given_block {}
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_revealing_a_hidden_method_twice_is_ok
|
178
|
-
with_to_s = Class.new(BlankSlate) do
|
179
|
-
reveal :to_s
|
180
|
-
reveal :to_s
|
181
|
-
end
|
182
|
-
assert_match(/^#<.*>$/, with_to_s.new.to_s)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_revealing_unknown_hidden_method_is_an_error
|
186
|
-
assert_raises(RuntimeError) do
|
187
|
-
Class.new(BlankSlate) do
|
188
|
-
reveal :xyz
|
189
|
-
end
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def test_global_includes_still_work
|
194
|
-
assert_nothing_raised do
|
195
|
-
assert_equal 42, global_inclusion
|
196
|
-
assert_equal 42, Object.new.global_inclusion
|
197
|
-
assert_equal 42, "magic number".global_inclusion
|
198
|
-
assert_equal 43, direct_global
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_reveal_should_not_bind_to_an_instance
|
203
|
-
with_object_id = Class.new(BlankSlate) do
|
204
|
-
reveal(:object_id)
|
205
|
-
end
|
206
|
-
|
207
|
-
obj1 = with_object_id.new
|
208
|
-
obj2 = with_object_id.new
|
209
|
-
|
210
|
-
assert obj1.object_id != obj2.object_id,
|
211
|
-
"Revealed methods should not be bound to a particular instance"
|
212
|
-
end
|
213
|
-
end
|