# StaticRecord Create models with static data provided by YAML file stored locally, is useful for models like categories to store data without have to access to database. Is based on ActiveRecord and it permits relations with native models. ## Installation Add this line to your application's Gemfile: ```ruby gem 'static_record' ``` And then execute: ```bash $ bundle ``` Or install it yourself as: ```bash $ gem install static_record ``` ## Usage You can create your own static model creating a ruby file in _app/models_. Remember name your model according to the rails convention. This is an example of static model for categories ```ruby # app/models/category.rb class Category < StaticRecord::Base end ``` Or if you have your model static data in a custom directory, you can select it. ```ruby # app/models/category.rb class Category < StaticRecord::Base file '/path/to/file.yml' end ``` Also you have to create the model data in *_db/static_*, the name of the YAML file is by default the name of the table for model. In other words, if your model name is category, you'll have to name your data file as categories.yml. You can see the rails convention [here](http://guides.rubyonrails.org/active_record_basics.html). ```yaml # db/static/categories.yml --- - id: 1 code: 84335d3f-18b8-4934-b1d2-92e2d5228684 name: Vehicles and Planes - id: 2 code: c4785f56-0a24-4405-9832-0092c7fd21d9 name: Dogs and Cats - id: 3 code: 8f0be8ed-5cf2-4170-8c96-207dc0193c9a name: Babies - id: 4 code: 2974eec1-54ad-4ed5-8f21-af8bc0d5b473 name: Technology # ... ``` Use the model like an ActiveRecord model, some functionalities doesn't work because it's a static model, but the main functionalities are the same. ```ruby # Get all categories Category.all # Find category 4 (Technology) Category.find 4 # Find category 4 (Technology) and 1 (Vehicles and Planes) Category.find 4, 1 ``` Use find_by or find_by! like ActionRecord. ```ruby # Find by attribute without throwing an error. Category.find_by name: 'Is not stored' # => [] # Find by attribute without throwing an error. Category.find_by! name: 'Is not stored' # => # StaticRecord::RecordNotFound: Couldn't find categories like name as Is not # stored # Also you can use dynamic methods. Category.find_by_name 'Is not stored' # => [] ``` Use array methods it's possible too. ```ruby Category.all Category.first Category.second Category.last Category.count # Etc... ``` ## Contributing If you want to contribute with the project, you can fork this repo and create a pull request with your features or fixes. The code is written using the ruby style guide. Read this [article](https://github.com/bbatsov/ruby-style-guide) before contribute to this project. Also you can follow me on Twitter [@molayab_](http://twitter.com/molayab_). ## License The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).