rubg 0.1.3 → 0.1.4

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: 30c5fa847dde8f815c0bc0e5acef0586886a7eec299c6dd75f04b60878553616
4
- data.tar.gz: 9228f84e1d438a246eb680057ef98646f4e31a3a8988c71fd2ffe9aad715ac2b
3
+ metadata.gz: 74e11b6f6090d28926b01b5370636d1974d96e3a8379371d7bdd3c6f0ab5adca
4
+ data.tar.gz: e5aee919fce9263f75d3fb5a8f18f98447787afabe1748eba55768cdf5628452
5
5
  SHA512:
6
- metadata.gz: de0897838c786655f77303ea177870f652423ce5c3ff24ca22becd74affe3de512f1cffc3aad28e9260d55b997de1a333b920274b3a75e2b1084a791b34ced4e
7
- data.tar.gz: d0315f45b876e5a6aa5ebca73fc7ed130b55dc3d7b30a2ead9294f9404015afa88e7e1b697f2e62b20b0a0ae00ff7ea491867457731b4e359c5d428fa4643115
6
+ metadata.gz: 0717ccdf1144e4cc74b764906ef08cf4a71e5031cc0523bf8e0cc9da7875ff7eb0cbd3635cad6557dc6269c5b512645ae10993e0efcd0a007a2660e36328c112
7
+ data.tar.gz: 10dcfbaa0242892d7c543cd73ab0ceebfb459b897dce7a4096f7bec2dc5a8af964d2b703afb3bb249eaa562ccbf65504bc0c4c2ab15339b9f2af595d2fe77d3c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubg (0.1.3)
4
+ rubg (0.1.4)
5
5
  httparty (~> 0.16.2)
6
6
  json
7
7
 
data/README.md CHANGED
@@ -6,20 +6,21 @@ It is also a side project I am using to build my own Ruby skills. As such, updat
6
6
 
7
7
  ## Status
8
8
 
9
- Development is very much in-progress.
9
+ Development is very much in-progress. Note that breaking changes with new releases will be semi-frequent until initial development is complete (~1.0.0).
10
10
 
11
11
  #### Working:
12
12
  - The /status endpoint is fully functional.
13
- - The /players endpoint is partially functional. Queries may be performed, but the response is raw JSON only.
13
+ - The /players endpoint is mostly functional. Queries may be performed, and player objects returned. Match data is ID strings only.
14
14
 
15
15
  #### To-do
16
- 1. Finish /players endpoint, converting players to Player objects and matches to Match objects in response
17
- 2. Add /player endpoint to retrieve a single player
18
- 3. Add /matches endpoint to retrieve a single match, including objects for Rosters, etc.
19
- 4. Telemetry
16
+ 1. Finish /players endpoint, allowing conversion of matches to Match objects in response
17
+ 2. Add /matches endpoint to retrieve a single match, including objects for Rosters, etc.
18
+ 3. Telemetry
20
19
 
21
20
  At some point in there I need to get testing coverage up to date.
22
21
 
22
+ *Note: xbox shards may not work correctly - only pc is currently tested. If you encounter issues pulling data from Xbox shards please log an issue and I will address.*
23
+
23
24
  ## Installation
24
25
 
25
26
  Add this line to your application's Gemfile:
@@ -38,10 +39,12 @@ Or install it yourself as:
38
39
 
39
40
  ## Usage
40
41
 
42
+ Most methods take a hash as argument.
43
+
41
44
  #### Create a Client
42
45
  First, create a client and provide your API key:
43
46
  ```ruby
44
- client = RUBG::Client.new("your-api-key-here")
47
+ client = RUBG::Client.new({:api_key =>"your-api-key-here"})
45
48
  ```
46
49
 
47
50
  The client object is used to make requests. If no key is added the gem will try and find it at ENV['PUBG_API_KEY'].
