dellin_info_api 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/README.txt +45 -0
 - data/lib/dellin_info.rb +78 -0
 - data/lib/dellininfo/client.rb +36 -0
 - data/lib/dellininfo/order.rb +65 -0
 - data/lib/dellininfo/order_collection.rb +56 -0
 - data/lib/dellininfo/order_status.rb +33 -0
 - data/lib/dellininfo/reference.rb +26 -0
 - data/lib/dellininfo/valide_data.rb +47 -0
 - metadata +83 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8acb30e84ca701ed30db08571b4132b4b6a32a9b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fa7be481254d32bf362d75786fbe6f0a2f2752ce
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 87781cfa612de089eacb717507329e0d10e375dee58cb7ecc9a61a3c1af216627aabd61738552ce5c39d6ce5402836a678a0f51acaf69ccbc8e19987ce756a46
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 30aa73d6309cada45f87475bc756d47d9f506185774ec055cd3fb3ee52317a5ddc32c0e3cba9215128f48be24021af3746c8eff215afc70d11842c324e1520aa
         
     | 
    
        data/README.txt
    ADDED
    
    | 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            gem для взаимодействия с ресурсом dellin.ru.
         
     | 
| 
      
 2 
     | 
    
         
            +
            Поиск накладной по неполным данным
         
     | 
| 
      
 3 
     | 
    
         
            +
            Поиск накладной по номеру
         
     | 
| 
      
 4 
     | 
    
         
            +
            Подписка к накладной по номеру и получения изменения по накладной
         
     | 
| 
      
 5 
     | 
    
         
            +
            Расчет стоимости
         
     | 
| 
      
 6 
     | 
    
         
            +
            Хранения бызы адресов (страна, город, населенный пункт, улица)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ============================================================================================
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            DellinInfo::API.find_oders
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            на выходе получиться объект DellinInfo::API::OrderCollection
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            Пример:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            oders = DellinInfo::API.find_oders(params)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            oders.each {|oder| puts oder.docNumber}
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ============================================================================================
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            DellinInfo::API.status_oder
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Спомощью этого метода можно получить статус накладной по номеру, возвращается объетк класса DellinInfo::API::OrderStatus
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            пример
         
     | 
| 
      
 29 
     | 
    
         
            +
            p DellinInfo::API.status_oder('16-00011096893')
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            ============================================================================================
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            DellinInfo::API.reference
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            Метод для получения ссылки на данные справочников с сайта Деловые Линии
         
     | 
| 
      
 37 
     | 
    
         
            +
            http://dev.dellin.ru/api/public/tables/
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            p DellinInfo::API.reference('countries')
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            Возвможные параметры:
         
     | 
| 
      
 42 
     | 
    
         
            +
            countries
         
     | 
| 
      
 43 
     | 
    
         
            +
            cities
         
     | 
| 
      
 44 
     | 
    
         
            +
            places
         
     | 
| 
      
 45 
     | 
    
         
            +
            streets
         
     | 
    
        data/lib/dellin_info.rb
    ADDED
    
    | 
         @@ -0,0 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'active_support/all'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'dellininfo/valide_data'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'dellininfo/client'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative 'dellininfo/reference'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative 'dellininfo/order_collection'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative 'dellininfo/reference'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative 'dellininfo/order_status'
         
     | 
| 
      
 10 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 11 
     | 
    
         
            +
              module API
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                # Приложение можно сконфигурировать, для конфикурации необходимо указать в константе DellinInfo::API::PATH путь до файла yml
         
     | 
| 
      
 14 
     | 
    
         
            +
                # где ключ - название класса в snakecase, а значение - пара (параметр - значение)
         
     | 
| 
      
 15 
     | 
    
         
            +
                PATH = 'path to config.yml'
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                # Все основные настройки хранятся в отдельном файле, данный метод рализует конфигурацию всех классов модуля
         
     | 
| 
      
 20 
     | 
    
         
            +
                def self.configure!
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  YAML.load_file(PATH).each_pair do |config_class, params|
         
     | 
| 
      
 23 
     | 
    
         
            +
                    params.each_pair do |param, value|
         
     | 
| 
      
 24 
     | 
    
         
            +
                      "DellinInfo::API::#{config_class.camelize}".constantize.config[param] = value
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                # Данный метод получает ссылку на csv с данными справочников Деловых линиях
         
     | 
| 
      
 31 
     | 
    
         
            +
                # http://dev.dellin.ru/api/public/tables/
         
     | 
| 
      
 32 
     | 
    
         
            +
                # и хэш, по которому можно отследить актуальность данных
         
     | 
| 
      
 33 
     | 
    
         
            +
                # возвращается объект класса DellinInfo::API::Reference
         
     | 
| 
      
 34 
     | 
    
         
            +
                def self.reference(type)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  type = type.to_sym
         
     | 
