Class: BaseCradle::ItemsResource

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/basecradle/items.rb

Overview

The shared cross-timeline pattern: iterate everything you can see (newest first, auto-paginating), narrow with .filter, or fetch one by uuid. Subclasses set PATH / PLURAL / SINGULAR / MODEL.

Instance Method Summary collapse

Constructor Details

#initialize(client, filters: {}) ⇒ ItemsResource

Returns a new instance of ItemsResource.



92
93
94
95
# File 'lib/basecradle/items.rb', line 92

def initialize(client, filters: {})
  @client = client
  @filters = filters
end

Instance Method Details

#each(&block) ⇒ Object



97
98
99
100
101
102
# File 'lib/basecradle/items.rb', line 97

def each(&block)
  return enum_for(:each) unless block_given?

  Paginator.new(@client, self.class::PATH, envelope_key: self.class::PLURAL,
                                           model: self.class::MODEL, params: @filters).each(&block)
end

#filter(timeline: nil) ⇒ Object

A new lazy resource narrowed to one timeline (a Timeline or a uuid). Filters compose.



105
106
107
# File 'lib/basecradle/items.rb', line 105

def filter(timeline: nil)
  self.class.new(@client, filters: merge_filters(timeline: timeline))
end

#get(uuid) ⇒ Object

Fetch one item by its own uuid (you must be a viewer of its timeline).



110
111
112
113
# File 'lib/basecradle/items.rb', line 110

def get(uuid)
  response = @client.request("GET", "#{self.class::PATH}/#{uuid}")
  self.class::MODEL.new(response.fetch(self.class::SINGULAR), client: @client)
end