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.
- checksums.yaml +7 -0
- data/lib/dota_object.rb +8 -0
- data/lib/dotapedia.rb +87 -0
- metadata +45 -0
    
        checksums.yaml
    ADDED
    
    | @@ -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
         | 
    
        data/lib/dota_object.rb
    ADDED
    
    
    
        data/lib/dotapedia.rb
    ADDED
    
    | @@ -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: []
         |