Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

activesupport: Add types for to_fs #754

Merged
merged 1 commit into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions gems/activesupport/7.0/_test/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,19 @@
ActiveSupport::TimeZone['Asia/Tokyo'].to_s
Time.find_zone(Object.name)
Time.zone.now.to_fs
1234567890.50.to_fs(:currency)
1234567890.506.to_fs(:currency, precision: 3)
(1..10).to_fs(:db)
(1..10).to_fs
[1,2].to_fs(:db)
[1,2].to_fs
Time.now.to_fs(:db)
Time.now.to_fs
Date.today.to_fs(:db)
Date.today.to_fs
DateTime.today.to_fs(:db)
DateTime.today.to_fs


Array.wrap(nil)
Array.wrap([1, 2, 3])
Expand Down
239 changes: 239 additions & 0 deletions gems/activesupport/7.0/activesupport-7.0.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -138,3 +138,242 @@ end
class String
def downcase_first: () -> String
end

# active_support/core_ext/array/conversions.rb
class Array[unchecked out Elem]
# Extends <tt>Array#to_s</tt> to convert a collection of elements into a
# comma separated id list if <tt>:db</tt> argument is given as the format.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# Blog.all.to_fs(:db) # => "1,2,3"
# Blog.none.to_fs(:db) # => "null"
# [1,2].to_fs # => "[1, 2]"
def to_fs: (?Symbol format) -> String
end

