1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Promote erb to default gems

This commit is contained in:
Hiroshi SHIBATA 2020-08-21 20:18:44 +09:00
parent bc374e5cea
commit 8c97883b73
No known key found for this signature in database
GPG key ID: F9CF13417264FAC2
6 changed files with 228 additions and 171 deletions

191
bin/erb
View file

@ -1,176 +1,27 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# Tiny eRuby --- ERB2 #
# Copyright (c) 1999-2000,2002 Masatoshi SEKI # This file was generated by RubyGems.
# You can redistribute it and/or modify it under the same terms as Ruby. #
# The application 'erb' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'erb' require 'rubygems'
class ERB version = ">= 0.a"
module Main
def ARGV.switch str = ARGV.first
return nil if self.empty? if str
arg = self.shift str = str.b[/\A_(.*)_\z/, 1]
return nil if arg == '--' if str and Gem::Version.correct?(str)
case arg version = str
when /\A-(.)(.*)/ ARGV.shift
if $1 == '-'
arg, @maybe_arg = arg.split(/=/, 2)
return arg
end end
raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T' end
if $2.size > 0
self.unshift "-#{$2}" if Gem.respond_to?(:activate_bin_path)
@maybe_arg = $2 load Gem.activate_bin_path('erb', 'erb', version)
else else
@maybe_arg = nil gem "erb", version
end load Gem.bin_path("erb", "erb", version)
"-#{$1}"
when /\A(\w+)=/
arg
else
self.unshift arg
nil
end
end
def ARGV.req_arg
(@maybe_arg || self.shift || raise('missing argument')).tap {
@maybe_arg = nil
}
end
def trim_mode_opt(trim_mode, disable_percent)
return trim_mode if disable_percent
case trim_mode
when 0
return '%'
when 1
return '%>'
when 2
return '%<>'
when '-'
return '%-'
end
end
module_function :trim_mode_opt
def run(factory=ERB)
trim_mode = 0
disable_percent = false
variables = {}
begin
while switch = ARGV.switch
case switch
when '-x' # ruby source
output = true
when '-n' # line number
number = true
when '-v' # verbose
$VERBOSE = true
when '--version' # version
STDERR.puts factory.version
exit
when '-d', '--debug' # debug
$DEBUG = true
when '-r' # require
require ARGV.req_arg
when '-S' # security level
warn 'warning: -S option of erb command is deprecated. Please do not use this.'
arg = ARGV.req_arg
raise "invalid safe_level #{arg.dump}" unless arg =~ /\A[0-1]\z/
safe_level = arg.to_i
when '-T' # trim mode
arg = ARGV.req_arg
if arg == '-'
trim_mode = arg
next
end
raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
trim_mode = arg.to_i
when '-E', '--encoding'
arg = ARGV.req_arg
set_encoding(*arg.split(/:/, 2))
when '-U'
set_encoding(Encoding::UTF_8, Encoding::UTF_8)
when '-P'
disable_percent = true
when '--help'
raise "print this help"
when /\A-/
raise "unknown switch #{switch.dump}"
else
var, val = *switch.split('=', 2)
(variables ||= {})[var] = val
end
end
rescue # usage
STDERR.puts $!.to_s
STDERR.puts File.basename($0) +
" [switches] [var=value...] [inputfile]"
STDERR.puts <<EOU
-x print ruby script
-n print ruby script with line number
-v enable verbose mode
-d set $DEBUG to true
-r library load a library
-E ex[:in] set default external/internal encodings
-U set default encoding to UTF-8
-T trim_mode specify trim_mode (0..2, -)
-P disable ruby code evaluation for lines beginning with %
var=value set variable
EOU
exit 1
end
$<.set_encoding(Encoding::UTF_8, nil)
src = $<.read
filename = $FILENAME
exit 2 unless src
trim = trim_mode_opt(trim_mode, disable_percent)
if safe_level.nil?
erb = factory.new(src, trim_mode: trim)
else
# [deprecated] This will be removed at Ruby 2.7.
erb = factory.new(src, safe_level, trim_mode: trim)
end
erb.filename = filename
if output
if number
erb.src.each_line.with_index do |line, l|
puts "%3d %s"%[l+1, line]
end
else
puts erb.src
end
else
bind = TOPLEVEL_BINDING
if variables
enc = erb.encoding
for var, val in variables do
val = val.encode(enc) if val
bind.local_variable_set(var, val)
end
end
erb.run(bind)
end
end
module_function :run
def set_encoding(extern, intern = nil)
verbose, $VERBOSE = $VERBOSE, nil
Encoding.default_external = extern unless extern.nil? || extern == ""
Encoding.default_internal = intern unless intern.nil? || intern == ""
[$stdin, $stdout, $stderr].each do |io|
io.set_encoding(extern, intern)
end
ensure
$VERBOSE = verbose
end
module_function :set_encoding
class << self; private :set_encoding; end
end
end
if __FILE__ == $0
ERB::Main.run
end end

