class Rets::Metadata::Resource

Attributes

id[R]
key_field[R]
rets_classes[R]
rets_objects[R]

Public Class Methods

build(resource_fragment, metadata, logger) click to toggle source
# File lib/rets/metadata/resource.rb, line 70
def self.build(resource_fragment, metadata, logger)
  resource_id = resource_fragment["ResourceID"]
  key_field = resource_fragment["KeyField"]

  lookup_types = build_lookup_tree(resource_id, metadata)
  rets_classes = build_classes(resource_id, lookup_types, metadata)
  rets_objects = build_objects(resource_id, metadata)

  new(resource_id, key_field, rets_classes, rets_objects)
rescue MissingRetsClass => e
  logger.warn(e.message)
  nil
end
build_classes(resource_id, lookup_types, metadata) click to toggle source
# File lib/rets/metadata/resource.rb, line 58
def self.build_classes(resource_id, lookup_types, metadata)
  find_rets_classes(metadata, resource_id).map do |rets_class_fragment|
    RetsClass.build(rets_class_fragment, resource_id, lookup_types, metadata)
  end
end
build_lookup_tree(resource_id, metadata) click to toggle source
# File lib/rets/metadata/resource.rb, line 40
def self.build_lookup_tree(resource_id, metadata)
  lookup_types = Hash.new {|h, k| h[k] = Array.new }

  find_lookup_containers(metadata, resource_id).each do |lookup_container|
    lookup_container.lookups.each do |lookup_fragment|
      lookup_name = lookup_fragment["LookupName"]

      find_lookup_type_containers(metadata, resource_id, lookup_name).each do |lookup_type_container|
        lookup_type_container.lookup_types.each do |lookup_type_fragment|
          lookup_types[lookup_name] << LookupType.new(lookup_type_fragment)
        end
      end
    end
  end

  lookup_types
end
build_objects(resource_id, metadata) click to toggle source
# File lib/rets/metadata/resource.rb, line 64
def self.build_objects(resource_id, metadata)
  find_rets_objects(metadata, resource_id).map do |rets_object_fragment|
    RetsObject.build(rets_object_fragment)
  end
end
find_lookup_containers(metadata, resource_id) click to toggle source
# File lib/rets/metadata/resource.rb, line 14
def self.find_lookup_containers(metadata, resource_id)
  metadata[:lookup].select { |lc| lc.resource == resource_id }
end
find_lookup_type_containers(metadata, resource_id, lookup_name) click to toggle source
# File lib/rets/metadata/resource.rb, line 18
def self.find_lookup_type_containers(metadata, resource_id, lookup_name)
  metadata[:lookup_type].select { |ltc| ltc.resource == resource_id && ltc.lookup == lookup_name }
end
find_rets_classes(metadata, resource_id) click to toggle source
# File lib/rets/metadata/resource.rb, line 22
def self.find_rets_classes(metadata, resource_id)
  class_container = metadata[:class].detect { |c| c.resource == resource_id }
  if class_container.nil?
    raise MissingRetsClass.new("No Metadata classes for #{resource_id}")
  else
    class_container.classes
  end
end
find_rets_objects(metadata, resource_id) click to toggle source
# File lib/rets/metadata/resource.rb, line 31
def self.find_rets_objects(metadata, resource_id)
  objects = metadata[:object]
  if objects
    objects.select { |object| object.resource == resource_id }.map(&:objects).flatten
  else
    []
  end
end
new(id, key_field, rets_classes, rets_objects) click to toggle source
# File lib/rets/metadata/resource.rb, line 7
def initialize(id, key_field, rets_classes, rets_objects)
  @id = id
  @key_field = key_field
  @rets_classes = rets_classes
  @rets_objects = rets_objects
end

Public Instance Methods

find_rets_class(rets_class_name) click to toggle source
# File lib/rets/metadata/resource.rb, line 97
def find_rets_class(rets_class_name)
  rets_classes.detect {|rc| rc.name == rets_class_name }
end
print_tree(out = $stdout) click to toggle source

Print the tree to a file

out

The file to print to. Defaults to $stdout.