# active_support/core_ext/numeric/conversions.rb
class Numeric
# \Numeric With Format
#
# Provides options for converting numbers into formatted strings.
# Options are provided for phone numbers, currency, percentage,
# precision, positional notation, file size, and pretty printing.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# ==== Options
#
# For details on which formats use which options, see ActiveSupport::NumberHelper
#
# ==== Examples
#
# Phone Numbers:
# 5551234.to_fs(:phone) # => "555-1234"
# 1235551234.to_fs(:phone) # => "123-555-1234"
# 1235551234.to_fs(:phone, area_code: true) # => "(123) 555-1234"
# 1235551234.to_fs(:phone, delimiter: ' ') # => "123 555 1234"
# 1235551234.to_fs(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555"
# 1235551234.to_fs(:phone, country_code: 1) # => "+1-123-555-1234"
# 1235551234.to_fs(:phone, country_code: 1, extension: 1343, delimiter: '.')
# # => "+1.123.555.1234 x 1343"
#
# Currency:
# 1234567890.50.to_fs(:currency) # => "$1,234,567,890.50"
# 1234567890.506.to_fs(:currency) # => "$1,234,567,890.51"
# 1234567890.506.to_fs(:currency, precision: 3) # => "$1,234,567,890.506"
# 1234567890.506.to_fs(:currency, round_mode: :down) # => "$1,234,567,890.50"
# 1234567890.506.to_fs(:currency, locale: :fr) # => "1 234 567 890,51 €"
# -1234567890.50.to_fs(:currency, negative_format: '(%u%n)')
# # => "($1,234,567,890.50)"
# 1234567890.50.to_fs(:currency, unit: '&pound;', separator: ',', delimiter: '')
# # => "&pound;1234567890,50"
# 1234567890.50.to_fs(:currency, unit: '&pound;', separator: ',', delimiter: '', format: '%n %u')
# # => "1234567890,50 &pound;"
#
# Percentage:
# 100.to_fs(:percentage) # => "100.000%"
# 100.to_fs(:percentage, precision: 0) # => "100%"
# 1000.to_fs(:percentage, delimiter: '.', separator: ',') # => "1.000,000%"
# 302.24398923423.to_fs(:percentage, precision: 5) # => "302.24399%"
# 302.24398923423.to_fs(:percentage, round_mode: :down) # => "302.243%"
# 1000.to_fs(:percentage, locale: :fr) # => "1 000,000%"
# 100.to_fs(:percentage, format: '%n %') # => "100.000 %"
#
# Delimited:
# 12345678.to_fs(:delimited) # => "12,345,678"
# 12345678.05.to_fs(:delimited) # => "12,345,678.05"
# 12345678.to_fs(:delimited, delimiter: '.') # => "12.345.678"
# 12345678.to_fs(:delimited, delimiter: ',') # => "12,345,678"
# 12345678.05.to_fs(:delimited, separator: ' ') # => "12,345,678 05"
# 12345678.05.to_fs(:delimited, locale: :fr) # => "12 345 678,05"
# 98765432.98.to_fs(:delimited, delimiter: ' ', separator: ',')
# # => "98 765 432,98"
#
# Rounded:
# 111.2345.to_fs(:rounded) # => "111.235"
# 111.2345.to_fs(:rounded, precision: 2) # => "111.23"
# 111.2345.to_fs(:rounded, precision: 2, round_mode: :up) # => "111.24"
# 13.to_fs(:rounded, precision: 5) # => "13.00000"
# 389.32314.to_fs(:rounded, precision: 0) # => "389"
# 111.2345.to_fs(:rounded, significant: true) # => "111"
# 111.2345.to_fs(:rounded, precision: 1, significant: true) # => "100"
# 13.to_fs(:rounded, precision: 5, significant: true) # => "13.000"
# 111.234.to_fs(:rounded, locale: :fr) # => "111,234"
# 13.to_fs(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true)
# # => "13"
# 389.32314.to_fs(:rounded, precision: 4, significant: true) # => "389.3"
# 1111.2345.to_fs(:rounded, precision: 2, separator: ',', delimiter: '.')
# # => "1.111,23"
#
# Human-friendly size in Bytes:
# 123.to_fs(:human_size) # => "123 Bytes"
# 1234.to_fs(:human_size) # => "1.21 KB"
# 12345.to_fs(:human_size) # => "12.1 KB"
# 1234567.to_fs(:human_size) # => "1.18 MB"
# 1234567890.to_fs(:human_size) # => "1.15 GB"
# 1234567890123.to_fs(:human_size) # => "1.12 TB"
# 1234567890123456.to_fs(:human_size) # => "1.1 PB"
# 1234567890123456789.to_fs(:human_size) # => "1.07 EB"
# 1234567.to_fs(:human_size, precision: 2) # => "1.2 MB"
# 1234567.to_fs(:human_size, precision: 2, round_mode: :up) # => "1.3 MB"
# 483989.to_fs(:human_size, precision: 2) # => "470 KB"
# 1234567.to_fs(:human_size, precision: 2, separator: ',') # => "1,2 MB"
# 1234567890123.to_fs(:human_size, precision: 5) # => "1.1228 TB"
# 524288000.to_fs(:human_size, precision: 5) # => "500 MB"
#
# Human-friendly format:
# 123.to_fs(:human) # => "123"
# 1234.to_fs(:human) # => "1.23 Thousand"
# 12345.to_fs(:human) # => "12.3 Thousand"
# 1234567.to_fs(:human) # => "1.23 Million"
# 1234567890.to_fs(:human) # => "1.23 Billion"
# 1234567890123.to_fs(:human) # => "1.23 Trillion"
# 1234567890123456.to_fs(:human) # => "1.23 Quadrillion"
# 1234567890123456789.to_fs(:human) # => "1230 Quadrillion"
# 489939.to_fs(:human, precision: 2) # => "490 Thousand"
# 489939.to_fs(:human, precision: 2, round_mode: :down) # => "480 Thousand"
# 489939.to_fs(:human, precision: 4) # => "489.9 Thousand"
# 1234567.to_fs(:human, precision: 4,
# significant: false) # => "1.2346 Million"
# 1234567.to_fs(:human, precision: 1,
# separator: ',',
# significant: false) # => "1,2 Million"
def to_fs: (?Symbol format, **untyped) -> String
end

