unchained 0.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ecc40d0b265fc59cbb8bad8b365911f5799d2840
4
+ data.tar.gz: 253ee458048eeaf99cc41c723e6e5f11695e703c
5
+ SHA512:
6
+ metadata.gz: 6d225ace000ab683fc29f9fb604bdc70cf5a0ebae75e08680f1b0cdfebe2c3faa463014a80a4a82cc9ca726f3aa0612f0c27ca31610adb81c505b29116cba817
7
+ data.tar.gz: 234e2735c40631bfdc08d3d0f439f9b3db692534829985eb1b767a7111531cdd794913762e8ade37ab1b8d62ea1425db2f3e95179f26e6d610911ab48869e03c
File without changes
File without changes
@@ -0,0 +1,8 @@
1
+ require_relative 'unchained/client'
2
+ require_relative 'unchained/configuration'
3
+ require_relative 'unchained/error'
4
+
5
+ module Unchained
6
+ extend Configuration
7
+ end
8
+
@@ -0,0 +1,30 @@
1
+ require_relative 'configuration'
2
+ require_relative 'client/resource'
3
+ require_relative 'client/request'
4
+
5
+ # RESOURCES
6
+ require_relative 'client/archetypes'
7
+ require_relative 'client/servers'
8
+
9
+ module Unchained
10
+ class Client
11
+ attr_accessor(*Unchained::Configuration::KEYS)
12
+
13
+ def initialize(opts={})
14
+ config = Unchained.configuration.merge(opts)
15
+ Unchained::Configuration::KEYS.each do |key|
16
+ send("#{key}=", config[key])
17
+ end
18
+ end
19
+
20
+ def base_url
21
+ 'http://api.camelotunchained.com/v1'
22
+ end
23
+
24
+ include Unchained::Client::Request
25
+
26
+ # RESOURCES
27
+ include Unchained::Client::Archetypes
28
+ include Unchained::Client::Servers
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ module Unchained
2
+ class Client
3
+ module Archetypes
4
+
5
+ class Archetype
6
+ include Unchained::Client::Resource
7
+ resource({
8
+ :description => 'description',
9
+ :faction => 'faction',
10
+ :id => 'id',
11
+ :name => 'name',
12
+ })
13
+ end
14
+
15
+ def archetypes(opts={})
16
+ get("#{base_url}/gamedata/archetypes", opts).map do |server|
17
+ Archetype.decode_result(server)
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,41 @@
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
@@ -0,0 +1,25 @@
1
+ module Unchained
2
+ class Client
3
+ module Servers
4
+
5
+ class Server
6
+ include Unchained::Client::Resource
7
+ resource({
8
+ :access_level => 'accessLevel',
9
+ :channel_id => 'channelID',
10
+ :host => 'host',
11
+ :name => 'name',
12
+ :player_maximum => 'playerMaximum',
13
+ :shard_id => 'shardID',
14
+ })
15
+ end
16
+
17
+ def servers(opts={})
18
+ get("#{base_url}/servers", opts).map do |server|
19
+ Server.decode_result(server)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module Unchained
2
+ module Configuration
3
+
4
+ KEYS = [:login_token]
5
+ attr_accessor(*KEYS)
6
+
7
+ def self.extended(base)
8
+ base.reset!
9
+ end
10
+
11
+ def configure
12
+ yield self
13
+ end
14
+
15
+ def configuration
16
+ KEYS.inject({}){|o,k| o.merge!(k => send(k)) }
17
+ end
18
+
19
+ def reset!
20
+ self.login_token = nil
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ module Unchained
2
+
3
+ class Error < StandardError; end
4
+
5
+ end
@@ -0,0 +1,3 @@
1
+ module Unchained
2
+ VERSION = '0.0.0'.freeze
3
+ end
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'unchained'
3
+ require 'minitest/autorun'
@@ -0,0 +1,9 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Unchained::Client do
4
+
5
+ it 'should do a thing' do
6
+ skip 'Not implemented'
7
+ end
8
+
9
+ end
File without changes
@@ -0,0 +1,31 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'unchained/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'unchained'
7
+ s.version = Unchained::VERSION.dup
8
+
9
+ s.author = 'Andrew Thorp'
10
+ s.email = 'andrewpthorp@gmail.com'
11
+ s.homepage = 'http://github.com/andrewpthorp/unchained'
12
+
13
+ s.license = 'MIT'
14
+ s.summary = "Client library for Camelot Unchained API."
15
+ s.description = <<-DESC
16
+ A gem that lets you call into the Camelot Unchained API. You can see the API
17
+ docs at https://api.camelotunchained.com
18
+ DESC
19
+
20
+ s.files = %w(LICENSE.md README.md unchained.gemspec)
21
+ s.files += Dir.glob("lib/**/*.rb")
22
+ s.files += Dir.glob("test/**/*")
23
+
24
+ s.test_files = Dir.glob("test/**/*")
25
+ s.require_paths = ["lib"]
26
+
27
+ s.add_development_dependency 'rake', '~> 11.0'
28
+ s.add_development_dependency 'minitest', '~> 5.8'
29
+ s.add_dependency 'pry', '~> 0.10'
30
+ s.add_dependency 'rest-client', '~> 1.8'
31
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unchained
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Thorp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '11.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '11.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rest-client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
69
+ description: |2
70
+ A gem that lets you call into the Camelot Unchained API. You can see the API
71
+ docs at https://api.camelotunchained.com
72
+ email: andrewpthorp@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - LICENSE.md
78
+ - README.md
79
+ - lib/unchained.rb
80
+ - lib/unchained/client.rb
81
+ - lib/unchained/client/archetypes.rb
82
+ - lib/unchained/client/request.rb
83
+ - lib/unchained/client/resource.rb
84
+ - lib/unchained/client/servers.rb
85
+ - lib/unchained/configuration.rb
86
+ - lib/unchained/error.rb
87
+ - lib/unchained/version.rb
88
+ - test/test_helper.rb
89
+ - test/unchained/client_test.rb
90
+ - test/unchained_test.rb
91
+ - unchained.gemspec
92
+ homepage: http://github.com/andrewpthorp/unchained
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.2.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Client library for Camelot Unchained API.
116
+ test_files:
117
+ - test/test_helper.rb
118
+ - test/unchained/client_test.rb
119
+ - test/unchained_test.rb
120
+ has_rdoc: