Sha256: 233943449d4578912e24de58f94d582eb9dfdc3ac020c38c5240f83f762275cc

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

# Ivo

A library for creating immutable value objects.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'ivo'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install ivo

## Usage

### Basics

```ruby
Car = Ivo.new(:make, :model)

car = Car.new('Honda', 'Accord')

car.make    # "Honda"
car.model   # "Accord"
car.frozen? # true
```

Objects can also be instantiated with keywords:

```ruby
car = Car.with(make: 'Honda', model: 'Accord')
```

`Ivo.new` also accepts a block for additional definitions:

```ruby
Car = Ivo.new(:make, :model) do
  def to_s
    "#{make} #{model}"
  end
end
```

For one-off value objects:

```ruby
car = Ivo.(make: 'Honda', model: 'Accord')

car.make    # "Honda"
car.model   # "Accord"
car.frozen? # true
```

### Under the hood

This:

```ruby
Car = Ivo.new(:make, :model) do
  def to_s
    "#{make} #{model}"
  end
end
```

is equivalent to:

```ruby
class Car
  def self.with(make: nil, model: nil)
    new(make, model)
  end

  def initialize(make = nil, model = nil)
    @make = make
    @model = model
    freeze
  end

  attr_reader :make, :model

  def to_s
    "#{make} #{model}"
  end

  def ==(other)
    self.class == other.class && make == other.make && model == other.model
  end

  alias_method :eql?, :==

  def hash
    make.hash ^ model.hash
  end
end
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. 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](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/austinthecoder/ivo.

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ivo-0.5.0 README.md