Module: ActiveFedora::ServiceDefinitions::ClassMethods

Defined in:
lib/active_fedora/service_definitions.rb

Instance Method Summary collapse

Instance Method Details

#add_method!(sdef_pid, method_name) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/active_fedora/service_definitions.rb', line 74

def add_method!(sdef_pid, method_name)
  # find method_key
  method_key = ServiceDefinitions.lookup_method(sdef_pid, method_name)
  if method_key and not method_defined? method_key
    define_method(method_key) { |*args, &block|
        opts = args[0] || {}
        opts = opts.merge({:pid => pid, :sdef => sdef_pid, :method => method_name })
      # dispatch to the dissemination method on restAPI client
        ActiveFedora::Base.connection_for_pid(pid).dissemination opts, &block
    }
  end
end

#add_sdef_methods!(sdef_pid) ⇒ Object

iterate over SDef pointers, identify symbols in yaml map inject methods by symbol key



60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/active_fedora/service_definitions.rb', line 60

def add_sdef_methods! sdef_pid
  unless sdef_pid == "fedora-system:3"
    content = ActiveFedora::Base.connection_for_pid(sdef_pid).datastream_dissemination(:pid=>sdef_pid, :dsid=>"METHODMAP")
    method_map = Nokogiri::XML.parse(content)
    methods = method_map.xpath('//fmm:Method').collect { |method|
      method["operationName"]
    }
  else
    methods = ["viewObjectProfile","viewMethodIndex","viewItemIndex","viewDublinCore"]
  end
  methods.each { |method|
    add_method!(sdef_pid, method)
  }
end

#has_service_definition(sdef_uri) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/active_fedora/service_definitions.rb', line 51

def has_service_definition sdef_uri
  sdef_pid = sdef_uri.split('/')[-1]
  unless sdef_pids.include? sdef_pid
    self.add_sdef_methods! sdef_pid
    sdef_pids << sdef_pid
  end
end

#sdef_pidsObject



48
49
50
# File 'lib/active_fedora/service_definitions.rb', line 48

def sdef_pids
  @sdef_pids ||= []
end