| 
      
 36 
     | 
    
         
            +
                  url_type = Reference::TYPE[type]
         
     | 
| 
      
 37 
     | 
    
         
            +
                  data = client_request(url_type)
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  Reference.new(data)
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                # метод поиска накладных по неполным данным
         
     | 
| 
      
 43 
     | 
    
         
            +
                def self.find_oders(params = {})
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if params[:date_start].nil?
         
     | 
| 
      
 45 
     | 
    
         
            +
                    set_time!
         
     | 
| 
      
 46 
     | 
    
         
            +
                    params[:date_start] = @start_date
         
     | 
| 
      
 47 
     | 
    
         
            +
                    params[:date_end] = @end_day
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  data = client_request(OrderCollection, params)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  OrderCollection.new data
         
     | 
| 
      
 51 
     | 
    
         
            +
                  
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                # метод проверяющий статусы накладной по номеру
         
     | 
| 
      
 55 
     | 
    
         
            +
                def self.status_oder(id_oder)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  data = client_request(OrderStatus, docid: id_oder)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  DellinInfo::API::OrderStatus.new data
         
     | 
| 
      
 58 
     | 
    
         
            +
                  
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def self.client_request(dellin_class, params = {})
         
     | 
| 
      
 62 
     | 
    
         
            +
                  client = Client.new()
         
     | 
| 
      
 63 
     | 
    
         
            +
                  data = client.request(dellin_class.config['partial_url'], params).body
         
     | 
| 
      
 64 
     | 
    
         
            +
                  JSON.parse data
         
     | 
| 
      
 65 
     | 
    
         
            +
                  
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def self.set_time!
         
     | 
| 
      
 69 
     | 
    
         
            +
                  
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @start_date  = 6.day.ago.strftime('%Y-%m-%d')
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @end_day     = Time.now.strftime('%Y-%m-%d')
         
     | 
| 
      
 72 
     | 
    
         
            +
                  
         
     | 
| 
      
 73 
     | 
    
         
            +
                  
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'httparty'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 5 
     | 
    
         
            +
              module API
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Client
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include ActiveSupport::Configurable
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  # в проекте используется только публичные API, поэтому данный метод в годе больше не затронут,
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # но оставлен для возможности расширить функционал
         
     | 
| 
      
 11 
     | 
    
         
            +
                  def auth(options = {})       
         
     | 
| 
      
 12 
     | 
    
         
            +
                    response = HTTParty.post('https://api.dellin.ru/v1/customers/login.json', 
         
     | 
| 
      
 13 
     | 
    
         
            +
                      :body => {:login => options[:username], :password => options[:password], :appKey => @app_key}.to_json,
         
     | 
| 
      
 14 
     | 
    
         
            +
                      :headers => {'Content-Type' => 'application/json'})
         
     | 
| 
      
 15 
     | 
    
         
            +
                    print response
         
     | 
| 
      
 16 
     | 
    
         
            +
                    response['sessionID']
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def request(op, params = {})
         
     | 
| 
      
 20 
     | 
    
         
            +
                    params[:appKey] = @app_key
         
     | 
| 
      
 21 
     | 
    
         
            +
                    response = HTTParty.post("https://api.dellin.ru/v1/#{op}.json",
         
     | 
| 
      
 22 
     | 
    
         
            +
                      :body => params.to_json,
         
     | 
| 
      
 23 
     | 
    
         
            +
                      :headers => {'Content-Type' => 'application/json'})
         
     | 
| 
      
 24 
     | 
    
         
            +
                    response
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  private
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  def initialize()
         
     | 
| 
      
 30 
     | 
    
         
            +
                    raise "No app key given" unless config['app_key']
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @app_key = config['app_key']
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 2 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 3 
     | 
    
         
            +
              module API
         
     | 
| 
      
 4 
     | 
    
         
            +
                class Order
         
     | 
| 
      
 5 
     | 
    
         
            +
                  include ValideData
         
     | 
