Class: Inbox::RestfulModelCollection
- Inherits:
-
Object
- Object
- Inbox::RestfulModelCollection
- Defined in:
- lib/restful_model_collection.rb
Instance Attribute Summary collapse
-
#filters ⇒ Object
Returns the value of attribute filters.
Instance Method Summary collapse
- #all ⇒ Object
- #build(args) ⇒ Object
- #delete(item_or_id) ⇒ Object
- #each ⇒ Object
- #find(id) ⇒ Object
- #first ⇒ Object
- #inflate_collection(items = []) ⇒ Object
-
#initialize(model_class, api, namespace_id, filters = {}) ⇒ RestfulModelCollection
constructor
A new instance of RestfulModelCollection.
- #range(offset = 0, limit = 1000) ⇒ Object
- #where(filters) ⇒ Object
Constructor Details
#initialize(model_class, api, namespace_id, filters = {}) ⇒ RestfulModelCollection
Returns a new instance of RestfulModelCollection.
8 9 10 11 12 13 14 |
# File 'lib/restful_model_collection.rb', line 8 def initialize(model_class, api, namespace_id, filters = {}) raise StandardError.new unless api.class <= Inbox::API @model_class = model_class @filters = filters @namespace_id = namespace_id @_api = api end |
Instance Attribute Details
#filters ⇒ Object
Returns the value of attribute filters.
6 7 8 |
# File 'lib/restful_model_collection.rb', line 6 def filters @filters end |
Instance Method Details
#all ⇒ Object
34 35 36 |
# File 'lib/restful_model_collection.rb', line 34 def all range(0, Float::INFINITY) end |
#build(args) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/restful_model_collection.rb', line 72 def build(args) for key in args.keys args[key.to_s] = args[key] end model = @model_class.new(@_api, @namespace_id) model.inflate(args) model end |
#delete(item_or_id) ⇒ Object
62 63 64 65 |
# File 'lib/restful_model_collection.rb', line 62 def delete(item_or_id) item_or_id = item_or_id.id if item_or_id.is_a?(RestfulModel) RestClient.delete("#{url}/#{id}") end |
#each ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/restful_model_collection.rb', line 16 def each offset = 0 chunk_size = 1000 finished = false while (!finished) do results = get_model_collection(offset, chunk_size) results.each { |item| yield item } offset += results.length finished = results.length < chunk_size end end |
#find(id) ⇒ Object
67 68 69 70 |
# File 'lib/restful_model_collection.rb', line 67 def find(id) return nil unless id get_model(id) end |
#first ⇒ Object
30 31 32 |
# File 'lib/restful_model_collection.rb', line 30 def first get_model_collection.first end |
#inflate_collection(items = []) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/restful_model_collection.rb', line 81 def inflate_collection(items = []) models = [] return unless items.is_a?(Array) items.each do |json| if @model_class < RestfulModel model = @model_class.new(@_api) model.inflate(json) else model = @model_class.new(json) end models.push(model) end models end |
#range(offset = 0, limit = 1000) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/restful_model_collection.rb', line 45 def range(offset = 0, limit = 1000) accumulated = [] finished = false chunk_size = 1000 while (!finished && accumulated.length < limit) do results = get_model_collection(offset + accumulated.length, chunk_size) accumulated = accumulated.concat(results) # we're done if we have more than 'limit' items, or if we asked for 50 and got less than 50... finished = accumulated.length >= limit || results.length == 0 || (results.length % chunk_size != 0) end accumulated = accumulated[0..limit] if limit < Float::INFINITY accumulated end |
#where(filters) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/restful_model_collection.rb', line 38 def where(filters) collection = self.clone collection.filters ||= {} collection.filters.merge!(filters) collection end |