Class: Softlayer::Fixtures

Inherits:
Object
  • Object
show all
Defined in:
lib/softlayer/fixtures.rb

Class Method Summary collapse

Class Method Details

.find_object(type, id) ⇒ Object



21
22
23
# File 'lib/softlayer/fixtures.rb', line 21

def self.find_object(type, id)
  $database[type][id]
end

.fixtures_dirObject



25
26
27
# File 'lib/softlayer/fixtures.rb', line 25

def self.fixtures_dir
  File.join(Dir.pwd, 'test/softlayer/fixtures/')
end

.loadObject



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/softlayer/fixtures.rb', line 2

def self.load
  $database = {}
  $database[:relationships] = []
  fixtures = Dir["#{fixtures_dir}/**/*.yml"].map do |f|
    fixtures = YAML.load(ERB.new(File.read(f)).result)
    fixtures.each do |key,objects|
      objects.each do |k, object|
        # instantiate model
        model = key.to_s.constantize.new
        ## set attributes
        model = set_attributes(k, object, model)
        ## add to $database
        save_on_database(k,model)
      end
    end
  end
  set_relationships
end

.save_on_database(key, model) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/softlayer/fixtures.rb', line 29

def self.save_on_database(key, model)
  class_name = model.class.name
  if $database.has_key?(class_name)
    $database[class_name][key] = model
  else
    $database[class_name] = {}
    $database[class_name][key] = model
  end
end

.set_attributes(key, object, model) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/softlayer/fixtures.rb', line 39

def self.set_attributes(key, object, model)
  if object.has_key?('attributes')
    object['attributes'].each_pair do |attr, value|
      model.send("#{attr}=", value)
    end
  end

  if object.has_key?('relationships')
    relationships = []
    object['relationships'].each do |relation, data|
      $database[:relationships].push({:id => key, :type => model.class.name, :relationship => relation, :data => data})
    end
  end
  model
end

.set_relationshipsObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/softlayer/fixtures.rb', line 55

def self.set_relationships
  $database[:relationships].each do |row|
    relationships = []
    relation = row[:relationship]
    data = row[:data]
    model = find_object(row[:type],row[:id])
    if data.class == Array
      data.each do |d|
        relationships.push(find_object(d['type'], d['id']))
      end
      model.send("#{relation}=", relationships)
    else
      relationships.push(find_object(data['type'], data['id']))
      model.send("#{relation}=", relationships.first)
    end
  end
end