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 = nil, digest_date:, checkpoint_store:, scope:, chunk_factory: nil) ⇒ Object



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

def deliver(chunks = nil, digest_date:, checkpoint_store:, scope:, chunk_factory: nil)
  refuse_unlisted_chat! unless @allowlist.include?(@chat_id)
  checkpoint_store.with_checkpoint(
    date: digest_date,
    chat_id: @chat_id,
    scope: scope,
    chunks: chunks,
    chunk_factory: chunk_factory
  ) 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



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

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