-
Notifications
You must be signed in to change notification settings - Fork 626
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1054 from DalenW/rbs
RBS
- Loading branch information
Showing
18 changed files
with
1,956 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,3 +21,5 @@ doc/ | |
|
||
# Spec artifacts | ||
/coverage | ||
.gem_rbs_collection | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
--- | ||
sources: | ||
- type: git | ||
name: ruby/gem_rbs_collection | ||
revision: d0d7aeed98fa74427b30b336fc402ea86d526f35 | ||
remote: https://github.com/ruby/gem_rbs_collection.git | ||
repo_dir: gems | ||
path: ".gem_rbs_collection" | ||
gems: | ||
- name: cgi | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: concurrent-ruby | ||
version: '1.1' | ||
source: | ||
type: git | ||
name: ruby/gem_rbs_collection | ||
revision: d0d7aeed98fa74427b30b336fc402ea86d526f35 | ||
remote: https://github.com/ruby/gem_rbs_collection.git | ||
repo_dir: gems | ||
- name: i18n | ||
version: '1.10' | ||
source: | ||
type: git | ||
name: ruby/gem_rbs_collection | ||
revision: d0d7aeed98fa74427b30b336fc402ea86d526f35 | ||
remote: https://github.com/ruby/gem_rbs_collection.git | ||
repo_dir: gems | ||
- name: logger | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: monitor | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: optparse | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: tempfile | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: uri | ||
version: '0' | ||
source: | ||
type: stdlib | ||
- name: yard | ||
version: '0.9' | ||
source: | ||
type: git | ||
name: ruby/gem_rbs_collection | ||
revision: d0d7aeed98fa74427b30b336fc402ea86d526f35 | ||
remote: https://github.com/ruby/gem_rbs_collection.git | ||
repo_dir: gems | ||
gemfile_lock_path: Gemfile.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# Download sources | ||
sources: | ||
- type: git | ||
name: ruby/gem_rbs_collection | ||
remote: https://github.com/ruby/gem_rbs_collection.git | ||
revision: main | ||
repo_dir: gems | ||
|
||
# You can specify local directories as sources also. | ||
# - type: local | ||
# path: path/to/your/local/repository | ||
|
||
# A directory to install the downloaded RBSs | ||
path: .gem_rbs_collection | ||
|
||
gems: | ||
# Skip loading rbs gem's RBS. | ||
# It's unnecessary if you don't use rbs as a library. | ||
- name: rbs | ||
ignore: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
class Money | ||
# Provides classes that aid in the ability of exchange one currency with | ||
# another. | ||
module Bank | ||
# The lowest Money::Bank error class. | ||
# All Money::Bank errors should inherit from it. | ||
class Error < StandardError | ||
end | ||
|
||
# Raised when the bank doesn't know about the conversion rate | ||
# for specified currencies. | ||
class UnknownRate < Error | ||
end | ||
|
||
# Money::Bank::Base is the basic interface for creating a money exchange | ||
# object, also called Bank. | ||
# | ||
# A Bank is responsible for storing exchange rates, take a Money object as | ||
# input and returns the corresponding Money object converted into an other | ||
# currency. | ||
# | ||
# This class exists for aiding in the creating of other classes to exchange | ||
# money between different currencies. When creating a subclass you will | ||
# need to implement the following methods to exchange money between | ||
# currencies: | ||
# | ||
# - #exchange_with(Money) #=> Money | ||
# | ||
# See Money::Bank::VariableExchange for a real example. | ||
# | ||
# Also, you can extend +Money::Bank::VariableExchange+ instead of | ||
# +Money::Bank::Base+ if your bank implementation needs to store rates | ||
# internally. | ||
# | ||
# @abstract Subclass and override +#exchange_with+ to implement a custom | ||
# +Money::Bank+ class. You can also override +#setup+ instead of | ||
# +#initialize+ to setup initial variables, etc. | ||
class Base | ||
@singleton: Money::Bank::Base | ||
|
||
# Returns the singleton instance of the Base bank. | ||
# | ||
# @return [Money::Bank::Base] | ||
def self.instance: () -> Money::Bank::Base | ||
|
||
# The rounding method to use when exchanging rates. | ||
# | ||
# @return [Proc] | ||
attr_reader rounding_method: untyped | ||
|
||
# Initializes a new +Money::Bank::Base+ object. An optional block can be | ||
# passed to dictate the rounding method that +#exchange_with+ can use. | ||
# | ||
# @yield [n] Optional block to use when rounding after exchanging one | ||
# currency for another. | ||
# @yieldparam [Float] n The resulting float after exchanging one currency | ||
# for another. | ||
# @yieldreturn [Integer] | ||
# | ||
# @return [Money::Bank::Base] | ||
# | ||
# @example | ||
# Money::Bank::Base.new #=> #<Money::Bank::Base @rounding_method=nil> | ||
# Money::Bank::Base.new {|n| | ||
# n.floor | ||
# } #=> #<Money::Bank::Base @round_method=#<Proc>> | ||
def initialize: () { () -> untyped } -> void | ||
|
||
# Called after initialize. Subclasses can use this method to setup | ||
# variables, etc that they normally would in +#initialize+. | ||
# | ||
# @abstract Subclass and override +#setup+ to implement a custom | ||
# +Money::Bank+ class. | ||
# | ||
# @return [self] | ||
def setup: () -> nil | ||
|
||
# Exchanges the given +Money+ object to a new +Money+ object in | ||
# +to_currency+. | ||
# | ||
# @abstract Subclass and override +#exchange_with+ to implement a custom | ||
# +Money::Bank+ class. | ||
# | ||
# @raise NotImplementedError | ||
# | ||
# @param [Money] from The +Money+ object to exchange from. | ||
# @param [Money::Currency, String, Symbol] to_currency The currency | ||
# string or object to exchange to. | ||
# @yield [n] Optional block to use to round the result after making | ||
# the exchange. | ||
# @yieldparam [Float] n The result after exchanging from one currency to | ||
# the other. | ||
# @yieldreturn [Integer] | ||
# | ||
# @return [Money] | ||
def exchange_with: (Money from, (Money::Currency | string | Symbol) to_currency) { () -> int } -> Money | ||
|
||
# Given two currency strings or object, checks whether they're both the | ||
# same currency. Return +true+ if the currencies are the same, +false+ | ||
# otherwise. | ||
# | ||
# @param [Money::Currency, String, Symbol] currency1 The first currency | ||
# to compare. | ||
# @param [Money::Currency, String, Symbol] currency2 The second currency | ||
# to compare. | ||
# | ||
# @return [Boolean] | ||
# | ||
# @example | ||
# same_currency?("usd", "USD") #=> true | ||
# same_currency?("usd", "EUR") #=> false | ||
# same_currency?("usd", Currency.new("USD")) #=> true | ||
# same_currency?("usd", "USD") #=> true | ||
def same_currency?: ((Money::Currency | string | Symbol) currency1, (Money::Currency | string | Symbol) currency2) -> bool | ||
end | ||
end | ||
end |
Oops, something went wrong.