rbs 3.10.4 → 4.0.0
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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +7 -5
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +16 -26
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +1 -1
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +202 -2
- data/Rakefile +9 -23
- data/Steepfile +2 -0
- data/config.yml +457 -13
- data/core/array.rbs +218 -188
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +45 -31
- data/core/complex.rbs +66 -55
- data/core/dir.rbs +57 -45
- data/core/encoding.rbs +6 -6
- data/core/enumerable.rbs +105 -91
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +24 -3
- data/core/errno.rbs +3 -2
- data/core/errors.rbs +31 -29
- data/core/exception.rbs +12 -12
- data/core/fiber.rbs +47 -36
- data/core/file.rbs +242 -169
- data/core/file_test.rbs +2 -2
- data/core/float.rbs +42 -68
- data/core/gc.rbs +78 -70
- data/core/hash.rbs +70 -60
- data/core/integer.rbs +32 -75
- data/core/io/buffer.rbs +36 -36
- data/core/io/wait.rbs +7 -7
- data/core/io.rbs +192 -146
- data/core/kernel.rbs +198 -147
- data/core/marshal.rbs +3 -3
- data/core/match_data.rbs +14 -12
- data/core/math.rbs +69 -67
- data/core/method.rbs +6 -8
- data/core/module.rbs +148 -88
- data/core/nil_class.rbs +4 -3
- data/core/numeric.rbs +53 -50
- data/core/object.rbs +6 -8
- data/core/object_space.rbs +11 -10
- data/core/pathname.rbs +131 -81
- data/core/proc.rbs +65 -34
- data/core/process.rbs +221 -201
- data/core/ractor.rbs +15 -11
- data/core/random.rbs +21 -3
- data/core/range.rbs +152 -49
- data/core/rational.rbs +5 -56
- data/core/rbs/unnamed/argf.rbs +58 -51
- data/core/rbs/unnamed/env_class.rbs +18 -13
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +7 -116
- data/core/regexp.rbs +236 -197
- data/core/ruby.rbs +1 -1
- data/core/ruby_vm.rbs +32 -30
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +1 -1
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +5 -3
- data/core/set.rbs +17 -16
- data/core/signal.rbs +2 -2
- data/core/string.rbs +318 -298
- data/core/struct.rbs +26 -25
- data/core/symbol.rbs +25 -24
- data/core/thread.rbs +40 -41
- data/core/time.rbs +47 -42
- data/core/trace_point.rbs +34 -31
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +10 -10
- data/core/warning.rbs +7 -7
- data/docs/collection.md +1 -1
- data/docs/config.md +171 -0
- data/docs/inline.md +576 -0
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +595 -98
- data/ext/rbs_extension/class_constants.c +30 -0
- data/ext/rbs_extension/class_constants.h +15 -0
- data/ext/rbs_extension/legacy_location.c +30 -53
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +125 -24
- data/include/rbs/ast.h +485 -150
- data/include/rbs/lexer.h +11 -4
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +20 -2
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +409 -0
- data/lib/rbs/ast/ruby/comment_block.rb +245 -0
- data/lib/rbs/ast/ruby/declarations.rb +281 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +723 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +105 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +62 -125
- data/lib/rbs/cli.rb +55 -23
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
- data/lib/rbs/definition_builder/method_builder.rb +65 -30
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +338 -155
- data/lib/rbs/environment_loader.rb +2 -2
- data/lib/rbs/errors.rb +30 -20
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +542 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +0 -7
- data/lib/rbs/parser_aux.rb +31 -8
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +10 -2
- data/lib/rbs/resolver/type_name_resolver.rb +0 -8
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +4 -3
- data/lib/rbs/test/type_check.rb +5 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +12 -1
- data/rbs.gemspec +3 -2
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/ast/ruby/annotations.rbs +421 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +178 -0
- data/sig/buffer.rbs +63 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +37 -81
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +124 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +47 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +0 -3
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +491 -143
- data/src/lexer.c +1552 -1314
- data/src/lexer.re +7 -0
- data/src/lexstate.c +8 -1
- data/src/location.c +8 -48
- data/src/parser.c +1107 -409
- data/src/util/rbs_constant_pool.c +0 -4
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
- data/stdlib/cgi-escape/0/escape.rbs +4 -4
- data/stdlib/coverage/0/coverage.rbs +4 -3
- data/stdlib/date/0/date.rbs +33 -28
- data/stdlib/date/0/date_time.rbs +24 -23
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +64 -53
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +140 -126
- data/stdlib/forwardable/0/forwardable.rbs +10 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +158 -131
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +159 -134
- data/stdlib/objspace/0/objspace.rbs +8 -30
- data/stdlib/open-uri/0/open-uri.rbs +8 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +144 -129
- data/stdlib/optparse/0/optparse.rbs +23 -14
- data/stdlib/pathname/0/pathname.rbs +2 -2
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +62 -9
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/ripper/0/ripper.rbs +20 -17
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +10 -9
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +1 -1
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +55 -54
- data/stdlib/strscan/0/string_scanner.rbs +46 -44
- data/stdlib/tempfile/0/tempfile.rbs +24 -20
- data/stdlib/time/0/time.rbs +7 -5
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +31 -18
- data/stdlib/uri/0/file.rbs +2 -2
- data/stdlib/uri/0/generic.rbs +9 -2
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- metadata +66 -3
data/stdlib/digest/0/digest.rbs
CHANGED
|
@@ -471,6 +471,116 @@ end
|
|
|
471
471
|
class Digest::SHA1 < Digest::Base
|
|
472
472
|
end
|
|
473
473
|
|
|
474
|
+
# <!-- rdoc-file=ext/digest/sha2/lib/sha2.rb -->
|
|
475
|
+
# A meta digest provider class for SHA256, SHA384 and SHA512.
|
|
476
|
+
#
|
|
477
|
+
# FIPS 180-2 describes SHA2 family of digest algorithms. It defines three
|
|
478
|
+
# algorithms:
|
|
479
|
+
# * one which works on chunks of 512 bits and returns a 256-bit digest
|
|
480
|
+
# (SHA256),
|
|
481
|
+
# * one which works on chunks of 1024 bits and returns a 384-bit digest
|
|
482
|
+
# (SHA384),
|
|
483
|
+
# * and one which works on chunks of 1024 bits and returns a 512-bit digest
|
|
484
|
+
# (SHA512).
|
|
485
|
+
#
|
|
486
|
+
# ## Examples
|
|
487
|
+
# require 'digest'
|
|
488
|
+
#
|
|
489
|
+
# # Compute a complete digest
|
|
490
|
+
# Digest::SHA2.hexdigest 'abc' # => "ba7816bf8..."
|
|
491
|
+
# Digest::SHA2.new(256).hexdigest 'abc' # => "ba7816bf8..."
|
|
492
|
+
# Digest::SHA256.hexdigest 'abc' # => "ba7816bf8..."
|
|
493
|
+
#
|
|
494
|
+
# Digest::SHA2.new(384).hexdigest 'abc' # => "cb00753f4..."
|
|
495
|
+
# Digest::SHA384.hexdigest 'abc' # => "cb00753f4..."
|
|
496
|
+
#
|
|
497
|
+
# Digest::SHA2.new(512).hexdigest 'abc' # => "ddaf35a19..."
|
|
498
|
+
# Digest::SHA512.hexdigest 'abc' # => "ddaf35a19..."
|
|
499
|
+
#
|
|
500
|
+
# # Compute digest by chunks
|
|
501
|
+
# sha2 = Digest::SHA2.new # =>#<Digest::SHA2:256>
|
|
502
|
+
# sha2.update "ab"
|
|
503
|
+
# sha2 << "c" # alias for #update
|
|
504
|
+
# sha2.hexdigest # => "ba7816bf8..."
|
|
505
|
+
#
|
|
506
|
+
# # Use the same object to compute another digest
|
|
507
|
+
# sha2.reset
|
|
508
|
+
# sha2 << "message"
|
|
509
|
+
# sha2.hexdigest # => "ab530a13e..."
|
|
510
|
+
#
|
|
511
|
+
class Digest::SHA2 < Digest::Class
|
|
512
|
+
# <!--
|
|
513
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
514
|
+
# - Digest::SHA2.new(bitlen = 256) -> digest_obj
|
|
515
|
+
# -->
|
|
516
|
+
# Create a new SHA2 hash object with a given bit length.
|
|
517
|
+
#
|
|
518
|
+
# Valid bit lengths are 256, 384 and 512.
|
|
519
|
+
#
|
|
520
|
+
def initialize: (?(256 | 384 | 512) bitlen) -> void
|
|
521
|
+
|
|
522
|
+
# <!--
|
|
523
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
524
|
+
# - digest_obj.reset -> digest_obj
|
|
525
|
+
# -->
|
|
526
|
+
# Reset the digest to the initial state and return self.
|
|
527
|
+
#
|
|
528
|
+
def reset: () -> self
|
|
529
|
+
|
|
530
|
+
# <!--
|
|
531
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
532
|
+
# - digest_obj.update(string) -> digest_obj
|
|
533
|
+
# - digest_obj << string -> digest_obj
|
|
534
|
+
# -->
|
|
535
|
+
# Update the digest using a given *string* and return self.
|
|
536
|
+
#
|
|
537
|
+
def update: (String) -> self
|
|
538
|
+
|
|
539
|
+
private def finish: () -> String
|
|
540
|
+
|
|
541
|
+
# <!--
|
|
542
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
543
|
+
# - <<(str)
|
|
544
|
+
# -->
|
|
545
|
+
#
|
|
546
|
+
alias << update
|
|
547
|
+
|
|
548
|
+
# <!--
|
|
549
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
550
|
+
# - digest_obj.block_length -> Integer
|
|
551
|
+
# -->
|
|
552
|
+
# Return the block length of the digest in bytes.
|
|
553
|
+
#
|
|
554
|
+
# Digest::SHA256.new.block_length * 8
|
|
555
|
+
# # => 512
|
|
556
|
+
# Digest::SHA384.new.block_length * 8
|
|
557
|
+
# # => 1024
|
|
558
|
+
# Digest::SHA512.new.block_length * 8
|
|
559
|
+
# # => 1024
|
|
560
|
+
#
|
|
561
|
+
def block_length: () -> Integer
|
|
562
|
+
|
|
563
|
+
# <!--
|
|
564
|
+
# rdoc-file=ext/digest/sha2/lib/sha2.rb
|
|
565
|
+
# - digest_obj.digest_length -> Integer
|
|
566
|
+
# -->
|
|
567
|
+
# Return the length of the hash value (the digest) in bytes.
|
|
568
|
+
#
|
|
569
|
+
# Digest::SHA256.new.digest_length * 8
|
|
570
|
+
# # => 256
|
|
571
|
+
# Digest::SHA384.new.digest_length * 8
|
|
572
|
+
# # => 384
|
|
573
|
+
# Digest::SHA512.new.digest_length * 8
|
|
574
|
+
# # => 512
|
|
575
|
+
#
|
|
576
|
+
# For example, digests produced by Digest::SHA256 will always be 32 bytes (256
|
|
577
|
+
# bits) in size.
|
|
578
|
+
#
|
|
579
|
+
def digest_length: () -> Integer
|
|
580
|
+
|
|
581
|
+
def initialize_copy: (untyped) -> untyped
|
|
582
|
+
end
|
|
583
|
+
|
|
474
584
|
# <!-- rdoc-file=ext/digest/md5/md5init.c -->
|
|
475
585
|
# A class for calculating message digests using the MD5 Message-Digest Algorithm
|
|
476
586
|
# by RSA Data Security, Inc., described in RFC1321.
|
data/stdlib/erb/0/erb.rbs
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
# * You can call instance method ERB#result to get the *result*.
|
|
16
16
|
# ERB supports tags of three kinds:
|
|
17
17
|
# * [Expression tags](rdoc-ref:ERB@Expression+Tags):
|
|
18
|
-
# each begins with
|
|
18
|
+
# each begins with <code>'<%='</code>, ends with <code>'%>'</code>;
|
|
19
|
+
# contains a Ruby expression;
|
|
19
20
|
# in the result, the value of the expression replaces the entire tag:
|
|
20
21
|
# template = 'The magic word is <%= magic_word %>.'
|
|
21
22
|
# erb = ERB.new(template)
|
|
@@ -24,20 +25,21 @@
|
|
|
24
25
|
#
|
|
25
26
|
# The above call to #result passes argument `binding`,
|
|
26
27
|
# which contains the binding of variable `magic_word` to its string value
|
|
27
|
-
#
|
|
28
|
+
# <code>'xyzzy'</code>.
|
|
28
29
|
# The below call to #result need not pass a binding,
|
|
29
|
-
# because its expression
|
|
30
|
+
# because its expression <code>Date::DAYNAMES</code> is globally defined.
|
|
30
31
|
# ERB.new('Today is <%= Date::DAYNAMES[Date.today.wday] %>.').result # => "Today is Monday."
|
|
31
32
|
#
|
|
32
33
|
# * [Execution tags](rdoc-ref:ERB@Execution+Tags):
|
|
33
|
-
# each begins with
|
|
34
|
-
# executed:
|
|
34
|
+
# each begins with <code>'<%'</code>, ends with <code>'%>'</code>; contains
|
|
35
|
+
# Ruby code to be executed:
|
|
35
36
|
# template = '<% File.write("t.txt", "Some stuff.") %>'
|
|
36
37
|
# ERB.new(template).result
|
|
37
38
|
# File.read('t.txt') # => "Some stuff."
|
|
38
39
|
#
|
|
39
40
|
# * [Comment tags](rdoc-ref:ERB@Comment+Tags):
|
|
40
|
-
# each begins with
|
|
41
|
+
# each begins with <code>'<%#'</code>, ends with <code>'%>'</code>;
|
|
42
|
+
# contains comment text;
|
|
41
43
|
# in the result, the entire tag is omitted.
|
|
42
44
|
# template = 'Some stuff;<%# Note to self: figure out what the stuff is. %> more stuff.'
|
|
43
45
|
# ERB.new(template).result # => "Some stuff; more stuff."
|
|
@@ -51,11 +53,11 @@
|
|
|
51
53
|
#
|
|
52
54
|
# Details:
|
|
53
55
|
# 1. A plain-text string is assigned to variable `template`.
|
|
54
|
-
# Its embedded [expression tag](rdoc-ref:ERB@Expression+Tags)
|
|
55
|
-
# Time.now %>'
|
|
56
|
+
# Its embedded [expression tag](rdoc-ref:ERB@Expression+Tags) <code>'<%=
|
|
57
|
+
# Time.now %>'</code> includes a Ruby expression, <code>Time.now</code>.
|
|
56
58
|
# 2. The string is put into a new ERB object, and stored in variable `erb`.
|
|
57
|
-
# 3. Method call
|
|
58
|
-
# value of
|
|
59
|
+
# 3. Method call <code>erb.result</code> generates a string that contains the
|
|
60
|
+
# run-time value of <code>Time.now</code>,
|
|
59
61
|
# as computed at the time of the call.
|
|
60
62
|
# The
|
|
61
63
|
# ERB object may be re-used:
|
|
@@ -71,13 +73,14 @@
|
|
|
71
73
|
#
|
|
72
74
|
# Details:
|
|
73
75
|
# 1. As before, a plain-text string is assigned to variable `template`.
|
|
74
|
-
# Its embedded [expression tag](rdoc-ref:ERB@Expression+Tags)
|
|
75
|
-
# magic_word %>'
|
|
76
|
+
# Its embedded [expression tag](rdoc-ref:ERB@Expression+Tags) <code>'<%=
|
|
77
|
+
# magic_word %>'</code> has a variable *name*, `magic_word`.
|
|
76
78
|
# 2. The string is put into a new ERB object, and stored in variable `erb`;
|
|
77
79
|
# note that `magic_word` need not be defined before the ERB object is
|
|
78
80
|
# created.
|
|
79
|
-
# 3.
|
|
80
|
-
#
|
|
81
|
+
# 3. <code>magic_word = 'abracadabra'</code> assigns a value to variable
|
|
82
|
+
# `magic_word`.
|
|
83
|
+
# 4. Method call <code>erb.result(binding)</code> generates a string
|
|
81
84
|
# that contains the *value* of `magic_word`.
|
|
82
85
|
# As before, the ERB object may be re-used:
|
|
83
86
|
# magic_word = 'xyzzy'
|
|
@@ -102,7 +105,7 @@
|
|
|
102
105
|
# That binding is sufficient for an expression tag that refers only to Ruby's
|
|
103
106
|
# constants and variables;
|
|
104
107
|
# these expression tags refer only to Ruby's global constant `RUBY_COPYRIGHT`
|
|
105
|
-
# and global variable
|
|
108
|
+
# and global variable <code>$0</code>:
|
|
106
109
|
# template = <<TEMPLATE
|
|
107
110
|
# The Ruby copyright is <%= RUBY_COPYRIGHT.inspect %>.
|
|
108
111
|
# The current process is <%= $0 %>.
|
|
@@ -181,7 +184,7 @@
|
|
|
181
184
|
# in the result, the entire tag is to be omitted.
|
|
182
185
|
# ### Expression Tags
|
|
183
186
|
# You can embed a Ruby expression in a template using an *expression tag*.
|
|
184
|
-
# Its syntax is
|
|
187
|
+
# Its syntax is <code><%= _expression_ %></code>,
|
|
185
188
|
# where *expression* is any valid Ruby expression.
|
|
186
189
|
# When you call method #result,
|
|
187
190
|
# the method evaluates the expression and replaces the entire expression tag
|
|
@@ -203,7 +206,7 @@
|
|
|
203
206
|
#
|
|
204
207
|
# ### Execution Tags
|
|
205
208
|
# You can embed Ruby executable code in template using an *execution tag*.
|
|
206
|
-
# Its syntax is
|
|
209
|
+
# Its syntax is <code><% _code_ %></code>,
|
|
207
210
|
# where *code* is any valid Ruby code.
|
|
208
211
|
# When you call method #result,
|
|
209
212
|
# the method executes the code and removes the entire execution tag
|
|
@@ -268,9 +271,10 @@
|
|
|
268
271
|
# # => "\n* 0,0\n\n* 0,1\n\n* 0,2\n\n* 1,0\n\n* 1,1\n\n* 1,2\n\n* 2,0\n\n* 2,1\n\n* 2,2\n\n"
|
|
269
272
|
#
|
|
270
273
|
# #### Shorthand Format for Execution Tags
|
|
271
|
-
# You can use keyword argument
|
|
272
|
-
# execution tags;
|
|
273
|
-
# this example uses the shorthand format
|
|
274
|
+
# You can use keyword argument <code>trim_mode: '%'</code> to enable a shorthand
|
|
275
|
+
# format for execution tags;
|
|
276
|
+
# this example uses the shorthand format <code>% _code_</code> instead of
|
|
277
|
+
# <code><% _code_ %></code>:
|
|
274
278
|
# template = <<TEMPLATE
|
|
275
279
|
# % priorities.each do |priority|
|
|
276
280
|
# * <%= priority %>
|
|
@@ -285,8 +289,8 @@
|
|
|
285
289
|
# * Document Modules
|
|
286
290
|
# * Answer Questions on Ruby Talk
|
|
287
291
|
#
|
|
288
|
-
# Note that in the shorthand format, the character
|
|
289
|
-
# character in the code line
|
|
292
|
+
# Note that in the shorthand format, the character <code>'%'</code> must be the
|
|
293
|
+
# first character in the code line
|
|
290
294
|
# (no leading whitespace).
|
|
291
295
|
# #### Suppressing Unwanted Blank Lines
|
|
292
296
|
# With keyword argument `trim_mode` not given,
|
|
@@ -301,8 +305,8 @@
|
|
|
301
305
|
# "3.4.5\n"
|
|
302
306
|
# "\n"
|
|
303
307
|
#
|
|
304
|
-
# You can give
|
|
305
|
-
# whose source line ends with
|
|
308
|
+
# You can give <code>trim_mode: '-'</code>, you can suppress each blank line
|
|
309
|
+
# whose source line ends with <code>-%></code> (instead of <code>%></code>):
|
|
306
310
|
# template = <<TEMPLATE
|
|
307
311
|
# <% if true -%>
|
|
308
312
|
# <%= RUBY_VERSION %>
|
|
@@ -311,7 +315,8 @@
|
|
|
311
315
|
# ERB.new(template, trim_mode: '-').result.lines.each {|line| puts line.inspect }
|
|
312
316
|
# "3.4.5\n"
|
|
313
317
|
#
|
|
314
|
-
# It is an error to use the trailing
|
|
318
|
+
# It is an error to use the trailing <code>'-%>'</code> notation without
|
|
319
|
+
# <code>trim_mode: '-'</code>:
|
|
315
320
|
# ERB.new(template).result.lines.each {|line| puts line.inspect } # Raises SyntaxError.
|
|
316
321
|
#
|
|
317
322
|
# #### Suppressing Unwanted Newlines
|
|
@@ -330,27 +335,29 @@
|
|
|
330
335
|
# "foo \n"
|
|
331
336
|
# "foo 3.4.5\n"
|
|
332
337
|
#
|
|
333
|
-
# You can give
|
|
334
|
-
# for each line that ends with
|
|
338
|
+
# You can give <code>trim_mode: '>'</code> to suppress the trailing newline
|
|
339
|
+
# for each line that ends with <code>'%>'</code> (regardless of its beginning):
|
|
335
340
|
# ERB.new(template, trim_mode: '>').result.lines.each {|line| puts line.inspect }
|
|
336
341
|
# "3.4.5foo foo 3.4.5"
|
|
337
342
|
#
|
|
338
|
-
# You can give
|
|
339
|
-
# for each line that both begins with
|
|
343
|
+
# You can give <code>trim_mode: '<>'</code> to suppress the trailing newline
|
|
344
|
+
# for each line that both begins with <code>'<%'</code> and ends with
|
|
345
|
+
# <code>'%>'</code>:
|
|
340
346
|
# ERB.new(template, trim_mode: '<>').result.lines.each {|line| puts line.inspect }
|
|
341
347
|
# "3.4.5foo \n"
|
|
342
348
|
# "foo 3.4.5\n"
|
|
343
349
|
#
|
|
344
350
|
# #### Combining Trim Modes
|
|
345
351
|
# You can combine certain trim modes:
|
|
346
|
-
# *
|
|
347
|
-
#
|
|
348
|
-
#
|
|
349
|
-
#
|
|
350
|
-
#
|
|
352
|
+
# * <code>'%-'</code>: Enable shorthand and omit each blank line ending with
|
|
353
|
+
# <code>'-%>'</code>.
|
|
354
|
+
# * <code>'%>'</code>: Enable shorthand and omit newline for each line ending
|
|
355
|
+
# with <code>'%>'</code>.
|
|
356
|
+
# * <code>'%<>'</code>: Enable shorthand and omit newline for each line
|
|
357
|
+
# starting with <code>'<%'</code> and ending with <code>'%>'</code>.
|
|
351
358
|
# ### Comment Tags
|
|
352
359
|
# You can embed a comment in a template using a *comment tag*;
|
|
353
|
-
# its syntax is
|
|
360
|
+
# its syntax is <code><%# _text_ %></code>,
|
|
354
361
|
# where *text* is the text of the comment.
|
|
355
362
|
# When you call method #result,
|
|
356
363
|
# it removes the entire comment tag
|
|
@@ -360,9 +367,10 @@
|
|
|
360
367
|
# ERB.new(template).result # => "Some stuff; more stuff."
|
|
361
368
|
#
|
|
362
369
|
# A comment tag may appear anywhere in the template.
|
|
363
|
-
# Note that the beginning of the tag must be
|
|
364
|
-
#
|
|
365
|
-
#
|
|
370
|
+
# Note that the beginning of the tag must be <code>'<%#'</code>, not <code>'<%
|
|
371
|
+
# #'</code>.
|
|
372
|
+
# In this example, the tag begins with <code>'<% #'</code>, and so is an
|
|
373
|
+
# execution tag, not a comment tag;
|
|
366
374
|
# the cited code consists entirely of a Ruby-style comment (which is of course
|
|
367
375
|
# ignored):
|
|
368
376
|
# ERB.new('Some stuff;<% # Note to self: figure out what the stuff is. %> more stuff.').result
|
|
@@ -404,7 +412,8 @@
|
|
|
404
412
|
# the file name comes from method #filename, the line number from method
|
|
405
413
|
# #lineno.
|
|
406
414
|
# Initially, those values are `nil` and `0`, respectively;
|
|
407
|
-
# these initial values are reported as
|
|
415
|
+
# these initial values are reported as <code>'(erb)'</code> and `1`,
|
|
416
|
+
# respectively:
|
|
408
417
|
# erb.filename # => nil
|
|
409
418
|
# erb.lineno # => 0
|
|
410
419
|
# erb.result
|
|
@@ -424,7 +433,7 @@
|
|
|
424
433
|
#
|
|
425
434
|
# ## Plain Text with Embedded Ruby
|
|
426
435
|
# Here's a plain-text template;
|
|
427
|
-
# it uses the literal notation
|
|
436
|
+
# it uses the literal notation <code>'%q{ ... }'</code> to define the template
|
|
428
437
|
# (see [%q
|
|
429
438
|
# literals](https://docs.ruby-lang.org/en/master/syntax/literals_rdoc.html#label
|
|
430
439
|
# -25q-3A+Non-Interpolable+String+Literals));
|
|
@@ -582,23 +591,24 @@ class ERB
|
|
|
582
591
|
# rdoc-file=lib/erb.rb
|
|
583
592
|
# - ERB.new(template, trim_mode: nil, eoutvar: '_erbout')
|
|
584
593
|
# -->
|
|
585
|
-
# Returns a new ERB object containing the given string
|
|
594
|
+
# Returns a new ERB object containing the given string +template+.
|
|
586
595
|
# For details about `template`, its embedded tags, and generated results, see
|
|
587
596
|
# ERB.
|
|
588
|
-
#
|
|
589
|
-
# You can use keyword argument
|
|
597
|
+
# <strong>Keyword Argument `trim_mode`</strong>
|
|
598
|
+
# You can use keyword argument <code>trim_mode: '%'</code>
|
|
590
599
|
# to enable the [shorthand
|
|
591
600
|
# format](rdoc-ref:ERB@Shorthand+Format+for+Execution+Tags) for execution tags.
|
|
592
601
|
# This value allows [blank line
|
|
593
602
|
# control](rdoc-ref:ERB@Suppressing+Unwanted+Blank+Lines):
|
|
594
|
-
# *
|
|
603
|
+
# * <code>'-'</code>: Omit each blank line ending with <code>'%>'</code>.
|
|
595
604
|
# Other values allow [newline
|
|
596
605
|
# control](rdoc-ref:ERB@Suppressing+Unwanted+Newlines):
|
|
597
|
-
# *
|
|
598
|
-
#
|
|
599
|
-
#
|
|
606
|
+
# * <code>'>'</code>: Omit newline for each line ending with
|
|
607
|
+
# <code>'%>'</code>.
|
|
608
|
+
# * <code>'<>'</code>: Omit newline for each line starting with
|
|
609
|
+
# <code>'<%'</code> and ending with <code>'%>'</code>.
|
|
600
610
|
# You can also [combine trim modes](rdoc-ref:ERB@Combining+Trim+Modes).
|
|
601
|
-
#
|
|
611
|
+
# <strong>Keyword Argument `eoutvar`</strong>
|
|
602
612
|
# The string value of keyword argument `eoutvar` specifies the name of the
|
|
603
613
|
# variable
|
|
604
614
|
# that method #result uses to construct its result string;
|
|
@@ -607,7 +617,7 @@ class ERB
|
|
|
607
617
|
# binding
|
|
608
618
|
# and/or when you want to control where output ends up.
|
|
609
619
|
# It's good practice to choose a variable name that begins with an underscore:
|
|
610
|
-
#
|
|
620
|
+
# <code>'_'</code>.
|
|
611
621
|
#
|
|
612
622
|
def initialize: (String, ?eoutvar: String, ?trim_mode: Integer | String | NilClass) -> untyped
|
|
613
623
|
|
|
@@ -760,8 +770,8 @@ class ERB
|
|
|
760
770
|
# -->
|
|
761
771
|
# Returns a new nameless class whose superclass is `super_class`,
|
|
762
772
|
# and which has instance method `method_name`.
|
|
763
|
-
# Create a template from HTML that has embedded expression tags that use
|
|
764
|
-
# and
|
|
773
|
+
# Create a template from HTML that has embedded expression tags that use
|
|
774
|
+
# <code>@arg1</code> and <code>@arg2</code>:
|
|
765
775
|
# html = <<TEMPLATE
|
|
766
776
|
# <html>
|
|
767
777
|
# <body>
|
|
@@ -772,7 +782,7 @@ class ERB
|
|
|
772
782
|
# TEMPLATE
|
|
773
783
|
# template = ERB.new(html)
|
|
774
784
|
#
|
|
775
|
-
# Create a base class that has
|
|
785
|
+
# Create a base class that has <code>@arg1</code> and <code>@arg2</code>:
|
|
776
786
|
# class MyBaseClass
|
|
777
787
|
# def initialize(arg1, arg2)
|
|
778
788
|
# @arg1 = arg1
|
|
@@ -780,7 +790,8 @@ class ERB
|
|
|
780
790
|
# end
|
|
781
791
|
# end
|
|
782
792
|
#
|
|
783
|
-
# Use method #def_class to create a subclass that has method
|
|
793
|
+
# Use method #def_class to create a subclass that has method
|
|
794
|
+
# <code>:render</code>:
|
|
784
795
|
# MySubClass = template.def_class(MyBaseClass, :render)
|
|
785
796
|
#
|
|
786
797
|
# Generate the result:
|