class Lasagna
Constants
- DEFAULT_OPTIONS
Public Class Methods
parse(json, options = {})
click to toggle source
Parses jsonapi into a flat readable ruby hash object
Arguments:
json: (Hash) parsed jsonapi string options: (Hash) (optional) parsing params
# File lib/lasagna.rb, line 13 def parse(json, options = {}) if json.nil? || json['data'].nil? return {} end options = DEFAULT_OPTIONS.merge options inclusion = parse_inclusion(json, options) parsed = [] json['data'].each do |item| row = {} if options[:include_ids] row['id'] = item['id'] end if options[:include_types] row['type'] = item['type'] end row = row.merge item['attributes'] unless item['relationships'].nil? item['relationships'].each do |key, r| next if r['data'].nil? type = r['data']['type'] id = r['data']['id'] row[key] = inclusion[type] && inclusion[type][id] end end parsed.push row end parsed end
Private Class Methods
parse_inclusion(json, options)
click to toggle source
# File lib/lasagna.rb, line 48 def parse_inclusion(json, options) inclusion = {} included = json['included'] || [] included.each do |include| key = include['type'] inclusion[key] = {} if inclusion[key].nil? inc = {} if options[:include_ids] inc['id'] = include['id'] end if options[:include_types] inc['type'] = include['type'] end inclusion[key][include['id']] = inc.merge include['attributes'] end inclusion end