unchained 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecc40d0b265fc59cbb8bad8b365911f5799d2840
4
- data.tar.gz: 253ee458048eeaf99cc41c723e6e5f11695e703c
3
+ metadata.gz: d440ea525f7c18793f4604906a9c1eb098e70b87
4
+ data.tar.gz: 1d5c9f43267ca976c652ffb615a8d12d5e315a5b
5
5
  SHA512:
6
- metadata.gz: 6d225ace000ab683fc29f9fb604bdc70cf5a0ebae75e08680f1b0cdfebe2c3faa463014a80a4a82cc9ca726f3aa0612f0c27ca31610adb81c505b29116cba817
7
- data.tar.gz: 234e2735c40631bfdc08d3d0f439f9b3db692534829985eb1b767a7111531cdd794913762e8ade37ab1b8d62ea1425db2f3e95179f26e6d610911ab48869e03c
6
+ metadata.gz: 1acaf1d610b637280ddf66f456b54e70acf1833307840c0f1142e3d83c6f1e97c8165fc3210841bcd22cf2b1308feed77eedb8d96ce1766de99a8d251a6cb002
7
+ data.tar.gz: ef53adfdcc531a92902ac9913bcb24599edfdaaa8c245884226eb26dd0f146056777d068fb6f8b4bc160be49ec85d55df760004df4aeea067a45af26f9e85c10
@@ -4,5 +4,10 @@ require_relative 'unchained/error'
4
4
 
5
5
  module Unchained
6
6
  extend Configuration
7
+
8
+ # Delegate to Unchained::Client.new
9
+ def self.new(opts={})
10
+ Unchained::Client.new(opts)
11
+ end
7
12
  end
8
13
 
@@ -1,9 +1,12 @@
1
1
  require_relative 'configuration'
2
- require_relative 'client/resource'
3
- require_relative 'client/request'
2
+ require_relative 'request'
4
3
 
5
4
  # RESOURCES
5
+ require_relative 'client/mixins/resource'
6
6
  require_relative 'client/archetypes'
7
+ require_relative 'client/factions'
8
+ require_relative 'client/races'
9
+ require_relative 'client/patcher'
7
10
  require_relative 'client/servers'
8
11
 
9
12
  module Unchained
@@ -21,10 +24,13 @@ module Unchained
21
24
  'http://api.camelotunchained.com/v1'
22
25
  end
23
26
 
24
- include Unchained::Client::Request
27
+ include Unchained::Request
25
28
 
26
29
  # RESOURCES
27
30
  include Unchained::Client::Archetypes
31
+ include Unchained::Client::Factions
32
+ include Unchained::Client::Races
33
+ include Unchained::Client::Patcher
28
34
  include Unchained::Client::Servers
29
35
  end
30
36
  end
@@ -3,7 +3,7 @@ module Unchained
3
3
  module Archetypes
4
4
 
5
5
  class Archetype
