No commit activity in last 3 years
No release in over 3 years
A Rails extension for creating JSON hashes for Active Record classes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

>= 0
 Project Readme

Model JSON

This extension allows you to define JSON hashes for ActiveRecord models allowing you to easily convert your models into JSON for API or Javascript consumption.

Installation

As normal, just pop the following into your Gemfile and restart your webserver.

gem 'nifty-model-json', '~> 1.0.0', :require => 'nifty/model_json'

Configiruation

To configure your models, just use the json method as shown in the example below.

class Person < ActiveRecord::Base
  
  # Some relationships to demonstrate how things work through relationships.
  belongs_to :parent
  has_many :children, :class_name => 'Parent', :foreign_key => 'parent_id'
  
  # Return the user's full name
  def full_name
    "#{first_name} #{last_name}"
  end
  
  # Define multiple attributes to expose. These can either be attributes or
  # methods on the model.
  json :first_name, :last_name, :full_name
  
  # Specify a different name for a method or attribute
  json :age_in_years, :as => :age
  
  # Specify attributes within a group
  json :address_line1, :group => :address, :as => :line1
  json :address_line2, :group => :address, :as => :line2
  
  # Use `with_options` to avoid repeating yourself
  with_options :group => :address do |p|
    p.json :address_line3, :as => :line3
    p.json :address_line4, :as => :line4
    p.json :address_line5, :as => :line5
  end
  
  # Specify conditionals based on the contents of the model
  json :eye_colour, :if => proc { |person| person.age >= 18 }
  
  # Specify conditions based on the values passed when the JSON has
  # is generated
  json :ssn, :if => proc { |person, opts| opts[:user].is_admin? }
  
  # As well as attributes and methods, you can specify relationships. 
  # In the case of belongs_to relationships a hash will be and for 
  # has_many you will have an array of hashes.
  json :parent
  json :children
  
end

Calling

In order to access the JSON, you can use the following methods on the model itself.

person = Person.first
person.to_nifty_json_hash       #=> Returns the full hash as a Ruby hash
person.to_nifty_json            #=> Returns the JSON string for the hash

You can pass a hash to both these methods which will be passed to any :if condition which you may have specified.