vt_api 0.1.2 → 0.1.2.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 +5 -5
- data/.gitignore +9 -9
- data/.travis.yml +7 -7
- data/Gemfile +4 -4
- data/LICENSE.md +169 -169
- data/README.md +61 -61
- data/Rakefile +10 -10
- data/bin/console +13 -0
- data/bin/setup +8 -0
- data/lib/vt_api/api/config.rb +32 -32
- data/lib/vt_api/api/v2/comments.rb +58 -58
- data/lib/vt_api/api/v2/file.rb +155 -155
- data/lib/vt_api/api/v2/url.rb +77 -77
- data/lib/vt_api/api/v2.rb +15 -14
- data/lib/vt_api/api.rb +2 -2
- data/lib/vt_api/internal/api_provider.rb +64 -64
- data/lib/vt_api/internal/api_version.rb +50 -50
- data/lib/vt_api/internal/endpoint.rb +68 -68
- data/lib/vt_api/internal/versions/api_v2.rb +129 -129
- data/lib/vt_api/internal/versions/default.rb +10 -10
- data/lib/vt_api/internal/versions.rb +1 -1
- data/lib/vt_api/internal.rb +3 -3
- data/lib/vt_api/version.rb +3 -3
- data/lib/vt_api.rb +28 -28
- data/vt_api.gemspec +45 -45
- metadata +9 -7
@@ -1,65 +1,65 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'ostruct'
|
5
|
-
|
6
|
-
require_relative 'versions/default'
|
7
|
-
require_relative '../../vt_api'
|
8
|
-
|
9
|
-
module VtApi
|
10
|
-
# API intercation class.
|
11
|
-
#
|
12
|
-
# Uses [Faraday] for HTTP interaction.
|
13
|
-
class ApiProvider
|
14
|
-
|
15
|
-
# Create new ApiProvider.
|
16
|
-
#
|
17
|
-
# @param [ApiVersion] api_version API interface to use.
|
18
|
-
# @param [Object] adapter Faraday HTTP adapter.
|
19
|
-
# @return [Object]
|
20
|
-
def initialize(api_version = Versions::DEFAULT, adapter = :net_http)
|
21
|
-
unless api_version.kind_of? ApiVersion
|
22
|
-
raise ArgumentError, "Invalid API interface supplied! Must be subclass of 'ApiVersion', got #{api_version.class} instead"
|
23
|
-
end
|
24
|
-
|
25
|
-
@api = api_version
|
26
|
-
@connection = Faraday.new @api.base_url do |conn|
|
27
|
-
conn.request :multipart
|
28
|
-
conn.request :url_encoded
|
29
|
-
|
30
|
-
conn.adapter adapter
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Performs a request to given API method.
|
35
|
-
# Requested method must be described in API interface.
|
36
|
-
#
|
37
|
-
# @raise [UndefinedMethodError]
|
38
|
-
# @raise [MissingParametersError]
|
39
|
-
# @raise [ApiError]
|
40
|
-
#
|
41
|
-
# @param [String] method_name
|
42
|
-
# @param [Hash] params
|
43
|
-
# @return [OpenStruct] Method result object.
|
44
|
-
def request(method_name, params = {})
|
45
|
-
unless @api.endpoint? method_name
|
46
|
-
raise UndefinedMethodError, "Endpoint '#{method_name}' not found in '#{@api.version}' API interface."
|
47
|
-
end
|
48
|
-
|
49
|
-
endpoint = @api.endpoint method_name
|
50
|
-
|
51
|
-
unless endpoint.params_valid? (params)
|
52
|
-
raise MissingParametersError, "Missed parameters #{endpoint.missing_params(params).to_s} required by endpoint '#{method_name}'."
|
53
|
-
end
|
54
|
-
|
55
|
-
result = @connection.public_send(endpoint.method, endpoint.uri, params, {})
|
56
|
-
|
57
|
-
if @api.error? result.status
|
58
|
-
raise ApiError, "#{@api.version} error: #{@api.error(result.status)}"
|
59
|
-
end
|
60
|
-
|
61
|
-
# noinspection RubyResolve
|
62
|
-
JSON.parse result.body, object_class: OpenStruct
|
63
|
-
end
|
64
|
-
end
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
require_relative 'versions/default'
|
7
|
+
require_relative '../../vt_api'
|
8
|
+
|
9
|
+
module VtApi
|
10
|
+
# API intercation class.
|
11
|
+
#
|
12
|
+
# Uses [Faraday] for HTTP interaction.
|
13
|
+
class ApiProvider
|
14
|
+
|
15
|
+
# Create new ApiProvider.
|
16
|
+
#
|
17
|
+
# @param [ApiVersion] api_version API interface to use.
|
18
|
+
# @param [Object] adapter Faraday HTTP adapter.
|
19
|
+
# @return [Object]
|
20
|
+
def initialize(api_version = Versions::DEFAULT, adapter = :net_http)
|
21
|
+
unless api_version.kind_of? ApiVersion
|
22
|
+
raise ArgumentError, "Invalid API interface supplied! Must be subclass of 'ApiVersion', got #{api_version.class} instead"
|
23
|
+
end
|
24
|
+
|
25
|
+
@api = api_version
|
26
|
+
@connection = Faraday.new @api.base_url do |conn|
|
27
|
+
conn.request :multipart
|
28
|
+
conn.request :url_encoded
|
29
|
+
|
30
|
+
conn.adapter adapter
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Performs a request to given API method.
|
35
|
+
# Requested method must be described in API interface.
|
36
|
+
#
|
37
|
+
# @raise [UndefinedMethodError]
|
38
|
+
# @raise [MissingParametersError]
|
39
|
+
# @raise [ApiError]
|
40
|
+
#
|
41
|
+
# @param [String] method_name
|
42
|
+
# @param [Hash] params
|
43
|
+
# @return [OpenStruct] Method result object.
|
44
|
+
def request(method_name, params = {})
|
45
|
+
unless @api.endpoint? method_name
|
46
|
+
raise UndefinedMethodError, "Endpoint '#{method_name}' not found in '#{@api.version}' API interface."
|
47
|
+
end
|
48
|
+
|
49
|
+
endpoint = @api.endpoint method_name
|
50
|
+
|
51
|
+
unless endpoint.params_valid? (params)
|
52
|
+
raise MissingParametersError, "Missed parameters #{endpoint.missing_params(params).to_s} required by endpoint '#{method_name}'."
|
53
|
+
end
|
54
|
+
|
55
|
+
result = @connection.public_send(endpoint.method, endpoint.uri, params, {})
|
56
|
+
|
57
|
+
if @api.error? result.status
|
58
|
+
raise ApiError, "#{@api.version} error: #{@api.error(result.status)}"
|
59
|
+
end
|
60
|
+
|
61
|
+
# noinspection RubyResolve
|
62
|
+
JSON.parse result.body, object_class: OpenStruct
|
63
|
+
end
|
64
|
+
end
|
65
65
|
end
|
@@ -1,51 +1,51 @@
|
|
1
|
-
module VtApi
|
2
|
-
|
3
|
-
# @abstract Base class for API interfaces.
|
4
|
-
class ApiVersion
|
5
|
-
# Get API base URL.
|
6
|
-
#
|
7
|
-
# @return [String]
|
8
|
-
def base_url
|
9
|
-
''
|
10
|
-
end
|
11
|
-
|
12
|
-
# API interface name/version.
|
13
|
-
#
|
14
|
-
# @return [String]
|
15
|
-
def version
|
16
|
-
nil
|
17
|
-
end
|
18
|
-
|
19
|
-
# Get API HTTP-code description.
|
20
|
-
#
|
21
|
-
# @param [Integer] http_code
|
22
|
-
# @return [String] Error description.
|
23
|
-
def error(http_code)
|
24
|
-
nil
|
25
|
-
end
|
26
|
-
|
27
|
-
# Check whether API HTTP-code means error.
|
28
|
-
#
|
29
|
-
# @param [Integer] http_code
|
30
|
-
# @return [Boolean] Error description.
|
31
|
-
def error?(http_code)
|
32
|
-
false
|
33
|
-
end
|
34
|
-
|
35
|
-
# Get API method endpoint interface.
|
36
|
-
#
|
37
|
-
# @param [String] method API method name to be called.
|
38
|
-
# @return [VtApi::Endpoint]
|
39
|
-
def endpoint(method)
|
40
|
-
nil
|
41
|
-
end
|
42
|
-
|
43
|
-
# Check whether given method is defined in interface.
|
44
|
-
#
|
45
|
-
# @param [String] method Method name.
|
46
|
-
# @return [Boolean]
|
47
|
-
def endpoint?(method)
|
48
|
-
false
|
49
|
-
end
|
50
|
-
end
|
1
|
+
module VtApi
|
2
|
+
|
3
|
+
# @abstract Base class for API interfaces.
|
4
|
+
class ApiVersion
|
5
|
+
# Get API base URL.
|
6
|
+
#
|
7
|
+
# @return [String]
|
8
|
+
def base_url
|
9
|
+
''
|
10
|
+
end
|
11
|
+
|
12
|
+
# API interface name/version.
|
13
|
+
#
|
14
|
+
# @return [String]
|
15
|
+
def version
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get API HTTP-code description.
|
20
|
+
#
|
21
|
+
# @param [Integer] http_code
|
22
|
+
# @return [String] Error description.
|
23
|
+
def error(http_code)
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
# Check whether API HTTP-code means error.
|
28
|
+
#
|
29
|
+
# @param [Integer] http_code
|
30
|
+
# @return [Boolean] Error description.
|
31
|
+
def error?(http_code)
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get API method endpoint interface.
|
36
|
+
#
|
37
|
+
# @param [String] method API method name to be called.
|
38
|
+
# @return [VtApi::Endpoint]
|
39
|
+
def endpoint(method)
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
|
43
|
+
# Check whether given method is defined in interface.
|
44
|
+
#
|
45
|
+
# @param [String] method Method name.
|
46
|
+
# @return [Boolean]
|
47
|
+
def endpoint?(method)
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
51
|
end
|
@@ -1,69 +1,69 @@
|
|
1
|
-
require 'faraday/connection'
|
2
|
-
|
3
|
-
module VtApi
|
4
|
-
# API endpoint interface class.
|
5
|
-
class Endpoint
|
6
|
-
attr_accessor :uri, :method
|
7
|
-
|
8
|
-
# Initialize new endpoint.
|
9
|
-
#
|
10
|
-
# Interface parameters are described as in example below.
|
11
|
-
# @example
|
12
|
-
# {
|
13
|
-
# foo: true, # this describes required parameter
|
14
|
-
# bar: false # this describes a parameter that can be omitted
|
15
|
-
# }
|
16
|
-
#
|
17
|
-
# @param [Object] uri Relative URL of the endpoint.
|
18
|
-
# @param [Object] method HTTP method to be used for the endpoint.
|
19
|
-
# @param [Object] params Endpoint parameters interface.
|
20
|
-
def initialize(uri, method, params = {})
|
21
|
-
@uri = uri
|
22
|
-
@method = method
|
23
|
-
@params = params
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
# Check whether given parameters match endpoint interface.
|
28
|
-
#
|
29
|
-
# @param [Hash] passed_params
|
30
|
-
# @return [Boolean]
|
31
|
-
def params_valid?(passed_params)
|
32
|
-
@params.each do |param, required|
|
33
|
-
if required and passed_params[param].nil?
|
34
|
-
return false
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
true
|
39
|
-
end
|
40
|
-
|
41
|
-
# Get a list of missing parameters.
|
42
|
-
#
|
43
|
-
# @param [Hash] passed_params
|
44
|
-
# @return [Array]
|
45
|
-
def missing_params(passed_params)
|
46
|
-
missing = []
|
47
|
-
|
48
|
-
@params.each do |param, required|
|
49
|
-
if required and passed_params[param].nil?
|
50
|
-
missing << param
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
missing
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
# Remove redundant slashes from URL.
|
60
|
-
# @example
|
61
|
-
# clean_url 'http://google.com////search' # => 'http://google.com/search'
|
62
|
-
#
|
63
|
-
# @param [String] uri
|
64
|
-
# @return [String]
|
65
|
-
def clean_uri(uri)
|
66
|
-
uri.gsub %r{([^:])[\/]+}, '\1/'
|
67
|
-
end
|
68
|
-
end
|
1
|
+
require 'faraday/connection'
|
2
|
+
|
3
|
+
module VtApi
|
4
|
+
# API endpoint interface class.
|
5
|
+
class Endpoint
|
6
|
+
attr_accessor :uri, :method
|
7
|
+
|
8
|
+
# Initialize new endpoint.
|
9
|
+
#
|
10
|
+
# Interface parameters are described as in example below.
|
11
|
+
# @example
|
12
|
+
# {
|
13
|
+
# foo: true, # this describes required parameter
|
14
|
+
# bar: false # this describes a parameter that can be omitted
|
15
|
+
# }
|
16
|
+
#
|
17
|
+
# @param [Object] uri Relative URL of the endpoint.
|
18
|
+
# @param [Object] method HTTP method to be used for the endpoint.
|
19
|
+
# @param [Object] params Endpoint parameters interface.
|
20
|
+
def initialize(uri, method, params = {})
|
21
|
+
@uri = uri
|
22
|
+
@method = method
|
23
|
+
@params = params
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
# Check whether given parameters match endpoint interface.
|
28
|
+
#
|
29
|
+
# @param [Hash] passed_params
|
30
|
+
# @return [Boolean]
|
31
|
+
def params_valid?(passed_params)
|
32
|
+
@params.each do |param, required|
|
33
|
+
if required and passed_params[param].nil?
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
41
|
+
# Get a list of missing parameters.
|
42
|
+
#
|
43
|
+
# @param [Hash] passed_params
|
44
|
+
# @return [Array]
|
45
|
+
def missing_params(passed_params)
|
46
|
+
missing = []
|
47
|
+
|
48
|
+
@params.each do |param, required|
|
49
|
+
if required and passed_params[param].nil?
|
50
|
+
missing << param
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
missing
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Remove redundant slashes from URL.
|
60
|
+
# @example
|
61
|
+
# clean_url 'http://google.com////search' # => 'http://google.com/search'
|
62
|
+
#
|
63
|
+
# @param [String] uri
|
64
|
+
# @return [String]
|
65
|
+
def clean_uri(uri)
|
66
|
+
uri.gsub %r{([^:])[\/]+}, '\1/'
|
67
|
+
end
|
68
|
+
end
|
69
69
|
end
|
@@ -1,130 +1,130 @@
|
|
1
|
-
require_relative '../api_version'
|
2
|
-
require_relative '../endpoint'
|
3
|
-
|
4
|
-
module VtApi
|
5
|
-
module Versions
|
6
|
-
|
7
|
-
# VirusTotal Public API 2.0 singleton interface.
|
8
|
-
# Describes all available API methods (endpoints).
|
9
|
-
class ApiV2 < ApiVersion
|
10
|
-
|
11
|
-
# Root URI for all endpoints.
|
12
|
-
BASE_URI = 'https://virustotal.com/vtapi/v2/'
|
13
|
-
|
14
|
-
# VirusTotal Public API v2.0 interface description.
|
15
|
-
ENDPOINTS = {
|
16
|
-
'file.report': Endpoint.new('file/report', :get, {
|
17
|
-
apikey: true,
|
18
|
-
resource: true
|
19
|
-
}),
|
20
|
-
'file.scan': Endpoint.new('file/scan', :post, {
|
21
|
-
apikey: true,
|
22
|
-
file: true
|
23
|
-
}),
|
24
|
-
'file.rescan': Endpoint.new('file/rescan', :post, {
|
25
|
-
apikey: true,
|
26
|
-
resource: true
|
27
|
-
}),
|
28
|
-
'url.report': Endpoint.new('url/report', :get, {
|
29
|
-
apikey: true,
|
30
|
-
resource: true,
|
31
|
-
schedule_scan: false
|
32
|
-
}),
|
33
|
-
'url.scan': Endpoint.new('url/scan', :post, {
|
34
|
-
apikey: true,
|
35
|
-
url: true
|
36
|
-
}),
|
37
|
-
'domain.report': Endpoint.new('domain/report', :get, {
|
38
|
-
apikey: true,
|
39
|
-
domain: true
|
40
|
-
}),
|
41
|
-
'ip-address.report': Endpoint.new('ip-address/report', :get, {
|
42
|
-
apikey: true,
|
43
|
-
domain: true
|
44
|
-
}),
|
45
|
-
'comments.get': Endpoint.new('comments/get', :get, {
|
46
|
-
apikey: true,
|
47
|
-
resource: true,
|
48
|
-
before: false
|
49
|
-
}),
|
50
|
-
'comments.put': Endpoint.new('comments/put', :post, {
|
51
|
-
apikey: true,
|
52
|
-
resource: true,
|
53
|
-
comment: true
|
54
|
-
}),
|
55
|
-
}
|
56
|
-
|
57
|
-
# List of possible HTTP error codes with descriptions
|
58
|
-
ERRORS = {
|
59
|
-
204 => "Request rate limit exceeded.",
|
60
|
-
400 => "Invalid arguments.",
|
61
|
-
403 => "Access denied.",
|
62
|
-
404 => "Endpoint not found."
|
63
|
-
}
|
64
|
-
|
65
|
-
class << self
|
66
|
-
# Get interface instance.
|
67
|
-
#
|
68
|
-
# @return [VtApi::Versions::ApiV2]
|
69
|
-
def instance
|
70
|
-
@instance ||= self.new
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# Get API method endpoint interface.
|
75
|
-
#
|
76
|
-
# @param [String] method API method name to be called.
|
77
|
-
# @return [VtApi::Endpoint]
|
78
|
-
def endpoint(method)
|
79
|
-
ENDPOINTS[method.to_sym] unless ENDPOINTS[method.to_sym].nil?
|
80
|
-
end
|
81
|
-
|
82
|
-
# Check whether given method is defined in interface.
|
83
|
-
#
|
84
|
-
# @param [String] method Method name.
|
85
|
-
# @return [Boolean]
|
86
|
-
def endpoint?(method)
|
87
|
-
not endpoint(method).nil?
|
88
|
-
end
|
89
|
-
|
90
|
-
# Get API HTTP-code description.
|
91
|
-
#
|
92
|
-
# @param [Integer] http_code
|
93
|
-
# @return [String] Error description.
|
94
|
-
def error(http_code)
|
95
|
-
ERRORS[http_code] unless ERRORS[http_code].nil?
|
96
|
-
end
|
97
|
-
|
98
|
-
# Check whether API HTTP-code means error.
|
99
|
-
#
|
100
|
-
# @param [Integer] http_code
|
101
|
-
# @return [Boolean] Error description.
|
102
|
-
def error?(http_code)
|
103
|
-
not error(http_code).nil?
|
104
|
-
end
|
105
|
-
|
106
|
-
# Get API base URL.
|
107
|
-
#
|
108
|
-
# @return [String]
|
109
|
-
def base_url
|
110
|
-
BASE_URI
|
111
|
-
end
|
112
|
-
|
113
|
-
# API interface name/version.
|
114
|
-
#
|
115
|
-
# @return [String]
|
116
|
-
def version
|
117
|
-
'VTAPI-2.0'
|
118
|
-
end
|
119
|
-
|
120
|
-
private
|
121
|
-
|
122
|
-
# Locked constructor.
|
123
|
-
def initialize
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# Shorthand for <code>ApiV2.instance</code>
|
128
|
-
API_V2 = ApiV2.instance
|
129
|
-
end
|
1
|
+
require_relative '../api_version'
|
2
|
+
require_relative '../endpoint'
|
3
|
+
|
4
|
+
module VtApi
|
5
|
+
module Versions
|
6
|
+
|
7
|
+
# VirusTotal Public API 2.0 singleton interface.
|
8
|
+
# Describes all available API methods (endpoints).
|
9
|
+
class ApiV2 < ApiVersion
|
10
|
+
|
11
|
+
# Root URI for all endpoints.
|
12
|
+
BASE_URI = 'https://virustotal.com/vtapi/v2/'
|
13
|
+
|
14
|
+
# VirusTotal Public API v2.0 interface description.
|
15
|
+
ENDPOINTS = {
|
16
|
+
'file.report': Endpoint.new('file/report', :get, {
|
17
|
+
apikey: true,
|
18
|
+
resource: true
|
19
|
+
}),
|
20
|
+
'file.scan': Endpoint.new('file/scan', :post, {
|
21
|
+
apikey: true,
|
22
|
+
file: true
|
23
|
+
}),
|
24
|
+
'file.rescan': Endpoint.new('file/rescan', :post, {
|
25
|
+
apikey: true,
|
26
|
+
resource: true
|
27
|
+
}),
|
28
|
+
'url.report': Endpoint.new('url/report', :get, {
|
29
|
+
apikey: true,
|
30
|
+
resource: true,
|
31
|
+
schedule_scan: false
|
32
|
+
}),
|
33
|
+
'url.scan': Endpoint.new('url/scan', :post, {
|
34
|
+
apikey: true,
|
35
|
+
url: true
|
36
|
+
}),
|
37
|
+
'domain.report': Endpoint.new('domain/report', :get, {
|
38
|
+
apikey: true,
|
39
|
+
domain: true
|
40
|
+
}),
|
41
|
+
'ip-address.report': Endpoint.new('ip-address/report', :get, {
|
42
|
+
apikey: true,
|
43
|
+
domain: true
|
44
|
+
}),
|
45
|
+
'comments.get': Endpoint.new('comments/get', :get, {
|
46
|
+
apikey: true,
|
47
|
+
resource: true,
|
48
|
+
before: false
|
49
|
+
}),
|
50
|
+
'comments.put': Endpoint.new('comments/put', :post, {
|
51
|
+
apikey: true,
|
52
|
+
resource: true,
|
53
|
+
comment: true
|
54
|
+
}),
|
55
|
+
}
|
56
|
+
|
57
|
+
# List of possible HTTP error codes with descriptions
|
58
|
+
ERRORS = {
|
59
|
+
204 => "Request rate limit exceeded.",
|
60
|
+
400 => "Invalid arguments.",
|
61
|
+
403 => "Access denied.",
|
62
|
+
404 => "Endpoint not found."
|
63
|
+
}
|
64
|
+
|
65
|
+
class << self
|
66
|
+
# Get interface instance.
|
67
|
+
#
|
68
|
+
# @return [VtApi::Versions::ApiV2]
|
69
|
+
def instance
|
70
|
+
@instance ||= self.new
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Get API method endpoint interface.
|
75
|
+
#
|
76
|
+
# @param [String] method API method name to be called.
|
77
|
+
# @return [VtApi::Endpoint]
|
78
|
+
def endpoint(method)
|
79
|
+
ENDPOINTS[method.to_sym] unless ENDPOINTS[method.to_sym].nil?
|
80
|
+
end
|
81
|
+
|
82
|
+
# Check whether given method is defined in interface.
|
83
|
+
#
|
84
|
+
# @param [String] method Method name.
|
85
|
+
# @return [Boolean]
|
86
|
+
def endpoint?(method)
|
87
|
+
not endpoint(method).nil?
|
88
|
+
end
|
89
|
+
|
90
|
+
# Get API HTTP-code description.
|
91
|
+
#
|
92
|
+
# @param [Integer] http_code
|
93
|
+
# @return [String] Error description.
|
94
|
+
def error(http_code)
|
95
|
+
ERRORS[http_code] unless ERRORS[http_code].nil?
|
96
|
+
end
|
97
|
+
|
98
|
+
# Check whether API HTTP-code means error.
|
99
|
+
#
|
100
|
+
# @param [Integer] http_code
|
101
|
+
# @return [Boolean] Error description.
|
102
|
+
def error?(http_code)
|
103
|
+
not error(http_code).nil?
|
104
|
+
end
|
105
|
+
|
106
|
+
# Get API base URL.
|
107
|
+
#
|
108
|
+
# @return [String]
|
109
|
+
def base_url
|
110
|
+
BASE_URI
|
111
|
+
end
|
112
|
+
|
113
|
+
# API interface name/version.
|
114
|
+
#
|
115
|
+
# @return [String]
|
116
|
+
def version
|
117
|
+
'VTAPI-2.0'
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
# Locked constructor.
|
123
|
+
def initialize
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Shorthand for <code>ApiV2.instance</code>
|
128
|
+
API_V2 = ApiV2.instance
|
129
|
+
end
|
130
130
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require_relative 'api_v2'
|
2
|
-
|
3
|
-
module VtApi
|
4
|
-
module Versions
|
5
|
-
|
6
|
-
# Default API version used by ApiProvider
|
7
|
-
#
|
8
|
-
# @see VtApi::ApiProvider
|
9
|
-
DEFAULT = API_V2
|
10
|
-
end
|
1
|
+
require_relative 'api_v2'
|
2
|
+
|
3
|
+
module VtApi
|
4
|
+
module Versions
|
5
|
+
|
6
|
+
# Default API version used by ApiProvider
|
7
|
+
#
|
8
|
+
# @see VtApi::ApiProvider
|
9
|
+
DEFAULT = API_V2
|
10
|
+
end
|
11
11
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
require_relative 'versions/api_v2'
|
1
|
+
require_relative 'versions/api_v2'
|
2
2
|
require_relative 'versions/default'
|
data/lib/vt_api/internal.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative 'internal/api_provider'
|
2
|
-
require_relative 'internal/api_version'
|
3
|
-
require_relative 'internal/endpoint'
|
1
|
+
require_relative 'internal/api_provider'
|
2
|
+
require_relative 'internal/api_version'
|
3
|
+
require_relative 'internal/endpoint'
|
4
4
|
require_relative 'internal/versions'
|
data/lib/vt_api/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module VtApi
|
2
|
-
VERSION = "0.1.2"
|
3
|
-
end
|
1
|
+
module VtApi
|
2
|
+
VERSION = "0.1.2.1"
|
3
|
+
end
|