[前][次][番号順一覧][スレッド一覧]

ruby-changes:62671

From: Hiroshi <ko1@a...>
Date: Fri, 21 Aug 2020 20:19:02 +0900 (JST)
Subject: [ruby-changes:62671] 8c97883b73 (master): Promote erb to default gems

https://git.ruby-lang.org/ruby.git/commit/?id=8c97883b73

From 8c97883b738ad9749848d9a10fce87df0f9b1bf3 Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
Date: Fri, 21 Aug 2020 20:18:44 +0900
Subject: Promote erb to default gems


diff --git a/bin/erb b/bin/erb
index 2435224..89d74fc 100755
--- a/bin/erb
+++ b/bin/erb
@@ -1,176 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/erb#L1
 #!/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
+#
+# This file was generated by RubyGems.
+#
+# The application 'erb' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+  str = str.b[/\A_(.*)_\z/, 1]
+  if str and Gem::Version.correct?(str)
+    version = str
+    ARGV.shift
   end
 end
 
-if __FILE__ == $0
-  ERB::Main.run
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('erb', 'erb', version)
+else
+gem "erb", version
+load Gem.bin_path("erb", "erb", version)
 end
diff --git a/doc/maintainers.rdoc b/doc/maintainers.rdoc
index c0d47b5..b5934b7 100644
--- a/doc/maintainers.rdoc
+++ b/doc/maintainers.rdoc
@@ -46,8 +46,6 @@ Zachary Scott (zzak) https://github.com/ruby/ruby/blob/trunk/doc/maintainers.rdoc#L46
   Masatoshi SEKI (seki)
 [lib/debug.rb]
   _unmaintained_
-[lib/erb.rb]
-  Masatoshi SEKI (seki), Takashi Kokubun (k0kubun)
 [lib/mkmf.rb]
   _unmaintained_
 [lib/open-uri.rb]
@@ -138,6 +136,9 @@ Zachary Scott (zzak) https://github.com/ruby/ruby/blob/trunk/doc/maintainers.rdoc#L136
 [lib/did_you_mean.rb]
   Yuki Nishijima (yuki24)
   https://github.com/ruby/did_you_mean
+[lib/erb.rb]
+  Masatoshi SEKI (seki), Takashi Kokubun (k0kubun)
+  https://github.com/ruby/erb
 [lib/fileutils.rb]
   _unmaintained_
   https://github.com/ruby/fileutils
diff --git a/doc/standard_library.rdoc b/doc/standard_library.rdoc
index 2ec088c..2f65c0b 100644
--- a/doc/standard_library.rdoc
+++ b/doc/standard_library.rdoc
@@ -12,7 +12,6 @@ Abbrev:: Calculates a set of unique abbreviations for a given set of strings https://github.com/ruby/ruby/blob/trunk/doc/standard_library.rdoc#L12
 Base64:: Support for encoding and decoding binary data using a Base64 representation
 DEBUGGER__:: Debugging functionality 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
 OpenURI:: An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP
 PP:: Provides a PrettyPrinter for Ruby objects
@@ -52,6 +51,7 @@ CSV:: Provides an interface to read and write CSV files and data https://github.com/ruby/ruby/blob/trunk/doc/standard_library.rdoc#L51
 Delegator:: Provides three abilities to delegate method calls to an object
 DidYouMean:: "Did you mean?" experience in Ruby
 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
 Find:: This module supports top-down traversal of a set of file paths
 Forwardable:: Provides delegation of specified methods to a designated object
diff --git a/lib/erb.gemspec b/lib/erb.gemspec
new file mode 100644
index 0000000..f58f61b
--- /dev/null
+++ b/lib/erb.gemspec
@@ -0,0 +1,22 @@ https://github.com/ruby/ruby/blob/trunk/lib/erb.gemspec#L1
+Gem::Specification.new do |spec|
+  spec.name          = "erb"
+  spec.version       = "2.2.0"
+  spec.authors       = ["Masatoshi SEKI"]
+  spec.email         = ["seki@r..."]
+
+  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
diff --git a/libexec/erb b/libexec/erb
new file mode 100755
index 0000000..2435224
--- /dev/null
+++ b/libexec/erb
@@ -0,0 +1,176 @@ https://github.com/ruby/ruby/blob/trunk/libexec/erb#L1
+#!/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 == '-'
+    (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]