6
- include Unchained::Client::Resource
6
+ include Unchained::Client::Mixins::Resource
7
7
  resource({
8
8
  :description => 'description',
9
9
  :faction => 'faction',
@@ -13,9 +13,7 @@ module Unchained
13
13
  end
14
14
 
15
15
  def archetypes(opts={})
16
- get("#{base_url}/gamedata/archetypes", opts).map do |server|
17
- Archetype.decode_result(server)
18
- end
16
+ get_resources("#{base_url}/gamedata/archetypes", Archetype, opts)
19
17
  end
20
18
 
21
19
  end
@@ -0,0 +1,21 @@
1
+ module Unchained
2
+ class Client
3
+ module Factions
4
+
5
+ class Faction
6
+ include Unchained::Client::Mixins::Resource
7
+ resource({
8
+ :description => 'description',
9
+ :id => 'id',
10
+ :name => 'name',
11
+ :short_name => 'shortName',
12
+ })
13
+ end
14
+
15
+ def factions(opts={})
16
+ get_resources("#{base_url}/gamedata/factions", Faction, opts)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ module Unchained
2
+ class Client
3
+ module Mixins
4
+ module Resource
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ def to_s
10
+ attributes = self.class::JSON_MAP.map{|k,_| "#{k}=#{self.send(k)}"}.join(" ")
11
+ "[#{self.class_name}] #{attributes}"
12
+ end
13
+
14
+ # Lurk, is there not a better way to do this?
15
+ def class_name
16
+ self.class.name.split('::').last
17
+ end
18
+
19
+ module ClassMethods
20
+ JSON_MAP = {}
21
+
22
+ def resource(json_map)
23
+ instance_eval do
24
+ const_set("JSON_MAP", json_map)
25
+ end
26
+
27
+ class_eval do
28
+ attr_accessor(*json_map.keys)
29
+ end
30
+ end
31
+
32
+ def decode_result(json)
33
+ instance = self.new
34
+ self::JSON_MAP.each do |k,v|
35
+ instance.send("#{k}=", json[v])
36
+ end
37
+ instance
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,36 @@
1
+ module Unchained
2
+ class Client
3
+ module Patcher
4
+
5
+ class HeroContent
6
+ include Unchained::Client::Mixins::Resource
7
+ resource({
8
+ :id => 'id',
9
+ :content => 'content',
10
+ :priority => 'priority',
11
+ :start => 'utcDateStart',
12
+ :end => 'utcDateEnd',
13
+ })
14
+ end
15
+
16
+ class Alert
17
+ include Unchained::Client::Mixins::Resource
18
+ resource({
19
+ :id => 'id',
20
+ :message => 'message',
21
+ :start => 'utcDateStart',
22
+ :end => 'utcDateEnd',
23
+ })
24
+ end
25
+
26
+ def patcher_hero_contents(opts={})
27
+ get_resources("#{base_url}/patcherherocontent", HeroContent, opts)
28
+ end
29
+
30
+ def patcher_alerts(opts={})
31
+ get_resources("#{base_url}/patcheralerts", Alert, opts)
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ module Unchained
2
+ class Client
3
+ module Races
4
+
5
+ class Race
6
+ include Unchained::Client::Mixins::Resource
7
+ resource({
8
+ :description => 'description',
9
+ :faction => 'faction',
10
+ :id => 'id',
11
+ :name => 'name',
12
+ })
13
+ end
14
+
15
+ def races(opts={})
16
+ get_resources("#{base_url}/gamedata/races", Race, opts)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -3,7 +3,7 @@ module Unchained
3
3
  module Servers
4
4
 
5
5
  class Server
6
- include Unchained::Client::Resource
6
+ include Unchained::Client::Mixins::Resource
7
7
  resource({
8
8
  :access_level => 'accessLevel',
9
9
  :channel_id => 'channelID',
@@ -15,9 +15,7 @@ module Unchained
15
15
  end
16
16
 
17
17
  def servers(opts={})
18
- get("#{base_url}/servers", opts).map do |server|
19
- Server.decode_result(server)
20
- end
18
+ get_resources("#{base_url}/servers", Server, opts)
21
19
  end
22
20
 
23
21
  end
@@ -1,5 +1,7 @@
1
1
  module Unchained
2
2
 
3
+ # TODO: Support more errors.
3
4
  class Error < StandardError; end
5
+ class NotFound < Error; end
4
6
 
5
7
  end
@@ -0,0 +1,39 @@
1
+ require 'rest-client'
2
+
3
+ module Unchained
4
+ module Request
5
+
6
+ def get(url, params={})
7
+ RestClient.get(url, build_params(params)) do |resp, req, res, &block|
8
+ case resp.code
9
+ when 200
10
+ JSON.parse(resp)
11
+ when 404
12
+ raise Unchained::NotFound.new(res.message)
13
+ else
14
+ resp.return!(req, res, &block)
15
+ end
16
+ end
17
+ end
18
+
19
+ def get_resources(url, resource_class, params={})
20
+ get(url, params).map do |result|
21
+ resource_class.decode_result(result)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def default_params
28
+ {
29
+ loginToken: login_token,
30
+ accept: :json,
31
+ }
32
+ end
33
+
34
+ def build_params(params)
35
+ default_params.merge(params)
36
+ end
37
+
38
+ end
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Unchained
2
- VERSION = '0.0.0'.freeze
2
+ VERSION = '0.0.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unchained
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Thorp
@@ -79,11 +79,14 @@ files:
79
79
  - lib/unchained.rb
80
80
  - lib/unchained/client.rb
81
81
  - lib/unchained/client/archetypes.rb
82
- - lib/unchained/client/request.rb
83
- - lib/unchained/client/resource.rb
82
+ - lib/unchained/client/factions.rb
83
+ - lib/unchained/client/mixins/resource.rb
84
+ - lib/unchained/client/patcher.rb
85
+ - lib/unchained/client/races.rb
84
86
  - lib/unchained/client/servers.rb
85
87
  - lib/unchained/configuration.rb
86
88
  - lib/unchained/error.rb
89
+ - lib/unchained/request.rb
87
90
  - lib/unchained/version.rb
88
91
  - test/test_helper.rb
89
92
  - test/unchained/client_test.rb
@@ -1,33 +0,0 @@
1
- require 'rest-client'
2
-
3
- module Unchained
4
- class Client
5
- module Request
6
-
7
- def get(url, params={})
8
- RestClient.get(url, build_params(params)) do |resp, req, res, &block|
9
- case resp.code
10
- when 200
11
- JSON.parse(resp)
12
- else
13
- resp.return!(req, res, &block)
14
- end
15
- end
16
- end
17
-
18
- private
19
-
20
- def default_params
21
- {
22
- loginToken: login_token,
23
- accept: :json,
24
- }
25
- end
26
-
27
- def build_params(params)
28
- default_params.merge(params)
29
- end
30
-
31
- end
32
- end
33
- end
@@ -1,41 +0,0 @@
1
- module Unchained
2
- class Client
3
- module Resource
4
- def self.included(base)
5
- base.extend ClassMethods
6
- end
7
-
8
- def to_s
9
- attributes = self.class::JSON_MAP.map{|k,_| "#{k}=#{self.send(k)}"}.join(" ")
10
- "[#{self.class_name}] #{attributes}"
11
- end
12
-
13
- # Lurk, is there not a better way to do this?
14
- def class_name
15
- self.class.name.split('::').last
16
- end
17
-
18
- module ClassMethods
19
- JSON_MAP = {}
20
-
21
- def resource(json_map)
22
- instance_eval do
23
- const_set("JSON_MAP", json_map)
24
- end
25
-
26
- class_eval do
27
- attr_accessor(*json_map.keys)
28
- end
29
- end
30
-
31
- def decode_result(json)
32
- instance = self.new
33
- self::JSON_MAP.each do |k,v|
34
- instance.send("#{k}=", json[v])
35
- end
36
- instance
37
- end
38
- end
39
- end
40
- end
41
- end