Module: Zendesk2::PagedCollection

Overview

adds #create! method to Cistern::Collection.

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



4
5
6
7
8
9
# File 'lib/zendesk2/paged_collection.rb', line 4

def self.included(klass)
  klass.send(:attribute, :count)
  klass.send(:attribute, :next_page_link, aliases: 'next_page')
  klass.send(:attribute, :previous_page_link, aliases: 'previous_page')
  klass.send(:extend, ClassMethods)
end

Instance Method Details

#all(params = {}) ⇒ Object

Fetch a collection of resources



102
103
104
105
106
107
108
109
# File 'lib/zendesk2/paged_collection.rb', line 102

def all(params = {})
  if search_query?(params)
    search_page(params)
  else
    collection_page(params)
  end
  self
end

#all_entriesArray<Zendesk2::Model>

Iterate over all pages and collect every entry

Returns:



97
98
99
# File 'lib/zendesk2/paged_collection.rb', line 97

def all_entries
  each_entry.to_a
end

#collection_methodObject



20
21
22
# File 'lib/zendesk2/paged_collection.rb', line 20

def collection_method
  self.class.collection_method
end

#collection_rootObject



24
25
26
# File 'lib/zendesk2/paged_collection.rb', line 24

def collection_root
  self.class.collection_root
end

#create(attributes = {}) ⇒ Zendesk::Model, FalseClass

Quietly attempt creation of resource. Check #new_record? and #errors for success

Returns:

  • (Zendesk::Model, FalseClass)

See Also:

  • to raise an exception on failure


89
90
91
92
# File 'lib/zendesk2/paged_collection.rb', line 89

def create(attributes = {})
  model = new(attributes.merge(Zendesk2.stringify_keys(self.attributes)))
  model.save
end

#create!(attributes = {}) ⇒ Zendesk::Model

Attempt creation of resource and explode if unsuccessful

Returns:

  • (Zendesk::Model)

Raises:



80
81
82
83
# File 'lib/zendesk2/paged_collection.rb', line 80

def create!(attributes = {})
  model = new(Zendesk2.stringify_keys(attributes).merge(Zendesk2.stringify_keys(self.attributes)))
  model.save!
end

#each_entryObject



51
52
53
54
55
56
57
58
# File 'lib/zendesk2/paged_collection.rb', line 51

def each_entry
  return to_enum(:each_entry) unless block_given?
  page = self
  while page
    page.to_a.each { |r| yield r }
    page = page.next_page
  end
end

#each_pageObject



42
43
44
45
46
47
48
49
# File 'lib/zendesk2/paged_collection.rb', line 42

def each_page
  return to_enum(:each_page) unless block_given?
  page = self
  while page
    yield page
    page = page.next_page
  end
end

#get(*args) ⇒ Zendesk2::Model, NilClass

Quiet version of #get!

Returns:

  • (Zendesk2::Model)

    Fetched model when successful

  • (NilClass)

    return nothing if record cannot be found

See Also:



146
147
148
149
150
# File 'lib/zendesk2/paged_collection.rb', line 146

def get(*args)
  get!(*args)
rescue Zendesk2::Error
  nil
end

#get!(identity) ⇒ Zendesk2::Model #get!(scope) ⇒ Zendesk2::Model

Fetch a single of resource

Examples:

Fetch a record without contextual scoping

self.identities.all("user_id" => 2, "id" => 4) # context defined directly

Fetch a record with contextual scoping

self.identities("user_id" => 2).get(4) # context defined in collection
user.identities.get(4)                 # context defined by encapsulating model

Overloads:

  • #get!(identity) ⇒ Zendesk2::Model

    fetch a un-namespaced specific record or a namespaced record under the current #scopes

    Parameters:

    • identity (Integer)

      identity of the record

  • #get!(scope) ⇒ Zendesk2::Model

    directly fetch a namespaced record

    Parameters:

    • scope (Hash)

      parameters to fetch record

Returns:

  • (Zendesk2::Model)

    fetched resource corresponding to value of Collection#model

Raises:

  • (Zendesk2::Error)

    if the record cannot be found or other request error



126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/zendesk2/paged_collection.rb', line 126

def get!(identity_or_hash)
  scoped_attributes = self.class.scopes.inject({}) { |a, e| a.merge(e.to_s => send(e)) }

  if identity_or_hash.is_a?(Hash)
    scoped_attributes.merge!(identity_or_hash)
  else
    scoped_attributes['id'] = identity_or_hash
  end

  scoped_attributes = { model_root => scoped_attributes }

  data = cistern.send(model_method, scoped_attributes).body[model_root]
  new(data) if data
end

#model_methodObject



28
29
30
# File 'lib/zendesk2/paged_collection.rb', line 28

def model_method
  self.class.model_method
end

#model_rootObject



32
33
34
# File 'lib/zendesk2/paged_collection.rb', line 32

def model_root
  self.class.model_root
end

#new_pageObject



36
37
38
39
40
# File 'lib/zendesk2/paged_collection.rb', line 36

def new_page
  page = self.class.new(cistern: cistern)
  page.merge_attributes(self.class.scopes.inject({}) { |a, e| a.merge(e.to_s => public_send(e)) })
  page
end

#next_pageObject



60
61
62
63
64
65
66
# File 'lib/zendesk2/paged_collection.rb', line 60

def next_page
  return nil unless next_page_link

  options = { 'url' => next_page_link }
  options['filtered'] = filtered if respond_to?(:filtered) # searchable
  new_page.all(options)
end

#previous_pageObject



68
69
70
71
72
73
74
# File 'lib/zendesk2/paged_collection.rb', line 68

def previous_page
  return nil unless previous_page_link

  options = { 'url' => previous_page_link }
  options['filtered'] = filtered if respond_to?(:filtered) # searchable
  new_page.all(options)
end