Module: ReferenceList

Included in:
Teambox::Resource, Teambox::ResultSet
Defined in:
lib/teambox-client/reference_list.rb

Overview

Methods for handling references list

Instance Method Summary collapse

Instance Method Details

#generate_references(data) ⇒ Object

Generate references hash from JSON data



4
5
6
7
# File 'lib/teambox-client/reference_list.rb', line 4

def generate_references(data)
  @references = {}
  @references.tap { |h| data.each {|ref| h[ref['type'] + ref['id'].to_s] = Teambox.create_model(ref['type'], ref, self) } }
end

#get_or_make_reference(klass, data, field_id) ⇒ Object

get reference based on data. Makes new resource if reference does not exist. e.g.

get_or_make_reference('User', @data, 'user_id')


29
30
31
# File 'lib/teambox-client/reference_list.rb', line 29

def get_or_make_reference(klass, data, field_id)
  get_reference(klass, data[field_id]) || set_reference(klass, {}.merge({'id' => data[field_id]}))
end

#get_or_make_references(klass, data, field_id, field_data = nil) ⇒ Object

get a list of references based on data. Makes a new resource for each references which doesnot exist.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/teambox-client/reference_list.rb', line 34

def get_or_make_references(klass, data, field_id, field_data=nil)
  if data[field_data]
    data[field_data].map do |object|
      get_reference(klass, object['id']) ||
      set_reference(klass, object)
    end
  elsif data[field_id]
    data[field_id].map do |object_id|
      get_reference(klass, object_id) ||
      set_reference(klass, {'id' => object_id})
    end
  else
    []
  end
end

#get_reference(klass, id) ⇒ Object

Gets a referenced object. e.g:

get_reference('User', 1)


23
24
25
# File 'lib/teambox-client/reference_list.rb', line 23

def get_reference(klass, id)
  @references[klass.to_s + (id||'').to_s]
end

#set_reference(klass, resource) ⇒ Object

References resource in the current Teambox::ResultSet



10
11
12
13
14
15
16
17
18
19
# File 'lib/teambox-client/reference_list.rb', line 10

def set_reference(klass, resource)
  real_resource = if resource.is_a? Teambox::Resource
    resource
  else
    Teambox.const_get(klass).new(resource, self)
  end
  
  @references[klass.to_s + real_resource.id.to_s] = real_resource
  real_resource
end