Skip to content

urieljuliatti/csv_record

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CsvRecord

Build Status Code Climate Dependency Status

CSV Record connects Ruby classes to CSV documents database to establish an almost zero-configuration persistence layer for applications.

Installation

Add this line to your application's Gemfile:

gem 'csv_record'

And then execute:

$ bundle

Or install it yourself as:

$ gem install csv_record

Usage

require 'csv_record'

class Car
  include CsvRecord::Document

  attr_accessor :year, :make, :model, :description, :price
end

##Persistance

Car.create( # save the new record in the database
  year: 2007,
  make: 'Chevrolet',
  model: 'F450',
  description: 'ac, abs, moon',
  price: 5000.00
)

car.save # save the record in the database (either creating or changing)

car.update_attribute :year, 1999 # update a single field of an object
car.update_attributes year: 1999, model: 'E762' # update multiple fields at the same time

car.destroy # removes the record from the database

car.new_record? # checks if the record is new

##Retrieving Records can be queried through the following methods:

Car.all # retrieves all saved records

Car.find car.id # find through its id
Car.find car # find through the record

Car.find_by_model 'F450' # find dynamically with a property
Car.find_by_model_and_price 'F450', 5000.00 # find dynamically with multiple properties

Car.where year: 2007, make: 'Chevrolet', model: 'F450' # find with a multiple parameters hash

Car.count # returns the amount of records in the database

Car.first # retrieves the first record in the database
Car.last # retrieves the last record in the database

##Associations ###Belongs To A Belongs To association can be declared through the following method:

class Company
  include CsvRecord::Document

  attr_accessor :name
end

class Car
  include CsvRecord::Document

  belongs_to :company
end

company = Company.create :name => 'Chuts'

car = Car.new :model => 'F450'

car.company = company
# or
car.company_id = company.id

car.save

car.company # #<Company:0x007f9b249b24d8>

###Has Many Extending the previous example, you can use the has_many method to establish the inverse relationship:

class Company
  include CsvRecord::Document

  attr_accessor :name

  has_many :cars
end

company = Company.create :name => 'Chutz'

car.company = company
car.save

company.cars # [#<Car:0x007f9b249b24d8>]

###Has One The same as has_many but limited to one associated record.

class Company
  include CsvRecord::Document

  attr_accessor :name

  has_one :car
end

company = Company.create :name => 'Chutz'

car.save
company.car = car

company.car # #<Car:0x007f9b249b24d8>

##Callbacks ###Overview Callbacks can be used to execute code on predetermined moments.

####Usage

after_create do
  self.do_something
end

self refers to the instance you are in

###Avaiable Callbacks Here is a list with all the available callbacks, listed in the same order in which they will get called during the respective operations:

####Finding an Object

  • after_initialize
  • after_find

####Creating an Object

  • after_initialize
  • before_validation
  • after_validation
  • before_save
  • before_create
  • after_create
  • after_save

####Updating an Object

  • before_validation
  • after_validation
  • before_save
  • before_update
  • after_update
  • after_save

####Derstroying an Object

  • before_destroy
  • after_destroy

##Validations

Helpers available:

validates_presence_of: Ensures if the specified attribute(s) were filled

validates_uniqueness_of: Ensures that the specified attribute(s) are unique within the database

validate: Uses custom method(s) to validate the model

class Company
  include CsvRecord::Document

  attr_accessor :name

  validates_presence_of :name
  validates_uniqueness_of :name

  validate :my_custom_validator_method

  validate do
    self.errors.add :attribute
  end

  def my_custom_validator_method
    self.errors.add :attribute
  end
end

company = Company.create
company.save # => false

company = Company.create
company.valid? # => false
company.invalid? # => true

##Precautions CsvRecord creates a db folder in the root of your application. Be sure that it has permission to do so.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

CSV Object-relational mapping

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%