| 
      
 6 
     | 
    
         
            +
                  ATTRIBUTES = [
         
     | 
| 
      
 7 
     | 
    
         
            +
                    :availableAD,
         
     | 
| 
      
 8 
     | 
    
         
            +
                    :estimatedDeliveryDate,
         
     | 
| 
      
 9 
     | 
    
         
            +
                    :terminalSender,
         
     | 
| 
      
 10 
     | 
    
         
            +
                    :unvailableSfRequestReason,
         
     | 
| 
      
 11 
     | 
    
         
            +
                    :isSfRequestOrdered,
         
     | 
| 
      
 12 
     | 
    
         
            +
                    :availableSfRequest,
         
     | 
| 
      
 13 
     | 
    
         
            +
                    :opf,
         
     | 
| 
      
 14 
     | 
    
         
            +
                    :terminalReceiver,
         
     | 
| 
      
 15 
     | 
    
         
            +
                    :docNumber,
         
     | 
| 
      
 16 
     | 
    
         
            +
                    :comment,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    :sizedWeight,
         
     | 
| 
      
 18 
     | 
    
         
            +
                    :ordNum,
         
     | 
| 
      
 19 
     | 
    
         
            +
                    :sizedVolume,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    :docDate,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    :sqlUuid,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    :height,
         
     | 
| 
      
 23 
     | 
    
         
            +
                    :width,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    :length,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    :aviaDeliveryType,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    :numAvia,
         
     | 
| 
      
 27 
     | 
    
         
            +
                    :giveoutDate,
         
     | 
| 
      
 28 
     | 
    
         
            +
                    :conditionAvia,
         
     | 
| 
      
 29 
     | 
    
         
            +
                    :oversizedVolume,
         
     | 
| 
      
 30 
     | 
    
         
            +
                    :oversizedWeight,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                  
         
     | 
| 
      
 33 
     | 
    
         
            +
                  attr_accessor :state, :city_sender, :city_receiver, *ATTRIBUTES
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def to_s
         
     | 
| 
      
 36 
     | 
    
         
            +
                    "накладная № #{@docNumber} от #{Date.parse docDate}\nОтправление из города #{@city_sender} в город #{@city_receiver}\nстатус: #{@state}\n#{'-'*10}\n"
         
     | 
| 
      
 37 
     | 
    
         
            +
                                               
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end                           
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  private
         
     | 
| 
      
 46 
     | 
    
         
            +
                  def initialize(hash_track)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    data = parse_hash_response(hash_track, 'order')
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    ATTRIBUTES.each do |attribute|
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                      self.send(set_attr_method(attribute), data[attribute])
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    @state = 'не установлен'
         
     | 
| 
      
 56 
     | 
    
         
            +
                    
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  
         
     | 
| 
      
 59 
     | 
    
         
            +
                  
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'order.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 3 
     | 
    
         
            +
              module API
         
     | 
| 
      
 4 
     | 
    
         
            +
                class OrderCollection
         
     | 
| 
      
 5 
     | 
    
         
            +
                  include Enumerable
         
     | 
| 
      
 6 
     | 
    
         
            +
                  include ValideData
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include ActiveSupport::Configurable
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  config['partial_url'] = 'public/tracker_advanced'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  attr_reader :errors, :orders, :cash
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def each 
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @orders.each {|oder| yield oder} 
         
     | 
| 
      
 16 
     | 
    
         
            +
                    
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  private
         
     | 
| 
      
 22 
     | 
    
         
            +
                  def initialize(oders_hash)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @errors = oders_hash['errormsg']
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @orders = []
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @cash = there_tracks(oders_hash)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    unless @cash.nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
                      @cash.each do |track|
         
     | 
| 
      
 29 
     | 
    
         
            +
                        @orders << Order.new(track)
         
     | 
| 
      
 30 
     | 
    
         
            +
                      end  
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    determine_state!
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def determine_state!
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                    @orders.each do |order|
         
     | 
| 
      
 40 
     | 
    
         
            +
                      id_oder = order.docNumber
         
     | 
| 
      
 41 
     | 
    
         
            +
                      status = DellinInfo::API.status_oder(id_oder)
         
     | 
| 
      
 42 
     | 
    
         
            +
                      order.state = status.state
         
     | 
| 
      
 43 
     | 
    
         
            +
                      order.city_sender = status.receive['city']
         
     | 
| 
      
 44 
     | 
    
         
            +
                      order.city_receiver = status.giveout['city']
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    self
         
     | 
| 
      
 48 
     | 
    
         
            +
                    
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  
         
     | 
| 
      
 53 
     | 
    
         
            +
                  
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 2 
     | 
    
         
            +
              module API
         
     | 
| 
      
 3 
     | 
    
         
            +
                class OrderStatus
         
     | 
| 
      
 4 
     | 
    
         
            +
                  include ValideData
         
     | 
| 
      
 5 
     | 
    
         
            +
                  include ActiveSupport::Configurable
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  config['partial_url'] = 'public/tracker'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  ATTRIBUTES = [:errors, :estimatedDeliveryDate, :state, :giveout, :availableSfRequest, :receive]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_accessor *ATTRIBUTES
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def to_s
         
     | 
| 
      
 14 
     | 
    
         
            +
                    "Отправление из города: #{@receive['city']} в город #{@giveout['city']}\nСтатус: #{@state}\nОжидаемая дата прихода #{@estimatedDeliveryDate}\nТерминал прибытия: #{@giveout['terminal']}"
         
     | 
| 
      
 15 
     | 
    
         
            +
                    
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  private
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def initialize(hash_status)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    valid_hash = delete_spase_key(hash_status)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    ATTRIBUTES.each do |attribute|
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                      self.send(set_attr_method(attribute), valid_hash[attribute.to_s])
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  
         
     | 
| 
      
 30 
     | 
    
         
            +
                  
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 2 
     | 
    
         
            +
              module API
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Reference
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :hash, :url
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  TYPE = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    countries: 'public/countries',
         
     | 
| 
      
 8 
     | 
    
         
            +
                    cities:    'public/cities',
         
     | 
| 
      
 9 
     | 
    
         
            +
                    places:    'public/places',
         
     | 
| 
      
 10 
     | 
    
         
            +
                    streets:   'public/streets'
         
     | 
| 
      
 11 
     | 
    
         
            +
                  }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  private
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(hash)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @hash = hash['hash']
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @url  = hash['url']
         
     | 