# active_support/core_ext/range/conversions.rb
class Range[out Elem]
# Convert range to a formatted string. See RANGE_FORMATS for predefined formats.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# range = (1..100) # => 1..100
#
# range.to_s # => "1..100"
# range.to_fs(:db) # => "BETWEEN '1' AND '100'"
#
# range = (1..) # => 1..
# range.to_fs(:db) # => ">= '1'"
#
# range = (..100) # => ..100
# range.to_fs(:db) # => "<= '100'"
#
# == Adding your own range formats to to_fs
# You can add your own formats to the Range::RANGE_FORMATS hash.
# Use the format name as the hash key and a Proc instance.
#
# # config/initializers/range_formats.rb
# Range::RANGE_FORMATS[:short] = ->(start, stop) { "Between #{start.to_fs(:db)} and #{stop.to_fs(:db)}" }
def to_fs: (?Symbol format) -> String
end

# active_support/core_ext/date/conversions.rb
class Date
# Convert to a formatted string. See DATE_FORMATS for predefined formats.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
#
# date.to_fs(:db) # => "2007-11-10"
# date.to_formatted_s(:db) # => "2007-11-10"
#
# date.to_fs(:short) # => "10 Nov"
# date.to_fs(:number) # => "20071110"
# date.to_fs(:long) # => "November 10, 2007"
# date.to_fs(:long_ordinal) # => "November 10th, 2007"
# date.to_fs(:rfc822) # => "10 Nov 2007"
# date.to_fs(:iso8601) # => "2007-11-10"
#
# == Adding your own date formats to to_fs
# You can add your own formats to the Date::DATE_FORMATS hash.
# Use the format name as the hash key and either a strftime string
# or Proc instance that takes a date argument as the value.
#
# # config/initializers/date_formats.rb
# Date::DATE_FORMATS[:month_and_year] = '%B %Y'
# Date::DATE_FORMATS[:short_ordinal] = ->(date) { date.strftime("%B #{date.day.ordinalize}") }
def to_fs: (?Symbol format) -> String
end

# active_support/core_ext/time/conversions.rb
class Time
# Converts to a formatted string. See DATE_FORMATS for built-in formats.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# time = Time.now # => 2007-01-18 06:10:17 -06:00
#
# time.to_fs(:time) # => "06:10"
# time.to_formatted_s(:time) # => "06:10"
#
# time.to_fs(:db) # => "2007-01-18 06:10:17"
# time.to_fs(:number) # => "20070118061017"
# time.to_fs(:short) # => "18 Jan 06:10"
# time.to_fs(:long) # => "January 18, 2007 06:10"
# time.to_fs(:long_ordinal) # => "January 18th, 2007 06:10"
# time.to_fs(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
# time.to_fs(:rfc2822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
# time.to_fs(:iso8601) # => "2007-01-18T06:10:17-06:00"
#
# == Adding your own time formats to +to_fs+
# You can add your own formats to the Time::DATE_FORMATS hash.
# Use the format name as the hash key and either a strftime string
# or Proc instance that takes a time argument as the value.
#
# # config/initializers/time_formats.rb
# Time::DATE_FORMATS[:month_and_year] = '%B %Y'
# Time::DATE_FORMATS[:short_ordinal] = ->(time) { time.strftime("%B #{time.day.ordinalize}") }
def to_fs: (?Symbol format) -> String
end

# active_support/core_ext/date_time/conversions.rb
class DateTime
# Convert to a formatted string. See Time::DATE_FORMATS for predefined formats.
#
# This method is aliased to <tt>to_formatted_s</tt>.
#
# === Examples
# datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000
#
# datetime.to_fs(:db) # => "2007-12-04 00:00:00"
# datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00"
# datetime.to_fs(:number) # => "20071204000000"
# datetime.to_fs(:short) # => "04 Dec 00:00"
# datetime.to_fs(:long) # => "December 04, 2007 00:00"
# datetime.to_fs(:long_ordinal) # => "December 4th, 2007 00:00"
# datetime.to_fs(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
# datetime.to_fs(:iso8601) # => "2007-12-04T00:00:00+00:00"
#
# == Adding your own datetime formats to to_fs
# DateTime formats are shared with Time. You can add your own to the
# Time::DATE_FORMATS hash. Use the format name as the hash key and
# either a strftime string or Proc instance that takes a time or
# datetime argument as the value.
#
# # config/initializers/time_formats.rb
# Time::DATE_FORMATS[:month_and_year] = '%B %Y'
# Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
def to_fs: (?Symbol format) -> String
end
Loading