ok_linker 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 +7 -0
 - data/.gitignore +3 -0
 - data/Gemfile +3 -0
 - data/LICENSE +20 -0
 - data/README.md +80 -0
 - data/lib/ok_linker.rb +31 -0
 - data/lib/ok_linker/client.rb +52 -0
 - data/lib/ok_linker/config.rb +24 -0
 - data/lib/ok_linker/connection.rb +24 -0
 - data/lib/ok_linker/error.rb +38 -0
 - data/lib/ok_linker/request.rb +50 -0
 - data/lib/ok_linker/version.rb +3 -0
 - data/ok_linker.gemspec +26 -0
 - metadata +161 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: eb9cf79a26e604c19c75c3409fb9adfbad3d2934
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e967b848f07355fc4e297c9f7af5f09947427e76
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 241d6903dcacf3c14a02cd8f1801a49ef70b440ae332cb834e37b530b40f902c1026efc24d29840e66f63470d601d7339a178affee46f8e74013b9dee1be3b80
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 66ec91ff6d0024d649ca1a524c27e836615f02ca0e100c99195b3d515650b14da7a952b0a7358cec9bcf95b7acb95ea16ba1e8d9180d5648cdb69013db2bfb54
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright 2015 Ilya Bodrov
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 4 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 5 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 6 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 7 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 8 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 9 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 12 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 15 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 16 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 17 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 18 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 19 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 20 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
            [](https://gemnasium.com/bodrovis/ok_linker)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            Ruby gem to work with Odnoklassniki's URL shortening service [okey.link](http://okey.link).
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            Via RubyGems:
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                $ gem install ok_linker
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            Or add it to your `Gemfile`:
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                gem 'ok_linker' 
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            ### Prerequisites
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            First of all, you will require access to [okey.link](https://okey.link). Fill in this [submission form](https://okey.link/cabinet/registration)
         
     | 
| 
      
 21 
     | 
    
         
            +
            to gain access.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            After logging in, copy your API access token from the [API section](https://okey.link/cabinet/api). This token
         
     | 
| 
      
 24 
     | 
    
         
            +
            has unlimited lifetime and has to be stored securely.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ### Configuration
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            OkLinker does not require much configuration. The only thing that you need to provide is your access token.
         
     | 
| 
      
 29 
     | 
    
         
            +
            You can either use an initializer (for example, `ok_linker.rb`):
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                OkLinker.configure do |c|
         
     | 
| 
      
 32 
     | 
    
         
            +
                  c.access_token = 'Your token'
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            or provide it when instantiating a new client:
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                client = OkLinker::Client.new(access_token: 'Your token')
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            ### Calling methods
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            You can read more about available methods [here](https://okey.link/cabinet/api).
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            OkLinker provides the following conventional methods:
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 46 
     | 
    
         
            +
            shorten(url)        # Shorten a given URL
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            hide(url)           # Hide a URL that was previously shorten
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            clicks(url)         # Get clicks statistics for the given URL
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            count_urls(params)  # Get a list of shortened URLS.
         
     | 
| 
      
 53 
     | 
    
         
            +
                                # Allowed options:
         
     | 
| 
      
 54 
     | 
    
         
            +
                                # * :epp  - integer, optional. Elements per page. Default is 20.
         
     | 
| 
      
 55 
     | 
    
         
            +
                                # * :page - integer, optional. Page to fetch. Default is 1.
         
     | 
| 
      
 56 
     | 
    
         
            +
            ```
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            Also, you can call raw methods:
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 61 
     | 
    
         
            +
            get(method, params = {}, &block)
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            post(method, params = {}, &block)
         
     | 
| 
      
 64 
     | 
    
         
            +
            ```
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            For example,
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                client.get('get-urls', page: 2)
         
     | 
| 
      
 69 
     | 
    
         
            +
                
         
     | 
| 
      
 70 
     | 
    
         
            +
            These methods always return JSON or one of the errors listed [here](https://github.com/bodrovis/ok_linker/blob/master/lib/ok_linker/error.rb#L18).
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            ## Todo
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            * Write tests
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ## License
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            Licensed under the [MIT License](https://github.com/bodrovis/ok_linker/blob/master/LICENSE).
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            Copyright (c) 2015 [Ilya Bodrov](http://radiant-wind.com)
         
     | 
    
        data/lib/ok_linker.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'pry'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'faraday'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'faraday_middleware'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'multi_json'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative 'ok_linker/connection'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative 'ok_linker/request'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative 'ok_linker/version'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative 'ok_linker/error'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require_relative 'ok_linker/config'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative 'ok_linker/client'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 14 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 15 
     | 
    
         
            +
                attr_accessor :config
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def new(options = {})
         
     | 
| 
      
 18 
     | 
    
         
            +
                  OkLinker::Client.new(options)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def configure
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @config = OkLinker::Config.new
         
     | 
| 
      
 23 
     | 
    
         
            +
                  yield @config
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @config
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def options
         
     | 
| 
      
 28 
     | 
    
         
            +
                  (@config && @config.options) || {}
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(attrs = {})
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attrs = OkLinker.options.merge(attrs)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  Config::VALID_OPTIONS_KEYS.each do |key|
         
     | 
| 
      
 6 
     | 
    
         
            +
                    instance_variable_set("@#{key}".to_sym, attrs[key])
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def shorten(url)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  post('make-short-url', url: url.to_s)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def hide(url)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  post('hide-url', url: url.to_s)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def clicks(url)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  get('get-url-clicks', url: url.to_s)
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def count_urls(params = {})
         
     | 
| 
      
 23 
     | 
    
         
            +
                  get('get-urls', params)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def get(method, params = {}, &block)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  request_method(:get, method, params, block)
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def post(method, params = {}, &block)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  request_method(:post, method, params, block)
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                private
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def request_method(http_method, method, params, block)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  response = request.send(http_method, method, params)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  response = block.call response if block
         
     | 
| 
      
 39 
     | 
    
         
            +
                  response
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                def request
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @request ||= Request.new(credentials)
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                def credentials
         
     | 
| 
      
 47 
     | 
    
         
            +
                  {
         
     | 
| 
      
 48 
     | 
    
         
            +
                      access_token:    @access_token
         
     | 
| 
      
 49 
     | 
    
         
            +
                  }
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Config
         
     | 
| 
      
 3 
     | 
    
         
            +
                VALID_OPTIONS_KEYS = [:access_token].freeze
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor *VALID_OPTIONS_KEYS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def self.configure
         
     | 
| 
      
 8 
     | 
    
         
            +
                  config = self.new
         
     | 
| 
      
 9 
     | 
    
         
            +
                  yield config
         
     | 
| 
      
 10 
     | 
    
         
            +
                  config
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def initialize(options={})
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @access_token = options[:access_token] || options['access_token']
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def options
         
     | 
| 
      
 18 
     | 
    
         
            +
                  options = {}
         
     | 
| 
      
 19 
     | 
    
         
            +
                  VALID_OPTIONS_KEYS.each{ |name| options[name] = send(name) }
         
     | 
| 
      
 20 
     | 
    
         
            +
                  options
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Connection
         
     | 
| 
      
 3 
     | 
    
         
            +
                API_HOST = 'https://okey.link/api/v1'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def connection(token = '')
         
     | 
| 
      
 6 
     | 
    
         
            +
                  options = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                      :headers => {
         
     | 
| 
      
 8 
     | 
    
         
            +
                          :accept => 'application/json',
         
     | 
| 
      
 9 
     | 
    
         
            +
                          :user_agent => "ok_linker ruby gem/#{OkLinker::VERSION}",
         
     | 
| 
      
 10 
     | 
    
         
            +
                          :'Access-Token' => token
         
     | 
| 
      
 11 
     | 
    
         
            +
                      },
         
     | 
| 
      
 12 
     | 
    
         
            +
                      :url => "#{API_HOST}/"
         
     | 
| 
      
 13 
     | 
    
         
            +
                  }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  client = Faraday.default_adapter
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  Faraday.new(options) do |conn|
         
     | 
| 
      
 18 
     | 
    
         
            +
                    conn.request :multipart
         
     | 
| 
      
 19 
     | 
    
         
            +
                    conn.request :url_encoded
         
     | 
| 
      
 20 
     | 
    
         
            +
                    conn.adapter client
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Error < StandardError
         
     | 
| 
      
 3 
     | 
    
         
            +
                ClientError = Class.new(self)
         
     | 
| 
      
 4 
     | 
    
         
            +
                ServerError = Class.new(self)
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                # HTTP status code 400 - invalid params
         
     | 
| 
      
 7 
     | 
    
         
            +
                BadRequest = Class.new(ClientError)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                # HTTP status code 401 - not authorized
         
     | 
| 
      
 10 
     | 
    
         
            +
                Unauthorized = Class.new(ClientError)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                # HTTP status code 403 - invalid token
         
     | 
| 
      
 13 
     | 
    
         
            +
                Forbidden = Class.new(ClientError)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                # HTTP status code 501 - not implemented
         
     | 
| 
      
 16 
     | 
    
         
            +
                NotImplemented = Class.new(ServerError)
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                ERRORS = {
         
     | 
| 
      
 19 
     | 
    
         
            +
                    200 => OkLinker::Error::ClientError,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    400 => OkLinker::Error::BadRequest,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    401 => OkLinker::Error::Unauthorized,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    403 => OkLinker::Error::Forbidden,
         
     | 
| 
      
 23 
     | 
    
         
            +
                    501 => OkLinker::Error::NotImplemented
         
     | 
| 
      
 24 
     | 
    
         
            +
                }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # Create a new error from an HTTP response
         
     | 
| 
      
 28 
     | 
    
         
            +
                  def from_response(body)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    new(body.to_s)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                # Initializes a new Error object
         
     | 
| 
      
 34 
     | 
    
         
            +
                def initialize(message = '')
         
     | 
| 
      
 35 
     | 
    
         
            +
                  super(message)
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OkLinker
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Request
         
     | 
| 
      
 3 
     | 
    
         
            +
                include OkLinker::Connection
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_reader :access_token
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def initialize(credentials)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @access_token = credentials[:access_token]
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def get(path, params = {})
         
     | 
| 
      
 11 
     | 
    
         
            +
                  respond perform_request(:get, path, params)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def post(path, params = {})
         
     | 
| 
      
 15 
     | 
    
         
            +
                  respond perform_request(:post, path, params)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def perform_request(method, path, params)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  connection(access_token).send(method) do |req|
         
     | 
| 
      
 22 
     | 
    
         
            +
                    req.url path
         
     | 
| 
      
 23 
     | 
    
         
            +
                    if method == :get
         
     | 
| 
      
 24 
     | 
    
         
            +
                      req.params = params
         
     | 
| 
      
 25 
     | 
    
         
            +
                    else
         
     | 
| 
      
 26 
     | 
    
         
            +
                      req.body = params
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                def respond(response)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 33 
     | 
    
         
            +
                    MultiJson.load(response.body)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  rescue MultiJson::ParseError
         
     | 
| 
      
 35 
     | 
    
         
            +
                    return_error(response.status, response.body)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def return_error(code, body)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  fail error(code, body)
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def error(code, body)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  unless [200, 201].include?(code)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    klass = OkLinker::Error::ERRORS[code]
         
     | 
| 
      
 46 
     | 
    
         
            +
                    klass.from_response(body)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
    
        data/ok_linker.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path("../lib/ok_linker/version", __FILE__)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 4 
     | 
    
         
            +
              spec.name          = "ok_linker"
         
     | 
| 
      
 5 
     | 
    
         
            +
              spec.version       = OkLinker::VERSION
         
     | 
| 
      
 6 
     | 
    
         
            +
              spec.authors       = ["Ilya Bodrov"]
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.email         = ["golosizpru@gmail.com"]
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.summary       = %q{Ruby gem for okey.link API.}
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.description   = %q{Ruby gem for Odnoklassniki's URL shortening service okey.link.}
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.homepage      = "https://github.com/bodrovis/ok_linker"
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.license       = "MIT"
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.platform      = Gem::Platform::RUBY
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0")
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
      
 16 
     | 
    
         
            +
              spec.require_paths = ["lib"]
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              spec.add_dependency "faraday",            "~> 0.9"
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.add_dependency "faraday_middleware", "~> 0.9"
         
     | 
| 
      
 20 
     | 
    
         
            +
              spec.add_dependency "multi_json",         "~> 1.11"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_development_dependency "rake",   "~> 10.4"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_development_dependency "rspec",  "~> 3.4"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_development_dependency "pry",    "0.10.3"
         
     | 
| 
      
 25 
     | 
    
         
            +
              spec.add_development_dependency "vcr",    "~> 3.0", ">= 3.0.0"
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,161 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: ok_linker
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Ilya Bodrov
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-11-20 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: faraday
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0.9'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0.9'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: faraday_middleware
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0.9'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0.9'
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: multi_json
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '1.11'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '1.11'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '10.4'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '10.4'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '3.4'
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '3.4'
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: pry
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 88 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 89 
     | 
    
         
            +
                    version: 0.10.3
         
     | 
| 
      
 90 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 91 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 92 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 93 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 95 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 96 
     | 
    
         
            +
                    version: 0.10.3
         
     | 
| 
      
 97 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 98 
     | 
    
         
            +
              name: vcr
         
     | 
| 
      
 99 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 100 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 101 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 102 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 103 
     | 
    
         
            +
                    version: '3.0'
         
     | 
| 
      
 104 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 105 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 106 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
      
 107 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 108 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 109 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 110 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 111 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 112 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 113 
     | 
    
         
            +
                    version: '3.0'
         
     | 
| 
      
 114 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 115 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 116 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
      
 117 
     | 
    
         
            +
            description: Ruby gem for Odnoklassniki's URL shortening service okey.link.
         
     | 
| 
      
 118 
     | 
    
         
            +
            email:
         
     | 
| 
      
 119 
     | 
    
         
            +
            - golosizpru@gmail.com
         
     | 
| 
      
 120 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 121 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 122 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 123 
     | 
    
         
            +
            files:
         
     | 
| 
      
 124 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 125 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 126 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 127 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 128 
     | 
    
         
            +
            - lib/ok_linker.rb
         
     | 
| 
      
 129 
     | 
    
         
            +
            - lib/ok_linker/client.rb
         
     | 
| 
      
 130 
     | 
    
         
            +
            - lib/ok_linker/config.rb
         
     | 
| 
      
 131 
     | 
    
         
            +
            - lib/ok_linker/connection.rb
         
     | 
| 
      
 132 
     | 
    
         
            +
            - lib/ok_linker/error.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - lib/ok_linker/request.rb
         
     | 
| 
      
 134 
     | 
    
         
            +
            - lib/ok_linker/version.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
            - ok_linker.gemspec
         
     | 
| 
      
 136 
     | 
    
         
            +
            homepage: https://github.com/bodrovis/ok_linker
         
     | 
| 
      
 137 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 138 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 139 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 140 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 141 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 142 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 143 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 144 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 145 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 146 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 147 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 148 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 149 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 150 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 151 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 152 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 153 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 154 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 155 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 156 
     | 
    
         
            +
            rubygems_version: 2.5.0
         
     | 
| 
      
 157 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 158 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 159 
     | 
    
         
            +
            summary: Ruby gem for okey.link API.
         
     | 
| 
      
 160 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 161 
     | 
    
         
            +
            has_rdoc: 
         
     |