Class: Prdigest::Telegram

Inherits:
Object
  • Object
show all
Defined in:
lib/prdigest/telegram.rb

Defined Under Namespace

Classes: NetHTTPTransport

Constant Summary collapse

MAX_ATTEMPTS =
3
MAX_RETRY_WAIT =
60
API_ORIGIN =
"https://api.telegram.org"

Instance Method Summary collapse

Constructor Details

#initialize(token:, chat_id:, allowlist:, transport: NetHTTPTransport.new, sleeper: ->(seconds) { sleep(seconds) }) ⇒ Telegram

Returns a new instance of Telegram.



28
29
30
31
32
33
34
35
# File 'lib/prdigest/telegram.rb', line 28

def initialize(token:, chat_id:, allowlist:, transport: NetHTTPTransport.new, sleeper: ->(seconds) { sleep(seconds) })
  @token = token.to_s
  @chat_id = Integer(chat_id)
  @allowlist = Array(allowlist).map { |id| Integer(id) }.freeze
  @transport = transport
  @sleeper = sleeper
  @delivered_chunk = false
end

Instance Method Details

#deliver(chunks, digest_date:, checkpoint_store:, scope:) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/prdigest/telegram.rb', line 37

def deliver(chunks, digest_date:, checkpoint_store:, scope:)
  refuse_unlisted_chat! unless @allowlist.include?(@chat_id)
  checkpoint_store.with_checkpoint(
    date: digest_date,
    chat_id: @chat_id,
    scope: scope,
    chunks: chunks
  ) do |delivery|
    @delivered_chunk ||= delivery.next_chunk.positive?
    (delivery.next_chunk...delivery.chunks.length).each do |index|
      @sleeper.call(1) if @delivered_chunk
      deliver_chunk(delivery, index)
      @delivered_chunk = true
    end
    delivery.delivery
  end
end

#inspectObject Also known as: to_s



55
56
57
# File 'lib/prdigest/telegram.rb', line 55

def inspect
  "#<#{self.class} chat_id=#{@chat_id} token=[REDACTED]>"
end