| 
      
 20 
     | 
    
         
            +
                    self
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  
         
     | 
| 
      
 23 
     | 
    
         
            +
                  
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module DellinInfo
         
     | 
| 
      
 2 
     | 
    
         
            +
              module API
         
     | 
| 
      
 3 
     | 
    
         
            +
                module ValideData
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def there_tracks (oders_hash)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    if oders_hash['orders'].empty?
         
     | 
| 
      
 7 
     | 
    
         
            +
                      p errors
         
     | 
| 
      
 8 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 9 
     | 
    
         
            +
                    else
         
     | 
| 
      
 10 
     | 
    
         
            +
                      oders_hash.dig('orders', 'tracker')
         
     | 
| 
      
 11 
     | 
    
         
            +
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
                    
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def parse_hash_response(track, key_is_hash)
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    simple_hash = {}
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    track.each_pair do |param, val|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      unless param.to_s == key_is_hash.to_s
         
     | 
| 
      
 22 
     | 
    
         
            +
                        simple_hash[param.to_sym] = val
         
     | 
| 
      
 23 
     | 
    
         
            +
                      else
         
     | 
| 
      
 24 
     | 
    
         
            +
                        val.each_pair { |key, val_oder| simple_hash[key.to_sym] = val_oder  }
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    simple_hash
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  end 
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def set_attr_method(attr_sym)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    atr = attr_sym.to_s + '='
         
     | 
| 
      
 34 
     | 
    
         
            +
                    atr.to_sym
         
     | 
| 
      
 35 
     | 
    
         
            +
                    
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  def delete_spase_key(hash)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    valid_hash = {}
         
     | 
| 
      
 40 
     | 
    
         
            +
                    hash.each_pair { |key, val| valid_hash[key.strip] = val  }
         
     | 
| 
      
 41 
     | 
    
         
            +
                    valid_hash
         
     | 
| 
      
 42 
     | 
    
         
            +
                        
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end    
         
     | 
| 
      
 44 
     | 
    
         
            +
                  
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,83 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: dellin_info_api
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Alexander Shvaykin
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-04-07 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: activesupport
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '4.2'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '4.2'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: httparty
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 0.13.7
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 0.13.7
         
     | 
| 
      
 41 
     | 
    
         
            +
            description: Gem implements the methods of public api dellin.ru site
         
     | 
| 
      
 42 
     | 
    
         
            +
            email: skiline.alex@gmail.com
         
     | 
| 
      
 43 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 44 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 45 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 46 
     | 
    
         
            +
            files:
         
     | 
| 
      
 47 
     | 
    
         
            +
            - "./README.txt"
         
     | 
| 
      
 48 
     | 
    
         
            +
            - lib/dellin_info.rb
         
     | 
| 
      
 49 
     | 
    
         
            +
            - lib/dellininfo/client.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
            - lib/dellininfo/order.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - lib/dellininfo/order_collection.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - lib/dellininfo/order_status.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/dellininfo/reference.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/dellininfo/valide_data.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            homepage: https://github.com/AlexanderShvaykin/dellininfo/
         
     | 
| 
      
 56 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 57 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 58 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 59 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 60 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 61 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 63 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 64 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 65 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 66 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 67 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 68 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 69 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 70 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 71 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 72 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 73 
     | 
    
         
            +
            requirements:
         
     | 
| 
      
 74 
     | 
    
         
            +
            - Internet connection
         
     | 
| 
      
 75 
     | 
    
         
            +
            - A good mood
         
     | 
| 
      
 76 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 77 
     | 
    
         
            +
            rubygems_version: 2.5.1
         
     | 
| 
      
 78 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 79 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 80 
     | 
    
         
            +
            summary: Search shipments by incomplete data and check the status of sending in a
         
     | 
| 
      
 81 
     | 
    
         
            +
              transport company
         
     | 
| 
      
 82 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 83 
     | 
    
         
            +
            has_rdoc: 
         
     |