getto-initialize_with
rubygems: getto-initialize_with
Define initialize method that require specific parameters
- purpose : for type annotation
require "getto/initialize_with"
class MyClass
include Getto::InitializeWith
initialize_with(
:time,
# assert expire is a Integer
expire: Integer,
# assert repository respond to methods
repository: [
:account_exists?,
],
)
end
class Repository
def account_exists?
true
end
end
my_class = MyClass.new(
time: :now,
expire: 10,
repository: Repository.new,
)
my_class.time # => :now
my_class.expire # => 10
my_class.repository # => Repository instance
Table of Contents
- Requirements
- Usage
- License
Requirements
- developed on ruby: 2.5.1
Usage
require "getto/initialize_with"
class MyClass
include Getto::InitializeWith
initialize_with(
:time,
expire: Integer,
repository: [
:account_exists?,
],
)
end
Errors
- missing argument
# raise "argument missing" becouse missing `repository`
my_class = MyClass.new(time: :now, expire: 10)
- unknown argument
# raise "unknown argument" because including `unknown`
my_class = MyClass.new(time: :now, expire: 10, repository: Repository.new, unknown: :argument)
- type check failed
# raise "argument type error" because `expire` is not a Integer
my_class = MyClass.new(time: :now, expire: "10", repository: Repository.new)
- object not satisfied signature
# raise "argument type error" because `repository` is not respond to [:account_exists?]
my_class = MyClass.new(time: :now, expire: 10, repository: Object.new)
Install
Add this line to your application's Gemfile:
gem 'getto-initialize_with'
And then execute:
$ bundle
Or install it yourself as:
$ gem install getto-initialize_with
License
getto/initialize_with is licensed under the MIT license.
Copyright © since 2018 shun@getto.systems