rbs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +15 -0
  5. data/BSDL +22 -0
  6. data/CHANGELOG.md +9 -0
  7. data/COPYING +56 -0
  8. data/Gemfile +6 -0
  9. data/README.md +93 -0
  10. data/Rakefile +142 -0
  11. data/bin/annotate-with-rdoc +157 -0
  12. data/bin/console +14 -0
  13. data/bin/query-rdoc +103 -0
  14. data/bin/setup +10 -0
  15. data/bin/sort +89 -0
  16. data/bin/test_runner.rb +16 -0
  17. data/docs/CONTRIBUTING.md +97 -0
  18. data/docs/sigs.md +148 -0
  19. data/docs/stdlib.md +152 -0
  20. data/docs/syntax.md +528 -0
  21. data/exe/rbs +7 -0
  22. data/lib/rbs.rb +64 -0
  23. data/lib/rbs/ast/annotation.rb +27 -0
  24. data/lib/rbs/ast/comment.rb +27 -0
  25. data/lib/rbs/ast/declarations.rb +395 -0
  26. data/lib/rbs/ast/members.rb +362 -0
  27. data/lib/rbs/buffer.rb +50 -0
  28. data/lib/rbs/builtin_names.rb +55 -0
  29. data/lib/rbs/cli.rb +558 -0
  30. data/lib/rbs/constant.rb +26 -0
  31. data/lib/rbs/constant_table.rb +150 -0
  32. data/lib/rbs/definition.rb +170 -0
  33. data/lib/rbs/definition_builder.rb +919 -0
  34. data/lib/rbs/environment.rb +281 -0
  35. data/lib/rbs/environment_loader.rb +136 -0
  36. data/lib/rbs/environment_walker.rb +124 -0
  37. data/lib/rbs/errors.rb +187 -0
  38. data/lib/rbs/location.rb +102 -0
  39. data/lib/rbs/method_type.rb +123 -0
  40. data/lib/rbs/namespace.rb +91 -0
  41. data/lib/rbs/parser.y +1344 -0
  42. data/lib/rbs/prototype/rb.rb +553 -0
  43. data/lib/rbs/prototype/rbi.rb +587 -0
  44. data/lib/rbs/prototype/runtime.rb +381 -0
  45. data/lib/rbs/substitution.rb +46 -0
  46. data/lib/rbs/test.rb +26 -0
  47. data/lib/rbs/test/errors.rb +61 -0
  48. data/lib/rbs/test/hook.rb +294 -0
  49. data/lib/rbs/test/setup.rb +58 -0
  50. data/lib/rbs/test/spy.rb +325 -0
  51. data/lib/rbs/test/test_helper.rb +183 -0
  52. data/lib/rbs/test/type_check.rb +254 -0
  53. data/lib/rbs/type_name.rb +70 -0
  54. data/lib/rbs/types.rb +936 -0
  55. data/lib/rbs/variance_calculator.rb +138 -0
  56. data/lib/rbs/vendorer.rb +47 -0
  57. data/lib/rbs/version.rb +3 -0
  58. data/lib/rbs/writer.rb +269 -0
  59. data/lib/ruby/signature.rb +7 -0
  60. data/rbs.gemspec +46 -0
  61. data/stdlib/abbrev/abbrev.rbs +60 -0
  62. data/stdlib/base64/base64.rbs +71 -0
  63. data/stdlib/benchmark/benchmark.rbs +372 -0
  64. data/stdlib/builtin/array.rbs +1997 -0
  65. data/stdlib/builtin/basic_object.rbs +280 -0
  66. data/stdlib/builtin/binding.rbs +177 -0
  67. data/stdlib/builtin/builtin.rbs +45 -0
  68. data/stdlib/builtin/class.rbs +145 -0
  69. data/stdlib/builtin/comparable.rbs +116 -0
  70. data/stdlib/builtin/complex.rbs +400 -0
  71. data/stdlib/builtin/constants.rbs +37 -0
  72. data/stdlib/builtin/data.rbs +5 -0
  73. data/stdlib/builtin/deprecated.rbs +2 -0
  74. data/stdlib/builtin/dir.rbs +413 -0
  75. data/stdlib/builtin/encoding.rbs +607 -0
  76. data/stdlib/builtin/enumerable.rbs +404 -0
  77. data/stdlib/builtin/enumerator.rbs +260 -0
  78. data/stdlib/builtin/errno.rbs +781 -0
  79. data/stdlib/builtin/errors.rbs +582 -0
  80. data/stdlib/builtin/exception.rbs +194 -0
  81. data/stdlib/builtin/false_class.rbs +40 -0
  82. data/stdlib/builtin/fiber.rbs +68 -0
  83. data/stdlib/builtin/fiber_error.rbs +12 -0
  84. data/stdlib/builtin/file.rbs +1076 -0
  85. data/stdlib/builtin/file_test.rbs +59 -0
  86. data/stdlib/builtin/float.rbs +696 -0
  87. data/stdlib/builtin/gc.rbs +243 -0
  88. data/stdlib/builtin/hash.rbs +1029 -0
  89. data/stdlib/builtin/integer.rbs +707 -0
  90. data/stdlib/builtin/io.rbs +683 -0
  91. data/stdlib/builtin/kernel.rbs +576 -0
  92. data/stdlib/builtin/marshal.rbs +161 -0
  93. data/stdlib/builtin/match_data.rbs +271 -0
  94. data/stdlib/builtin/math.rbs +369 -0
  95. data/stdlib/builtin/method.rbs +185 -0
  96. data/stdlib/builtin/module.rbs +1104 -0
  97. data/stdlib/builtin/nil_class.rbs +82 -0
  98. data/stdlib/builtin/numeric.rbs +409 -0
  99. data/stdlib/builtin/object.rbs +824 -0
  100. data/stdlib/builtin/proc.rbs +429 -0
  101. data/stdlib/builtin/process.rbs +1227 -0
  102. data/stdlib/builtin/random.rbs +267 -0
  103. data/stdlib/builtin/range.rbs +226 -0
  104. data/stdlib/builtin/rational.rbs +424 -0
  105. data/stdlib/builtin/rb_config.rbs +57 -0
  106. data/stdlib/builtin/regexp.rbs +1083 -0
  107. data/stdlib/builtin/ruby_vm.rbs +14 -0
  108. data/stdlib/builtin/signal.rbs +55 -0
  109. data/stdlib/builtin/string.rbs +1901 -0
  110. data/stdlib/builtin/string_io.rbs +284 -0
  111. data/stdlib/builtin/struct.rbs +40 -0
  112. data/stdlib/builtin/symbol.rbs +228 -0
  113. data/stdlib/builtin/thread.rbs +1108 -0
  114. data/stdlib/builtin/thread_group.rbs +23 -0
  115. data/stdlib/builtin/time.rbs +1047 -0
  116. data/stdlib/builtin/trace_point.rbs +290 -0
  117. data/stdlib/builtin/true_class.rbs +46 -0
  118. data/stdlib/builtin/unbound_method.rbs +153 -0
  119. data/stdlib/builtin/warning.rbs +17 -0
  120. data/stdlib/coverage/coverage.rbs +62 -0
  121. data/stdlib/csv/csv.rbs +773 -0
  122. data/stdlib/erb/erb.rbs +392 -0
  123. data/stdlib/find/find.rbs +40 -0
  124. data/stdlib/ipaddr/ipaddr.rbs +247 -0
  125. data/stdlib/json/json.rbs +335 -0
  126. data/stdlib/pathname/pathname.rbs +1093 -0
  127. data/stdlib/prime/integer-extension.rbs +23 -0
  128. data/stdlib/prime/prime.rbs +188 -0
  129. data/stdlib/securerandom/securerandom.rbs +9 -0
  130. data/stdlib/set/set.rbs +301 -0
  131. data/stdlib/tmpdir/tmpdir.rbs +53 -0
  132. metadata +292 -0
