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.



74
75
76
77
# File 'lib/basecradle/items.rb', line 74

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

Instance Method Details

#each(&block) ⇒ Object



79
80
81
82
83
84
# File 'lib/basecradle/items.rb', line 79

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.



87
88
89
# File 'lib/basecradle/items.rb', line 87

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).



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

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