Sha256: 0f21058e47c1b04837cd857dc06f1507b4c749a41a3aeadb047c28caa29ffabe

Contents?: true

Size: 901 Bytes

Versions: 1

Compression:

Stored size: 901 Bytes

Contents

module Goodreads
  class Record
    # Initialize the record and set its data if present
    def initialize(data=nil)
      @fields = {}
      setup(data) unless data.nil?
    end
    
    # Set or override the existing field value
    def []=(key, value)
      @fields[key] = value
    end
    
    # Get the field value by hash key
    def [](key)
      @fields[key]
    end
    
    # Load data into the record
    def setup(data)
      data.each_pair do |key, value|
        case value
          when Hash
            @fields[key] = Record.new(value)
          when Array
            @fields[key] = value.collect { |v| Record.new(v) }
          when NilClass
            @fields[key] = nil
          else
            @fields[key] = value
        end
        (class << self; self; end).class_eval do
          define_method(key.to_sym) { return @fields[key] }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
goodreads-0.1.0 lib/goodreads/record.rb