@@ -0,0 +1,392 @@
1
+ # # ERB -- Ruby Templating
2
+ #
3
+ # ## Introduction
4
+ #
5
+ # ERB provides an easy to use but powerful templating system for Ruby. Using
6
+ # ERB, actual Ruby code can be added to any plain text document for the purposes
7
+ # of generating document information details and/or flow control.
8
+ #
9
+ # A very simple example is this:
10
+ #
11
+ # require 'erb'
12
+ #
13
+ # x = 42
14
+ # template = ERB.new <<-EOF
15
+ # The value of x is: <%= x %>
16
+ # EOF
17
+ # puts template.result(binding)
18
+ #
19
+ # *Prints:* The value of x is: 42
20
+ #
21
+ # More complex examples are given below.
22
+ #
23
+ # ## Recognized Tags
24
+ #
25
+ # ERB recognizes certain tags in the provided template and converts them based
26
+ # on the rules below:
27
+ #
28
+ # <% Ruby code -- inline with output %>
29
+ # <%= Ruby expression -- replace with result %>
30
+ # <%# comment -- ignored -- useful in testing %>
31
+ # % a line of Ruby code -- treated as <% line %> (optional -- see ERB.new)
32
+ # %% replaced with % if first thing on a line and % processing is used
33
+ # <%% or %%> -- replace with <% or %> respectively
34
+ #
35
+ # All other text is passed through ERB filtering unchanged.
36
+ #
37
+ # ## Options
38
+ #
39
+ # There are several settings you can change when you use ERB:
40
+ # * the nature of the tags that are recognized;
41
+ # * the value of `$SAFE` under which the template is run;
42
+ # * the binding used to resolve local variables in the template.
43
+ #
44
+ #
45
+ # See the ERB.new and ERB#result methods for more detail.
46
+ #
47
+ # ## Character encodings
48
+ #
49
+ # ERB (or Ruby code generated by ERB) returns a string in the same character
50
+ # encoding as the input string. When the input string has a magic comment,
51
+ # however, it returns a string in the encoding specified by the magic comment.
52
+ #
53
+ # # -*- coding: utf-8 -*-
54
+ # require 'erb'
55
+ #
56
+ # template = ERB.new <<EOF
57
+ # <%#-*- coding: Big5 -*-%>
58
+ # \_\_ENCODING\_\_ is <%= \_\_ENCODING\_\_ %>.
59
+ # EOF
60
+ # puts template.result
61
+ #
62
+ # *Prints:* _*ENCODING*_ is Big5.
63
+ #
64
+ # ## Examples
65
+ #
66
+ # ### Plain Text
67
+ #
68
+ # ERB is useful for any generic templating situation. Note that in this
69
+ # example, we use the convenient "% at start of line" tag, and we quote the
70
+ # template literally with `%q{...}` to avoid trouble with the backslash.
71
+ #
72
+ # require "erb"
73
+ #
74
+ # # Create template.
75
+ # template = %q{
76
+ # From: James Edward Gray II <james@grayproductions.net>
77
+ # To: <%= to %>
78
+ # Subject: Addressing Needs
79
+ #
80
+ # <%= to[/\w+/] %>:
81
+ #
82
+ # Just wanted to send a quick note assuring that your needs are being
83
+ # addressed.
84
+ #
85
+ # I want you to know that my team will keep working on the issues,
86
+ # especially:
87
+ #
88
+ # <%# ignore numerous minor requests -- focus on priorities %>
89
+ # % priorities.each do |priority|
90
+ # * <%= priority %>
91
+ # % end
92
+ #
93
+ # Thanks for your patience.
94
+ #
95
+ # James Edward Gray II
96
+ # }.gsub(/^ /, '')
97
+ #
98
+ # message = ERB.new(template, trim_mode: "%<>")
99
+ #
100
+ # # Set up template data.
101
+ # to = "Community Spokesman <spokesman@ruby_community.org>"
102
+ # priorities = [ "Run Ruby Quiz",
103
+ # "Document Modules",
104
+ # "Answer Questions on Ruby Talk" ]
105
+ #
106
+ # # Produce result.
107
+ # email = message.result
108
+ # puts email
109
+ #
110
+ # *Generates:*
111
+ #
112
+ # From: James Edward Gray II <james@grayproductions.net>
113
+ # To: Community Spokesman <spokesman@ruby_community.org>
114
+ # Subject: Addressing Needs
115
+ #
116
+ # Community:
117
+ #
118
+ # Just wanted to send a quick note assuring that your needs are being addressed.
119
+ #
120
+ # I want you to know that my team will keep working on the issues, especially:
121
+ #
122
+ # * Run Ruby Quiz
123
+ # * Document Modules
124
+ # * Answer Questions on Ruby Talk
125
+ #
126
+ # Thanks for your patience.
127
+ #
128
+ # James Edward Gray II
129
+ #
130
+ # ### Ruby in HTML
131
+ #
132
+ # ERB is often used in `.rhtml` files (HTML with embedded Ruby). Notice the
133
+ # need in this example to provide a special binding when the template is run, so
134
+ # that the instance variables in the Product object can be resolved.
135
+ #
136
+ # require "erb"
137
+ #
138
+ # # Build template data class.
139
+ # class Product
140
+ # def initialize( code, name, desc, cost )
141
+ # @code = code
142
+ # @name = name
143
+ # @desc = desc
144
+ # @cost = cost
145
+ #
146
+ # @features = [ ]
147
+ # end
148
+ #
149
+ # def add_feature( feature )
150
+ # @features << feature
151
+ # end
152
+ #
153
+ # # Support templating of member data.
154
+ # def get_binding
155
+ # binding
156
+ # end
157
+ #
158
+ # # ...
159
+ # end
160
+ #
161
+ # # Create template.
162
+ # template = %{
163
+ # <html>
164
+ # <head><title>Ruby Toys -- <%= @name %></title></head>
165
+ # <body>
166
+ #
167
+ # <h1><%= @name %> (<%= @code %>)</h1>
168
+ # <p><%= @desc %></p>
169
+ #
170
+ # <ul>
171
+ # <% @features.each do |f| %>
172
+ # <li><b><%= f %></b></li>
173
+ # <% end %>
174
+ # </ul>
175
+ #
176
+ # <p>
177
+ # <% if @cost < 10 %>
178
+ # <b>Only <%= @cost %>!!!</b>
179
+ # <% else %>
180
+ # Call for a price, today!
181
+ # <% end %>
182
+ # </p>
183
+ #
184
+ # </body>
185
+ # </html>
186
+ # }.gsub(/^ /, '')
187
+ #
188
+ # rhtml = ERB.new(template)
189
+ #
190
+ # # Set up template data.
191
+ # toy = Product.new( "TZ-1002",
192
+ # "Rubysapien",
193
+ # "Geek's Best Friend! Responds to Ruby commands...",
194
+ # 999.95 )
195
+ # toy.add_feature("Listens for verbal commands in the Ruby language!")
196
+ # toy.add_feature("Ignores Perl, Java, and all C variants.")
197
+ # toy.add_feature("Karate-Chop Action!!!")
198
+ # toy.add_feature("Matz signature on left leg.")
199
+ # toy.add_feature("Gem studded eyes... Rubies, of course!")
200
+ #
201
+ # # Produce result.
202
+ # rhtml.run(toy.get_binding)
203
+ #
204
+ # *Generates (some blank lines removed):*
205
+ #
206
+ # <html>
207
+ # <head><title>Ruby Toys -- Rubysapien</title></head>
208
+ # <body>
209
+ #
210
+ # <h1>Rubysapien (TZ-1002)</h1>
211
+ # <p>Geek's Best Friend! Responds to Ruby commands...</p>
212
+ #
213
+ # <ul>
214
+ # <li><b>Listens for verbal commands in the Ruby language!</b></li>
215
+ # <li><b>Ignores Perl, Java, and all C variants.</b></li>
216
+ # <li><b>Karate-Chop Action!!!</b></li>
217
+ # <li><b>Matz signature on left leg.</b></li>
218
+ # <li><b>Gem studded eyes... Rubies, of course!</b></li>
219
+ # </ul>
220
+ #
221
+ # <p>
222
+ # Call for a price, today!
223
+ # </p>
224
+ #
225
+ # </body>
226
+ # </html>
227
+ #
228
+ # ## Notes
229
+ #
230
+ # There are a variety of templating solutions available in various Ruby
231
+ # projects:
232
+ # * ERB's big brother, eRuby, works the same but is written in C for speed;
233
+ # * Amrita (smart at producing HTML/XML);
234
+ # * cs/Template (written in C for speed);
235
+ # * RDoc, distributed with Ruby, uses its own template engine, which can be
236
+ # reused elsewhere;
237
+ # * and others; search [RubyGems.org](https://rubygems.org/) or [The Ruby
238
+ # Toolbox](https://www.ruby-toolbox.com/).
239
+ #
240
+ #
241
+ # Rails, the web application framework, uses ERB to create views.
242
+ #
243
+ class ERB
244
+ # Returns revision information for the erb.rb module.
245
+ #
246
+ def self.version: () -> String
247
+
248
+ # Constructs a new ERB object with the template specified in *str*.
249
+ #
250
+ # An ERB object works by building a chunk of Ruby code that will output the
251
+ # completed template when run. If *safe_level* is set to a non-nil value, ERB
252
+ # code will be run in a separate thread with **$SAFE** set to the provided
253
+ # level.
254
+ #
255
+ # If *trim_mode* is passed a String containing one or more of the following
256
+ # modifiers, ERB will adjust its code generation as listed:
257
+ #
258
+ # % enables Ruby code processing for lines beginning with %
259
+ # <> omit newline for lines starting with <% and ending in %>
260
+ # > omit newline for lines ending in %>
261
+ # - omit blank lines ending in -%>
262
+ #
263
+ # *eoutvar* can be used to set the name of the variable ERB will build up its
264
+ # output in. This is useful when you need to run multiple ERB templates through
265
+ # the same binding and/or when you want to control where output ends up. Pass
266
+ # the name of the variable to be used inside a String.
267
+ #
268
+ # ### Example
269
+ #
270
+ # require "erb"
271
+ #
272
+ # # build data class
273
+ # class Listings
274
+ # PRODUCT = { :name => "Chicken Fried Steak",
275
+ # :desc => "A well messages pattie, breaded and fried.",
276
+ # :cost => 9.95 }
277
+ #
278
+ # attr_reader :product, :price
279
+ #
280
+ # def initialize( product = "", price = "" )
281
+ # @product = product
282
+ # @price = price
283
+ # end
284
+ #
285
+ # def build
286
+ # b = binding
287
+ # # create and run templates, filling member data variables
288
+ # ERB.new(<<-'END_PRODUCT'.gsub(/^\s+/, ""), trim_mode: "", eoutvar: "@product").result b
289
+ # <%= PRODUCT[:name] %>
290
+ # <%= PRODUCT[:desc] %>
291
+ # END_PRODUCT
292
+ # ERB.new(<<-'END_PRICE'.gsub(/^\s+/, ""), trim_mode: "", eoutvar: "@price").result b
293
+ # <%= PRODUCT[:name] %> -- <%= PRODUCT[:cost] %>
294
+ # <%= PRODUCT[:desc] %>
295
+ # END_PRICE
296
+ # end
297
+ # end
298
+ #
299
+ # # setup template data
300
+ # listings = Listings.new
301
+ # listings.build
302
+ #
303
+ # puts listings.product + "\n" + listings.price
304
+ #
305
+ # *Generates*
306
+ #
307
+ # Chicken Fried Steak
308
+ # A well messages pattie, breaded and fried.
309
+ #
310
+ # Chicken Fried Steak -- 9.95
311
+ # A well messages pattie, breaded and fried.
312
+ #
313
+ def initialize: (String, ?eoutvar: String, ?trim_mode: Integer | String | NilClass) -> untyped
314
+
315
+ # The Ruby code generated by ERB
316
+ #
317
+ def src: () -> String
318
+
319
+ # The encoding to eval
320
+ #
321
+ def encoding: () -> Encoding
322
+
323
+ # The optional *filename* argument passed to Kernel#eval when the ERB code is
324
+ # run
325
+ #
326
+ def filename: () -> (String | NilClass)
327
+ def filename=: (String | NilClass) -> untyped
328
+
329
+ # The optional *lineno* argument passed to Kernel#eval when the ERB code is run
330
+ #
331
+ def lineno: () -> Integer
332
+ def lineno=: (Integer) -> untyped
333
+ def location=: (Array[String | Integer]) -> untyped
334
+
335
+ # Generate results and print them. (see ERB#result)
336
+ #
337
+ def run: (?Binding) -> untyped
338
+
339
+ # Executes the generated ERB code to produce a completed template, returning the
340
+ # results of that code. (See ERB::new for details on how this process can be
341
+ # affected by *safe_level*.)
342
+ #
343
+ # *b* accepts a Binding object which is used to set the context of code
344
+ # evaluation.
345
+ #
346
+ def result: (?Binding) -> String
347
+
348
+ # Render a template on a new toplevel binding with local variables specified by
349
+ # a Hash object.
350
+ #
351
+ def result_with_hash: (Hash[untyped, untyped]) -> String
352
+
353
+ # Define *methodname* as instance method of *mod* from compiled Ruby source.
354
+ #
355
+ # example:
356
+ # filename = 'example.rhtml' # 'arg1' and 'arg2' are used in example.rhtml
357
+ # erb = ERB.new(File.read(filename))
358
+ # erb.def_method(MyClass, 'render(arg1, arg2)', filename)
359
+ # print MyClass.new.render('foo', 123)
360
+ #
361
+ def def_method: (Module, String, ?String) -> untyped
362
+
363
+ # Create unnamed module, define *methodname* as instance method of it, and
364
+ # return it.
365
+ #
366
+ # example:
367
+ # filename = 'example.rhtml' # 'arg1' and 'arg2' are used in example.rhtml
368
+ # erb = ERB.new(File.read(filename))
369
+ # erb.filename = filename
370
+ # MyModule = erb.def_module('render(arg1, arg2)')
371
+ # class MyClass
372
+ # include MyModule
373
+ # end
374
+ #
375
+ def def_module: (?String) -> Module
376
+
377
+ # Define unnamed class which has *methodname* as instance method, and return it.
378
+ #
379
+ # example:
380
+ # class MyClass_
381
+ # def initialize(arg1, arg2)
382
+ # @arg1 = arg1; @arg2 = arg2
383
+ # end
384
+ # end
385
+ # filename = 'example.rhtml' # @arg1 and @arg2 are used in example.rhtml
386
+ # erb = ERB.new(File.read(filename))
387
+ # erb.filename = filename
388
+ # MyClass = erb.def_class(MyClass_, 'render()')
389
+ # print MyClass.new('foo', 123).render()
390
+ #
391
+ def def_class: (?Class, ?String) -> Class
392
+ end
@@ -0,0 +1,40 @@
1
+ # The `Find` module supports the top-down traversal of a set of file paths.
2
+ #
3
+ # For example, to total the size of all files under your home directory,
4
+ # ignoring anything in a "dot" directory (e.g. $HOME/.ssh):
5
+ #
6
+ # require 'find'
7
+ #
8
+ # total_size = 0
9
+ #
10
+ # Find.find(ENV["HOME"]) do |path|
11
+ # if FileTest.directory?(path)
12
+ # if File.basename(path).start_with?('.')
13
+ # Find.prune # Don't look any further into this directory.
14
+ # else
15
+ # next
16
+ # end
17
+ # else
18
+ # total_size += FileTest.size(path)
19
+ # end
20
+ # end
21
+ #
22
+ module Find
23
+ # Calls the associated block with the name of every file and directory listed as
24
+ # arguments, then recursively on their subdirectories, and so on.
25
+ #
26
+ # Returns an enumerator if no block is given.
27
+ #
28
+ # See the `Find` module documentation for an example.
29
+ #
30
+ def self?.find: (*String | _ToPath paths, ?ignore_error: bool) -> Enumerator[String, nil]
31
+ | (*String | _ToPath paths, ?ignore_error: bool) { (String arg0) -> void } -> nil
32
+
33
+ # Skips the current file or directory, restarting the loop with the next entry.
34
+ # If the current file is a directory, that directory will not be recursively
35
+ # entered. Meaningful only within the block associated with Find::find.
36
+ #
37
+ # See the `Find` module documentation for an example.
38
+ #
39
+ def self?.prune: () -> void
40
+ end
@@ -0,0 +1,247 @@
1
+ # IPAddr provides a set of methods to manipulate an IP address. Both IPv4 and
2
+ # IPv6 are supported.
3
+ #
4
+ # ## Example
5
+ #
6
+ # require 'ipaddr'
7
+ #
8
+ # ipaddr1 = IPAddr.new "3ffe:505:2::1"
9
+ #
10
+ # p ipaddr1 #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
11
+ #
12
+ # p ipaddr1.to_s #=> "3ffe:505:2::1"
13
+ #
14
+ # ipaddr2 = ipaddr1.mask(48) #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>
15
+ #
16
+ # p ipaddr2.to_s #=> "3ffe:505:2::"
17
+ #
18
+ # ipaddr3 = IPAddr.new "192.168.2.0/24"
19
+ #
20
+ # p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
21
+ #
22
+ class IPAddr
23
+ include Comparable
24
+
25
+ # Creates a new ipaddr containing the given network byte ordered string form of
26
+ # an IP address.
27
+ #
28
+ def self.new_ntoh: (String addr) -> IPAddr
29
+
30
+ # Convert a network byte ordered string form of an IP address into human
31
+ # readable form.
32
+ #
33
+ def self.ntop: (String addr) -> String
34
+
35
+ # Creates a new ipaddr object either from a human readable IP address
36
+ # representation in string, or from a packed in_addr value followed by an
37
+ # address family.
38
+ #
39
+ # In the former case, the following are the valid formats that will be
40
+ # recognized: "address", "address/prefixlen" and "address/mask", where IPv6
41
+ # address may be enclosed in square brackets (`[' and `]'). If a prefixlen or a
42
+ # mask is specified, it returns a masked IP address. Although the address
43
+ # family is determined automatically from a specified string, you can specify
44
+ # one explicitly by the optional second argument.
45
+ #
46
+ # Otherwise an IP address is generated from a packed in_addr value and an
47
+ # address family.
48
+ #
49
+ # The IPAddr class defines many methods and operators, and some of those, such
50
+ # as &, |, include? and ==, accept a string, or a packed in_addr value instead
51
+ # of an IPAddr object.
52
+ #
53
+ def initialize: (?String addr, ?untyped family) -> IPAddr
54
+
55
+ # Returns a new ipaddr built by bitwise AND.
56
+ #
57
+ def &: (untyped other) -> IPAddr
58
+
59
+ # Returns a new ipaddr built by bitwise left shift.
60
+ #
61
+ def <<: (Integer num) -> IPAddr
62
+
63
+ # Compares the ipaddr with another.
64
+ #
65
+ def <=>: (untyped other) -> Integer?
66
+
67
+ # Returns true if two ipaddrs are equal.
68
+ #
69
+ def ==: (untyped other) -> bool
70
+
71
+ alias === include?
72
+
73
+ # Returns a new ipaddr built by bitwise right-shift.
74
+ #
75
+ def >>: (Integer num) -> IPAddr
76
+
77
+ # Checks equality used by Hash.
78
+ #
79
+ def eql?: (untyped other) -> bool
80
+
81
+ # Returns the address family of this IP address.
82
+ #
83
+ attr_reader family: Integer
84
+
85
+ # Returns a hash value used by Hash, Set, and Array classes
86
+ #
87
+ def hash: () -> Integer
88
+
89
+ # Returns a network byte ordered string form of the IP address.
90
+ #
91
+ def hton: () -> String
92
+
93
+ # Returns true if the given ipaddr is in the range.
94
+ #
95
+ # e.g.:
96
+ # require 'ipaddr'
97
+ # net1 = IPAddr.new("192.168.2.0/24")
98
+ # net2 = IPAddr.new("192.168.2.100")
99
+ # net3 = IPAddr.new("192.168.3.0")
100
+ # p net1.include?(net2) #=> true
101
+ # p net1.include?(net3) #=> false
102
+ #
103
+ def include?: (untyped other) -> bool
104
+
105
+ # Returns a string containing a human-readable representation of the ipaddr.
106
+ # ("#<IPAddr: family:address/mask>")
107
+ #
108
+ def inspect: () -> String
109
+
110
+ # Returns a string for DNS reverse lookup compatible with RFC3172.
111
+ #
112
+ def ip6_arpa: () -> String
113
+
114
+ # Returns a string for DNS reverse lookup compatible with RFC1886.
115
+ #
116
+ def ip6_int: () -> String
117
+
118
+ # Returns true if the ipaddr is an IPv4 address.
119
+ #
120
+ def ipv4?: () -> bool
121
+
122
+ # Returns a new ipaddr built by converting the native IPv4 address into an
123
+ # IPv4-compatible IPv6 address.
124
+ #
125
+ def ipv4_compat: () -> IPAddr
126
+
127
+ # Returns true if the ipaddr is an IPv4-compatible IPv6 address.
128
+ #
129
+ def ipv4_compat?: () -> bool
130
+
131
+ # Returns a new ipaddr built by converting the native IPv4 address into an
132
+ # IPv4-mapped IPv6 address.
133
+ #
134
+ def ipv4_mapped: () -> IPAddr
135
+
136
+ # Returns true if the ipaddr is an IPv4-mapped IPv6 address.
137
+ #
138
+ def ipv4_mapped?: () -> bool
139
+
140
+ # Returns true if the ipaddr is an IPv6 address.
141
+ #
142
+ def ipv6?: () -> bool
143
+
144
+ # Returns true if the ipaddr is a link-local address. IPv4 addresses in
145
+ # 169.254.0.0/16 reserved by RFC 3927 and Link-Local IPv6 Unicast Addresses in
146
+ # fe80::/10 reserved by RFC 4291 are considered link-local.
147
+ #
148
+ def link_local?: () -> bool
149
+
150
+ # Returns true if the ipaddr is a loopback address.
151
+ #
152
+ def loopback?: () -> bool
153
+
154
+ # Returns a new ipaddr built by masking IP address with the given
155
+ # prefixlen/netmask. (e.g. 8, 64, "255.255.255.0", etc.)
156
+ #
157
+ def mask: (String | Integer prefixlen) -> IPAddr
158
+
159
+ # Returns a new ipaddr built by converting the IPv6 address into a native IPv4
160
+ # address. If the IP address is not an IPv4-mapped or IPv4-compatible IPv6
161
+ # address, returns self.
162
+ #
163
+ def native: () -> IPAddr
164
+
165
+ # Returns the prefix length in bits for the ipaddr.
166
+ #
167
+ def prefix: () -> Integer
168
+
169
+ # Sets the prefix length in bits
170
+ #
171
+ def prefix=: (Integer prefix) -> self
172
+
173
+ # Returns true if the ipaddr is a private address. IPv4 addresses in
174
+ # 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 as defined in RFC 1918 and IPv6
175
+ # Unique Local Addresses in fc00::/7 as defined in RFC 4193 are considered
176
+ # private.
177
+ #
178
+ def private?: () -> bool
179
+
180
+ # Returns a string for DNS reverse lookup. It returns a string in RFC3172 form
181
+ # for an IPv6 address.
182
+ #
183
+ def reverse: () -> String
184
+
185
+ # Returns the successor to the ipaddr.
186
+ #
187
+ def succ: () -> IPAddr
188
+
189
+ # Returns the integer representation of the ipaddr.
190
+ #
191
+ def to_i: () -> Integer
192
+
193
+ # Creates a Range object for the network address.
194
+ #
195
+ def to_range: () -> Range[IPAddr]
196
+
197
+ # Returns a string containing the IP address representation.
198
+ #
199
+ def to_s: () -> String
200
+
201
+ # Returns a string containing the IP address representation in canonical form.
202
+ #
203
+ def to_string: () -> String
204
+
205
+ # Returns a new ipaddr built by bitwise OR.
206
+ #
207
+ def |: (untyped other) -> IPAddr
208
+
209
+ # Returns a new ipaddr built by bitwise negation.
210
+ #
211
+ def ~: () -> IPAddr
212
+ end
213
+
214
+ # Generic IPAddr related error. Exceptions raised in this class should inherit
215
+ # from Error.
216
+ #
217
+ class IPAddr::Error < ArgumentError
218
+ end
219
+
220
+ # Raised when the provided IP address is an invalid address.
221
+ #
222
+ class IPAddr::InvalidAddressError < IPAddr::Error
223
+ end
224
+
225
+ # Raised when the address family is invalid such as an address with an
226
+ # unsupported family, an address with an inconsistent family, or an address
227
+ # who's family cannot be determined.
228
+ #
229
+ class IPAddr::AddressFamilyError < IPAddr::Error
230
+ end
231
+
232
+ # Raised when the address is an invalid length.
233
+ #
234
+ class IPAddr::InvalidPrefixError < IPAddr::InvalidAddressError
235
+ end
236
+
237
+ # 32 bit mask for IPv4
238
+ #
239
+ IPAddr::IN4MASK: Integer
240
+
241
+ # Format string for IPv6
242
+ #
243
+ IPAddr::IN6FORMAT: String
244
+
245
+ # 128 bit mask for IPv6
246
+ #
247
+ IPAddr::IN6MASK: Integer