Class: OAI::Provider::ActiveRecordWrapper
- 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
Instance Attribute Summary collapse
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#timestamp_field ⇒ Object
readonly
Returns the value of attribute timestamp_field.
Instance Method Summary collapse
- #deleted?(record) ⇒ Boolean
- #earliest ⇒ Object
- #find(selector, options = {}) ⇒ Object
-
#initialize(model, options = {}) ⇒ ActiveRecordWrapper
constructor
A new instance of ActiveRecordWrapper.
- #latest ⇒ Object
-
#sets ⇒ Object
A model class is expected to provide a method Model.sets that returns all the sets the model supports.
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, ={}) @model = model = .delete(:timestamp_field) || 'updated_at' @limit = .delete(:limit) unless .empty? raise ArgumentException.new( "Unsupported options [#{options.join(', ')}]" ) end end |
Instance Attribute Details
#model ⇒ Object (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_field ⇒ Object (readonly)
Returns the value of attribute timestamp_field.
15 16 17 |
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 15 def end |
Instance Method Details
#deleted?(record) ⇒ 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 |
#earliest ⇒ Object
29 30 31 32 |
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 29 def earliest model.find(:first, :order => "#{timestamp_field} asc").send() 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, ={}) return next_set([:resumption_token]) if [:resumption_token] conditions = sql_conditions() if :all == selector total = model.count(:id, :conditions => conditions) if @limit && total > @limit select_partial(ResumptionToken.new(.merge({:last => 0}))) else model.find(:all, :conditions => conditions) end else model.find(selector, :conditions => conditions) end end |
#latest ⇒ Object
34 35 36 37 |
# File 'lib/oai/provider/model/activerecord_wrapper.rb', line 34 def latest model.find(:first, :order => "#{timestamp_field} desc").send() end |
#sets ⇒ Object
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 |