lib/irrc/subquery.rb in irrc-0.1.0 vs lib/irrc/subquery.rb in irrc-0.2.0

- old
+ new

@@ -2,23 +2,66 @@ module Subquery # Public: Generate a child query to resolve IRR / Whois object recursively. # # object - IRR / Whois object to extract. (eg: as-set, route-set, aut-num object) def fork(object) - Query.new(object, source: sources, protocol: protocols).tap {|q| + Query.new(object, source: @sources, protocol: @protocols).tap {|q| q.parent = self - } + }.tap {|c| self.add_child c } end # Public: Returns the parent (associated) Query object, which is probably as-set. def parent - @_parent + @parent end # Public: Set a parent (associated) Query object, which is probably as-set. # # parent - Parent Query object. - def parent=(parent) - @_parent = parent + def parent=(query) + @parent = query + end + + # Public: Returns child Query objects + def children + @children ||= [] + end + + # Public: Add a child Query object + def add_child(query) + children << query + end + + # Public: Delete a child Query object + def delete_child(query) + children.delete(query) + end + + # Public: Returns the IRR object to query including those from ancestor query objects. + # + # Returns: Array of String. + def ancestor_objects + @_ancestor_objects ||= Array(parent && parent.ancestor_objects) << object + end + + # Public: Returns the root IRR object of the nested query + # + # Returns: String. + def root + @_root ||= if parent + parent.root + else + self + end + end + + # Public: Returns true if the query is root. + def root? + root == self + end + + # Public: Returns true if object is listed in ancestor IRR objects. + def ancestor_object?(object) + ancestor_objects.include?(object) end end end