Class: TaliaCore::Oai::ActiveSourceOaiAdapter

Inherits:
Object
  • Object
show all
Extended by:
OaiAdapterClassMethods
Defined in:
lib/talia_core/oai/active_source_oai_adapter.rb

Overview

Wraps an ActiveSource record so that it provides the accessor methods for DublinCore. In a nutshell, this makes the object look like an ActiveRecord with “fields” like “title” or “subject”. The OAI provider can access those fields to automatically read the metatdata from the records.

Wrapping an ActiveSource

Use ActiveSourceOaiAdapter.get_wrapper_for(record) to create a new wrapper object for a given ActiveSource. Usually the ActiveSourceModel will do this automatically.

Extending the adapter

If you need more specific functionality, you may subclass the adapter or write your own adapter class that includes OaiAdapterClassMethods

In both cases you’ll get the #namespace_field class method - this will allow you to define accessors to properties in the following way:

# This maps the dcns:title and dcns:foo properties on the original 
# source to the #title and #foo accessors
namespace_field :dcns, :title, :foo

Class Method Summary collapse

Instance Method Summary collapse

Methods included from OaiAdapterClassMethods

namespaced_field

Constructor Details

#initialize(record) ⇒ ActiveSourceOaiAdapter

Returns a new instance of ActiveSourceOaiAdapter.



51
52
53
54
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 51

def initialize(record)
  assit_kind_of(ActiveSource, record)
  @record = record
end

Class Method Details

.get_wrapper_for(records) ⇒ Object

Tries to instanciate a wrapper object for the record, using the wrapper class that corresponds to the given record’s class



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 90

def self.get_wrapper_for(records)
  if(records.is_a?(ActiveSource))
    self.new(record)
  elsif(records.respond_to?(:collect))
    records.collect { |rec| self.new(rec) }
  elsif(records.nil?)
    nil
  else
    raise(ArgumentError, "Don't know how to wrap #{records.inspect}")
  end
end

Instance Method Details

#created_atObject

Timestamp for the record



79
80
81
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 79

def created_at
  @record.created_at
end

#creatorObject

Get the author/creator



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 57

def creator
  @record[N::DCNS.creator].collect do |creator|
    if(creator.is_a?(TaliaCore::ActiveSource))
      author = ''
      author_name = creator.hyper::author_name.first
      author << author_name << ' ' if(author_name)
      author_surname = creator.hyper::author_surname.first || ''
      author << author_surname if(author_surname)
      author = "No lookup. Author should be at #{creator.uri}" if(author == '')
      author
    else
      creator
    end
  end
end

#idObject

Id for the record



84
85
86
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 84

def id
  @record.id
end

#identifierObject

Identifier for the resource



74
75
76
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 74

def identifier
  @record.uri.to_s
end

#typeObject

Type information. Base class is not terribly useful, but needed to overwrite default #type method



47
48
49
# File 'lib/talia_core/oai/active_source_oai_adapter.rb', line 47

def type
  ''
end