Class: OAI::Provider::ActiveRecordWrapper

Inherits:
Model
  • Object
show all
Defined in:
lib/oai/provider/model/activerecord_wrapper.rb

Overview

OAI::Provider::ActiveRecordWrapper

This class wraps an ActiveRecord model and delegates all of the record selection/retrieval to the AR model. It accepts options for specifying the update timestamp field, a timeout, and a limit. The limit option is used for doing pagination with resumption tokens. The expiration timeout is ignored, since all necessary information is encoded in the token.

Direct Known Subclasses

ActiveRecordCachingWrapper

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, options = {}) ⇒ ActiveRecordWrapper

Returns a new instance of ActiveRecordWrapper.



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 17

def initialize(model, options={})
  @model = model
  @timestamp_field = options.delete(:timestamp_field) || 'updated_at'
  @limit = options.delete(:limit)
  
  unless options.empty?
    raise ArgumentException.new(
      "Unsupported options [#{options.join(', ')}]"
    )
  end
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



15
16
17
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 15

def model
  @model
end

#timestamp_fieldObject (readonly)

Returns the value of attribute timestamp_field.



15
16
17
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 15

def timestamp_field
  @timestamp_field
end

Instance Method Details

#deleted?(record) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
65
66
67
68
69
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 62

def deleted?(record)
  if record.respond_to?(:deleted_at)
    return record.deleted_at
  elsif record.respond_to?(:deleted)
    return record.deleted
  end
  false
end

#earliestObject



29
30
31
32
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 29

def earliest
  model.find(:first, 
    :order => "#{timestamp_field} asc").send(timestamp_field)
end

#find(selector, options = {}) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 46

def find(selector, options={})
  return next_set(options[:resumption_token]) if options[:resumption_token]
  conditions = sql_conditions(options)

  if :all == selector
    total = model.count(:id, :conditions => conditions)
    if @limit && total > @limit
      select_partial(ResumptionToken.new(options.merge({:last => 0})))
    else
      model.find(:all, :conditions => conditions)
    end
  else
    model.find(selector, :conditions => conditions)
  end
end

#latestObject



34
35
36
37
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 34

def latest
  model.find(:first, 
    :order => "#{timestamp_field} desc").send(timestamp_field)
end

#setsObject

A model class is expected to provide a method Model.sets that returns all the sets the model supports. See the activerecord_provider tests for an example.



42
43
44
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 42

def sets
  model.sets if model.respond_to?(:sets)
end