Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hardpixel/active-delegate

Delegate ActiveRecord model attributes and associations.
https://github.com/hardpixel/active-delegate

activerecord delegate rails ruby-gem

Last synced: 3 months ago
JSON representation

Delegate ActiveRecord model attributes and associations.

Awesome Lists containing this project

README

        

# ActiveDelegate

Stores and retrieves delegatable data through attributes on a ActiveRecord class, with support for translatable attributes.

[![Gem Version](https://badge.fury.io/rb/active_delegate.svg)](https://badge.fury.io/rb/active_delegate)
[![Build Status](https://travis-ci.org/hardpixel/active-delegate.svg?branch=master)](https://travis-ci.org/hardpixel/active-delegate)
[![Code Climate](https://codeclimate.com/github/hardpixel/active-delegate/badges/gpa.png)](https://codeclimate.com/github/hardpixel/active-delegate)

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'active_delegate'
```

And then execute:

$ bundle

Or install it yourself as:

$ gem install active_delegate

## Usage

```ruby
class Address < ActiveRecord::Base
# columns: :city, :district
end

class Person < ActiveRecord::Base
# columns: :name, email, :phone, :address_id

include ActiveDelegate

belongs_to :address
has_one :user
has_many :books

delegate_attributes to: :address, prefix: true, localized: true
end

params = {
name: 'John',
email: '[email protected]',
address_city: 'Athens',
address_city_el: 'Αθήνα',
address_district: 'Attiki',
address_district_el: 'Αττική'
}

person = Person.new(params)

person.name # 'John'
person.address_city # 'Athens'
person.address.city # 'Athens'
person.address_city_el # 'Αθήνα'
person.address.city_el # 'Αθήνα'
person.address_district # 'Attiki'
person.address.district # 'Attiki'
person.address_district_el # 'Αττική'
person.address.district_el # 'Αττική'

class User < ActiveRecord::Base
# columns: :login, :password, :person_id

include ActiveDelegate

belongs_to :person, autosave: true

delegate_associations to: :person
delegate_attributes to: :person
end

params = {
login: 'jonian',
password: 'passwd',
name: 'John',
email: '[email protected]'
}

user = User.new(params)

user.name # 'John'
user.login # 'jonian'
user.user # @user
user.books # []

user.email # '[email protected]'
user.email? # true
user.email_changed? # true
user.email_was # nil
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` 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`.

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/hardpixel/active-delegate.

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).