FrozenRecord

Build Status Code Climate Coverage Status Gem Version

ActiveRecord-like interface for read only access to YAML static data.

Installation

Add this line to your application's Gemfile:

gem 'frozen_record'

And then execute:

$ bundle

Or install it yourself as:

$ gem install frozen_record

Models definition

Just like with ActiveRecord, your models need to inherits from FrozenRecord::Base:

class Country < FrozenRecord::Base
end

But you also have to specify in which directory your data files are located. You can either do it globaly

FrozenRecord::Base.base_path = '/path/to/some/directory'

Or per model:

class Country < FrozenRecord::Base
  self.base_path = '/path/to/some/directory'
end

Query interface

FrozenRecord aim to replicate only modern ActiveRecord querying interface, and only the non "string typed" ones.

e.g

# Supported query interfaces
Country.
  where(region: 'Europe').
  where.not(language: 'English').
  order(id: :desc).
  limit(10).
  offset(2).
  pluck(:name)

# Non supported query interfaces
Country.
  where('region = "Europe" AND language != "English"').
  order('id DESC')

Scopes

While the scope :symbol, lambda syntax is not supported, the class methods way is:

class Country
  def self.republics
    where(king: nil)
  end

  def self.part_of_nato
    where(nato: true)
  end
end

Country.republics.part_of_nato.order(id: :desc)

Supported query methods

  • where
  • where.not
  • order
  • limit
  • offset

Supported finder methods

  • find
  • first
  • last
  • to_a
  • exists?

Supported calculation methods

  • count
  • pluck
  • minimum
  • minimum
  • sum
  • average

Contributors

FrozenRecord is a from scratch reimplementation of a Shopify project from 2007 named YamlRecord. So thanks to: