Skip to content

emjei/less_active_record

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#Less-active Record

Simplified ActiveRecord-like plugin for learning purposes.

Installation

Add this line to your application's Gemfile:

gem 'less_active_record'

And then execute:

$ bundle

Or install it yourself as:

$ gem install less_active_record

Usage

Create a class which instances you want to persist and subclass LessActiveRecord:

class User < LessActiveRecord
  # Attributes
  attribute :first_name
  attribute :last_name

  # Validations
  validate :name_is_long_enough?

  # One of the object's usual methods
  def full_name
    "#{ first_name } #{ last_name }"
  end

  private

  # One of the validations
  def name_is_long_enough?
    full_name.length > 8
  end
end

Make use of it:

# Create a new user record (it will be persisted)
valid_user_1 = User.create(first_name: 'Tom', last_name: 'Sawyer')
valid_user_1.persisted? #=> true

# Build a new user record (it won't be persisted)
valid_user_2 = User.new(first_name: 'Huckleberry', last_name: 'Finn')
valid_user_2.new_record? #=> true

# Persist the newly built record
valid_user_2.save #=> true
valid_user_2.new_record? #=> false

# Retrieve all records
User.all #=> [#<User:0x90375c4 @first_name="Tom", @last_name="Sawyer", @id=1>, #<User:0x9037538 @first_name="Huckleberry", @last_name="Finn", @id=2>]

# Find a user by id
User.find(2) #=> #<User:0x95e721c @first_name="Huckleberry", @last_name="Finn", @id=2>

# Find a user by an attribute
User.where(last_name: 'Sawyer') #=> [#<User:0x8e56f84 @first_name="Tom", @last_name="Sawyer", @id=1>]

# Update attributes
valid_user_1.update(first_name: 'Johny') #=> true
valid_user_2.last_name = 'Finney'
valid_user_2.save #=> true

# Get the attributes
valid_user_1.attributes #=> {:first_name=>"Johny", :last_name=>"Sawyer"}
valid_user_2.attributes #=> {:first_name=>"Huckleberry", :last_name=>"Finney"}

# Destroy unneeded records
valid_user_2.destroy #=> {:first_name=>"Huckleberry", :last_name=>"Finney", :id=>2}

# Persist only valid objects
invalid_user = User.new(first_name: 'Yin', last_name: 'Yang')
invalid_user.valid? #=> false
invalid_user.save #=> false
invalid_user.persisted? #=> false

TODOs

  • Add XML and CSV support
  • Make data file location configurable
  • Redo tests (use more mocks and stubs)

About

Simplified Active Record-like plugin for learning purposes.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages