#Active Record Lite
This is an Object Relational Mapping (ORM) set of classes and modules inspired by Active Record.
What's included:
- Getter and Setter methods included in attr_accessor
- Save, Update, Insert, and Find methods in the SQLObject class
- Where method which protects from SQL injection found in the Searchable module
- belongs_to, has_many and has_one_through methods found in the Associatable module
All is packaged together with active_record_lite.rb, however you can require them individually if you wish.
How you would use it:
# First, require the library
require 'active_record_lite'
# I've included a cats database, so cats belong to humans, who have many houses and cats have one house through the human. So my examples will use these. However, if you have a different database, just include sqlite3.
# Now, have your classes inherit from SQLObject. You can set up associations here.
class Cat < SQLObject
belongs_to :human, foreign_key: :owner_id
has_one_through :apartment, :human, :apartments
finalize!
end
class Human < SQLObject
has_many :cats, foreign_key: :owner_id
has_many :apartments
finalize!
end
#let's make my cat, Debbie
debbie = Cat.new(name: "Debbie", owner_id: 1) #id of this cat is 1
debbie.save
# now we can find Debbie with either the find method, using its id
Cat.find(1)
=> #<Cat:0x007f9e07011100 @attributes={:id=>1, :name=>"Debbie", :owner_id=>1}>
#we can also find Debbie with the where method
debbie = Cat.where(name: "Debbie")
=> [#<Cat:0x007f9e04adb070 @attributes={:id=>1, :name=>"Debbie", :owner_id=>1}>]
#we can also use the associations to find the owners
debbie.human
=> [#<Human:0x004h9b03cba052 @attributes={:id=>1, :first_name=>"Eric", :last_name=>"Firth"}>]
#or even where debbie lives
debbie.apartment
=> #<Apartment:0x007f9e04a90520 @attributes={:id=>1, :address=>"censored", :city=>"Brooklyn"}>
Thanks!