cesarferreira/monzo-cli

View on GitHub
lib/api/mondo/resource.rb

Summary

Maintainability
A
45 mins
Test Coverage
module Mondo
  class Resource

    attr_accessor :client, :raw_data

    def initialize(hash={}, client)
      self.raw_data = hash
      self.client = client
      hash.each { |key,val| send("#{key}=", val) if respond_to?("#{key}=") }
      self.to_s
    end

    def to_s
      "#<#{self.class} #{raw_data}>"
    end

    def inspect
      self.to_s
    end

    class << self
      def date_writer(*args)
        args.each do |attr|
          define_method("#{attr.to_s}=".to_sym) do |date|
            date = (date.is_a?(String) ? DateTime.parse(date) : date) rescue date
            instance_variable_set("@#{attr}", date)
          end
        end
      end

      def date_accessor(*args)
        attr_reader(*args)
        date_writer(*args)
      end

      def boolean_accessor(*attrs)
        attr_accessor(*attrs)
        alias_question(attrs)
      end

      def boolean_reader(*attrs)
        attr_reader(*attrs)
        alias_question(attrs)
      end

      private
      def alias_question(attrs)
        attrs.each{ |attr| define_method("#{attr}?"){ send(attr) || false } }
      end
    end
  end
end