class Rubogram::Client

Public Class Methods

new(token, adapter: Faraday.default_adapter, logging: true, raise_errors: true, backend: nil) click to toggle source
# File lib/rubogram/client.rb, line 7
def initialize token, adapter: Faraday.default_adapter, logging: true, raise_errors: true, backend: nil
  unless backend && backend.size > 0
    backend = 'https://api.telegram.org'
  end

  @faraday = Faraday.new "#{backend}/bot#{token}/" do |faraday|
    faraday.request :multipart
    faraday.request :url_encoded

    # Logging
    faraday.response :logger, ::Logger.new(STDOUT), bodies: true if logging

    # Enabling error raising
    faraday.use Faraday::Response::RaiseError if raise_errors

    # Enabling json parser
    faraday.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/

    faraday.adapter adapter
  end
end

Public Instance Methods

call(method, args = {}) click to toggle source

Call method from telegram api

# File lib/rubogram/client.rb, line 43
def call method, args = {}
  unless args.is_a? Hash
    raise ArgumentError.new "argument must be a Hash"
  end

  args.each_key do |key|
    if args[key].is_a?(Array) || args[key].is_a?(Hash)
      args[key] = JSON.dump(args[key])
    end
  end

  @faraday.post method, args
end
method_missing(method, *args, &block) click to toggle source

Using method_missing for catching all the methods

# File lib/rubogram/client.rb, line 30
def method_missing method, *args, &block
  if args.size > 1
    raise ArgumentError.new "wrong number of arguments (#{args.size} for 0..1)"
  end

  args.push({}) if args.size == 0

  method = method.to_s.split('_').inject([]){ |b,e| b.push(b.empty? ? e : e.capitalize) }.join

  call(method, args[0])
end