Newcomers to Rails often discover too late that not all application models have to be ORM-backed. There are a number of reasons why you might not need or want to persist your models in a data store. Perhaps you want to roll your own persistence layer. In those scenarios, you might miss some conveniences of ActiveRecord-based models. While ActiveModel has made models more consistent between ActiveRecord, Mongoid, and other ORMs, it doesn’t cover every ActiveRecord feature. Bridging this gap is the inspiration behind ActiveAttr, a project from Chris Griego.

ActiveAttr lets you define attributes:

class Person
  include ActiveAttr::Attributes

  attribute :first_name
  attribute :last_name
end

person = Person.new
person.first_name = "Chris"
person.last_name = "Griego"
person.attributes #=> {"first_name"=>"Chris", "last_name"=>"Griego"}

… with defaults

class Person
  include ActiveAttr::Attributes

  attribute :first_name, :default => "John"
  attribute :last_name, :default => "Doe"
end

person = Person.new
person.first_name #=> "John"
person.last_name #=> "Doe"

… even specify assignment security:

class Person
  include ActiveAttr::MassAssignmentSecurity
  attr_accessor :first_name, :last_name
  attr_protected :last_name
end

person = Person.new(:first_name => "Chris", :last_name => "Griego")
person.first_name #=> "Chris"
person.last_name #=> nil

ActiveAttr also supports logging, typecasting, and more. Check out the source on GitHub for more info or to contribute.


Have comments? Send a tweet to @TheChangelog on Twitter.

Subscribe to The Changelog Weekly – our weekly email covering everything that hits our open source radar.