vainglory-api 0.0.3

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/vainglory_api.rb +110 -0
  3. metadata +114 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: df230271ab484d16bf6be0704412c6c738adbc50
4
+ data.tar.gz: 4e8f5f358709b76ceb99f394cd0d5d1d40a8dad9
5
+ SHA512:
6
+ metadata.gz: 98837caf5b1f58a0ec473f87585b972863048079ae6ffb00e7d83ac7dd937b37ae297ff4d8004c194fe73e7b9e6e160170f75261b2be8cc5898c2229d8f9e294
7
+ data.tar.gz: 3dfcf7e3aa98c1f9392c9900de72d10ee704c76d1c2564c7e7042013217a0f407406f166d7a50d00c689c415af6b0125397415a46a29528952fde455e3a9e205
@@ -0,0 +1,110 @@
1
+ require 'json'
2
+ require 'ostruct'
3
+ require 'openssl'
4
+ require 'net/http'
5
+
6
+ class VaingloryAPI
7
+ BASE_URL = "https://api.dc01.gamelockerapp.com"
8
+
9
+ def initialize(api_key, region = "na")
10
+ @api_key = api_key
11
+ @region = region
12
+ end
13
+
14
+ def samples(filter_params = {})
15
+ get_request(endpoint_uri("shards/#{@region}/samples", filter_params))
16
+ end
17
+
18
+ def matches(filter_params = {})
19
+ get_request(endpoint_uri("shards/#{@region}/matches", filter_params))
20
+ end
21
+
22
+ def match(match_id)
23
+ get_request(endpoint_uri("shards/#{@region}/matches/#{match_id}"))
24
+ end
25
+
26
+ def players(*names)
27
+ filter_params = {"filter[playerNames]" => names.join(',')}
28
+ get_request(endpoint_uri("shards/#{@region}/players", filter_params))
29
+ end
30
+
31
+ def player(player_id)
32
+ get_request(endpoint_uri("shards/#{@region}/players/#{player_id}"))
33
+ end
34
+
35
+ def telemetry(url)
36
+ get_request(URI(url), true, false)
37
+ end
38
+
39
+ def teams(filter_params = {})
40
+ raise(NotImplementedError, "Coming soon!")
41
+ end
42
+
43
+ def team(team_id)
44
+ raise(NotImplementedError, "Coming soon!")
45
+ end
46
+
47
+ def link(link_id)
48
+ raise(NotImplementedError, "Coming soon!")
49
+ end
50
+
51
+ def status
52
+ get_request_without_headers(endpoint_uri('status'))
53
+ end
54
+
55
+ private
56
+
57
+ def get_request_without_headers(uri)
58
+ get_request(uri, false)
59
+ end
60
+
61
+ def get_request(uri, with_headers = true, with_auth = true)
62
+ req = Net::HTTP::Get.new(uri)
63
+ req = apply_headers(req, with_auth) if with_headers
64
+
65
+ request(uri, req)
66
+ end
67
+
68
+ def apply_headers(req, with_auth = true)
69
+ req['Authorization'] = "Bearer #{@api_key}" if with_auth
70
+ req['X-TITLE-ID'] = "semc-vainglory"
71
+ req['Accept'] = "application/vnd.api+json"
72
+
73
+ req
74
+ end
75
+
76
+ def request(uri, req)
77
+ http = Net::HTTP.new(uri.host, uri.port)
78
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
79
+ http.use_ssl = true
80
+
81
+ response(http.request(req))
82
+ end
83
+
84
+ def endpoint_uri(path, filter_params = {})
85
+ uri = URI(endpoint_url(path))
86
+ uri.query = URI.encode_www_form(filter_params)
87
+
88
+ uri
89
+ end
90
+
91
+ def endpoint_url(path)
92
+ [BASE_URL, path].join('/')
93
+ end
94
+
95
+ def response(response_data)
96
+ parsed_body = JSON.parse(response_data.body, object_class: OpenStruct)
97
+ parsed_code = response_data.code.to_i
98
+
99
+ OpenStruct.new({
100
+ code: parsed_code,
101
+ success?: parsed_code < 300,
102
+ rate_limit: response_data['X-RateLimit-Limit'].to_i,
103
+ rate_remaining: response_data['X-RateLimit-Remaining'].to_i,
104
+ rate_reset: response_data['X-RateLimit-Reset'].to_i,
105
+ data: parsed_body.respond_to?(:data) ? parsed_body.data : parsed_body,
106
+ error: parsed_body.respond_to?(:error)? parsed_body.error : nil,
107
+ raw: response_data
108
+ })
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vainglory-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Chet Bortz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: webmock
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: vcr
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.14'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codeclimate-test-reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ description: A Ruby libary wrapper for the Vainglory API
84
+ email:
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/vainglory_api.rb
90
+ homepage:
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.8
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Vainglory API
114
+ test_files: []