viberroo 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e99b6a05f07fc41a2ae9952fe3d5088b34f55ce541f5624c9257713e29ec0c4
4
- data.tar.gz: 432960ff25d67e609e5357b76a4b63c33115aef892016b964847ee6fa980be5c
3
+ metadata.gz: cfdd2b9cf561f8fe620e7e8fd58c646aded156836519095de599f794022c5771
4
+ data.tar.gz: 394fcb5010e801f8595c2fe33cb5f28d72e95d961a7cf13cb33b8d006dc59a86
5
5
  SHA512:
6
- metadata.gz: 4f800f461911f603c1a95ca30cfbe5ec0b33b9c1c02df3e681c462a2c1307fd7014074bd95f9478f2ee44c6c061a13c6ecba6533eee35c8d5d074c612425c076
7
- data.tar.gz: 78ea9bf73786aa9d36b1c43606b7df8363575237813f4e954bb980a7e3d188602f6db088eab3d05c1a48f3708d2588e2d110d55a42fae18f348efbcaca55649c
6
+ metadata.gz: 155014f7f40d8730f9ad41c9193dd739caa33b906587e0ff4ba6ed2fe7e3890841c12eff617ec7951cceaecca1923cbb59f5a6eecb24a9bf7ff3a664a4f582ac
7
+ data.tar.gz: 7baf397be2823482dc211c0c3392f3c8bedf981da346e06dc9dae91d41e27db0ce7feb5afdf4d151a65e67bdf9d3a003389cc7ee077123d9dc7f371efa0ee4df
@@ -1,10 +1,10 @@
1
1
  require 'json'
2
- require 'faraday'
2
+ require 'viberroo/configuration'
3
3
  require 'viberroo/message'
4
- require 'viberroo/bot'
5
4
  require 'viberroo/input'
6
- require 'viberroo/callback'
5
+ require 'viberroo/response'
7
6
  require 'viberroo/bot'
7
+ require 'logger'
8
8
 
9
9
  module Viberroo
10
10
  module URL
@@ -1,83 +1,81 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ # Namespace for all Viberroo code.
1
5
  module Viberroo
6
+
7
+ # Used for sending requests to Viber API. Each request sends a http POST request to a particular endpoint, each returns http response.
2
8
  class Bot
3
- def initialize(token:, callback: nil)
4
- @headers = { 'X-Viber-Auth-Token': token, 'Content-Type': 'application/json' }
5
- @callback = callback
9
+ def initialize(token: nil, response: nil)
10
+ Viberroo.configure
11
+
12
+ @headers = {
13
+ 'X-Viber-Auth-Token': token || Viberroo.config.auth_token,
14
+ 'Content-Type': 'application/json'
15
+ }
16
+ @response = response
6
17
  end
7
18
 
19
+ # Used to set bot webhook.
8
20
  def set_webhook(url:, event_types: nil, send_name: nil, send_photo: nil)
9
21
  request(URL::WEBHOOK, url: url, event_types: event_types,
10
- send_name: send_name,
11
- send_photo: send_photo)
12
- end
13
-
14
- def set_webhook!(url:, event_types: nil, send_name: nil, send_photo: nil)
15
- parse set_webhook(url: url, event_types: event_types,
16
- send_name: send_name,
17
- send_photo: send_photo)
22
+ send_name: send_name, send_photo: send_photo)
18
23
  end
19
24
 
25
+ # Used to remove bot webhook.
20
26
  def remove_webhook
21
27
  request(URL::WEBHOOK, url: '')
22
28
  end
23
29
 
24
- def remove_webhook!
25
- parse remove_webhook
26
- end
27
-
30
+ # Used to send messages.
28
31
  def send(message:, keyboard: {})
29
32
  request(URL::MESSAGE,
30
- { receiver: @callback&.user_id }.merge(message).merge(keyboard))
31
- end
32
-
33
- def send!(message:, keyboard: {})
34
- parse self.send(message: message, keyboard: keyboard)
33
+ { receiver: @response&.user_id }.merge(message).merge(keyboard))
35
34
  end
36
35
 
36
+ # Used to broadcast messages.
37
37
  def broadcast(message:, to:)
38
38
  request(URL::BROADCAST_MESSAGE, message.merge(broadcast_list: to))
39
39
  end
40
40
 
41
- def broadcast!(message:, to:)
42
- parse broadcast(message: message, to: to)
43
- end
44
-
41
+ # Used to retrieve account info. These settings can be set in you Viber admin panel.
45
42
  def get_account_info
