Sha256: 84671cb02842ddc3b6e90b0b77225ce2de519fad7e5045f73e87c8c8afbb1de2

Contents?: true

Size: 1.46 KB

Versions: 24

Compression:

Stored size: 1.46 KB

Contents

require 'yao/resources/restfully_accessible'
require 'time'

module Yao::Resources
  class Base
    def self.friendly_attributes(*names)
      names.map(&:to_s).each do |name|
        define_method(name) do
          if !@data.key?(name) && id
            @data = self.class.get(id)
          end
          self[name]
        end
      end
    end

    def self.map_attribute_to_attribute(k_and_v)
      as_json, as_method = *k_and_v.to_a.first.map(&:to_s)
      define_method(as_method) do
        self[as_json]
      end
    end

    def self.map_attribute_to_resource(k_and_v)
      _name, klass = *k_and_v.to_a.first
      name = _name.to_s
      define_method(name) do
        self[[name, klass].join("__")] ||= klass.new(self[name])
      end
    end

    def self.map_attribute_to_resources(k_and_v)
      _name, klass = *k_and_v.to_a.first
      name = _name.to_s
      define_method(name) do
        self[[name, klass].join("__")] ||= self[name].map {|d|
          klass.new(d)
        }
      end
    end

    def initialize(data_via_json)
      @data = data_via_json
    end

    def [](name)
      @data[name]
    end

    def []=(name, value)
      @data[name] = value
    end

    def id
      self["id"]
    end

    def created
      if date = self["created"] || self["created_at"]
        Time.parse(date)
      end
    end

    def updated
      if date = self["updated"] || self["updated_at"]
        Time.parse(date)
      end
    end

    extend RestfullyAccessible
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
yao-0.4.1 lib/yao/resources/base.rb
yao-0.4.0 lib/yao/resources/base.rb
yao-0.3.8 lib/yao/resources/base.rb
yao-0.3.7 lib/yao/resources/base.rb