View file

@ -46,8 +46,6 @@ Zachary Scott (zzak)
Masatoshi SEKI (seki) Masatoshi SEKI (seki)
[lib/debug.rb] [lib/debug.rb]
_unmaintained_ _unmaintained_
[lib/erb.rb]
Masatoshi SEKI (seki), Takashi Kokubun (k0kubun)
[lib/mkmf.rb] [lib/mkmf.rb]
_unmaintained_ _unmaintained_
[lib/open-uri.rb] [lib/open-uri.rb]
@ -138,6 +136,9 @@ Zachary Scott (zzak)
[lib/did_you_mean.rb] [lib/did_you_mean.rb]
Yuki Nishijima (yuki24) Yuki Nishijima (yuki24)
https://github.com/ruby/did_you_mean https://github.com/ruby/did_you_mean
[lib/erb.rb]
Masatoshi SEKI (seki), Takashi Kokubun (k0kubun)
https://github.com/ruby/erb
[lib/fileutils.rb] [lib/fileutils.rb]
_unmaintained_ _unmaintained_
https://github.com/ruby/fileutils https://github.com/ruby/fileutils

View file

@ -12,7 +12,6 @@ Abbrev:: Calculates a set of unique abbreviations for a given set of strings
Base64:: Support for encoding and decoding binary data using a Base64 representation Base64:: Support for encoding and decoding binary data using a Base64 representation
DEBUGGER__:: Debugging functionality for Ruby DEBUGGER__:: Debugging functionality for Ruby
DRb:: Distributed object system for Ruby DRb:: Distributed object system for Ruby
ERB:: An easy to use but powerful templating system for Ruby
MakeMakefile:: Module used to generate a Makefile for C extensions MakeMakefile:: Module used to generate a Makefile for C extensions
OpenURI:: An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP OpenURI:: An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP
PP:: Provides a PrettyPrinter for Ruby objects PP:: Provides a PrettyPrinter for Ruby objects
@ -52,6 +51,7 @@ CSV:: Provides an interface to read and write CSV files and data
Delegator:: Provides three abilities to delegate method calls to an object Delegator:: Provides three abilities to delegate method calls to an object
DidYouMean:: "Did you mean?" experience in Ruby DidYouMean:: "Did you mean?" experience in Ruby
English.rb:: Require 'English.rb' to reference global variables with less cryptic names English.rb:: Require 'English.rb' to reference global variables with less cryptic names
ERB:: An easy to use but powerful templating system for Ruby
FileUtils:: Several file utility methods for copying, moving, removing, etc FileUtils:: Several file utility methods for copying, moving, removing, etc
Find:: This module supports top-down traversal of a set of file paths Find:: This module supports top-down traversal of a set of file paths
Forwardable:: Provides delegation of specified methods to a designated object Forwardable:: Provides delegation of specified methods to a designated object

22
lib/erb.gemspec Normal file
View file

@ -0,0 +1,22 @@
Gem::Specification.new do |spec|
spec.name = "erb"
spec.version = "2.2.0"
spec.authors = ["Masatoshi SEKI"]
spec.email = ["seki@ruby-lang.org"]
spec.summary = %q{An easy to use but powerful templating system for Ruby.}
spec.description = %q{An easy to use but powerful templating system for Ruby.}
spec.homepage = "https://github.com/ruby/erb"
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
spec.licenses = ["Ruby", "BSD-2-Clause"]
spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = spec.homepage
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
end

176
libexec/erb Executable file
View file

