Rubysierung
Rubysierung is an implementation of Soft Typing in Ruby
Installation
Add this line to your application's Gemfile:
# ruby >= 2.1.0
# You can only use Rubysierung in a file context, see issue #5 and #7.
gem 'rubysierung'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rubysierung
Usage
Have a look at all available Types
require 'rubysierung'
# define a custom types
class Strict::CustomTyp;end
class CustomTyp;end
class Strict::CustomTypX;end
class CustomTypX;end
class Example
extend Rubysierung
# if the type doesnt match Rubisierung will raise an Error messages
# add custom Types
# if you don't specify a Strict Type the standard type is being set for it
# [TypeClass, StandardConversionMethodAsSymbol, StrictConversionMethodSymbol]
@__add_type[CustomType, :to_s, :to_str]
@__add_type[CustomTypeX, :to_s]
# define foo to respond to :to_s and bar to :to_i
def one(foo: String, bar: Integer)
[foo, ]
end
# you can still define empty/default parameters
def self.two(foo:, bar: 'hallo World')
[foo, ]
end
# use a custom type
def self.three(foo:, bar: CustomType)
[foo, ]
end
# define foo to respond to :to_str (strict type)
def self.four(foo: Strict::String, bar: Integer)
[foo, ]
end
# with default parameters
def self.five(foo: String||'I am a default :)', bar: Integer||42)
[foo, ]
end
end
what it would look like normally
def one(foo:, bar:)
sFoo = foo.to_s
iBar = .to_i
[sFoo, iBar]
end
Other Typing implementations
(contracts.ruby)https://github.com/egonSchiele/contracts.ruby[https://github.com/hannestyden/typo/blob/master/typo.rb]
Contributing
- Fork it ( https://github.com/doodzik/rubysierung/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request