dotapedia 0.0.1b

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/dota_object.rb +8 -0
  3. data/lib/dotapedia.rb +87 -0
  4. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e15df7e668bc349982fc621b1ed6f4ccedcb46bf9cd43917018665b1d0cda6f6
4
+ data.tar.gz: d0aff35be74550174b862d2af629c58188b1c8c8b8916e709348518118d12b2a
5
+ SHA512:
6
+ metadata.gz: b982fa24987a6cc95ac5425f57204540734e6e8e14bccdf5164f71830ec985386b8f16ebcf5d06e963c09baf2840d2170aa3f639ee04c24b0738dbb4817fbeb4
7
+ data.tar.gz: 309a4cc5599d6631dc80deab634c7e4986b3eb05a1c89205c70e785455e054871a9d2867f2d9ae4b830aa85a8b8fa9ff2b29a68243c9856f5d634e70ba816399
@@ -0,0 +1,8 @@
1
+ module DotaObject
2
+ def self.define_struct(klass_name, keys)
3
+ unless self.const_defined?(klass_name)
4
+ klass = Struct.new(*keys)
5
+ DotaObject.const_set(klass_name, klass)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,87 @@
1
+ class Dotapedia
2
+ require "net/http"
3
+ require "json"
4
+ require File.expand_path(File.dirname(__FILE__) + "/dota_object")
5
+
6
+ def initialize(base_url: "https://api.opendota.com/api")
7
+ @base_url = base_url
8
+ end
9
+
10
+ def teams(query = {})
11
+ request = api_request('/teams')
12
+ json_data = request[:json]
13
+ struct_name = 'Team'
14
+ create_dota_object_struct(struct_name, json_data[0].keys)
15
+ result = create_struct(struct_name, json_data)
16
+ filter_struct(result, query)
17
+ result
18
+ end
19
+
20
+ def pro_players(query = {})
21
+ request = api_request('/proPlayers')
22
+ json_data = request[:json]
23
+ struct_name = 'ProPlayer'
24
+ create_dota_object_struct(struct_name, json_data[0].keys)
25
+ result = create_struct(struct_name, json_data)
26
+ filter_struct(result, query)
27
+ result
28
+ end
29
+
30
+ def request(url)
31
+ api_request(url)
32
+ end
33
+
34
+ private
35
+
36
+ def create_dota_object_struct(struct_name, keys)
37
+ DotaObject.define_struct(struct_name, keys)
38
+ end
39
+
40
+ def create_struct(struct_name, json_data)
41
+ object = DotaObject.const_get struct_name
42
+ filtered_json = json_data
43
+ filtered_json.map do |json|
44
+ object.new(*json.values)
45
+ end
46
+ end
47
+
48
+ def filter_struct(structs, query)
49
+ query.each do |key, value|
50
+ structs.reject! { |x| x.send(key) != value }
51
+ end
52
+ structs
53
+ end
54
+
55
+ def api_request(url)
56
+ uri = URI.parse(@base_url + url)
57
+ http = Net::HTTP.new(uri.host, uri.port)
58
+ initheader = {'Content-Type' => 'application/json'}
59
+ http.use_ssl = true if @base_url =~ /^https/
60
+ request = Net::HTTP::Get.new(uri.path, initheader)
61
+ response = http.request(request)
62
+ if response.body
63
+ begin
64
+ {:status => response.code, :json => recursive_symbolize_keys(JSON.load(response.body))}
65
+ rescue
66
+ response.body
67
+ end
68
+ else
69
+ response.code
70
+ end
71
+ end
72
+
73
+ def recursive_symbolize_keys(data)
74
+ case data
75
+ when Hash
76
+ Hash[
77
+ data.map do |k, v|
78
+ [ k.respond_to?(:to_sym) ? k.to_sym : k, recursive_symbolize_keys(v) ]
79
+ end
80
+ ]
81
+ when Enumerable
82
+ data.map { |v| recursive_symbolize_keys(v) }
83
+ else
84
+ data
85
+ end
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dotapedia
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1b
5
+ platform: ruby
6
+ authors:
7
+ - Irfandi Achmad
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-12-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Dota 2 api sdk for opendota.com
14
+ email: irfandiofficial32@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/dota_object.rb
20
+ - lib/dotapedia.rb
21
+ homepage: http://rubygems.org/gems/dotapedia
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">"
37
+ - !ruby/object:Gem::Version
38
+ version: 1.3.1
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.7.6
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Dotapedia[beta]
45
+ test_files: []