# File lib/rbrainz/model/relateable.rb, line 57
      def get_relations(options = {:target_type => nil, :relation_type => nil,
                                   :required_attributes => [], :direction => nil})
        Utils.check_options options, 
            :target_type, :relation_type, :required_attributes, :direction
        
        target_type   = Utils.add_namespace(options[:target_type], NS_REL_1)
        relation_type = Utils.add_namespace(options[:relation_type], NS_REL_1)
        required_attributes = 
          options[:required_attributes] ? options[:required_attributes] : []
        direction = options[:direction]
        
        # Select all relevant relations depending on the requested target type
        if target_type
          result = relations[target_type].to_a
        else
          result = relations.values.flatten
        end
        
        # Filter for direction
        result = result.find_all { |r| r.direction == direction } if direction
        
        # Filter for relation type
        result = result.find_all{ |r| r.type == relation_type } if relation_type
        
        # Filter for attributes
        required = required_attributes.map{|a| Utils.add_namespace(a, NS_REL_1)}.to_set
        result.find_all do |r|
             required.subset?( r.attributes.to_set )
        end
      end