dotapedia 0.0.1b

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.
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: []