Class: ERPC::PriceClient

Inherits:
Object
  • Object
show all
Defined in:
lib/erpc_sdk/rest.rb

Instance Method Summary collapse

Constructor Details

#initialize(transport) ⇒ PriceClient

Returns a new instance of PriceClient.



124
125
126
# File 'lib/erpc_sdk/rest.rb', line 124

def initialize(transport)
  @transport = transport
end

Instance Method Details

#get_latest_price_updates(ids:, encoding: nil, parsed: nil, ignore_invalid_price_ids: nil) ⇒ Object



146
147
148
149
150
151
152
# File 'lib/erpc_sdk/rest.rb', line 146

def get_latest_price_updates(ids:, encoding: nil, parsed: nil, ignore_invalid_price_ids: nil)
  value = @transport.get(
    "/v2/updates/price/latest",
    update_query(ids, encoding, parsed, ignore_invalid_price_ids)
  )
  price_update(value)
end

#get_latest_publisher_stake_caps(encoding: nil, parsed: nil) ⇒ Object



163
164
165
166
167
168
169
170
171
# File 'lib/erpc_sdk/rest.rb', line 163

def get_latest_publisher_stake_caps(encoding: nil, parsed: nil)
  Validation.mapping(
    @transport.get(
      "/v2/updates/publisher_stake_caps/latest",
      "encoding" => encoding,
      "parsed" => parsed
    )
  )
end

#get_price_feeds(asset_type: nil, query: nil) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/erpc_sdk/rest.rb', line 128

def get_price_feeds(asset_type: nil, query: nil)
  value = @transport.get("/v2/price_feeds", "query" => query, "asset_type" => asset_type)
  raise InvalidResponseError, "ERPC returned invalid price feed metadata" unless value.is_a?(Array)

  value.each do |raw|
     = Validation.mapping(raw)
    Validation.string(["id"])
    attributes = ["attributes"]
    next if attributes.nil?
    unless attributes.is_a?(Hash) && attributes.all? { |key, item| key.is_a?(String) && item.is_a?(String) }
      raise InvalidResponseError, "ERPC returned invalid price feed metadata"
    end
  end
  value
rescue InvalidResponseError
  raise InvalidResponseError, "ERPC returned invalid price feed metadata"
end

#get_price_updates_at_timestamp(publish_time, ids:, encoding: nil, parsed: nil, ignore_invalid_price_ids: nil) ⇒ Object



154
155
156
157
158
159
160
161
# File 'lib/erpc_sdk/rest.rb', line 154

def get_price_updates_at_timestamp(publish_time, ids:, encoding: nil, parsed: nil,
                                   ignore_invalid_price_ids: nil)
  value = @transport.get(
    "/v2/updates/price/#{URLs.escape_path(publish_time)}",
    update_query(ids, encoding, parsed, ignore_invalid_price_ids)
  )
  price_update(value)
end

#stream_price_updates(ids:, encoding: nil, parsed: nil, ignore_invalid_price_ids: nil, allow_unordered: nil, benchmarks_only: nil) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/erpc_sdk/rest.rb', line 173

def stream_price_updates(ids:, encoding: nil, parsed: nil, ignore_invalid_price_ids: nil,
                         allow_unordered: nil, benchmarks_only: nil)
  query = update_query(ids, encoding, parsed, ignore_invalid_price_ids).merge(
    "allow_unordered" => allow_unordered,
    "benchmarks_only" => benchmarks_only
  )
  chunks = @transport.stream("/v2/updates/price/stream", query)
  Enumerator.new do |yielder|
    buffer = +""
    chunks.each do |chunk|
      buffer << chunk
      while (boundary = buffer.match(/\r?\n\r?\n/))
        block = buffer.slice!(0, boundary.end(0))
        event = parse_sse_block(block.sub(/\r?\n\r?\n\z/, ""))
        yielder << event if event
      end
    end
    event = parse_sse_block(buffer)
    yielder << event if event
  end
end