unchained 0.0.0 → 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.
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