Class: ActiveResource::Collection
- Inherits:
-
Object
- Object
- ActiveResource::Collection
- Includes:
- Enumerable
- Defined in:
- lib/active_resource/collection.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#elements ⇒ Object
The array of actual elements returned by index actions.
-
#original_params ⇒ Object
The array of actual elements returned by index actions.
-
#resource_class ⇒ Object
The array of actual elements returned by index actions.
Instance Method Summary collapse
- #collect! ⇒ Object (also: #map!)
- #first_or_create(attributes = {}) ⇒ Object
- #first_or_initialize(attributes = {}) ⇒ Object
-
#initialize(elements = []) ⇒ Collection
constructor
ActiveResource::Collection is a wrapper to handle parsing index responses that do not directly map to Rails conventions.
- #to_a ⇒ Object
Constructor Details
#initialize(elements = []) ⇒ Collection
ActiveResource::Collection is a wrapper to handle parsing index responses that do not directly map to Rails conventions.
You can define a custom class that inherets from ActiveResource::Collection in order to to set the elements instance.
GET /posts.json delivers following response body:
{
posts: [
{
title: "ActiveResource now has associations",
body: "Lorem Ipsum"
}
{...}
]
next_page: "/posts.json?page=2"
}
A Post class can be setup to handle it with:
class Post < ActiveResource::Base
self.site = "http://example.com"
self.collection_parser = PostParser
end
And the collection parser:
class PostCollection < ActiveResource::Collection
attr_accessor :next_page
def initialize(parsed = {})
@elements = parsed['posts']
@next_page = parsed['next_page']
end
end
The result from a find method that returns multiple entries will now be a PostParser instance. ActiveResource::Collection includes Enumerable and instances can be iterated over just like an array.
@posts = Post.find(:all) # => PostCollection:xxx
@posts.next_page # => "/posts.json?page=2"
@posts.map(&:id) # =>[1, 3, 5 ...]
The initialize method will receive the ActiveResource::Formats parsed result and should set @elements.
56 57 58 |
# File 'lib/active_resource/collection.rb', line 56 def initialize(elements = []) @elements = elements end |
Instance Attribute Details
#elements ⇒ Object
The array of actual elements returned by index actions
10 11 12 |
# File 'lib/active_resource/collection.rb', line 10 def elements @elements end |
#original_params ⇒ Object
The array of actual elements returned by index actions
10 11 12 |
# File 'lib/active_resource/collection.rb', line 10 def original_params @original_params end |
#resource_class ⇒ Object
The array of actual elements returned by index actions
10 11 12 |
# File 'lib/active_resource/collection.rb', line 10 def resource_class @resource_class end |
Instance Method Details
#collect! ⇒ Object Also known as: map!
64 65 66 67 68 69 70 |
# File 'lib/active_resource/collection.rb', line 64 def collect! return elements unless block_given? set = [] each { |o| set << yield(o) } @elements = set self end |
#first_or_create(attributes = {}) ⇒ Object
73 74 75 76 77 |
# File 'lib/active_resource/collection.rb', line 73 def first_or_create(attributes = {}) first || resource_class.create(original_params.update(attributes)) rescue NoMethodError raise "Cannot create resource from resource type: #{resource_class.inspect}" end |
#first_or_initialize(attributes = {}) ⇒ Object
79 80 81 82 83 |
# File 'lib/active_resource/collection.rb', line 79 def first_or_initialize(attributes = {}) first || resource_class.new(original_params.update(attributes)) rescue NoMethodError raise "Cannot build resource from resource type: #{resource_class.inspect}" end |
#to_a ⇒ Object
60 61 62 |
# File 'lib/active_resource/collection.rb', line 60 def to_a elements end |