kag 0.0.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.
- data/.gitignore +1 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +24 -0
- data/LICENSE +19 -0
- data/README.md +47 -0
- data/Rakefile +8 -0
- data/kag.gemspec +31 -0
- data/lib/kag.rb +4 -0
- data/lib/kag/avatar.rb +115 -0
- data/lib/kag/kag.rb +10 -0
- data/lib/kag/player.rb +174 -0
- data/lib/kag/version.rb +3 -0
- data/spec/fixtures/kag_cassettes/avatar.yml +116 -0
- data/spec/fixtures/kag_cassettes/avatar_l.yml +59 -0
- data/spec/fixtures/kag_cassettes/avatar_m.yml +59 -0
- data/spec/fixtures/kag_cassettes/avatar_s.yml +59 -0
- data/spec/fixtures/kag_cassettes/banned_player.yml +61 -0
- data/spec/fixtures/kag_cassettes/developer.yml +60 -0
- data/spec/fixtures/kag_cassettes/guard.yml +60 -0
- data/spec/fixtures/kag_cassettes/normal.yml +60 -0
- data/spec/fixtures/kag_cassettes/player.yml +60 -0
- data/spec/fixtures/kag_cassettes/team_member.yml +60 -0
- data/spec/fixtures/kag_cassettes/tester.yml +60 -0
- data/spec/lib/kag/avatar_spec.rb +133 -0
- data/spec/lib/kag/kag_spec.rb +15 -0
- data/spec/lib/kag/player_spec.rb +258 -0
- data/spec/spec_helper.rb +10 -0
- metadata +156 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
.rake_tasks~
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
addressable (2.2.7)
|
5
|
+
crack (0.3.1)
|
6
|
+
httparty (0.8.3)
|
7
|
+
multi_json (~> 1.0)
|
8
|
+
multi_xml
|
9
|
+
multi_json (1.3.2)
|
10
|
+
multi_xml (0.4.4)
|
11
|
+
rake (0.9.2.2)
|
12
|
+
vcr (2.1.1)
|
13
|
+
webmock (1.8.6)
|
14
|
+
addressable (>= 2.2.7)
|
15
|
+
crack (>= 0.1.7)
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
httparty (~> 0.8.3)
|
22
|
+
rake
|
23
|
+
vcr (>= 2.1.1)
|
24
|
+
webmock (>= 1.8.6)
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (C) 2012 Kyrylo Silin
|
2
|
+
|
3
|
+
This software is provided 'as-is', without any express or implied
|
4
|
+
warranty. In no event will the authors be held liable for any damages
|
5
|
+
arising from the use of this software.
|
6
|
+
|
7
|
+
Permission is granted to anyone to use this software for any purpose,
|
8
|
+
including commercial applications, and to alter it and redistribute it
|
9
|
+
freely, subject to the following restrictions:
|
10
|
+
|
11
|
+
1. The origin of this software must not be misrepresented; you must not
|
12
|
+
claim that you wrote the original software. If you use this software
|
13
|
+
in a product, an acknowledgment in the product documentation would be
|
14
|
+
appreciated but is not required.
|
15
|
+
|
16
|
+
2. Altered source versions must be plainly marked as such, and must not be
|
17
|
+
misrepresented as being the original software.
|
18
|
+
|
19
|
+
3. This notice may not be removed or altered from any source distribution.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
KAG
|
2
|
+
===
|
3
|
+
|
4
|
+
* [https://github.com/kyrylo/ruby-kag/][rkag]
|
5
|
+
|
6
|
+
Description
|
7
|
+
-----------
|
8
|
+
|
9
|
+
This is [King Arthur's Gold][kag] API wrapper implemented in Ruby language.
|
10
|
+
|
11
|
+
Features
|
12
|
+
--------
|
13
|
+
|
14
|
+
* Ability to retrieve information about player (nick, role and so on)
|
15
|
+
* Ability to retrieve player's avatar on [KAG forums][kagf]
|
16
|
+
|
17
|
+
Installation
|
18
|
+
------------
|
19
|
+
|
20
|
+
gem install ruby-kag
|
21
|
+
|
22
|
+
Synopsis
|
23
|
+
--------
|
24
|
+
|
25
|
+
``` ruby
|
26
|
+
require 'kag'
|
27
|
+
|
28
|
+
player = KAG::Player.new('prostosuper')
|
29
|
+
|
30
|
+
# Get small avatar of player prostosuper
|
31
|
+
player.avatar.small
|
32
|
+
|
33
|
+
# Force request to API to refresh player's small avatar
|
34
|
+
player.avatar.small(true)
|
35
|
+
|
36
|
+
# Get all information about player
|
37
|
+
player.info
|
38
|
+
```
|
39
|
+
|
40
|
+
License
|
41
|
+
-------
|
42
|
+
|
43
|
+
The project uses Zlib License. See LICENSE file for more information.
|
44
|
+
|
45
|
+
[rkag]: https://github.com/kyrylo/ruby-kag/ "Home page"
|
46
|
+
[kag]: http://kag2d.com/
|
47
|
+
[kagf]: https://forum.kag2d.com/
|
data/Rakefile
ADDED
data/kag.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require './lib/kag/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'kag'
|
5
|
+
s.version = KAG::VERSION
|
6
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
7
|
+
s.summary = "King Arthur's Gold (KAG) game API wrapper written in Ruby."
|
8
|
+
s.author = 'Kyrylo Silin'
|
9
|
+
s.email = 'kyrylosilin@gmail.com'
|
10
|
+
s.homepage = 'https://github.com/kyrylo/ruby-kag'
|
11
|
+
s.license = 'zlib'
|
12
|
+
|
13
|
+
s.require_path = 'lib'
|
14
|
+
s.files = `git ls-files`.split "\n"
|
15
|
+
s.test_files = `git ls-files -- spec`.split "\n"
|
16
|
+
|
17
|
+
s.extra_rdoc_files = %W{README.md LICENSE}
|
18
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
19
|
+
|
20
|
+
s.add_runtime_dependency 'httparty', '~>0.8.3'
|
21
|
+
s.add_development_dependency 'rake'
|
22
|
+
s.add_development_dependency 'webmock', '>=1.8.6'
|
23
|
+
s.add_development_dependency 'vcr', '>=2.1.1'
|
24
|
+
|
25
|
+
s.required_ruby_version = '~>1.9'
|
26
|
+
|
27
|
+
s.description = <<description
|
28
|
+
Ruby implementation of King Arthur's Gold (aka KAG) Application Programming
|
29
|
+
Interface (aka API).
|
30
|
+
description
|
31
|
+
end
|
data/lib/kag.rb
ADDED
data/lib/kag/avatar.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
module KAG
|
2
|
+
# https://wiki.kag2d.com/wiki/Avatar_URL
|
3
|
+
class Player::Avatar
|
4
|
+
# Public: Initialize a new avatar.
|
5
|
+
#
|
6
|
+
# nick - The case-insensitive name of the avatar owner.
|
7
|
+
def initialize(nick)
|
8
|
+
@nick = nick
|
9
|
+
end
|
10
|
+
|
11
|
+
# Public: Retrieve avatar information about KAG player.
|
12
|
+
#
|
13
|
+
# force - The flag which enables/disables caching of the avatars. Being
|
14
|
+
# equal to true, disables caching and resend GET request to KAG API
|
15
|
+
# endpoint (default: false).
|
16
|
+
#
|
17
|
+
# Returns Hash with avatar sizes of the player or Hash with statusMessage,
|
18
|
+
# if the player doesn't exist.
|
19
|
+
def sizes(force = false)
|
20
|
+
if force
|
21
|
+
@sizes = get_avatar
|
22
|
+
else
|
23
|
+
@sizes ||= get_avatar
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Internal: Intercepts all method calls on instances of this class, that
|
28
|
+
# aren't defined here. If the called method coincides with one of the valid
|
29
|
+
# methods, then it gets the value of that Hash pair from @sizes Hash. If
|
30
|
+
# the parameter true was provided, then the method performs a request
|
31
|
+
# directly to API rather than to cache.
|
32
|
+
#
|
33
|
+
# force - If equals to true, then request an avatar from API. If false, then
|
34
|
+
# use avatar from cache (default: false).
|
35
|
+
#
|
36
|
+
# Examples
|
37
|
+
#
|
38
|
+
# avatar.foo_bar_baz
|
39
|
+
# # => NoMethodError
|
40
|
+
# avatar.small
|
41
|
+
# # => "https://forum.kag2d.com/data/avatars/s/0/231.jpg"
|
42
|
+
#
|
43
|
+
# # From cache.
|
44
|
+
# avatar.small
|
45
|
+
# # => "https://forum.kag2d.com/data/avatars/s/0/231.jpg"
|
46
|
+
#
|
47
|
+
# # Refresh cache.
|
48
|
+
# avatar.small(true)
|
49
|
+
# # => "https://forum.kag2d.com/data/avatars/s/0/231.jpg"
|
50
|
+
#
|
51
|
+
# # Attempt to get an avatar of nonexistent player.
|
52
|
+
# nonexistent_avatar = KAG::Player::Avatar.new('foobarbazbaz')
|
53
|
+
# nonexistent_avatar.small
|
54
|
+
# # => {"statusMessage"=>"Player not found"}
|
55
|
+
#
|
56
|
+
# Returns the value of the method call on self.
|
57
|
+
# Raises NoMethodError, if the given method doesn't exist.
|
58
|
+
def method_missing(m, *args, &block)
|
59
|
+
valid_method = [:small, :medium, :large].find { |size| size === m }
|
60
|
+
|
61
|
+
if valid_method
|
62
|
+
if args[0] === true
|
63
|
+
send("get_#{m}_avatar")
|
64
|
+
else
|
65
|
+
sizes.fetch(m.to_s) { sizes }
|
66
|
+
end
|
67
|
+
else
|
68
|
+
super
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
protected
|
73
|
+
|
74
|
+
# Internal: Send GET request to the KAG API endpoint in order to get
|
75
|
+
# player's avatars (small, medium, large).
|
76
|
+
#
|
77
|
+
# Returns Hash with the information about avatars or Hash with
|
78
|
+
# statusMessage, telling, that player doesn't exist, if there is no KAG
|
79
|
+
# player with given nick.
|
80
|
+
def get_avatar
|
81
|
+
KAG.get "/player/#@nick/avatar"
|
82
|
+
end
|
83
|
+
|
84
|
+
# Internal: Send GET request to the KAG API endpoint in order to get
|
85
|
+
# player's small avatar.
|
86
|
+
#
|
87
|
+
# Returns Hash with the information about avatars or Hash with
|
88
|
+
# statusMessage, telling, that player doesn't exist, if there is no KAG
|
89
|
+
# player with given nick.
|
90
|
+
def get_small_avatar
|
91
|
+
KAG.get "/player/#@nick/avatar/s"
|
92
|
+
end
|
93
|
+
|
94
|
+
# Internal: Send GET request to the KAG API endpoint in order to get
|
95
|
+
# player's medium avatar.
|
96
|
+
#
|
97
|
+
# Returns Hash with the information about avatars or Hash with
|
98
|
+
# statusMessage, telling, that player doesn't exist, if there is no KAG
|
99
|
+
# player with given nick.
|
100
|
+
def get_medium_avatar
|
101
|
+
KAG.get "/player/#@nick/avatar/m"
|
102
|
+
end
|
103
|
+
|
104
|
+
# Internal: Send GET request to the KAG API endpoint in order to get
|
105
|
+
# player's large avatar.
|
106
|
+
#
|
107
|
+
# Returns Hash with the information about avatars or Hash with
|
108
|
+
# statusMessage, telling, that player doesn't exist, if there is no KAG
|
109
|
+
# player with given nick.
|
110
|
+
def get_large_avatar
|
111
|
+
KAG.get "/player/#@nick/avatar/l"
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
data/lib/kag/kag.rb
ADDED
data/lib/kag/player.rb
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
module KAG
|
2
|
+
# https://wiki.kag2d.com/wiki/Player_Info
|
3
|
+
class Player
|
4
|
+
# Public: Returns the String name of the player.
|
5
|
+
attr_reader :nick
|
6
|
+
|
7
|
+
# Public: Returns the KAG::Player::Avatar object.
|
8
|
+
attr_reader :avatar
|
9
|
+
|
10
|
+
# Public: Initialize a new player.
|
11
|
+
#
|
12
|
+
# nick - The case-insensitive name of the player in King Arthur's Gold game.
|
13
|
+
def initialize(nick)
|
14
|
+
@nick = nick
|
15
|
+
@avatar = Avatar.new(nick)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Public: Retrieve information about KAG player.
|
19
|
+
#
|
20
|
+
# force - The flag which enables/disables caching of the info. Being equal
|
21
|
+
# to true, disables caching and resend GET request to KAG API
|
22
|
+
# endpoint (default: false).
|
23
|
+
#
|
24
|
+
# Examples
|
25
|
+
#
|
26
|
+
# player.info
|
27
|
+
# player.info(true) # Disable cached info
|
28
|
+
#
|
29
|
+
# Returns Hash with info about player or Hash with statusMessage, if the
|
30
|
+
# player doesn't exist..
|
31
|
+
def info(force = false)
|
32
|
+
if force
|
33
|
+
@info = get_info
|
34
|
+
else
|
35
|
+
@info ||= get_info
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Public: Get the status of the player.
|
40
|
+
#
|
41
|
+
# Examples
|
42
|
+
#
|
43
|
+
# player.active?
|
44
|
+
# # => false
|
45
|
+
#
|
46
|
+
# Returns true or false.
|
47
|
+
def active?
|
48
|
+
info['active']
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: Get the username of the player.
|
52
|
+
#
|
53
|
+
# Examples
|
54
|
+
#
|
55
|
+
# player.username
|
56
|
+
# # => 'prostosuper'
|
57
|
+
#
|
58
|
+
# # Please, note, that KAG::Player#username is not alias for
|
59
|
+
# # KAG::Player#nick. KAG::Player#username is the name, which is given by
|
60
|
+
# # KAG API and Player#nick is an attribute of your object. Feel the
|
61
|
+
# # difference:
|
62
|
+
# # player = KAG::Player.new('flieslikeabrick')
|
63
|
+
# # player.username
|
64
|
+
# # => 'FliesLikeABrick'
|
65
|
+
# # player.nick
|
66
|
+
# # => 'flieslikeabrick'
|
67
|
+
#
|
68
|
+
# Returns String with containing name of the user in game.
|
69
|
+
def username
|
70
|
+
info['username']
|
71
|
+
end
|
72
|
+
|
73
|
+
# Public: Get the ban status of the player.
|
74
|
+
#
|
75
|
+
# Examples
|
76
|
+
#
|
77
|
+
# player.banned?
|
78
|
+
# # => true
|
79
|
+
#
|
80
|
+
# Returns true or false.
|
81
|
+
def banned?
|
82
|
+
info['banned']
|
83
|
+
end
|
84
|
+
|
85
|
+
# Public: Get the role of the player.
|
86
|
+
#
|
87
|
+
# readable - The Boolean flag, which describes how the return value should
|
88
|
+
# be represented (either machine-readable format or
|
89
|
+
# human-readable) (default: false).
|
90
|
+
#
|
91
|
+
# Examples
|
92
|
+
#
|
93
|
+
# # Machine-readable role.
|
94
|
+
# player.role
|
95
|
+
# # => 4
|
96
|
+
#
|
97
|
+
# # Human-readable role.
|
98
|
+
# player.role(true)
|
99
|
+
# # => 'team member'
|
100
|
+
#
|
101
|
+
# Returns Integer, representing role of the player or String, if readable
|
102
|
+
# flag was used.
|
103
|
+
def role(readable = false)
|
104
|
+
role = info['role']
|
105
|
+
|
106
|
+
if readable
|
107
|
+
case role
|
108
|
+
when 0 then 'normal'
|
109
|
+
when 1 then 'developer'
|
110
|
+
when 2 then 'guard'
|
111
|
+
when 4 then 'team member'
|
112
|
+
when 5 then 'tester'
|
113
|
+
end
|
114
|
+
else
|
115
|
+
role
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Public: Check for account type of the player. Owners of gold account
|
120
|
+
# bought the game.
|
121
|
+
#
|
122
|
+
# Examples
|
123
|
+
#
|
124
|
+
# player.gold?
|
125
|
+
# # => false
|
126
|
+
#
|
127
|
+
# Returns true if the player has gold account or false otherwise.
|
128
|
+
def gold?
|
129
|
+
info['gold']
|
130
|
+
end
|
131
|
+
|
132
|
+
# Public: Get the ban expiration date if user was banned. This field is
|
133
|
+
# appears only for banned users.
|
134
|
+
#
|
135
|
+
# Examples
|
136
|
+
#
|
137
|
+
# player.ban_expiration
|
138
|
+
# # => #<DateTime: 2022-03-02T09:09:53+00:00 ((2459641j,32993s,0n),+0s,2299161j)>
|
139
|
+
#
|
140
|
+
# Returns DateTime object, which has ban expiration date of the player or
|
141
|
+
# nil, if the player has no active bans.
|
142
|
+
def ban_expiration
|
143
|
+
ban_expiration_date = info['banExpiration']
|
144
|
+
DateTime.parse ban_expiration_date if ban_expiration_date
|
145
|
+
end
|
146
|
+
|
147
|
+
# Public: Get the ban reason if user was banned. This field is appears only
|
148
|
+
# for banned users.
|
149
|
+
#
|
150
|
+
# Examples
|
151
|
+
#
|
152
|
+
# player.ban_reason
|
153
|
+
# # => 'Speedhacking'
|
154
|
+
#
|
155
|
+
# Returns String object, which represents description of the ban if any bans
|
156
|
+
# are active.
|
157
|
+
def ban_reason
|
158
|
+
info['banReason']
|
159
|
+
end
|
160
|
+
|
161
|
+
protected
|
162
|
+
|
163
|
+
# Internal: Send GET request to the KAG API endpoint in order to get the
|
164
|
+
# information about KAG player.
|
165
|
+
#
|
166
|
+
# Returns Hash with the information about player or Hash with statusMessage,
|
167
|
+
# telling, that player doesn't exist, if there is no KAG player with given
|
168
|
+
# nick.
|
169
|
+
def get_info
|
170
|
+
KAG.get "/player/#@nick/info"
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
end
|