Class: OM::XML::NamedTermProxy

Inherits:
Object
  • Object
show all
Includes:
TreeNode
Defined in:
lib/om/xml/named_term_proxy.rb

Instance Attribute Summary collapse

Attributes included from TreeNode

#ancestors

Instance Method Summary collapse

Methods included from TreeNode

#add_child, #parent, #retrieve_child, #set_parent

Constructor Details

#initialize(name, proxy_pointer, terminology, opts = {}) ⇒ NamedTermProxy

Creates a Named Proxy that points to another term in the Terminology. Unlike regular terms, NamedTermProxy requires you to provide a reference to the containing Terminology. This is to ensure that it will always be able to look up the term that it’s referencing.



14
15
16
17
18
19
20
21
22
# File 'lib/om/xml/named_term_proxy.rb', line 14

def initialize(name, proxy_pointer, terminology, opts={})
  opts = {:namespace_prefix=>"oxns", :ancestors=>[], :children=>{}}.merge(opts)
  [:children, :ancestors, :index_as].each do |accessor_name|
    instance_variable_set("@#{accessor_name}", opts.fetch(accessor_name, nil) )     
  end
  @terminology = terminology
  @name = name
  @proxy_pointer = proxy_pointer
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

Any unknown method calls will be proxied to the proxied term



59
60
61
# File 'lib/om/xml/named_term_proxy.rb', line 59

def method_missing method, *args, &block 
  return self.proxied_term.send(method, *args)
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/om/xml/named_term_proxy.rb', line 3

def name
  @name
end

#proxy_pointerObject

Returns the value of attribute proxy_pointer.



3
4
5
# File 'lib/om/xml/named_term_proxy.rb', line 3

def proxy_pointer
  @proxy_pointer
end

#terminologyObject

Returns the value of attribute terminology.



3
4
5
# File 'lib/om/xml/named_term_proxy.rb', line 3

def terminology
  @terminology
end

Instance Method Details

#generate_xpath_queries!Object

do nothing – this is to prevent errors when the parent term calls generate_xpath_queries! on its children



38
39
40
# File 'lib/om/xml/named_term_proxy.rb', line 38

def generate_xpath_queries!
  # do nothing
end

#index_asObject

Always co-erce :index_as attributes into an Array



50
51
52
53
54
55
56
# File 'lib/om/xml/named_term_proxy.rb', line 50

def index_as
  if @index_as
    Array(@index_as)
  else
    self.proxied_term.index_as
  end
end

#is_root_term?Boolean

A proxy term can never serve as the root term of a Terminology. Explicitly setting is_root_term? to return false to support proxies that are at the root of the Terminology but aren’t the root term.



44
45
46
# File 'lib/om/xml/named_term_proxy.rb', line 44

def is_root_term?
  return false
end

#proxied_termObject



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/om/xml/named_term_proxy.rb', line 24

def proxied_term
  if self.parent.nil?
    pt = self.terminology.retrieve_term(*self.proxy_pointer)
  else
    pt = self.parent.retrieve_term(*self.proxy_pointer)
  end
  if pt.nil?
    raise OM::XML::Terminology::BadPointerError, "The #{name} proxy term points to #{proxy_pointer.inspect} but that term doesn't exist."
  else
    return pt
  end
end