@ -0,0 +1,176 @@
#!/usr/bin/env ruby
# Tiny eRuby --- ERB2
# Copyright (c) 1999-2000,2002 Masatoshi SEKI
# You can redistribute it and/or modify it under the same terms as Ruby.
require 'erb'
class ERB
module Main
def ARGV.switch
return nil if self.empty?
arg = self.shift
return nil if arg == '--'
case arg
when /\A-(.)(.*)/
if $1 == '-'
arg, @maybe_arg = arg.split(/=/, 2)
return arg
end
raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T'
if $2.size > 0
self.unshift "-#{$2}"
@maybe_arg = $2
else
@maybe_arg = nil
end
"-#{$1}"
when /\A(\w+)=/
arg
else
self.unshift arg
nil
end
end
def ARGV.req_arg
(@maybe_arg || self.shift || raise('missing argument')).tap {
@maybe_arg = nil
}
end
def trim_mode_opt(trim_mode, disable_percent)
return trim_mode if disable_percent
case trim_mode
when 0
return '%'
when 1
return '%>'
when 2
return '%<>'
when '-'
return '%-'
end
end
module_function :trim_mode_opt
def run(factory=ERB)
trim_mode = 0
disable_percent = false
variables = {}
begin
while switch = ARGV.switch
case switch
when '-x' # ruby source
output = true
when '-n' # line number
number = true
when '-v' # verbose
$VERBOSE = true
when '--version' # version
STDERR.puts factory.version
exit
when '-d', '--debug' # debug
$DEBUG = true
when '-r' # require
require ARGV.req_arg
when '-S' # security level
warn 'warning: -S option of erb command is deprecated. Please do not use this.'
arg = ARGV.req_arg
raise "invalid safe_level #{arg.dump}" unless arg =~ /\A[0-1]\z/
safe_level = arg.to_i
when '-T' # trim mode
arg = ARGV.req_arg
if arg == '-'
trim_mode = arg
next
end
raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
trim_mode = arg.to_i
when '-E', '--encoding'
arg = ARGV.req_arg
set_encoding(*arg.split(/:/, 2))
when '-U'
set_encoding(Encoding::UTF_8, Encoding::UTF_8)
when '-P'
disable_percent = true
when '--help'
raise "print this help"
when /\A-/
raise "unknown switch #{switch.dump}"
else
var, val = *switch.split('=', 2)
(variables ||= {})[var] = val
end
end
rescue # usage
STDERR.puts $!.to_s
STDERR.puts File.basename($0) +
" [switches] [var=value...] [inputfile]"
STDERR.puts <<EOU
-x print ruby script
-n print ruby script with line number
-v enable verbose mode
-d set $DEBUG to true
-r library load a library
-E ex[:in] set default external/internal encodings
-U set default encoding to UTF-8
-T trim_mode specify trim_mode (0..2, -)
-P disable ruby code evaluation for lines beginning with %
var=value set variable
EOU
exit 1
end
$<.set_encoding(Encoding::UTF_8, nil)
src = $<.read
filename = $FILENAME
exit 2 unless src
trim = trim_mode_opt(trim_mode, disable_percent)
if safe_level.nil?
erb = factory.new(src, trim_mode: trim)
else
# [deprecated] This will be removed at Ruby 2.7.
erb = factory.new(src, safe_level, trim_mode: trim)
end
erb.filename = filename
if output
if number
erb.src.each_line.with_index do |line, l|
puts "%3d %s"%[l+1, line]
end
else
puts erb.src
end
else
bind = TOPLEVEL_BINDING
if variables
enc = erb.encoding
for var, val in variables do
val = val.encode(enc) if val
bind.local_variable_set(var, val)
end
end
erb.run(bind)
end
end
module_function :run
def set_encoding(extern, intern = nil)
verbose, $VERBOSE = $VERBOSE, nil
Encoding.default_external = extern unless extern.nil? || extern == ""
Encoding.default_internal = intern unless intern.nil? || intern == ""
[$stdin, $stdout, $stderr].each do |io|
io.set_encoding(extern, intern)
end
ensure
$VERBOSE = verbose
end
module_function :set_encoding
class << self; private :set_encoding; end
end
end
if __FILE__ == $0
ERB::Main.run
end

View file

@ -65,6 +65,7 @@ $repositories = {
set: "ruby/set", set: "ruby/set",
find: "ruby/find", find: "ruby/find",
rinda: "ruby/rinda", rinda: "ruby/rinda",
erb: "ruby/erb",
} }
def sync_default_gems(gem) def sync_default_gems(gem)
@ -264,6 +265,12 @@ def sync_default_gems(gem)
cp_r("#{upstream}/did_you_mean.gemspec", "lib/did_you_mean") cp_r("#{upstream}/did_you_mean.gemspec", "lib/did_you_mean")
cp_r("#{upstream}/test", "test/did_you_mean") cp_r("#{upstream}/test", "test/did_you_mean")
rm_rf(%w[test/did_you_mean/tree_spell/test_explore.rb]) rm_rf(%w[test/did_you_mean/tree_spell/test_explore.rb])
when "erb"
rm_rf(%w[lib/erb* test/erb libexec/erb])
cp_r("#{upstream}/lib/erb.rb", "lib")
cp_r("#{upstream}/test/erb", "test")
cp_r("#{upstream}/erb.gemspec", "lib")
cp_r("#{upstream}/exe/erb", "libexec")
else else
sync_lib gem sync_lib gem
end end