Class: Alpaca::News::Api::Rest::Collection

Inherits:
Base
  • Object
show all
Defined in:
lib/alpaca/news/api/rest/collection.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#client

Instance Attribute Details

#endpointString

Endpoint

Returns:

  • (String)


18
19
20
# File 'lib/alpaca/news/api/rest/collection.rb', line 18

def endpoint
  @endpoint
end

#headersHash

API headers

Returns:

  • (Hash)


30
31
32
# File 'lib/alpaca/news/api/rest/collection.rb', line 30

def headers
  @headers
end

#model_classClass

Response model class

Returns:

  • (Class)


36
37
38
# File 'lib/alpaca/news/api/rest/collection.rb', line 36

def model_class
  @model_class
end

#objectsArray

News objects

Returns:

  • (Array)


12
13
14
# File 'lib/alpaca/news/api/rest/collection.rb', line 12

def objects
  @objects
end

#pageInteger

Current page

Returns:

  • (Integer)


48
49
50
# File 'lib/alpaca/news/api/rest/collection.rb', line 48

def page
  @page
end

#page_tokenString

Page token

Returns:

  • (String)


42
43
44
# File 'lib/alpaca/news/api/rest/collection.rb', line 42

def page_token
  @page_token
end

#paramsHash

Parameters

Returns:

  • (Hash)


24
25
26
# File 'lib/alpaca/news/api/rest/collection.rb', line 24

def params
  @params
end

Class Method Details

.get(endpoint, params, headers, model_class) ⇒ Alpaca::News::Api::Rest::Collection

Send GET request to the specific endpoint with parameters and headers

Parameters:

  • endpoint (String)

    API endpoint

  • params (Hash)

    API url parameters

  • headers (Hash)

    API headers

  • model_class (Class)

    Response model class

Returns:



62
63
64
# File 'lib/alpaca/news/api/rest/collection.rb', line 62

def get(endpoint, params, headers, model_class)
  new.get(endpoint, params, headers, model_class)
end

Instance Method Details

#find_each {|Alpaca::News::Api::Models::News| ... } ⇒ Object

Iterate for all objects and call for the next page (all pages)

Yields:



105
106
107
108
109
110
111
112
113
# File 'lib/alpaca/news/api/rest/collection.rb', line 105

def find_each
  result = self
  loop do
    result.objects.each do |object|
      yield(object)
    end
    break unless result = result.next_page
  end
end

#find_in_batches {|Array<Alpaca::News::Api::Models::News>| ... } ⇒ Object

Iterate for all objects and call for the next page in batches (all pages)

Yields:



119
120
121
122
123
124
125
# File 'lib/alpaca/news/api/rest/collection.rb', line 119

def find_in_batches
  result = self
  loop do
    yield(result.objects)
    break unless result = result.next_page
  end
end

#get(endpoint, params, headers, model_class) ⇒ Alpaca::News::Api::Rest::Collection

Send GET request to the specific endpoint with parameters and headers

Parameters:

  • endpoint (String)

    API endpoint

  • params (Hash)

    API url parameters

  • headers (Hash)

    API headers

  • model_class (Class)

    Response model class

Returns:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/alpaca/news/api/rest/collection.rb', line 76

def get(endpoint, params, headers, model_class)
  @page ||= 0
  @endpoint = endpoint
  @params = params
  @headers = headers
  @model_class = model_class
  result = client.get(endpoint, params, headers)
  @page += 1
  @page_token = result[:next_page_token]
  @objects = result[:news].map do |attributes|
    model_class.new(attributes)
  end
  self
end

#next_pageAlpaca::News::Api::Rest::Collection

Request for the next page if the page token is not nil



95
96
97
98
99
# File 'lib/alpaca/news/api/rest/collection.rb', line 95

def next_page
  return nil if @page_token.nil?

  get(@endpoint, @params.merge(page_token: @page_token), @headers, @model_class)
end