@@ -57,29 +60,41 @@ client.status.released_at # "2018-04-01T18:00:20Z"
57
60
  ```
58
61
 
59
62
  #### /players Endpoint
60
- /players is currently only partially functional. Queries may be performed, but the response is JSON only. You can obtain match IDs to look up manually, however, until I implement /matches.
63
+ /players is now mostly functional. Queries may be performed, and player objects returned. Match data is ID strings only, which you can use to look up manually until I implement /matches.
64
+
65
+ .players takes two arguments: :shard and :query_params
61
66
 
62
- .players requires an 'options' argument, which should be a hash containing:
67
+ :shard
68
+ - Specify the [shard](https://documentation.playbattlegrounds.com/en/making-requests.html#regions) to retreieve data from. If none is specified, "pc-na" will be used as default.
63
69
 
64
- - "shard" - Specify the [shard](https://documentation.playbattlegrounds.com/en/making-requests.html#regions) to retreieve data from. If none is specified, "pc-na" will be used as default.
65
- - "playerNames" - Comma-separated list of players to search for. Names are case-sensitive.
66
- - "playerIds" - Comma-separated list of player IDs to search for.
70
+ "query_params" - a hash containing any query options. For .players, the hash should contain *one* of the following options:
71
+ - "player_names" - Comma-separated list of players to search for. Names are case-sensitive.
72
+ - "player_ids" - Comma-separated list of player IDs to search for.
67
73
 
68
- Note: If neither playerIds nor playerNames are included in options no results will be returned - at least one name or Id must be present.
74
+ Note: If neither player_ids nor player_names are included in query_params no results will be returned - at least one name or Id must be present.
69
75
 
70
76
  ```ruby
71
- options = {"shard" => "pc-na", "playerNames" => "Shroud,JoshOG,PlayerUnknown"}
72
- players = client.players(options)
77
+ args = {:shard => "pc-na", :query_params => {:player_names => "shroud,JoshOG,PlayerUnknown"}}
78
+ players = client.players(args)
73
79
  ```
74
80
 
75
- The response will contain a top level object called 'errors' or 'data' depending on if the query failed or succeeded.
81
+ The response will contain a top level object called 'errors' or 'data' and 'players', depending on if the query failed or succeeded.
76
82
 
77
83
  ```ruby
78
- players.errors . # [{"title"=>"Not Found", "detail"=>"No players found matching criteria"}]
84
+ players.errors . # [{"title"=>"Not Found", "detail"=>"No players found matching criteria"}]
79
85
  ```
80
86
 
81
87
  ```ruby
