NxtInit

Create an initializer that accepts option arguments and define private readers for your arguments at the same time.

Installation

Add this line to your application's Gemfile:

gem 'nxt_init'

And then execute:

$ bundle

Or install it yourself as:

$ gem install nxt_init

Usage

class MyService
    include NxtInit
    attr_init :one, 
             two: 'has a default', 
             three: nil, # makes the attribute optional
             four: -> { "This is set on initialize: #{Time.now} - means it will not be evaluated multiple times" } 

    def call
      {
        one: one,
        two: two,
        three: three,
        four: four
      }
    end
end

my_service = MyService.new(one: 'this is required')
my_service.call

# Will output the following:
{

  one: "this is required", 
  two: "has a default", 
  three: nil, 
  four: "This is evaluated on initialize: 2019-02-04 18:10:56 +0100 - means it will not be evaluated multiple times"
} 

The attribute readers are private. If you need public accessors you have to add them yourself. That's all there is. Check out the specs for examples how we handle inheritance.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/nxt-insurance/nxt_init.

License

The gem is available as open source under the terms of the MIT License.