traxo_api 0.1.0 → 0.2.0
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 +4 -4
- data/README.md +11 -6
- data/lib/traxo/client.rb +22 -14
- data/lib/traxo/endpoints/segments/air.rb +71 -0
- data/lib/traxo/version.rb +1 -1
- data/lib/traxo_api.rb +2 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 908a877bad2c37d81e3118ca0d6003a4038e2e81
         | 
| 4 | 
            +
              data.tar.gz: bce5e411c6ff950ef7a3580f1685a9128d1e0a89
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c3f60c2f38a6c85d1f709815f1a83711c4927b16f8e732b7bcfd81b10593b26b1d2d1b2ef9ab8f2cd8374e5e0af9214d8ba7b244750b1c89052b6fe346cbe687
         | 
| 7 | 
            +
              data.tar.gz: a411f7746280f1142861a8de5fdbfa464d3b8a650ef5bf07016dd136794b22feee6d033d4bbe71fbbdc4e6c7621071faaf50e790d06da95beede76f767769090
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,8 +1,10 @@ | |
| 1 1 | 
             
            #traxo_api
         | 
| 2 2 |  | 
| 3 | 
            +
            [](http://badge.fury.io/rb/traxo_api)
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
            The 'traxo_api' gem is a Ruby wrapper meant to simplify the processes of both authorizing applications and creating interactions with the [Traxo API](https://developer.traxo.com).  
         | 
| 4 6 |  | 
| 5 | 
            -
            Currently, methods for the  | 
| 7 | 
            +
            Currently, methods for the __member__, __accounts__, __trips__, and __air segments__ endpoints of Traxo's API have been implemented. More sections are hopefully soon to come.
         | 
| 6 8 |  | 
| 7 9 | 
             
            ###README Contents:  
         | 
| 8 10 | 
             
            - [Installation](#toc-installation)  
         | 
| @@ -18,12 +20,10 @@ Currently, methods for the _member_, _accounts_, and _trips_ endpoints of Traxo' | |
| 18 20 | 
             
            <a name="toc-installation"></a>
         | 
| 19 21 | 
             
            ##Installation
         | 
| 20 22 |  | 
| 21 | 
            -
            _Note: this gem is currently in pre-release and should have its first non-pre-release within a few days_.
         | 
| 22 | 
            -
             | 
| 23 23 | 
             
            Add this line to your application's Gemfile:
         | 
| 24 24 |  | 
| 25 25 | 
             
            ```ruby
         | 
| 26 | 
            -
            gem 'traxo_api' | 
| 26 | 
            +
            gem 'traxo_api'
         | 
| 27 27 | 
             
            ```
         | 
| 28 28 |  | 
| 29 29 | 
             
            And then execute:
         | 
| @@ -32,7 +32,7 @@ And then execute: | |
| 32 32 |  | 
| 33 33 | 
             
            Or install it yourself as:
         | 
| 34 34 |  | 
| 35 | 
            -
                $ gem install traxo_api | 
| 35 | 
            +
                $ gem install traxo_api
         | 
| 36 36 |  | 
| 37 37 | 
             
            <a name="toc-usage"></a>
         | 
| 38 38 | 
             
            ##Usage
         | 
| @@ -43,6 +43,8 @@ Traxo's API uses the OAuth 2.0 standard for authorization. Additionally, Traxo e | |
| 43 43 |  | 
| 44 44 | 
             
            To gain authorization from a Traxo user, you will need to [register your application](https://developer.traxo.com/signup) with Traxo.  Once registered, you will need to retrieve your your _client ID_ and _client secret_ from the API's website where you will also need to register a _redirect url_ for the application.
         | 
| 45 45 |  | 
| 46 | 
            +
            See the [__authorization documentation__](https://github.com/wilchandler/traxo_api/wiki/Authorization) for a list and detailing of available authorization methods.
         | 
| 47 | 
            +
             | 
| 46 48 | 
             
            ####Example of authorization controller flow
         | 
| 47 49 | 
             
            ```ruby
         | 
| 48 50 | 
             
            class TraxoController < ApplicationController
         | 
| @@ -77,8 +79,11 @@ end | |
| 77 79 |  | 
| 78 80 | 
             
            <a name="toc-crud"></a>
         | 
| 79 81 | 
             
            ###CRUD
         | 
| 80 | 
            -
            Once a user has authorized your application and you have a valid access token, you can start making CRUD (create, read, update, delete) requests to the Traxo API on their behalf.
         | 
| 82 | 
            +
            Once a user has authorized your application and you have a valid access token, you can start making CRUD (create, read, update, delete) requests to the Traxo API on their behalf.  There are a multiple response formats available, and http errors/failures can be configured to be _raise exceptions_ (default), _ignored_, or to _return false_ for the CRUD method being called.
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            See the [__endpoint documentation__](https://github.com/wilchandler/traxo_api/wiki/Client-for-Endpoints) for response formatting and error handling. Individual endpoint methods are also detailed in the documentation.
         | 
| 81 85 |  | 
| 86 | 
            +
            ####Example of getting user's Traxo details and creating a trip
         | 
| 82 87 | 
             
            ```ruby
         | 
| 83 88 | 
             
            t = Traxo::Client.new('ACCESS_TOKEN', 'CLIENT_ID', 'CLIENT_SECRET')
         | 
| 84 89 | 
             
            t.get_member # => Hash of properties for user's Traxo account
         | 
    
        data/lib/traxo/client.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ module Traxo | |
| 2 2 |  | 
| 3 3 | 
             
              class Client
         | 
| 4 4 | 
             
                attr_accessor :access_token
         | 
| 5 | 
            -
                attr_reader :response_format, : | 
| 5 | 
            +
                attr_reader :response_format, :error_handling
         | 
| 6 6 |  | 
| 7 7 | 
             
                API_URL = "https://api.traxo.com/v2/"
         | 
| 8 8 |  | 
| @@ -44,12 +44,17 @@ module Traxo | |
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 46 | 
             
                def ignore_http_errors!
         | 
| 47 | 
            -
                  @ | 
| 47 | 
            +
                  @error_handling = :ignore
         | 
| 48 48 | 
             
                  self
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| 51 51 | 
             
                def raise_http_errors!
         | 
| 52 | 
            -
                  @ | 
| 52 | 
            +
                  @error_handling = :raise
         | 
| 53 | 
            +
                  self
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                def return_false_if_http_errors!
         | 
| 57 | 
            +
                  @error_handling = :bool
         | 
| 53 58 | 
             
                  self
         | 
| 54 59 | 
             
                end
         | 
| 55 60 |  | 
| @@ -76,14 +81,15 @@ module Traxo | |
| 76 81 |  | 
| 77 82 | 
             
                def assign_error_handling(action)
         | 
| 78 83 | 
             
                  if action
         | 
| 79 | 
            -
                    if [:raise, :ignore].include? action
         | 
| 84 | 
            +
                    if [:raise, :ignore, :bool].include? action
         | 
| 80 85 | 
             
                      raise_http_errors! if action == :raise
         | 
| 81 86 | 
             
                      ignore_http_errors! if action == :ignore
         | 
| 87 | 
            +
                      return_false_if_http_errors! if action == :bool
         | 
| 82 88 | 
             
                    else
         | 
| 83 89 | 
             
                      raise ArgumentError.new(':errors parameter must be either :raise or :ignore')
         | 
| 84 90 | 
             
                    end
         | 
| 85 91 | 
             
                  else
         | 
| 86 | 
            -
                     | 
| 92 | 
            +
                    ignore_http_errors!
         | 
| 87 93 | 
             
                  end
         | 
| 88 94 | 
             
                end
         | 
| 89 95 |  | 
| @@ -129,7 +135,7 @@ module Traxo | |
| 129 135 | 
             
                  request = Net::HTTP::Delete.new(uri)
         | 
| 130 136 | 
             
                  attach_token(request)
         | 
| 131 137 | 
             
                  response = make_http_request(uri) { |http| http.request(request) }
         | 
| 132 | 
            -
                   | 
| 138 | 
            +
                  format_response(response)
         | 
| 133 139 | 
             
                end
         | 
| 134 140 |  | 
| 135 141 | 
             
                def query_string(data = {})
         | 
| @@ -146,7 +152,6 @@ module Traxo | |
| 146 152 | 
             
                end
         | 
| 147 153 |  | 
| 148 154 | 
             
                def convert_time(time)
         | 
| 149 | 
            -
                  time = time.dup
         | 
| 150 155 | 
             
                  if time.is_a? String
         | 
| 151 156 | 
             
                    begin
         | 
| 152 157 | 
             
                      time = Time.parse(time)
         | 
| @@ -160,7 +165,7 @@ module Traxo | |
| 160 165 | 
             
                end
         | 
| 161 166 |  | 
| 162 167 | 
             
                def format_response(response)
         | 
| 163 | 
            -
                  return false unless  | 
| 168 | 
            +
                  return false unless check_success(response)
         | 
| 164 169 |  | 
| 165 170 | 
             
                  case @response_format
         | 
| 166 171 | 
             
                  when :http
         | 
| @@ -175,18 +180,21 @@ module Traxo | |
| 175 180 | 
             
                    response.header.each { |key| headers[key.to_sym] = response[key] }
         | 
| 176 181 | 
             
                    headers
         | 
| 177 182 | 
             
                  when :headers_string
         | 
| 178 | 
            -
                     | 
| 183 | 
            +
                    headers = {}
         | 
| 184 | 
            +
                    response.header.each { |key| headers[key.to_sym] = response[key] }
         | 
| 185 | 
            +
                    headers.to_json
         | 
| 179 186 | 
             
                  when :code
         | 
| 180 187 | 
             
                    response.code.to_i
         | 
| 181 188 | 
             
                  end
         | 
| 182 189 | 
             
                end
         | 
| 183 190 |  | 
| 184 | 
            -
                def  | 
| 185 | 
            -
                  if @ | 
| 186 | 
            -
                    response.value || response
         | 
| 187 | 
            -
                   | 
| 188 | 
            -
                    response | 
| 191 | 
            +
                def check_success(response)
         | 
| 192 | 
            +
                  if @error_handling == :raise
         | 
| 193 | 
            +
                    return response.value || response
         | 
| 194 | 
            +
                  elsif @error_handling == :ignore
         | 
| 195 | 
            +
                    return response
         | 
| 189 196 | 
             
                  end
         | 
| 197 | 
            +
                  response.code <= '300'
         | 
| 190 198 | 
             
                end
         | 
| 191 199 | 
             
              end
         | 
| 192 200 |  | 
| @@ -0,0 +1,71 @@ | |
| 1 | 
            +
            module Traxo
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              class Client
         | 
| 4 | 
            +
                def get_air_segments(args = {})
         | 
| 5 | 
            +
                  query = get_air_segments_options(args)
         | 
| 6 | 
            +
                  url = "#{API_URL}segments/air#{ query_string(query) }"
         | 
| 7 | 
            +
                  get_request_with_token(url)
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def get_air_segment(id)
         | 
| 11 | 
            +
                  url = "#{ API_URL}segments/air/#{id}"
         | 
| 12 | 
            +
                  get_request_with_token(url)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def create_air_segment(args)
         | 
| 16 | 
            +
                  url = "#{ API_URL}segments/air"
         | 
| 17 | 
            +
                  data = create_air_segment_options(args)
         | 
| 18 | 
            +
                  post_request_with_token(url, data)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def update_air_segment(id, args)
         | 
| 22 | 
            +
                  url = "#{ API_URL}segments/air/#{id}"
         | 
| 23 | 
            +
                  data = create_air_segment_options(args, false)
         | 
| 24 | 
            +
                  data.delete_if { |key, val| !val } # previous datetime filtering is skipped
         | 
| 25 | 
            +
                  raise ArgumentError.new('Must provide options to update segment') if data.empty?
         | 
| 26 | 
            +
                  put_request_with_token(url, data)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def delete_air_segment(id)
         | 
| 30 | 
            +
                  url = "#{ API_URL}segments/air/#{id}"
         | 
| 31 | 
            +
                  delete_request_with_token(url)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  private
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def get_air_segments_options(args)
         | 
| 37 | 
            +
                  unless args.empty?
         | 
| 38 | 
            +
                    args = args.dup
         | 
| 39 | 
            +
                    options = [:start, :status, :end]
         | 
| 40 | 
            +
                    args.select! { |key| options.include? key }
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                  args = {start: 'today'}.merge(args)
         | 
| 43 | 
            +
                  args[:start] = convert_time(args[:start]) unless args[:start] == 'today'
         | 
| 44 | 
            +
                  if args[:end] && args[:end] != 'today'
         | 
| 45 | 
            +
                    args[:end] = convert_time(args[:end])
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                  args
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def create_air_segment_options(args, enforce_required = true)
         | 
| 51 | 
            +
                  args = args.dup
         | 
| 52 | 
            +
                  args[:departure_datetime] = convert_time args[:departure_datetime]
         | 
| 53 | 
            +
                  args[:arrival_datetime] = convert_time args[:arrival_datetime]
         | 
| 54 | 
            +
                  create_air_segment_required_params(args) if enforce_required
         | 
| 55 | 
            +
                  options = [ :trip_id, :origin, :destination, :departure_datetime,
         | 
| 56 | 
            +
                              :arrival_datetime, :airline, :flight_num, :seat_assignment,
         | 
| 57 | 
            +
                              :confirmation_no, :number_of_pax, :price, :currency, :phone,
         | 
| 58 | 
            +
                              :first_name, :last_name ]
         | 
| 59 | 
            +
                  args.keep_if { |key| options.include? key }
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def create_air_segment_required_params(args)
         | 
| 63 | 
            +
                  required = [:trip_id, :origin, :destination, :departure_datetime,
         | 
| 64 | 
            +
                              :arrival_datetime, :airline, :flight_num]
         | 
| 65 | 
            +
                  required.each do |arg|
         | 
| 66 | 
            +
                    raise ArgumentError.new("#{arg} is a required argument key") unless args[arg]
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            end
         | 
    
        data/lib/traxo/version.rb
    CHANGED
    
    
    
        data/lib/traxo_api.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: traxo_api
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Wil Chandler
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-06- | 
| 11 | 
            +
            date: 2015-06-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -88,6 +88,7 @@ files: | |
| 88 88 | 
             
            - lib/traxo/client.rb
         | 
| 89 89 | 
             
            - lib/traxo/endpoints/accounts.rb
         | 
| 90 90 | 
             
            - lib/traxo/endpoints/member.rb
         | 
| 91 | 
            +
            - lib/traxo/endpoints/segments/air.rb
         | 
| 91 92 | 
             
            - lib/traxo/endpoints/trips.rb
         | 
| 92 93 | 
             
            - lib/traxo/version.rb
         | 
| 93 94 | 
             
            - lib/traxo_api.rb
         |