beget_api 0.2

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/beget_api.rb +111 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 65b0a272e0a8eee11504cc997db727aaf227734ded809e4df758ef304c85365a
4
+ data.tar.gz: b94831e550d2203918a6464969f62f4aa079bc69750ad1c9d00c97cdce579b7d
5
+ SHA512:
6
+ metadata.gz: 67dd8f97ef5404815136d39cca8f50fde44960fbe78ae3dae3d560dd00dcad99514916c848686b2380d9e95055f84b7dd0c659d4eb36f591fd74df6510c10fdb
7
+ data.tar.gz: a99e5f0fb8b4994b512382be57b96693f612b4f4d6395f4025a62abdc95a3a65d268d65e620da300337c7b6460d621432e1124ef5c1354112ef6bd7bc55adb1e
data/lib/beget_api.rb ADDED
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'json'
5
+
6
+ module Beget
7
+ ##
8
+ # Beget API wrapper
9
+ class API
10
+ API_URI = 'https://api.beget.com/api'
11
+
12
+ def initialize(login, password)
13
+ @login = login
14
+ @password = password
15
+ end
16
+
17
+ def method_missing(method)
18
+ Section.new(self, method)
19
+ end
20
+
21
+ def respond_to_missing?
22
+ true
23
+ end
24
+
25
+ def request(section, method, **data)
26
+ query = {
27
+ login: @login,
28
+ passwd: @password,
29
+ output_format: 'json'
30
+ }
31
+
32
+ unless data.empty?
33
+ query.merge!(
34
+ {
35
+ input_format: 'json',
36
+ input_data: JSON.generate(data)
37
+ }
38
+ )
39
+ end
40
+
41
+ uri = "#{API_URI}/#{section}/#{method}?#{URI.encode_www_form(query)}"
42
+
43
+ response = Net::HTTP.get_response(URI(uri))
44
+ raise HTTPError, response.code unless response.is_a?(Net::HTTPSuccess)
45
+
46
+ response_data = JSON.parse(response.body)
47
+ if response_data['status'] == 'error'
48
+ raise RequestError.new(
49
+ response_data['error_code'],
50
+ response_data['error_text']
51
+ )
52
+ end
53
+
54
+ raise AnswerError, response_data['answer']['errors'] if response_data['answer']['status'] == 'error'
55
+
56
+ response_data['answer']['result']
57
+ end
58
+ end
59
+
60
+ ##
61
+ # Describes API section
62
+ class Section
63
+ def initialize(api, section)
64
+ @api = api
65
+ @section = section
66
+ end
67
+
68
+ def method_missing(method, **args)
69
+ @api.request(@section, method, **args)
70
+ end
71
+
72
+ def respond_to_missing?
73
+ true
74
+ end
75
+ end
76
+
77
+ ##
78
+ # Raises when the server responds with non successful code
79
+ class HTTPError < StandardError; end
80
+
81
+ ##
82
+ # General method error
83
+ class RequestError < StandardError
84
+ attr_reader :code, :text
85
+
86
+ def initialize(code, text)
87
+ super()
88
+ @code = code
89
+ @text = text
90
+ end
91
+
92
+ def to_s
93
+ %(#{@code}: #{@text})
94
+ end
95
+ end
96
+
97
+ ##
98
+ # Answer error
99
+ class AnswerError < StandardError
100
+ attr_reader :errors
101
+
102
+ def initialize(errors)
103
+ super()
104
+ @errors = errors
105
+ end
106
+
107
+ def to_s
108
+ @errors.map { |e| %(#{e['error_code']}: #{e['error_text']}) }.join('; ')
109
+ end
110
+ end
111
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beget_api
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.2'
5
+ platform: ruby
6
+ authors:
7
+ - anim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ description:
28
+ email: me@telpart.ru
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/beget_api.rb
34
+ homepage: https://github.com/animotto/beget-api-ruby
35
+ licenses:
36
+ - MIT
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '2.4'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.1.2
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: Beget API wrapper
57
+ test_files: []