82
- players.data # Returns retrieved player data.
88
+ players.data # Returns retrieved player data.
89
+
90
+ players.players.first.name #"shroud"
91
+ players.players.first.name #"account.d50fdc18fcad49c691d38466bed6f8fd"
92
+ players.players.first.match_ids #returns array of all match IDs for the player
93
+
94
+ players.response_ts # Time object containing date/time of response
95
+ players.ratelimit # Returns the max rate limit/min for your API key.
96
+ players.ratelimit_remaining # Returns the number of requests your API key has remaining before hitting the ratelimit.
97
+
83
98
  ```
84
99
 
85
100
  ## Contributing
data/lib/rubg/client.rb CHANGED
@@ -6,25 +6,29 @@ module RUBG
6
6
  base_uri 'https://api.playbattlegrounds.com'
7
7
  attr_accessor :api_key, :content_type, :gzip
8
8
 
9
- def initialize(api_key=ENV['PUBG_API_KEY'],gzip=false)
10
- @api_key = api_key
11
- @content_type = "application/vnd.api+json"
12
- @gzip = gzip
9
+ def initialize( args )
10
+ args = self.class.defaults.merge(args)
11
+ @api_key = args[:api_key]
12
+ @content_type = args[:content_type]
13
+ @gzip = args[:gzip]
13
14
  end
14
15
 
15
16
 
16
- def status
17
- RUBG::Status.fetch(self)
17
+ def status( args={} )
18
+ args = {:client => self }.merge(args)
19
+ RUBG::Status.fetch(args)
18
20
  end
19
21
 
20
22
 
21
- def players(shard=$RUBG_DEFAULT_SHARD,query_options={})
22
- RUBG::Players.fetch(self, shard, query_options)
23
+ def players( args )
24
+ args = {:client => self }.merge(args)
25
+ RUBG::Players.fetch( args )
23
26
  end
24
27
 
25
28
 
26
- def player
27
-
29
+ def player( args )
30
+ args = {:client => self }.merge(args)
31
+ RUBG::Player.fetch( args )
28
32
  end
29
33
 
30
34
 
@@ -42,5 +46,16 @@ module RUBG
42
46
 
43
47
  end
44
48
 
49
+
50
+ private
51
+
52
+ def self.defaults
53
+ {
54
+ :api_key => ENV['PUBG_API_KEY'],
55
+ :content_type => "application/vnd.api+json",
56
+ :gzip => false
57
+ }
58
+ end
59
+
45
60
  end
46
61
  end
data/lib/rubg/player.rb CHANGED
@@ -1,8 +1,75 @@
1
- module RUBG
2
- class Player
1
+ module RUBG
2
+ class Player < RubgEndpoint
3
+ attr_reader :player_id, :name, :created, :updated, :patch_version, :shard_id, :stats,
4
+ :title_id, :assets, :match_ids, :link
5
+
6
+ attr_accessor :matches
7
+
8
+ def initialize( args )
9
+ args = self.class.defaults.merge(args)
10
+ super({
11
+ :response => args[:response]
12
+ })
13
+ if args[:response]["data"]
14
+ @player_id = args[:player_data]["id"]
15
+ @name = args[:player_data]["attributes"]["name"]
16
+ @created = args[:player_data]["attributes"]["createdAt"]
17
+ @updated = args[:player_data]["attributes"]["updatedAt"]
18
+ @patch_version = args[:player_data]["attributes"]["patchVersion"]
19
+ @shard_id = args[:player_data]["attributes"]["shardId"]
20
+ @stats = args[:player_data]["attributes"]["stats"]
21
+ @title_id = args[:player_data]["attributes"]["titleId"]
22
+ @assets = args[:player_data]["relationships"]["assets"]["data"]
23
+ @match_ids = match_id_array(args[:player_data]["relationships"]["matches"]["data"])
24
+ @matches = nil
25
+ @link = args[:player_data]["links"]["self"]
26
+ end
27
+ end
28
+
29
+
30
+ def self.fetch( args )
31
+ args = self.defaults.merge(args)
32
+ STDERR.puts args.inspect
33
+ endpoint = "player"
34
+
35
+ player_id = args[:query_params][:player_id]
36
+ args[:query_params].delete(:player_id)
37
+
38
+ super({
39
+ :client => args[:client],
40
+ :endpoint => endpoint,
41
+ :lookup_id => player_id,
42
+ :shard => args[:shard],
43
+ :query_params => args[:query_params]
44
+ })
45
+
46
+ player_data = @response["data"]
47
+
48
+ RUBG::Player.new({
49
+ :client => args[:client],
50
+ :response => @response,
51
+ :player_data => player_data
52
+ })
53
+ end
3
54
 
4
- end
5
- end
6
55
 
56
+ private
7
57
 
8
- # response["data"][0]["relationships"]["matches"]["data"][0]["id"]
58
+ def match_id_array(data)
59
+ match_ids = []
60
+
61
+ data.each do |m|
62
+ id = m["id"]
63
+ match_ids << id
64
+ end
65
+
66
+ return match_ids
67
+ end
68
+
69
+
70
+ def self.defaults
71
+ super
72
+ end
73
+
74
+ end
75
+ end
data/lib/rubg/players.rb CHANGED
@@ -1,22 +1,54 @@
1
1
  module RUBG
2
2
  class Players < RubgEndpoint
3
+ attr_reader :players
4
+
5
+ def initialize( args )
6
+ args = self.class.defaults.merge(args)
3
7
 
4
- def initialize(client,response)
5
8
  super
9
+
10
+ @players = []
11
+ if args[:response]["data"]
12
+ args[:response]["data"].each do |player_data|
13
+ player = RUBG::Player.new({
14
+ :client => args[:client],
15
+ :response => args[:response],
16
+ :player_data => player_data
17
+ })
18
+
19
+
20
+ @players << player
21
+ end
22
+ end
6
23
  end
7
24
 
8
25
 
9
- def self.fetch(client,shard,query_options)
26
+ def self.fetch( args )
27
+ args = self.defaults.merge(args)
28
+
10
29
  endpoint = "players"
11
- query_options["filter[playerNames]"] = query_options.delete("playerNames")
12
- query_options["filter[playerIds]"] = query_options.delete("playerIds")
13
- super(client,endpoint,shard,query_options)
14
30
 
15
- RUBG::Players.new(client,@response)
31
+ args[:query_params]["filter[playerNames]"] = args[:query_params].delete(:player_names)
32
+ args[:query_params]["filter[playerIds]"] = args[:query_params].delete(:player_ids)
33
+ super({
34
+ :client => args[:client],
35
+ :endpoint => endpoint,
36
+ :shard => args[:shard],
37
+ :query_params => args[:query_params]
38
+ })
39
+
40
+ RUBG::Players.new({
41
+ :client => args[:client],
42
+ :response => @response
43
+ })
16
44
  end
17
45
 
18
- end
19
- end
20
46
 
47
+ private
48
+
49
+ def self.defaults
50
+ super
51
+ end
21
52
 
22
- # response["data"][0]["relationships"]["matches"]["data"][0]["id"]
53
+ end
54
+ end
@@ -2,23 +2,37 @@ module RUBG
2
2
  class RubgEndpoint
3
3
  attr_reader :errors, :data, :response_ts, :ratelimit, :ratelimit_remaining, :raw_response
4
4
 
5
- def initialize(client,response)
6
- @errors = response["errors"]
7
- @data = response["data"]
8
- @response_ts = Time.parse(response.headers['date']) if response.headers['date']
9
- @ratelimit = response.headers['x-ratelimit-limit']
10
- @ratelimit_remaining = response.headers['x-ratelimit-remaining']
11
- @raw_response = response
5
+ def initialize( args )
6
+ args = self.class.defaults.merge(args)
7
+ @errors = args[:response]["errors"]
8
+ @data = args[:response]["data"]
9
+ @response_ts = Time.parse(args[:response].headers['date']) if args[:response].headers['date']
10
+ @ratelimit = args[:response].headers['x-ratelimit-limit']
11
+ @ratelimit_remaining = args[:response].headers['x-ratelimit-remaining']
12
+ @raw_response = args[:response]
12
13
  end
13
14
 
14
15
 
15
- def self.fetch(client,endpoint,shard={},query_options={})
16
- @uri = assemble_uri(shard,endpoint)
17
- @headers = assemble_headers(client)
18
- @query = assemble_query(client,query_options)
16
+ def self.fetch( args ) #client,endpoint,shard={},query_params={}
17
+ args = self.defaults.merge(args)
18
+
19
+ uri = assemble_uri({
20
+ :shard => args[:shard],
21
+ :endpoint => args[:endpoint],
22
+ :lookup_id => args[:lookup_id]
23
+ })
19
24
 
20
- @response = client.class.get(@uri,{headers: @headers,
21
- query: @query})
25
+ headers = assemble_headers({
26
+ :client => args[:client]
27
+ })
28
+
29
+ query = assemble_query({
30
+ :client => args[:client],
31
+ :query_params => args[:query_params]
32
+ })
33
+
34
+ @response = args[:client].class.get(uri,{headers: headers,
35
+ query: query})
22
36
 
23
37
  return @response
24
38
  end
@@ -26,38 +40,56 @@ module RUBG
26
40
 
27
41
 
28
42
  private
29
- def self.assemble_uri(shard,endpoint)
30
- if endpoint == 'status'
43
+
44
+ def self.defaults
45
+ {
46
+ :shard => $RUBG_DEFAULT_SHARD,
47
+ :query_params => {},
48
+ }
49
+ end
50
+
51
+
52
+ def self.assemble_uri( args )
53
+ args = self.defaults.merge(args)
54
+
55
+ if args[:endpoint] == 'status'
31
56
  uri = '/status'
57
+ elsif args[:endpoint] == 'player'
58
+ uri = "/shards/#{args[:shard]}/players/#{args[:lookup_id]}"
32
59
  else
33
- uri = "/shards/#{shard}/#{endpoint}"
60
+ uri = "/shards/#{args[:shard]}/#{args[:endpoint]}"
34
61
  end
35
-
36
62
  return uri
37
63
  end
38
64
 
39
65
 
40
- def self.assemble_headers(client)
41
- headers = { "Accept" => client.content_type }
66
+ def self.assemble_headers( args ) #client
67
+ args = self.defaults.merge(args)
68
+
69
+ headers = { "Accept" => args[:client].content_type }
42
70
 
43
- headers["Authorization"] = client.api_key if client.api_key
44
- headers["Accept-Encoding"] = "gzip" if client.gzip
71
+ headers["Authorization"] = args[:client].api_key if args[:client].api_key
72
+ headers["Accept-Encoding"] = "gzip" if args[:client].gzip
45
73
 
46
74
  return headers
47
75
  end
48
76
 
49
77
 
50
- def self.assemble_query(client, query_options)
51
- query_options.each do |key,value|
78
+ def self.assemble_query( args ) #client, query_params
79
+ args = self.defaults.merge(args)
80
+
81
+ args[:query_params].each do |key,value|
52
82
  remove_spaces(value) if value
53
83
  end
54
- query = query_options
84
+ query = args[:query_params]
55
85
 
56
86
  return query
57
87
  end
58
88
 
59
- def self.remove_spaces(string)
60
- string.gsub!(/((?<=,)\s+)|(\s+(?=,))/,"") if string
61
- end
89
+
90
+ private
91
+ def self.remove_spaces(string)
92
+ string.gsub!(/((?<=,)\s+)|(\s+(?=,))/,"") if string
93
+ end
62
94
  end
63
95
  end
data/lib/rubg/status.rb CHANGED
@@ -2,23 +2,39 @@ module RUBG
2
2
  class Status < RubgEndpoint
3
3
  attr_reader :released_at, :version
4
4
 
5
- def initialize(client,response)
6
- @alive = ((response.response.class == Net::HTTPOK) ? true : false)
7
- @released_at = Time.parse(response["data"]["attributes"]["releasedAt"])
8
- @version = response["data"]["attributes"]["version"]
5
+ def initialize( args )
6
+ args = self.class.defaults.merge(args)
7
+
8
+ @alive = ((args[:response].response.class == Net::HTTPOK) ? true : false)
9
+ @released_at = Time.parse(args[:response]["data"]["attributes"]["releasedAt"])
10
+ @version = args[:response]["data"]["attributes"]["version"]
9
11
  super
10
12
  end
11
13
 
12
14
 
13
- def self.fetch(client)
15
+ def self.fetch( args )
14
16
  endpoint = "status"
15
- super(client,endpoint)
17
+ super({
18
+ :client => args[:client],
19
+ :endpoint => endpoint
20
+ })
16
21
 
17
- RUBG::Status.new(client, @response)
22
+ RUBG::Status.new({
23
+ :client => args[:client],
24
+ :response => @response
25
+ })
18
26
  end
19
27
 
20
28
  def alive?
21
29
  @alive ? true : false
22
30
  end
31
+
32
+
33
+ private
34
+
35
+ def self.defaults
36
+ super
37
+ end
38
+
23
39
  end
24
40
  end
data/lib/rubg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RUBG
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/rubg.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require "rubg/version"
2
2
  require "rubg/client"
3
3
  require "rubg/rubg_endpoint"
4
+ require "rubg/match"
5
+ require "rubg/matches"
6
+ require "rubg/player"
4
7
  require "rubg/players"
5
8
  require "rubg/status"
6
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dor
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-05 00:00:00.000000000 Z
11
+ date: 2018-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler