steep 0.16.0 → 0.16.1
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/.gitmodules +0 -3
- data/CHANGELOG.md +6 -0
- data/Rakefile +0 -13
- data/bin/setup +0 -2
- data/bin/smoke_runner.rb +0 -1
- data/exe/steep +0 -1
- data/lib/steep/project/file.rb +1 -1
- data/lib/steep/project/hover_content.rb +1 -1
- data/lib/steep/server/code_worker.rb +1 -1
- data/lib/steep/server/signature_worker.rb +4 -4
- data/lib/steep/type_construction.rb +10 -16
- data/lib/steep/type_inference/constant_env.rb +2 -10
- data/lib/steep/type_inference/context.rb +1 -0
- data/lib/steep/version.rb +1 -1
- data/steep.gemspec +1 -5
- metadata +17 -135
- data/exe/rbs +0 -3
- data/vendor/ruby-signature/.github/workflows/ruby.yml +0 -27
- data/vendor/ruby-signature/.gitignore +0 -12
- data/vendor/ruby-signature/.rubocop.yml +0 -15
- data/vendor/ruby-signature/BSDL +0 -22
- data/vendor/ruby-signature/COPYING +0 -56
- data/vendor/ruby-signature/Gemfile +0 -6
- data/vendor/ruby-signature/README.md +0 -93
- data/vendor/ruby-signature/Rakefile +0 -142
- data/vendor/ruby-signature/bin/annotate-with-rdoc +0 -157
- data/vendor/ruby-signature/bin/console +0 -14
- data/vendor/ruby-signature/bin/query-rdoc +0 -103
- data/vendor/ruby-signature/bin/setup +0 -10
- data/vendor/ruby-signature/bin/sort +0 -89
- data/vendor/ruby-signature/bin/test_runner.rb +0 -16
- data/vendor/ruby-signature/docs/CONTRIBUTING.md +0 -97
- data/vendor/ruby-signature/docs/sigs.md +0 -148
- data/vendor/ruby-signature/docs/stdlib.md +0 -152
- data/vendor/ruby-signature/docs/syntax.md +0 -528
- data/vendor/ruby-signature/exe/rbs +0 -7
- data/vendor/ruby-signature/lib/rbs.rb +0 -64
- data/vendor/ruby-signature/lib/rbs/ast/annotation.rb +0 -27
- data/vendor/ruby-signature/lib/rbs/ast/comment.rb +0 -27
- data/vendor/ruby-signature/lib/rbs/ast/declarations.rb +0 -395
- data/vendor/ruby-signature/lib/rbs/ast/members.rb +0 -362
- data/vendor/ruby-signature/lib/rbs/buffer.rb +0 -50
- data/vendor/ruby-signature/lib/rbs/builtin_names.rb +0 -55
- data/vendor/ruby-signature/lib/rbs/cli.rb +0 -558
- data/vendor/ruby-signature/lib/rbs/constant.rb +0 -26
- data/vendor/ruby-signature/lib/rbs/constant_table.rb +0 -150
- data/vendor/ruby-signature/lib/rbs/definition.rb +0 -170
- data/vendor/ruby-signature/lib/rbs/definition_builder.rb +0 -919
- data/vendor/ruby-signature/lib/rbs/environment.rb +0 -281
- data/vendor/ruby-signature/lib/rbs/environment_loader.rb +0 -136
- data/vendor/ruby-signature/lib/rbs/environment_walker.rb +0 -124
- data/vendor/ruby-signature/lib/rbs/errors.rb +0 -187
- data/vendor/ruby-signature/lib/rbs/location.rb +0 -102
- data/vendor/ruby-signature/lib/rbs/method_type.rb +0 -123
- data/vendor/ruby-signature/lib/rbs/namespace.rb +0 -91
- data/vendor/ruby-signature/lib/rbs/parser.y +0 -1344
- data/vendor/ruby-signature/lib/rbs/prototype/rb.rb +0 -553
- data/vendor/ruby-signature/lib/rbs/prototype/rbi.rb +0 -587
- data/vendor/ruby-signature/lib/rbs/prototype/runtime.rb +0 -381
- data/vendor/ruby-signature/lib/rbs/substitution.rb +0 -46
- data/vendor/ruby-signature/lib/rbs/test.rb +0 -26
- data/vendor/ruby-signature/lib/rbs/test/errors.rb +0 -61
- data/vendor/ruby-signature/lib/rbs/test/hook.rb +0 -294
- data/vendor/ruby-signature/lib/rbs/test/setup.rb +0 -58
- data/vendor/ruby-signature/lib/rbs/test/spy.rb +0 -325
- data/vendor/ruby-signature/lib/rbs/test/test_helper.rb +0 -183
- data/vendor/ruby-signature/lib/rbs/test/type_check.rb +0 -254
- data/vendor/ruby-signature/lib/rbs/type_name.rb +0 -70
- data/vendor/ruby-signature/lib/rbs/types.rb +0 -936
- data/vendor/ruby-signature/lib/rbs/variance_calculator.rb +0 -138
- data/vendor/ruby-signature/lib/rbs/vendorer.rb +0 -47
- data/vendor/ruby-signature/lib/rbs/version.rb +0 -3
- data/vendor/ruby-signature/lib/rbs/writer.rb +0 -269
- data/vendor/ruby-signature/lib/ruby/signature.rb +0 -7
- data/vendor/ruby-signature/rbs.gemspec +0 -46
- data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +0 -60
- data/vendor/ruby-signature/stdlib/base64/base64.rbs +0 -71
- data/vendor/ruby-signature/stdlib/benchmark/benchmark.rbs +0 -372
- data/vendor/ruby-signature/stdlib/builtin/array.rbs +0 -1997
- data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +0 -280
- data/vendor/ruby-signature/stdlib/builtin/binding.rbs +0 -177
- data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +0 -45
- data/vendor/ruby-signature/stdlib/builtin/class.rbs +0 -145
- data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +0 -116
- data/vendor/ruby-signature/stdlib/builtin/complex.rbs +0 -400
- data/vendor/ruby-signature/stdlib/builtin/constants.rbs +0 -37
- data/vendor/ruby-signature/stdlib/builtin/data.rbs +0 -5
- data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +0 -2
- data/vendor/ruby-signature/stdlib/builtin/dir.rbs +0 -413
- data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +0 -607
- data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +0 -404
- data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +0 -260
- data/vendor/ruby-signature/stdlib/builtin/errno.rbs +0 -781
- data/vendor/ruby-signature/stdlib/builtin/errors.rbs +0 -582
- data/vendor/ruby-signature/stdlib/builtin/exception.rbs +0 -194
- data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +0 -40
- data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +0 -68
- data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +0 -12
- data/vendor/ruby-signature/stdlib/builtin/file.rbs +0 -1076
- data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +0 -59
- data/vendor/ruby-signature/stdlib/builtin/float.rbs +0 -696
- data/vendor/ruby-signature/stdlib/builtin/gc.rbs +0 -243
- data/vendor/ruby-signature/stdlib/builtin/hash.rbs +0 -1029
- data/vendor/ruby-signature/stdlib/builtin/integer.rbs +0 -707
- data/vendor/ruby-signature/stdlib/builtin/io.rbs +0 -683
- data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +0 -576
- data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +0 -161
- data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +0 -271
- data/vendor/ruby-signature/stdlib/builtin/math.rbs +0 -369
- data/vendor/ruby-signature/stdlib/builtin/method.rbs +0 -185
- data/vendor/ruby-signature/stdlib/builtin/module.rbs +0 -1104
- data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +0 -82
- data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +0 -409
- data/vendor/ruby-signature/stdlib/builtin/object.rbs +0 -824
- data/vendor/ruby-signature/stdlib/builtin/proc.rbs +0 -429
- data/vendor/ruby-signature/stdlib/builtin/process.rbs +0 -1227
- data/vendor/ruby-signature/stdlib/builtin/random.rbs +0 -267
- data/vendor/ruby-signature/stdlib/builtin/range.rbs +0 -226
- data/vendor/ruby-signature/stdlib/builtin/rational.rbs +0 -424
- data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +0 -57
- data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +0 -1083
- data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +0 -14
- data/vendor/ruby-signature/stdlib/builtin/signal.rbs +0 -55
- data/vendor/ruby-signature/stdlib/builtin/string.rbs +0 -1901
- data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +0 -284
- data/vendor/ruby-signature/stdlib/builtin/struct.rbs +0 -40
- data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +0 -228
- data/vendor/ruby-signature/stdlib/builtin/thread.rbs +0 -1108
- data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +0 -23
- data/vendor/ruby-signature/stdlib/builtin/time.rbs +0 -1047
- data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +0 -290
- data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +0 -46
- data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +0 -153
- data/vendor/ruby-signature/stdlib/builtin/warning.rbs +0 -17
- data/vendor/ruby-signature/stdlib/coverage/coverage.rbs +0 -62
- data/vendor/ruby-signature/stdlib/csv/csv.rbs +0 -773
- data/vendor/ruby-signature/stdlib/erb/erb.rbs +0 -392
- data/vendor/ruby-signature/stdlib/find/find.rbs +0 -40
- data/vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs +0 -247
- data/vendor/ruby-signature/stdlib/json/json.rbs +0 -335
- data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +0 -1093
- data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +0 -23
- data/vendor/ruby-signature/stdlib/prime/prime.rbs +0 -188
- data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +0 -9
- data/vendor/ruby-signature/stdlib/set/set.rbs +0 -301
- data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +0 -53
@@ -1,17 +0,0 @@
|
|
1
|
-
# The [Warning](Warning) module contains a single
|
2
|
-
# method named [warn](Warning#method-i-warn), and the
|
3
|
-
# module extends itself, making `Warning.warn` available.
|
4
|
-
# [\#warn](Warning#method-i-warn) is called for all
|
5
|
-
# warnings issued by Ruby. By default, warnings are printed to $stderr.
|
6
|
-
#
|
7
|
-
# By overriding [\#warn](Warning#method-i-warn), you
|
8
|
-
# can change how warnings are handled by Ruby, either filtering some
|
9
|
-
# warnings, and/or outputting warnings somewhere other than $stderr. When
|
10
|
-
# [\#warn](Warning#method-i-warn) is overridden, super
|
11
|
-
# can be called to get the default behavior of printing the warning to
|
12
|
-
# $stderr.
|
13
|
-
module Warning
|
14
|
-
# Writes warning message msg to $stderr, followed by a newline if the message does not end in a newline.
|
15
|
-
# This method is called by Ruby for all emitted warnings.
|
16
|
-
def warn: (String) -> nil
|
17
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# Coverage provides coverage measurement feature for Ruby. This feature is
|
2
|
-
# experimental, so these APIs may be changed in future.
|
3
|
-
#
|
4
|
-
# # Usage
|
5
|
-
#
|
6
|
-
# 1. require "coverage"
|
7
|
-
# 2. do Coverage.start
|
8
|
-
# 3. require or load Ruby source file
|
9
|
-
# 4. Coverage.result will return a hash that contains filename as key and
|
10
|
-
# coverage array as value. A coverage array gives, for each line, the number
|
11
|
-
# of line execution by the interpreter. A `nil` value means coverage is
|
12
|
-
# disabled for this line (lines like `else` and `end`).
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# # Example
|
16
|
-
#
|
17
|
-
# [foo.rb]
|
18
|
-
# s = 0
|
19
|
-
# 10.times do |x|
|
20
|
-
# s += x
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# if s == 45
|
24
|
-
# p :ok
|
25
|
-
# else
|
26
|
-
# p :ng
|
27
|
-
# end
|
28
|
-
# [EOF]
|
29
|
-
#
|
30
|
-
# require "coverage"
|
31
|
-
# Coverage.start
|
32
|
-
# require "foo.rb"
|
33
|
-
# p Coverage.result #=> {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}
|
34
|
-
#
|
35
|
-
module Coverage
|
36
|
-
def self.line_stub: () -> Array[Integer?]
|
37
|
-
|
38
|
-
# Returns a hash that contains filename as key and coverage array as value. This
|
39
|
-
# is the same as `Coverage.result(stop: false, clear: false)`.
|
40
|
-
#
|
41
|
-
# {
|
42
|
-
# "file.rb" => [1, 2, nil],
|
43
|
-
# ...
|
44
|
-
# }
|
45
|
-
#
|
46
|
-
def self.peek_result: () -> Hash[String, untyped]
|
47
|
-
|
48
|
-
# Returns a hash that contains filename as key and coverage array as value. If
|
49
|
-
# `clear` is true, it clears the counters to zero. If `stop` is true, it
|
50
|
-
# disables coverage measurement.
|
51
|
-
#
|
52
|
-
def self.result: (?stop: bool, ?clear: bool) -> Hash[String, untyped]
|
53
|
-
|
54
|
-
# Returns true if coverage stats are currently being collected (after
|
55
|
-
# Coverage.start call, but before Coverage.result call)
|
56
|
-
#
|
57
|
-
def self.running?: () -> bool
|
58
|
-
|
59
|
-
# Enables coverage measurement.
|
60
|
-
#
|
61
|
-
def self.start: (?lines: bool, ?branches: bool, ?methods: bool, ?oneshot_lines: bool) -> nil
|
62
|
-
end
|
@@ -1,773 +0,0 @@
|
|
1
|
-
# This class provides a complete interface to CSV files and data. It offers
|
2
|
-
# tools to enable you to read and write to and from Strings or IO objects, as
|
3
|
-
# needed.
|
4
|
-
#
|
5
|
-
# The most generic interface of the library is:
|
6
|
-
#
|
7
|
-
# csv = CSV.new(string_or_io, **options)
|
8
|
-
#
|
9
|
-
# # Reading: IO object should be open for read
|
10
|
-
# csv.read # => array of rows
|
11
|
-
# # or
|
12
|
-
# csv.each do |row|
|
13
|
-
# # ...
|
14
|
-
# end
|
15
|
-
# # or
|
16
|
-
# row = csv.shift
|
17
|
-
#
|
18
|
-
# # Writing: IO object should be open for write
|
19
|
-
# csv << row
|
20
|
-
#
|
21
|
-
# There are several specialized class methods for one-statement reading or
|
22
|
-
# writing, described in the Specialized Methods section.
|
23
|
-
#
|
24
|
-
# If a String is passed into ::new, it is internally wrapped into a StringIO
|
25
|
-
# object.
|
26
|
-
#
|
27
|
-
# `options` can be used for specifying the particular CSV flavor (column
|
28
|
-
# separators, row separators, value quoting and so on), and for data conversion,
|
29
|
-
# see Data Conversion section for the description of the latter.
|
30
|
-
#
|
31
|
-
# ## Specialized Methods
|
32
|
-
#
|
33
|
-
# ### Reading
|
34
|
-
#
|
35
|
-
# # From a file: all at once
|
36
|
-
# arr_of_rows = CSV.read("path/to/file.csv", **options)
|
37
|
-
# # iterator-style:
|
38
|
-
# CSV.foreach("path/to/file.csv", **options) do |row|
|
39
|
-
# # ...
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# # From a string
|
43
|
-
# arr_of_rows = CSV.parse("CSV,data,String", **options)
|
44
|
-
# # or
|
45
|
-
# CSV.parse("CSV,data,String", **options) do |row|
|
46
|
-
# # ...
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# ### Writing
|
50
|
-
#
|
51
|
-
# # To a file
|
52
|
-
# CSV.open("path/to/file.csv", "wb") do |csv|
|
53
|
-
# csv << ["row", "of", "CSV", "data"]
|
54
|
-
# csv << ["another", "row"]
|
55
|
-
# # ...
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# # To a String
|
59
|
-
# csv_string = CSV.generate do |csv|
|
60
|
-
# csv << ["row", "of", "CSV", "data"]
|
61
|
-
# csv << ["another", "row"]
|
62
|
-
# # ...
|
63
|
-
# end
|
64
|
-
#
|
65
|
-
# ### Shortcuts
|
66
|
-
#
|
67
|
-
# # Core extensions for converting one line
|
68
|
-
# csv_string = ["CSV", "data"].to_csv # to CSV
|
69
|
-
# csv_array = "CSV,String".parse_csv # from CSV
|
70
|
-
#
|
71
|
-
# # CSV() method
|
72
|
-
# CSV { |csv_out| csv_out << %w{my data here} } # to $stdout
|
73
|
-
# CSV(csv = "") { |csv_str| csv_str << %w{my data here} } # to a String
|
74
|
-
# CSV($stderr) { |csv_err| csv_err << %w{my data here} } # to $stderr
|
75
|
-
# CSV($stdin) { |csv_in| csv_in.each { |row| p row } } # from $stdin
|
76
|
-
#
|
77
|
-
# ## Data Conversion
|
78
|
-
#
|
79
|
-
# ### CSV with headers
|
80
|
-
#
|
81
|
-
# CSV allows to specify column names of CSV file, whether they are in data, or
|
82
|
-
# provided separately. If headers are specified, reading methods return an
|
83
|
-
# instance of CSV::Table, consisting of CSV::Row.
|
84
|
-
#
|
85
|
-
# # Headers are part of data
|
86
|
-
# data = CSV.parse(<<~ROWS, headers: true)
|
87
|
-
# Name,Department,Salary
|
88
|
-
# Bob,Engineering,1000
|
89
|
-
# Jane,Sales,2000
|
90
|
-
# John,Management,5000
|
91
|
-
# ROWS
|
92
|
-
#
|
93
|
-
# data.class #=> CSV::Table
|
94
|
-
# data.first #=> #<CSV::Row "Name":"Bob" "Department":"Engineering" "Salary":"1000">
|
95
|
-
# data.first.to_h #=> {"Name"=>"Bob", "Department"=>"Engineering", "Salary"=>"1000"}
|
96
|
-
#
|
97
|
-
# # Headers provided by developer
|
98
|
-
# data = CSV.parse('Bob,Engineering,1000', headers: %i[name department salary])
|
99
|
-
# data.first #=> #<CSV::Row name:"Bob" department:"Engineering" salary:"1000">
|
100
|
-
#
|
101
|
-
# ### Typed data reading
|
102
|
-
#
|
103
|
-
# CSV allows to provide a set of data *converters* e.g. transformations to try
|
104
|
-
# on input data. Converter could be a symbol from CSV::Converters constant's
|
105
|
-
# keys, or lambda.
|
106
|
-
#
|
107
|
-
# # Without any converters:
|
108
|
-
# CSV.parse('Bob,2018-03-01,100')
|
109
|
-
# #=> [["Bob", "2018-03-01", "100"]]
|
110
|
-
#
|
111
|
-
# # With built-in converters:
|
112
|
-
# CSV.parse('Bob,2018-03-01,100', converters: %i[numeric date])
|
113
|
-
# #=> [["Bob", #<Date: 2018-03-01>, 100]]
|
114
|
-
#
|
115
|
-
# # With custom converters:
|
116
|
-
# CSV.parse('Bob,2018-03-01,100', converters: [->(v) { Time.parse(v) rescue v }])
|
117
|
-
# #=> [["Bob", 2018-03-01 00:00:00 +0200, "100"]]
|
118
|
-
#
|
119
|
-
# ## CSV and Character Encodings (M17n or Multilingualization)
|
120
|
-
#
|
121
|
-
# This new CSV parser is m17n savvy. The parser works in the Encoding of the IO
|
122
|
-
# or String object being read from or written to. Your data is never transcoded
|
123
|
-
# (unless you ask Ruby to transcode it for you) and will literally be parsed in
|
124
|
-
# the Encoding it is in. Thus CSV will return Arrays or Rows of Strings in the
|
125
|
-
# Encoding of your data. This is accomplished by transcoding the parser itself
|
126
|
-
# into your Encoding.
|
127
|
-
#
|
128
|
-
# Some transcoding must take place, of course, to accomplish this multiencoding
|
129
|
-
# support. For example, `:col_sep`, `:row_sep`, and `:quote_char` must be
|
130
|
-
# transcoded to match your data. Hopefully this makes the entire process feel
|
131
|
-
# transparent, since CSV's defaults should just magically work for your data.
|
132
|
-
# However, you can set these values manually in the target Encoding to avoid the
|
133
|
-
# translation.
|
134
|
-
#
|
135
|
-
# It's also important to note that while all of CSV's core parser is now
|
136
|
-
# Encoding agnostic, some features are not. For example, the built-in converters
|
137
|
-
# will try to transcode data to UTF-8 before making conversions. Again, you can
|
138
|
-
# provide custom converters that are aware of your Encodings to avoid this
|
139
|
-
# translation. It's just too hard for me to support native conversions in all of
|
140
|
-
# Ruby's Encodings.
|
141
|
-
#
|
142
|
-
# Anyway, the practical side of this is simple: make sure IO and String objects
|
143
|
-
# passed into CSV have the proper Encoding set and everything should just work.
|
144
|
-
# CSV methods that allow you to open IO objects (CSV::foreach(), CSV::open(),
|
145
|
-
# CSV::read(), and CSV::readlines()) do allow you to specify the Encoding.
|
146
|
-
#
|
147
|
-
# One minor exception comes when generating CSV into a String with an Encoding
|
148
|
-
# that is not ASCII compatible. There's no existing data for CSV to use to
|
149
|
-
# prepare itself and thus you will probably need to manually specify the desired
|
150
|
-
# Encoding for most of those cases. It will try to guess using the fields in a
|
151
|
-
# row of output though, when using CSV::generate_line() or Array#to_csv().
|
152
|
-
#
|
153
|
-
# I try to point out any other Encoding issues in the documentation of methods
|
154
|
-
# as they come up.
|
155
|
-
#
|
156
|
-
# This has been tested to the best of my ability with all non-"dummy" Encodings
|
157
|
-
# Ruby ships with. However, it is brave new code and may have some bugs. Please
|
158
|
-
# feel free to [report](mailto:james@grayproductions.net) any issues you find
|
159
|
-
# with it.
|
160
|
-
#
|
161
|
-
class CSV < Object
|
162
|
-
include Enumerable
|
163
|
-
|
164
|
-
# This method is intended as the primary interface for reading CSV files. You
|
165
|
-
# pass a `path` and any `options` you wish to set for the read. Each row of file
|
166
|
-
# will be passed to the provided `block` in turn.
|
167
|
-
#
|
168
|
-
# The `options` parameter can be anything CSV::new() understands. This method
|
169
|
-
# also understands an additional `:encoding` parameter that you can use to
|
170
|
-
# specify the Encoding of the data in the file to be read. You must provide this
|
171
|
-
# unless your data is in Encoding::default_external(). CSV will use this to
|
172
|
-
# determine how to parse the data. You may provide a second Encoding to have the
|
173
|
-
# data transcoded as it is read. For example, `encoding: "UTF-32BE:UTF-8"` would
|
174
|
-
# read UTF-32BE data from the file but transcode it to UTF-8 before CSV parses
|
175
|
-
# it.
|
176
|
-
#
|
177
|
-
def self.foreach: [U] (String | IO | StringIO path, ?::Hash[Symbol, U] options) { (::Array[String?] arg0) -> void } -> void
|
178
|
-
|
179
|
-
# This constructor will wrap either a String or IO object passed in `data` for
|
180
|
-
# reading and/or writing. In addition to the CSV instance methods, several IO
|
181
|
-
# methods are delegated. (See CSV::open() for a complete list.) If you pass a
|
182
|
-
# String for `data`, you can later retrieve it (after writing to it, for
|
183
|
-
# example) with CSV.string().
|
184
|
-
#
|
185
|
-
# Note that a wrapped String will be positioned at the beginning (for reading).
|
186
|
-
# If you want it at the end (for writing), use CSV::generate(). If you want any
|
187
|
-
# other positioning, pass a preset StringIO object instead.
|
188
|
-
#
|
189
|
-
# You may set any reading and/or writing preferences in the `options` Hash.
|
190
|
-
# Available options are:
|
191
|
-
#
|
192
|
-
# **`:col_sep`**
|
193
|
-
# : The String placed between each field. This String will be transcoded into
|
194
|
-
# the data's Encoding before parsing.
|
195
|
-
# **`:row_sep`**
|
196
|
-
# : The String appended to the end of each row. This can be set to the special
|
197
|
-
# `:auto` setting, which requests that CSV automatically discover this from
|
198
|
-
# the data. Auto-discovery reads ahead in the data looking for the next
|
199
|
-
# `"\r\n"`, `"\n"`, or `"\r"` sequence. A sequence will be selected even if
|
200
|
-
# it occurs in a quoted field, assuming that you would have the same line
|
201
|
-
# endings there. If none of those sequences is found, `data` is `ARGF`,
|
202
|
-
# `STDIN`, `STDOUT`, or `STDERR`, or the stream is only available for
|
203
|
-
# output, the default `$INPUT_RECORD_SEPARATOR` (`$/`) is used. Obviously,
|
204
|
-
# discovery takes a little time. Set manually if speed is important. Also
|
205
|
-
# note that IO objects should be opened in binary mode on Windows if this
|
206
|
-
# feature will be used as the line-ending translation can cause problems
|
207
|
-
# with resetting the document position to where it was before the read
|
208
|
-
# ahead. This String will be transcoded into the data's Encoding before
|
209
|
-
# parsing.
|
210
|
-
# **`:quote_char`**
|
211
|
-
# : The character used to quote fields. This has to be a single character
|
212
|
-
# String. This is useful for application that incorrectly use `'` as the
|
213
|
-
# quote character instead of the correct `"`. CSV will always consider a
|
214
|
-
# double sequence of this character to be an escaped quote. This String will
|
215
|
-
# be transcoded into the data's Encoding before parsing.
|
216
|
-
# **`:field_size_limit`**
|
217
|
-
# : This is a maximum size CSV will read ahead looking for the closing quote
|
218
|
-
# for a field. (In truth, it reads to the first line ending beyond this
|
219
|
-
# size.) If a quote cannot be found within the limit CSV will raise a
|
220
|
-
# MalformedCSVError, assuming the data is faulty. You can use this limit to
|
221
|
-
# prevent what are effectively DoS attacks on the parser. However, this
|
222
|
-
# limit can cause a legitimate parse to fail and thus is set to `nil`, or
|
223
|
-
# off, by default.
|
224
|
-
# **`:converters`**
|
225
|
-
# : An Array of names from the Converters Hash and/or lambdas that handle
|
226
|
-
# custom conversion. A single converter doesn't have to be in an Array. All
|
227
|
-
# built-in converters try to transcode fields to UTF-8 before converting.
|
228
|
-
# The conversion will fail if the data cannot be transcoded, leaving the
|
229
|
-
# field unchanged.
|
230
|
-
# **`:unconverted_fields`**
|
231
|
-
# : If set to `true`, an unconverted_fields() method will be added to all
|
232
|
-
# returned rows (Array or CSV::Row) that will return the fields as they were
|
233
|
-
# before conversion. Note that `:headers` supplied by Array or String were
|
234
|
-
# not fields of the document and thus will have an empty Array attached.
|
235
|
-
# **`:headers`**
|
236
|
-
# : If set to `:first_row` or `true`, the initial row of the CSV file will be
|
237
|
-
# treated as a row of headers. If set to an Array, the contents will be used
|
238
|
-
# as the headers. If set to a String, the String is run through a call of
|
239
|
-
# CSV::parse_line() with the same `:col_sep`, `:row_sep`, and `:quote_char`
|
240
|
-
# as this instance to produce an Array of headers. This setting causes
|
241
|
-
# CSV#shift() to return rows as CSV::Row objects instead of Arrays and
|
242
|
-
# CSV#read() to return CSV::Table objects instead of an Array of Arrays.
|
243
|
-
# **`:return_headers`**
|
244
|
-
# : When `false`, header rows are silently swallowed. If set to `true`, header
|
245
|
-
# rows are returned in a CSV::Row object with identical headers and fields
|
246
|
-
# (save that the fields do not go through the converters).
|
247
|
-
# **`:write_headers`**
|
248
|
-
# : When `true` and `:headers` is set, a header row will be added to the
|
249
|
-
# output.
|
250
|
-
# **`:header_converters`**
|
251
|
-
# : Identical in functionality to `:converters` save that the conversions are
|
252
|
-
# only made to header rows. All built-in converters try to transcode headers
|
253
|
-
# to UTF-8 before converting. The conversion will fail if the data cannot be
|
254
|
-
# transcoded, leaving the header unchanged.
|
255
|
-
# **`:skip_blanks`**
|
256
|
-
# : When setting a `true` value, CSV will skip over any empty rows. Note that
|
257
|
-
# this setting will not skip rows that contain column separators, even if
|
258
|
-
# the rows contain no actual data. If you want to skip rows that contain
|
259
|
-
# separators but no content, consider using `:skip_lines`, or inspecting
|
260
|
-
# fields.compact.empty? on each row.
|
261
|
-
# **`:force_quotes`**
|
262
|
-
# : When setting a `true` value, CSV will quote all CSV fields it creates.
|
263
|
-
# **`:skip_lines`**
|
264
|
-
# : When setting an object responding to `match`, every line matching it is
|
265
|
-
# considered a comment and ignored during parsing. When set to a String, it
|
266
|
-
# is first converted to a Regexp. When set to `nil` no line is considered a
|
267
|
-
# comment. If the passed object does not respond to `match`, `ArgumentError`
|
268
|
-
# is thrown.
|
269
|
-
# **`:liberal_parsing`**
|
270
|
-
# : When setting a `true` value, CSV will attempt to parse input not
|
271
|
-
# conformant with RFC 4180, such as double quotes in unquoted fields.
|
272
|
-
# **`:nil_value`**
|
273
|
-
# : When set an object, any values of an empty field is replaced by the set
|
274
|
-
# object, not nil.
|
275
|
-
# **`:empty_value`**
|
276
|
-
# : When setting an object, any values of a blank string field is replaced by
|
277
|
-
# the set object.
|
278
|
-
# **`:quote_empty`**
|
279
|
-
# : When setting a `true` value, CSV will quote empty values with double
|
280
|
-
# quotes. When `false`, CSV will emit an empty string for an empty field
|
281
|
-
# value.
|
282
|
-
# **`:write_converters`**
|
283
|
-
# : Converts values on each line with the specified `Proc` object(s), which
|
284
|
-
# receive a `String` value and return a `String` or `nil` value. When an
|
285
|
-
# array is specified, each converter will be applied in order.
|
286
|
-
# **`:write_nil_value`**
|
287
|
-
# : When a `String` value, `nil` value(s) on each line will be replaced with
|
288
|
-
# the specified value.
|
289
|
-
# **`:write_empty_value`**
|
290
|
-
# : When a `String` or `nil` value, empty value(s) on each line will be
|
291
|
-
# replaced with the specified value.
|
292
|
-
# **`:strip`**
|
293
|
-
# : When setting a `true` value, CSV will strip "t\r\n\f\v" around the values.
|
294
|
-
# If you specify a string instead of `true`, CSV will strip string. The
|
295
|
-
# length of the string must be 1.
|
296
|
-
#
|
297
|
-
#
|
298
|
-
# See CSV::DEFAULT_OPTIONS for the default settings.
|
299
|
-
#
|
300
|
-
# Options cannot be overridden in the instance methods for performance reasons,
|
301
|
-
# so be sure to set what you want here.
|
302
|
-
def initialize: (?String | IO | StringIO io, ?::Hash[Symbol, untyped] options) -> void
|
303
|
-
|
304
|
-
# This method can be used to easily parse CSV out of a String. You may either
|
305
|
-
# provide a `block` which will be called with each row of the String in turn, or
|
306
|
-
# just use the returned Array of Arrays (when no `block` is given).
|
307
|
-
#
|
308
|
-
# You pass your `str` to read from, and an optional `options` containing
|
309
|
-
# anything CSV::new() understands.
|
310
|
-
#
|
311
|
-
def self.parse: (String str, ?::Hash[Symbol, untyped] options) ?{ (::Array[String?] arg0) -> void } -> ::Array[::Array[String?]]?
|
312
|
-
|
313
|
-
# This method is a shortcut for converting a single line of a CSV String into an
|
314
|
-
# Array. Note that if `line` contains multiple rows, anything beyond the first
|
315
|
-
# row is ignored.
|
316
|
-
#
|
317
|
-
# The `options` parameter can be anything CSV::new() understands.
|
318
|
-
#
|
319
|
-
def self.parse_line: (String str, ?::Hash[Symbol, untyped] options) -> ::Array[String?]?
|
320
|
-
|
321
|
-
# Slurps the remaining rows and returns an Array of Arrays.
|
322
|
-
#
|
323
|
-
# The data source must be open for reading.
|
324
|
-
#
|
325
|
-
def read: () -> ::Array[::Array[String?]]
|
326
|
-
|
327
|
-
def readline: () -> ::Array[String?]?
|
328
|
-
|
329
|
-
# Use to slurp a CSV file into an Array of Arrays. Pass the `path` to the file
|
330
|
-
# and any `options` CSV::new() understands. This method also understands an
|
331
|
-
# additional `:encoding` parameter that you can use to specify the Encoding of
|
332
|
-
# the data in the file to be read. You must provide this unless your data is in
|
333
|
-
# Encoding::default_external(). CSV will use this to determine how to parse the
|
334
|
-
# data. You may provide a second Encoding to have the data transcoded as it is
|
335
|
-
# read. For example, `encoding: "UTF-32BE:UTF-8"` would read UTF-32BE data from
|
336
|
-
# the file but transcode it to UTF-8 before CSV parses it.
|
337
|
-
#
|
338
|
-
def self.read: (String path, ?::Hash[Symbol, untyped] options) -> ::Array[::Array[String?]]
|
339
|
-
|
340
|
-
# The primary write method for wrapped Strings and IOs, `row` (an Array or
|
341
|
-
# CSV::Row) is converted to CSV and appended to the data source. When a CSV::Row
|
342
|
-
# is passed, only the row's fields() are appended to the output.
|
343
|
-
#
|
344
|
-
# The data source must be open for writing.
|
345
|
-
#
|
346
|
-
def <<: (::Array[untyped] | CSV::Row row) -> void
|
347
|
-
|
348
|
-
# This method wraps a String you provide, or an empty default String, in a CSV
|
349
|
-
# object which is passed to the provided block. You can use the block to append
|
350
|
-
# CSV rows to the String and when the block exits, the final String will be
|
351
|
-
# returned.
|
352
|
-
#
|
353
|
-
# Note that a passed String **is** modified by this method. Call dup() before
|
354
|
-
# passing if you need a new String.
|
355
|
-
#
|
356
|
-
# The `options` parameter can be anything CSV::new() understands. This method
|
357
|
-
# understands an additional `:encoding` parameter when not passed a String to
|
358
|
-
# set the base Encoding for the output. CSV needs this hint if you plan to
|
359
|
-
# output non-ASCII compatible data.
|
360
|
-
#
|
361
|
-
def self.generate: (?String str, **untyped options) { (CSV csv) -> void } -> String
|
362
|
-
end
|
363
|
-
|
364
|
-
# The options used when no overrides are given by calling code. They are:
|
365
|
-
#
|
366
|
-
# **`:col_sep`**
|
367
|
-
# : `","`
|
368
|
-
# **`:row_sep`**
|
369
|
-
# : `:auto`
|
370
|
-
# **`:quote_char`**
|
371
|
-
# : `'"'`
|
372
|
-
# **`:field_size_limit`**
|
373
|
-
# : `nil`
|
374
|
-
# **`:converters`**
|
375
|
-
# : `nil`
|
376
|
-
# **`:unconverted_fields`**
|
377
|
-
# : `nil`
|
378
|
-
# **`:headers`**
|
379
|
-
# : `false`
|
380
|
-
# **`:return_headers`**
|
381
|
-
# : `false`
|
382
|
-
# **`:header_converters`**
|
383
|
-
# : `nil`
|
384
|
-
# **`:skip_blanks`**
|
385
|
-
# : `false`
|
386
|
-
# **`:force_quotes`**
|
387
|
-
# : `false`
|
388
|
-
# **`:skip_lines`**
|
389
|
-
# : `nil`
|
390
|
-
# **`:liberal_parsing`**
|
391
|
-
# : `false`
|
392
|
-
# **`:quote_empty`**
|
393
|
-
# : `true`
|
394
|
-
#
|
395
|
-
#
|
396
|
-
CSV::DEFAULT_OPTIONS: ::Hash[untyped, untyped]
|
397
|
-
|
398
|
-
# The version of the installed library.
|
399
|
-
#
|
400
|
-
CSV::VERSION: String
|
401
|
-
|
402
|
-
# A CSV::Row is part Array and part Hash. It retains an order for the fields and
|
403
|
-
# allows duplicates just as an Array would, but also allows you to access fields
|
404
|
-
# by name just as you could if they were in a Hash.
|
405
|
-
#
|
406
|
-
# All rows returned by CSV will be constructed from this class, if header row
|
407
|
-
# processing is activated.
|
408
|
-
#
|
409
|
-
class CSV::Row < Object
|
410
|
-
include Enumerable
|
411
|
-
|
412
|
-
# If a two-element Array is provided, it is assumed to be a header and field and
|
413
|
-
# the pair is appended. A Hash works the same way with the key being the header
|
414
|
-
# and the value being the field. Anything else is assumed to be a lone field
|
415
|
-
# which is appended with a `nil` header.
|
416
|
-
#
|
417
|
-
# This method returns the row for chaining.
|
418
|
-
#
|
419
|
-
def <<: (untyped arg) -> untyped
|
420
|
-
|
421
|
-
# Returns `true` if this row contains the same headers and fields in the same
|
422
|
-
# order as `other`.
|
423
|
-
#
|
424
|
-
def ==: (untyped other) -> bool
|
425
|
-
|
426
|
-
alias [] field
|
427
|
-
|
428
|
-
# Looks up the field by the semantics described in CSV::Row.field() and assigns
|
429
|
-
# the `value`.
|
430
|
-
#
|
431
|
-
# Assigning past the end of the row with an index will set all pairs between to
|
432
|
-
# `[nil, nil]`. Assigning to an unused header appends the new pair.
|
433
|
-
#
|
434
|
-
def []=: (*untyped args) -> untyped
|
435
|
-
|
436
|
-
# Removes a pair from the row by `header` or `index`. The pair is located as
|
437
|
-
# described in CSV::Row.field(). The deleted pair is returned, or `nil` if a
|
438
|
-
# pair could not be found.
|
439
|
-
#
|
440
|
-
def delete: (untyped header_or_index, ?untyped minimum_index) -> untyped
|
441
|
-
|
442
|
-
# The provided `block` is passed a header and field for each pair in the row and
|
443
|
-
# expected to return `true` or `false`, depending on whether the pair should be
|
444
|
-
# deleted.
|
445
|
-
#
|
446
|
-
# This method returns the row for chaining.
|
447
|
-
#
|
448
|
-
# If no block is given, an Enumerator is returned.
|
449
|
-
#
|
450
|
-
def delete_if: () { (*untyped) -> untyped } -> untyped
|
451
|
-
|
452
|
-
# Extracts the nested value specified by the sequence of `index` or `header`
|
453
|
-
# objects by calling dig at each step, returning nil if any intermediate step is
|
454
|
-
# nil.
|
455
|
-
#
|
456
|
-
def dig: (untyped index_or_header, *untyped indexes) -> untyped
|
457
|
-
|
458
|
-
# Yields each pair of the row as header and field tuples (much like iterating
|
459
|
-
# over a Hash). This method returns the row for chaining.
|
460
|
-
#
|
461
|
-
# If no block is given, an Enumerator is returned.
|
462
|
-
#
|
463
|
-
# Support for Enumerable.
|
464
|
-
#
|
465
|
-
def each: () { (*untyped) -> untyped } -> untyped
|
466
|
-
|
467
|
-
alias each_pair each
|
468
|
-
|
469
|
-
def empty?: (*untyped args) { (*untyped) -> untyped } -> bool
|
470
|
-
|
471
|
-
# This method will fetch the field value by `header`. It has the same behavior
|
472
|
-
# as Hash#fetch: if there is a field with the given `header`, its value is
|
473
|
-
# returned. Otherwise, if a block is given, it is yielded the `header` and its
|
474
|
-
# result is returned; if a `default` is given as the second argument, it is
|
475
|
-
# returned; otherwise a KeyError is raised.
|
476
|
-
#
|
477
|
-
def fetch: (untyped header, *untyped varargs) ?{ (*untyped) -> untyped } -> untyped
|
478
|
-
|
479
|
-
# This method will return the field value by `header` or `index`. If a field is
|
480
|
-
# not found, `nil` is returned.
|
481
|
-
#
|
482
|
-
# When provided, `offset` ensures that a header match occurs on or later than
|
483
|
-
# the `offset` index. You can use this to find duplicate headers, without
|
484
|
-
# resorting to hard-coding exact indices.
|
485
|
-
#
|
486
|
-
def field: (untyped header_or_index, ?untyped minimum_index) -> untyped
|
487
|
-
|
488
|
-
# Returns `true` if `data` matches a field in this row, and `false` otherwise.
|
489
|
-
#
|
490
|
-
def field?: (untyped data) -> bool
|
491
|
-
|
492
|
-
# Returns `true` if this is a field row.
|
493
|
-
#
|
494
|
-
def field_row?: () -> bool
|
495
|
-
|
496
|
-
# This method accepts any number of arguments which can be headers, indices,
|
497
|
-
# Ranges of either, or two-element Arrays containing a header and offset. Each
|
498
|
-
# argument will be replaced with a field lookup as described in
|
499
|
-
# CSV::Row.field().
|
500
|
-
#
|
501
|
-
# If called with no arguments, all fields are returned.
|
502
|
-
#
|
503
|
-
def fields: (*untyped headers_and_or_indices) -> untyped
|
504
|
-
|
505
|
-
# Returns `true` if there is a field with the given `header`.
|
506
|
-
#
|
507
|
-
def has_key?: (untyped header) -> bool
|
508
|
-
|
509
|
-
alias header? has_key?
|
510
|
-
|
511
|
-
# Returns `true` if this is a header row.
|
512
|
-
#
|
513
|
-
def header_row?: () -> bool
|
514
|
-
|
515
|
-
# Returns the headers of this row.
|
516
|
-
#
|
517
|
-
def headers: () -> untyped
|
518
|
-
|
519
|
-
alias include? has_key?
|
520
|
-
|
521
|
-
# This method will return the index of a field with the provided `header`. The
|
522
|
-
# `offset` can be used to locate duplicate header names, as described in
|
523
|
-
# CSV::Row.field().
|
524
|
-
#
|
525
|
-
def index: (untyped header, ?untyped minimum_index) -> untyped
|
526
|
-
|
527
|
-
# A summary of fields, by header, in an ASCII compatible String.
|
528
|
-
#
|
529
|
-
def inspect: () -> String
|
530
|
-
|
531
|
-
alias key? has_key?
|
532
|
-
|
533
|
-
def length: (*untyped args) { (*untyped) -> untyped } -> untyped
|
534
|
-
|
535
|
-
alias member? has_key?
|
536
|
-
|
537
|
-
# A shortcut for appending multiple fields. Equivalent to:
|
538
|
-
#
|
539
|
-
# args.each { |arg| csv_row << arg }
|
540
|
-
#
|
541
|
-
# This method returns the row for chaining.
|
542
|
-
#
|
543
|
-
def push: (*untyped args) -> untyped
|
544
|
-
|
545
|
-
def size: (*untyped args) { (*untyped) -> untyped } -> untyped
|
546
|
-
|
547
|
-
alias to_ary to_a
|
548
|
-
|
549
|
-
# Returns the row as a CSV String. Headers are not used. Equivalent to:
|
550
|
-
#
|
551
|
-
# csv_row.fields.to_csv( options )
|
552
|
-
#
|
553
|
-
def to_csv: (**untyped) -> untyped
|
554
|
-
|
555
|
-
# Collapses the row into a simple Hash. Be warned that this discards field order
|
556
|
-
# and clobbers duplicate fields.
|
557
|
-
#
|
558
|
-
def to_h: () -> untyped
|
559
|
-
|
560
|
-
alias to_hash to_h
|
561
|
-
|
562
|
-
alias to_s to_csv
|
563
|
-
|
564
|
-
alias values_at fields
|
565
|
-
end
|
566
|
-
|
567
|
-
class CSV::FieldInfo < Struct
|
568
|
-
end
|
569
|
-
|
570
|
-
# The error thrown when the parser encounters illegal CSV formatting.
|
571
|
-
#
|
572
|
-
class CSV::MalformedCSVError < RuntimeError
|
573
|
-
end
|
574
|
-
|
575
|
-
# A CSV::Table is a two-dimensional data structure for representing CSV
|
576
|
-
# documents. Tables allow you to work with the data by row or column, manipulate
|
577
|
-
# the data, and even convert the results back to CSV, if needed.
|
578
|
-
#
|
579
|
-
# All tables returned by CSV will be constructed from this class, if header row
|
580
|
-
# processing is activated.
|
581
|
-
#
|
582
|
-
class CSV::Table[out Elem] < Object
|
583
|
-
include Enumerable
|
584
|
-
|
585
|
-
# Constructs a new CSV::Table from `array_of_rows`, which are expected to be
|
586
|
-
# CSV::Row objects. All rows are assumed to have the same headers.
|
587
|
-
#
|
588
|
-
# The optional `headers` parameter can be set to Array of headers. If headers
|
589
|
-
# aren't set, headers are fetched from CSV::Row objects. Otherwise, headers()
|
590
|
-
# method will return headers being set in headers argument.
|
591
|
-
#
|
592
|
-
# A CSV::Table object supports the following Array methods through delegation:
|
593
|
-
#
|
594
|
-
# * empty?()
|
595
|
-
# * length()
|
596
|
-
# * size()
|
597
|
-
#
|
598
|
-
def initialize: (untyped array_of_rows, ?headers: untyped) -> untyped
|
599
|
-
|
600
|
-
# Adds a new row to the bottom end of this table. You can provide an Array,
|
601
|
-
# which will be converted to a CSV::Row (inheriting the table's headers()), or a
|
602
|
-
# CSV::Row.
|
603
|
-
#
|
604
|
-
# This method returns the table for chaining.
|
605
|
-
#
|
606
|
-
def <<: (untyped row_or_array) -> untyped
|
607
|
-
|
608
|
-
# Returns `true` if all rows of this table ==() `other`'s rows.
|
609
|
-
#
|
610
|
-
def ==: (untyped other) -> bool
|
611
|
-
|
612
|
-
# In the default mixed mode, this method returns rows for index access and
|
613
|
-
# columns for header access. You can force the index association by first
|
614
|
-
# calling by_col!() or by_row!().
|
615
|
-
#
|
616
|
-
# Columns are returned as an Array of values. Altering that Array has no effect
|
617
|
-
# on the table.
|
618
|
-
#
|
619
|
-
def []: (untyped index_or_header) -> untyped
|
620
|
-
|
621
|
-
# In the default mixed mode, this method assigns rows for index access and
|
622
|
-
# columns for header access. You can force the index association by first
|
623
|
-
# calling by_col!() or by_row!().
|
624
|
-
#
|
625
|
-
# Rows may be set to an Array of values (which will inherit the table's
|
626
|
-
# headers()) or a CSV::Row.
|
627
|
-
#
|
628
|
-
# Columns may be set to a single value, which is copied to each row of the
|
629
|
-
# column, or an Array of values. Arrays of values are assigned to rows top to
|
630
|
-
# bottom in row major order. Excess values are ignored and if the Array does not
|
631
|
-
# have a value for each row the extra rows will receive a `nil`.
|
632
|
-
#
|
633
|
-
# Assigning to an existing column or row clobbers the data. Assigning to new
|
634
|
-
# columns creates them at the right end of the table.
|
635
|
-
#
|
636
|
-
def []=: (untyped index_or_header, untyped value) -> untyped
|
637
|
-
|
638
|
-
# Returns a duplicate table object, in column mode. This is handy for chaining
|
639
|
-
# in a single call without changing the table mode, but be aware that this
|
640
|
-
# method can consume a fair amount of memory for bigger data sets.
|
641
|
-
#
|
642
|
-
# This method returns the duplicate table for chaining. Don't chain destructive
|
643
|
-
# methods (like []=()) this way though, since you are working with a duplicate.
|
644
|
-
#
|
645
|
-
def by_col: () -> untyped
|
646
|
-
|
647
|
-
# Switches the mode of this table to column mode. All calls to indexing and
|
648
|
-
# iteration methods will work with columns until the mode is changed again.
|
649
|
-
#
|
650
|
-
# This method returns the table and is safe to chain.
|
651
|
-
#
|
652
|
-
def by_col!: () -> untyped
|
653
|
-
|
654
|
-
# Returns a duplicate table object, in mixed mode. This is handy for chaining in
|
655
|
-
# a single call without changing the table mode, but be aware that this method
|
656
|
-
# can consume a fair amount of memory for bigger data sets.
|
657
|
-
#
|
658
|
-
# This method returns the duplicate table for chaining. Don't chain destructive
|
659
|
-
# methods (like []=()) this way though, since you are working with a duplicate.
|
660
|
-
#
|
661
|
-
def by_col_or_row: () -> untyped
|
662
|
-
|
663
|
-
# Switches the mode of this table to mixed mode. All calls to indexing and
|
664
|
-
# iteration methods will use the default intelligent indexing system until the
|
665
|
-
# mode is changed again. In mixed mode an index is assumed to be a row reference
|
666
|
-
# while anything else is assumed to be column access by headers.
|
667
|
-
#
|
668
|
-
# This method returns the table and is safe to chain.
|
669
|
-
#
|
670
|
-
def by_col_or_row!: () -> untyped
|
671
|
-
|
672
|
-
# Returns a duplicate table object, in row mode. This is handy for chaining in
|
673
|
-
# a single call without changing the table mode, but be aware that this method
|
674
|
-
# can consume a fair amount of memory for bigger data sets.
|
675
|
-
#
|
676
|
-
# This method returns the duplicate table for chaining. Don't chain destructive
|
677
|
-
# methods (like []=()) this way though, since you are working with a duplicate.
|
678
|
-
#
|
679
|
-
def by_row: () -> untyped
|
680
|
-
|
681
|
-
# Switches the mode of this table to row mode. All calls to indexing and
|
682
|
-
# iteration methods will work with rows until the mode is changed again.
|
683
|
-
#
|
684
|
-
# This method returns the table and is safe to chain.
|
685
|
-
#
|
686
|
-
def by_row!: () -> untyped
|
687
|
-
|
688
|
-
# Removes and returns the indicated columns or rows. In the default mixed mode
|
689
|
-
# indices refer to rows and everything else is assumed to be a column headers.
|
690
|
-
# Use by_col!() or by_row!() to force the lookup.
|
691
|
-
#
|
692
|
-
def delete: (*untyped indexes_or_headers) -> untyped
|
693
|
-
|
694
|
-
# Removes any column or row for which the block returns `true`. In the default
|
695
|
-
# mixed mode or row mode, iteration is the standard row major walking of rows.
|
696
|
-
# In column mode, iteration will `yield` two element tuples containing the
|
697
|
-
# column name and an Array of values for that column.
|
698
|
-
#
|
699
|
-
# This method returns the table for chaining.
|
700
|
-
#
|
701
|
-
# If no block is given, an Enumerator is returned.
|
702
|
-
#
|
703
|
-
def delete_if: () { (*untyped) -> untyped } -> untyped
|
704
|
-
|
705
|
-
# Extracts the nested value specified by the sequence of `index` or `header`
|
706
|
-
# objects by calling dig at each step, returning nil if any intermediate step is
|
707
|
-
# nil.
|
708
|
-
#
|
709
|
-
def dig: (untyped index_or_header, *untyped index_or_headers) -> untyped
|
710
|
-
|
711
|
-
# In the default mixed mode or row mode, iteration is the standard row major
|
712
|
-
# walking of rows. In column mode, iteration will `yield` two element tuples
|
713
|
-
# containing the column name and an Array of values for that column.
|
714
|
-
#
|
715
|
-
# This method returns the table for chaining.
|
716
|
-
#
|
717
|
-
# If no block is given, an Enumerator is returned.
|
718
|
-
#
|
719
|
-
def each: () { (*untyped) -> untyped } -> untyped
|
720
|
-
|
721
|
-
def empty?: (*untyped args) { (*untyped) -> untyped } -> untyped
|
722
|
-
|
723
|
-
# Returns the headers for the first row of this table (assumed to match all
|
724
|
-
# other rows). The headers Array passed to CSV::Table.new is returned for empty
|
725
|
-
# tables.
|
726
|
-
#
|
727
|
-
def headers: () -> untyped
|
728
|
-
|
729
|
-
# Shows the mode and size of this table in a US-ASCII String.
|
730
|
-
#
|
731
|
-
def inspect: () -> String
|
732
|
-
|
733
|
-
def length: (*untyped args) { (*untyped) -> untyped } -> untyped
|
734
|
-
|
735
|
-
# The current access mode for indexing and iteration.
|
736
|
-
#
|
737
|
-
def mode: () -> untyped
|
738
|
-
|
739
|
-
# A shortcut for appending multiple rows. Equivalent to:
|
740
|
-
#
|
741
|
-
# rows.each { |row| self << row }
|
742
|
-
#
|
743
|
-
# This method returns the table for chaining.
|
744
|
-
#
|
745
|
-
def push: (*untyped rows) -> untyped
|
746
|
-
|
747
|
-
def size: (*untyped args) { (*untyped) -> untyped } -> untyped
|
748
|
-
|
749
|
-
# Returns the table as an Array of Arrays. Headers will be the first row, then
|
750
|
-
# all of the field rows will follow.
|
751
|
-
#
|
752
|
-
def to_a: () -> untyped
|
753
|
-
|
754
|
-
# Returns the table as a complete CSV String. Headers will be listed first, then
|
755
|
-
# all of the field rows.
|
756
|
-
#
|
757
|
-
# This method assumes you want the Table.headers(), unless you explicitly pass
|
758
|
-
# `:write_headers => false`.
|
759
|
-
#
|
760
|
-
def to_csv: (?write_headers: bool, **untyped) -> untyped
|
761
|
-
|
762
|
-
alias to_s to_csv
|
763
|
-
|
764
|
-
# The mixed mode default is to treat a list of indices as row access, returning
|
765
|
-
# the rows indicated. Anything else is considered columnar access. For columnar
|
766
|
-
# access, the return set has an Array for each row with the values indicated by
|
767
|
-
# the headers in each Array. You can force column or row mode using by_col!() or
|
768
|
-
# by_row!().
|
769
|
-
#
|
770
|
-
# You cannot mix column and row access.
|
771
|
-
#
|
772
|
-
def values_at: (*untyped indices_or_headers) -> untyped
|
773
|
-
end
|