Class: Rubogram::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/rubogram/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(token, adapter: Faraday.default_adapter, logging: true, raise_errors: true, backend: nil) ⇒ Client

Returns a new instance of Client.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

Using method_missing for catching all the methods



30
31
32
33
34
35
36
37
38
39
40
# 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

Instance Method Details

#call(method, args = {}) ⇒ Object

Call method from telegram api



43
44
45
46
47
48
49
50
51
52
53
54
55
# 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