46
43
  request(URL::GET_ACCOUNT_INFO)
47
44
  end
48
45
 
49
- def get_account_info!
50
- parse get_account_info
51
- end
52
-
46
+ # Used to retrieve details of a particular user.
53
47
  def get_user_details(id:)
54
48
  request(URL::GET_USER_DETAILS, id: id)
55
49
  end
56
50
 
57
- def get_user_details!(id:)
58
- parse get_user_details(id: id)
59
- end
60
-
51
+ # Used to get online of a list of subscribed users.
61
52
  def get_online(ids:)
62
53
  request(URL::GET_ONLINE, ids: ids)
63
54
  end
64
55
 
65
- def get_online!(ids:)
66
- parse get_online(ids: ids)
67
- end
68
-
69
56
  private
70
57
 
71
58
  def request(url, params = {})
72
- Faraday.post(url, compact(params).to_json, @headers)
73
- end
59
+ uri = URI(url)
74
60
 
75
- def parse(request)
76
- JSON.parse(request.body)
61
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
62
+ request = Net::HTTP::Post.new(uri, @headers)
63
+ request.body = compact(params).to_json
64
+
65
+ http.request(request)
66
+ end
67
+
68
+ Viberroo.config.logger&.info("##{caller_name} -- #{response.body}")
69
+
70
+ Viberroo.config.parse_response_body ? JSON.parse(response.body) : response
77
71
  end
78
72
 
79
73
  def compact(params)
80
74
  params.delete_if { |_, v| v.nil? }
81
75
  end
76
+
77
+ def caller_name
78
+ caller[1][/`.*'/][1..-2]
79
+ end
82
80
  end
83
81
  end
@@ -0,0 +1,38 @@
1
+ module Viberroo
2
+ class << self
3
+ # Accessor for global configuration.
4
+ attr_accessor :config
5
+ end
6
+
7
+ # Yields the global configuration to a block. Returns existing configuration if one was defined earlier.
8
+ # @yield [Configuration] global configuration
9
+ #
10
+ # @example
11
+ # RSpec.configure do |config|
12
+ # config.auth_token = 'syEsp8e0'
13
+ # end
14
+ # @see Viberroo::Configuration
15
+ def self.configure
16
+ self.config ||= Configuration.new
17
+ yield(config) if block_given?
18
+ end
19
+
20
+ # Stores runtime configuration information.
21
+ class Configuration
22
+ attr_accessor :logger, :auth_token, :parse_response_body
23
+
24
+ def initialize
25
+ # Stores Viber API authentication token. Necessary for the bot to send API requests.
26
+ @auth_token = nil
27
+
28
+ # Specifies logger.
29
+ @logger = Logger.new(STDOUT)
30
+ @logger.formatter = proc do |severity, datetime, _, msg|
31
+ "[#{datetime}] #{severity} Viberroo::Bot #{msg}\n"
32
+ end
33
+
34
+ # Specifies whether to parse request response body.
35
+ @parse_response_body = true
36
+ end
37
+ end
38
+ end
@@ -1,7 +1,7 @@
1
1
  require 'recursive-open-struct'
2
2
 
3
3
  module Viberroo
4
- class Callback
4
+ class Response
5
5
  attr_reader :params
6
6
 
7
7
  def initialize(params)
@@ -1,3 +1,3 @@
1
1
  module Viberroo
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viberroo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktor Habchak
@@ -10,20 +10,6 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: faraday
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 1.0.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 1.0.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: recursive-open-struct
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -46,9 +32,10 @@ extra_rdoc_files: []
46
32
  files:
47
33
  - lib/viberroo.rb
48
34
  - lib/viberroo/bot.rb
49
- - lib/viberroo/callback.rb
35
+ - lib/viberroo/configuration.rb
50
36
  - lib/viberroo/input.rb
51
37
  - lib/viberroo/message.rb
38
+ - lib/viberroo/response.rb
52
39
  - lib/viberroo/version.rb
53
40
  homepage: https://github.com/vikdotdev/viberroo
54
41
  licenses:
@@ -72,5 +59,5 @@ requirements: []
72
59
  rubygems_version: 3.0.3
73
60
  signing_key:
74
61
  specification_version: 4
75
- summary: Viber bot for Ruby.
62
+ summary: Viber bot for Ruby / Rails.
76
63
  test_files: []