Class: Atlas::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/atlas/resource.rb

Overview

Base class for representing resources.

Direct Known Subclasses

Box, BoxProvider, BoxVersion, User

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tag, hash = {}) ⇒ Resource

Returns a new instance of Resource.



8
9
10
11
12
13
# File 'lib/atlas/resource.rb', line 8

def initialize(tag, hash = {})
  @tag = tag
  @url_builder = UrlBuilder.new tag

  hash.each { |k, v| send("#{k}=", v) if respond_to?("#{k}=") }
end

Instance Attribute Details

#tagObject

Returns the value of attribute tag.



6
7
8
# File 'lib/atlas/resource.rb', line 6

def tag
  @tag
end

#url_builderObject

Returns the value of attribute url_builder.



6
7
8
# File 'lib/atlas/resource.rb', line 6

def url_builder
  @url_builder
end

Class Method Details

.date_accessor(*args) ⇒ Object



45
46
47
48
# File 'lib/atlas/resource.rb', line 45

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

.date_writer(*args) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/atlas/resource.rb', line 36

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

Instance Method Details

#inspectObject



30
31
32
33
# File 'lib/atlas/resource.rb', line 30

def inspect
  objects = to_hash.map { |k, v| "#{k}=#{v.inspect}" }.join(' ')
  "#<#{self.class.name}:#{object_id} #{objects}>"
end

#to_hashObject



22
23
24
25
26
27
28
# File 'lib/atlas/resource.rb', line 22

def to_hash
  attrs = instance_variables.collect do |v|
    %w(@tag @url_builder).include?(v.to_s) ? next : v.to_s.sub(/^@/, '')
  end.compact!

  Hash[attrs.select { |v| respond_to? v }.map { |v| [v.to_sym, send(v)] }]
end

#update_with_response(response, except_keys = []) ⇒ Object



15
16
17
18
19
20
# File 'lib/atlas/resource.rb', line 15

def update_with_response(response, except_keys = [])
  # remove keys that shouldn't be included
  except_keys.each { |k| response.delete(k) }

  response.each { |k, v| send("#{k}=", v) if respond_to?("#{k}=") }
end