Sha256: b7b441c963843deaef98f391b91eb91cd24041fcd79794b5647ea6fe7b9b005c

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Bitstampede
  module Entities
    class Base
      def self.setup_readers
        keys.each {|k| attr_reader k.to_sym }
      end

      def self.keys
        self.mappings.keys
      end

      def initialize(hash)
        check_for_errors(hash)
        map_instance_variables(hash)
      end

      def inspect
        inspect_string = "#<#{self.class}:#{self.object_id} "
        self.class.keys.each do |key|
          inspect_string << "#{key}: #{send(key).inspect} "
        end
        inspect_string << " >"
        inspect_string
      end

      def self.map_time
        ->(val) { Time.parse(val) }
      end

      def self.map_int
        ->(val) { val.to_i }
      end

      def self.map_decimal
        ->(val) { BigDecimal(val) }
      end

      private
      def map_instance_variables(hash)
        self.class.keys.each do |key|
          instance_variable_set("@#{key}", self.class.mappings[key].call(hash[key.to_s].to_s))
        end
      end

      def check_for_errors(hash)
        if hash.keys.include?("error")
          raise Bitstampede::StandardError.new(hash["error"]["__all__"].join(".  "))
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bitstampede-0.1.6 lib/bitstampede/entities/base.rb