class Softlayer::Fixtures

Public Class Methods

find_object(type, id) click to toggle source
# File lib/softlayer/fixtures.rb, line 21
def self.find_object(type, id)
  $database[type][id]
end
fixtures_dir() click to toggle source
# File lib/softlayer/fixtures.rb, line 25
def self.fixtures_dir
  File.join(Dir.pwd, 'test/softlayer/fixtures/')
end
load() click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_relationships() click to toggle source
# 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