Skip to content

Add default value for ActiveRecord attributes

License

Notifications You must be signed in to change notification settings

fnando/defaults

Repository files navigation

Defaults

Tests Gem Gem

Instalation

Add this line to your application's Gemfile:

gem "defaults"

And then execute:

$ bundle

Or install it yourself as:

$ gem install defaults

Usage

Here are the rules:

  1. Assigned attributes have precedence over default values
  2. Default values have precedence over database defaults.

Add the method call defaults to your model.

class Page < ActiveRecord::Base
  defaults title: "New page",
           body: "Put your text here"
end

Attributes will be set only if it's a new record and the attribute is blank.

Retrieve the default attribute with the default_for instance method:

@page.default_for(:title)

You can pass callables (any objects that respond to .call() or .call(record)) as attribute:

class Expiration
  def self.call
    Time.now
  end
end

class Checksum
  def self.call(user)
    Digest::SHA1.hexdigest(user.name.to_s, user.email.to_s)
  end
end

class User < ApplicationRecord
  defaults checksum: Checksum,
           expires_at: -> { Time.now }
end

You can override the default attributes as follow:

Page.default_values = {
  title: "Here's your new page",
  body: "Write your page text"
}

Maintainer

Contributors

Contributing

For more details about how to contribute, please read https://github.com/fnando/defaults/blob/main/CONTRIBUTING.md.

License

The gem is available as open source under the terms of the MIT License. A copy of the license can be found at https://github.com/fnando/defaults/blob/main/LICENSE.md.

Code of Conduct

Everyone interacting in the defaults project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

About

Add default value for ActiveRecord attributes

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages