tradier 0.1.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.
- data/.yardopts +8 -0
 - data/LICENSE.md +20 -0
 - data/README.md +114 -0
 - data/Rakefile +19 -0
 - data/lib/tradier.rb +31 -0
 - data/lib/tradier/account.rb +30 -0
 - data/lib/tradier/api/accounts.rb +122 -0
 - data/lib/tradier/api/markets.rb +113 -0
 - data/lib/tradier/api/orders.rb +84 -0
 - data/lib/tradier/api/utils.rb +47 -0
 - data/lib/tradier/api/utils/account.rb +15 -0
 - data/lib/tradier/api/utils/balance.rb +15 -0
 - data/lib/tradier/api/utils/base.rb +46 -0
 - data/lib/tradier/api/utils/event.rb +15 -0
 - data/lib/tradier/api/utils/expiration.rb +19 -0
 - data/lib/tradier/api/utils/gainloss.rb +15 -0
 - data/lib/tradier/api/utils/history.rb +15 -0
 - data/lib/tradier/api/utils/option_quote.rb +15 -0
 - data/lib/tradier/api/utils/order.rb +15 -0
 - data/lib/tradier/api/utils/position.rb +15 -0
 - data/lib/tradier/api/utils/quote.rb +15 -0
 - data/lib/tradier/api/utils/strike.rb +15 -0
 - data/lib/tradier/api/utils/timesales.rb +15 -0
 - data/lib/tradier/api/utils/watchlist.rb +15 -0
 - data/lib/tradier/api/watchlists.rb +139 -0
 - data/lib/tradier/balance.rb +17 -0
 - data/lib/tradier/base.rb +76 -0
 - data/lib/tradier/calendar.rb +23 -0
 - data/lib/tradier/client.rb +89 -0
 - data/lib/tradier/clock.rb +21 -0
 - data/lib/tradier/configurable.rb +76 -0
 - data/lib/tradier/core_ext/enumerable.rb +9 -0
 - data/lib/tradier/default.rb +75 -0
 - data/lib/tradier/error.rb +34 -0
 - data/lib/tradier/error/bad_gateway.rb +11 -0
 - data/lib/tradier/error/bad_request.rb +10 -0
 - data/lib/tradier/error/client_error.rb +28 -0
 - data/lib/tradier/error/configuration_error.rb +6 -0
 - data/lib/tradier/error/decode_error.rb +9 -0
 - data/lib/tradier/error/forbidden.rb +10 -0
 - data/lib/tradier/error/gateway_timeout.rb +11 -0
 - data/lib/tradier/error/internal_server_error.rb +11 -0
 - data/lib/tradier/error/not_acceptable.rb +10 -0
 - data/lib/tradier/error/not_found.rb +10 -0
 - data/lib/tradier/error/raise_error.rb +31 -0
 - data/lib/tradier/error/server_error.rb +28 -0
 - data/lib/tradier/error/service_unavailable.rb +11 -0
 - data/lib/tradier/error/too_many_requests.rb +12 -0
 - data/lib/tradier/error/unauthorized.rb +10 -0
 - data/lib/tradier/error/unprocessable_entity.rb +10 -0
 - data/lib/tradier/event.rb +8 -0
 - data/lib/tradier/history.rb +20 -0
 - data/lib/tradier/option_quote.rb +37 -0
 - data/lib/tradier/order.rb +14 -0
 - data/lib/tradier/position.rb +7 -0
 - data/lib/tradier/profile.rb +14 -0
 - data/lib/tradier/quote.rb +12 -0
 - data/lib/tradier/response/parse_json.rb +25 -0
 - data/lib/tradier/response/raise_error.rb +31 -0
 - data/lib/tradier/symbol.rb +147 -0
 - data/lib/tradier/timesales.rb +11 -0
 - data/lib/tradier/version.rb +3 -0
 - data/lib/tradier/watchlist.rb +16 -0
 - data/lib/tradier/watchlist_item.rb +17 -0
 - data/spec/fixtures/account_balances.json +28 -0
 - data/spec/fixtures/account_gainloss.json +18 -0
 - data/spec/fixtures/account_history.json +96 -0
 - data/spec/fixtures/account_orders.json +833 -0
 - data/spec/fixtures/account_positions.json +22 -0
 - data/spec/fixtures/calendar.json +400 -0
 - data/spec/fixtures/chain.json +2972 -0
 - data/spec/fixtures/clock.json +10 -0
 - data/spec/fixtures/expirations.json +18 -0
 - data/spec/fixtures/history.json +2086 -0
 - data/spec/fixtures/option_quote.json +14 -0
 - data/spec/fixtures/option_quotes.json +26 -0
 - data/spec/fixtures/order.json +1 -0
 - data/spec/fixtures/order_with_warnings.json +17 -0
 - data/spec/fixtures/placed_order.json +6 -0
 - data/spec/fixtures/quote.json +45 -0
 - data/spec/fixtures/quotes.json +88 -0
 - data/spec/fixtures/session.json +6 -0
 - data/spec/fixtures/strikes.json +173 -0
 - data/spec/fixtures/timesales.json +2956 -0
 - data/spec/fixtures/user_balances.json +118 -0
 - data/spec/fixtures/user_gainloss.json +6775 -0
 - data/spec/fixtures/user_history.json +101 -0
 - data/spec/fixtures/user_orders.json +57 -0
 - data/spec/fixtures/user_positions.json +50 -0
 - data/spec/fixtures/user_profile.json +103 -0
 - data/spec/fixtures/watchlist.json +30 -0
 - data/spec/fixtures/watchlist_item.json +6 -0
 - data/spec/fixtures/watchlists.json +18 -0
 - data/spec/spec_helper.rb +64 -0
 - data/spec/tradier/account_spec.rb +76 -0
 - data/spec/tradier/api/accounts_spec.rb +195 -0
 - data/spec/tradier/api/markets_spec.rb +219 -0
 - data/spec/tradier/api/orders_spec.rb +94 -0
 - data/spec/tradier/api/utils/expiration_spec.rb +8 -0
 - data/spec/tradier/api/watchlists_spec.rb +164 -0
 - data/spec/tradier/balance_spec.rb +4 -0
 - data/spec/tradier/base_spec.rb +11 -0
 - data/spec/tradier/calendar_spec.rb +27 -0
 - data/spec/tradier/client_spec.rb +125 -0
 - data/spec/tradier/clock_spec.rb +73 -0
 - data/spec/tradier/error/client_error_spec.rb +22 -0
 - data/spec/tradier/error/server_error_spec.rb +22 -0
 - data/spec/tradier/error_spec.rb +26 -0
 - data/spec/tradier/option_quote_spec.rb +61 -0
 - data/spec/tradier/order_spec.rb +43 -0
 - data/spec/tradier/position_spec.rb +4 -0
 - data/spec/tradier/profile_spec.rb +28 -0
 - data/spec/tradier/quote_spec.rb +29 -0
 - data/spec/tradier/symbol_spec.rb +54 -0
 - data/spec/tradier/watchlist_item_spec.rb +48 -0
 - data/spec/tradier/watchlist_spec.rb +35 -0
 - data/spec/tradier_spec.rb +105 -0
 - data/tradier.gemspec +30 -0
 - metadata +302 -0
 
    
        data/.yardopts
    ADDED
    
    
    
        data/LICENSE.md
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2013 Tradier Inc.
         
     | 
| 
      
 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,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Tradier
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            [][gem]
         
     | 
| 
      
 4 
     | 
    
         
            +
            [][travis]
         
     | 
| 
      
 5 
     | 
    
         
            +
            [][gemnasium]
         
     | 
| 
      
 6 
     | 
    
         
            +
            [][coveralls]
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            [gem]: https://rubygems.org/gems/tradier
         
     | 
| 
      
 9 
     | 
    
         
            +
            [travis]: http://travis-ci.org/tradier/tradier.rb
         
     | 
| 
      
 10 
     | 
    
         
            +
            [gemnasium]: https://gemnasium.com/tradier/tradier.rb
         
     | 
| 
      
 11 
     | 
    
         
            +
            [coveralls]: https://coveralls.io/r/tradier/tradier.rb
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Rubygem for interacting with the Tradier API.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                gem install tradier
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Create an instance of a `Tradier::Client`:
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                require 'tradier'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                client = Tradier::Client.new(:access_token => 'token')
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### Placing Orders
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            Orders can be placed using the `create_order` method. Here are some basic examples:
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            Place an equity order:
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                client.create_order({
         
     | 
| 
      
 34 
     | 
    
         
            +
                  :account  => '123456789'
         
     | 
| 
      
 35 
     | 
    
         
            +
                  :class    => 'equity',
         
     | 
| 
      
 36 
     | 
    
         
            +
                  :symbol   => 'AAPL',
         
     | 
| 
      
 37 
     | 
    
         
            +
                  :duration => 'day',
         
     | 
| 
      
 38 
     | 
    
         
            +
                  :side     => 'buy',
         
     | 
| 
      
 39 
     | 
    
         
            +
                  :quantity => '100',
         
     | 
| 
      
 40 
     | 
    
         
            +
                  :type     => 'market'
         
     | 
| 
      
 41 
     | 
    
         
            +
                })
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            Placing an option order:
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                client.create_order({
         
     | 
| 
      
 46 
     | 
    
         
            +
                  :account       => '123456789'
         
     | 
| 
      
 47 
     | 
    
         
            +
                  :class         => 'option',
         
     | 
| 
      
 48 
     | 
    
         
            +
                  :symbol        => 'AAPL',
         
     | 
| 
      
 49 
     | 
    
         
            +
                  :option_symbol => 'AAPL140118C00195000',
         
     | 
| 
      
 50 
     | 
    
         
            +
                  :duration      => 'day',
         
     | 
| 
      
 51 
     | 
    
         
            +
                  :side          => 'buy',
         
     | 
| 
      
 52 
     | 
    
         
            +
                  :quantity      => '100',
         
     | 
| 
      
 53 
     | 
    
         
            +
                  :type          => 'market'
         
     | 
| 
      
 54 
     | 
    
         
            +
                })
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            For a complete list of the types of orders accepted, refer to [Tradier's trading API documentation][trading]
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            [trading]: https://developer.tradier.com/documentation/trading/getting-started
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ### Interacting with Accounts
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            Obtain a user's profile/accounts:
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                client.profile
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            #### Balances
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            Obtain an account's balances:
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                client.balance('12345678')
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            #### Positions
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            Obtain an account's positions
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                client.positions('12345678')
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            Obtain positions for all of a user's accounts:
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                client.positions
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            #### Orders
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            Obtain an account's order
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                client.orders('12345678')
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            Obtain order for all of a user's accounts:
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                client.orders
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            ### Market Data
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            To obtain a quote, simply request:
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                client.quote('SYMBOL')
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            Or multiple quotes at one time:
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                client.quote(['SYMBOL', 'SYMBOL2'])
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            Option chains can be requested using a symbol and expiration:
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                client.chain('SYMBOL', :expiration => '2013-11-14')
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            Refer to the complete [documentation][rdoc] for a complete listing of methods and classes.
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            [rdoc]: http://rdoc.info/gems/tradier
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            ## Copyright
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            Copyright (c) 2013 Tradier Inc. See [LICENSE](LICENSE.md) for detail.
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env rake
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'bundler/gem_tasks'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'rspec/core/rake_task'
         
     | 
| 
      
 6 
     | 
    
         
            +
            RSpec::Core::RakeTask.new(:spec) do |t|
         
     | 
| 
      
 7 
     | 
    
         
            +
              t.ruby_opts = '-w'
         
     | 
| 
      
 8 
     | 
    
         
            +
            end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            task :default => :spec
         
     | 
| 
      
 11 
     | 
    
         
            +
            task :test => :spec
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            require 'yard'
         
     | 
| 
      
 14 
     | 
    
         
            +
            namespace :doc do
         
     | 
| 
      
 15 
     | 
    
         
            +
              YARD::Rake::YardocTask.new do |task|
         
     | 
| 
      
 16 
     | 
    
         
            +
                task.files   = ['LICENSE.md', 'lib/**/*.rb']
         
     | 
| 
      
 17 
     | 
    
         
            +
                task.options = ['--markup', 'markdown']
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/tradier.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tradier/error'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'tradier/client'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'tradier/configurable'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'tradier/default'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Tradier
         
     | 
| 
      
 7 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 8 
     | 
    
         
            +
                include Tradier::Configurable
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # Delegate to a Tradier::Client
         
     | 
| 
      
 11 
     | 
    
         
            +
                #
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @return [Tradier::Client]
         
     | 
| 
      
 13 
     | 
    
         
            +
                def client
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @client = Tradier::Client.new(options) unless defined?(@client) && @client.hash == options.hash
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @client
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def respond_to_missing?(method_name, include_private=false); client.respond_to?(method_name, include_private); end if RUBY_VERSION >= "1.9"
         
     | 
| 
      
 19 
     | 
    
         
            +
                def respond_to?(method_name, include_private=false); client.respond_to?(method_name, include_private) || super; end if RUBY_VERSION < "1.9"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              private
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def method_missing(method_name, *args, &block)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  return super unless client.respond_to?(method_name)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  client.send(method_name, *args, &block)
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            Tradier.setup
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tradier/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Tradier
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Account < Tradier::Base
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :account_number, :type
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def margin?
         
     | 
| 
      
 8 
     | 
    
         
            +
                  type.downcase == 'margin'
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def cash?
         
     | 
| 
      
 12 
     | 
    
         
            +
                  type.downcase == 'cash'
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def positions
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @attrs[:positions][:position].map { |a| Tradier::Position.new(a) }
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def orders
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @attrs[:orders][:order].map { |a| Tradier::Order.new(a) }
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def gainloss
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def history
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,122 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tradier/api/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Tradier
         
     | 
| 
      
 4 
     | 
    
         
            +
              module API
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Accounts
         
     | 
| 
      
 6 
     | 
    
         
            +
                  include Tradier::API::Utils
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-profile
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # @return [Tradier::Profile] The user's profile.
         
     | 
| 
      
 13 
     | 
    
         
            +
                  def profile
         
     | 
| 
      
 14 
     | 
    
         
            +
                    object_from_response(Tradier::Profile, :get, '/user/profile', {})
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  alias user_profile profile
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-balances
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/accounts/get-account-balance
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # @overload balances
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #   Request a user's balances.
         
     | 
| 
      
 24 
     | 
    
         
            +
                  #   @return [Array<Tradier::Balance>] An array of balances.
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # @overload balances(account_number)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  #   Request an individual account's balance.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #   @param [String] account_number An account number.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #   @return [Tradier::Balance] The account balance object when a single account is requested.
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def balances(account_number=nil, options={})
         
     | 
| 
      
 31 
     | 
    
         
            +
                    if account_number
         
     | 
| 
      
 32 
     | 
    
         
            +
                      object_from_response(Tradier::Balance, :get, "/accounts/#{account_number}/balances", options)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    else
         
     | 
| 
      
 34 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Balance, :get, "/user/balances", options).body
         
     | 
| 
      
 35 
     | 
    
         
            +
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  alias balance balances
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-positions
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/accounts/get-account-positions
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # @overload positions
         
     | 
| 
      
 44 
     | 
    
         
            +
                  #   Request a user's positions.
         
     | 
| 
      
 45 
     | 
    
         
            +
                  #   @return [Array<Tradier::Account>] An array of accounts with positions.
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # @overload positions(account_number)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  #   Request an individual account's positions.
         
     | 
| 
      
 48 
     | 
    
         
            +
                  #   @param [String] account_number An account number.
         
     | 
| 
      
 49 
     | 
    
         
            +
                  #   @return [Array<Tradier::Position>] An array of [Tradier::Position] objects for a given account.
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 51 
     | 
    
         
            +
                  def positions(account_number=nil, options={})
         
     | 
| 
      
 52 
     | 
    
         
            +
                    if account_number
         
     | 
| 
      
 53 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Position, :get, "/accounts/#{account_number}/positions", options).body
         
     | 
| 
      
 54 
     | 
    
         
            +
                    else
         
     | 
| 
      
 55 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Account, :get, '/user/positions', options).body
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  alias position positions
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-orders
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/accounts/get-account-orders
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 64 
     | 
    
         
            +
                  # @overload orders
         
     | 
| 
      
 65 
     | 
    
         
            +
                  #   Request a user's orders.
         
     | 
| 
      
 66 
     | 
    
         
            +
                  #   @return [Array<Tradier::Account>] An array of accounts with orders.
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # @overload orders(account_number)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  #   Request a specific account's orders.
         
     | 
| 
      
 69 
     | 
    
         
            +
                  #   @param [String] account_number An account number (optional).
         
     | 
| 
      
 70 
     | 
    
         
            +
                  #   @return [Array<Tradier::Order>] An array of [Tradier::Order] objects for a given account.
         
     | 
| 
      
 71 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 72 
     | 
    
         
            +
                  def orders(account_number=nil, options={})
         
     | 
| 
      
 73 
     | 
    
         
            +
                    if account_number
         
     | 
| 
      
 74 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Order, :get, "/accounts/#{account_number}/orders", options).body
         
     | 
| 
      
 75 
     | 
    
         
            +
                    else
         
     | 
| 
      
 76 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Account, :get, '/user/orders', options).body
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-gainloss
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/accounts/get-account-gainloss
         
     | 
| 
      
 82 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 83 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 84 
     | 
    
         
            +
                  # @overload gainloss
         
     | 
| 
      
 85 
     | 
    
         
            +
                  #   Request a user's cost basis.
         
     | 
| 
      
 86 
     | 
    
         
            +
                  #   @return [Array<Tradier::Account>] An array of accounts with cost-basis.
         
     | 
| 
      
 87 
     | 
    
         
            +
                  # @overload gainloss(account_number)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  #   Request a specific account's cost basis.
         
     | 
| 
      
 89 
     | 
    
         
            +
                  #   @param [String] account_number An account number (optional).
         
     | 
| 
      
 90 
     | 
    
         
            +
                  #   @return [Array<Tradier::Position>] An array of [Tradier::Position] objects for a given account.
         
     | 
| 
      
 91 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 92 
     | 
    
         
            +
                  def gainloss(account_number=nil, options={})
         
     | 
| 
      
 93 
     | 
    
         
            +
                    if account_number
         
     | 
| 
      
 94 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Gainloss, :get, "/accounts/#{account_number}/gainloss", options).body
         
     | 
| 
      
 95 
     | 
    
         
            +
                    else
         
     | 
| 
      
 96 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Account, :get, '/user/gainloss', options).body
         
     | 
| 
      
 97 
     | 
    
         
            +
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/user/get-history
         
     | 
| 
      
 101 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/accounts/get-account-history
         
     | 
| 
      
 102 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 103 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 104 
     | 
    
         
            +
                  # @overload events
         
     | 
| 
      
 105 
     | 
    
         
            +
                  #   Request a user's events.
         
     | 
| 
      
 106 
     | 
    
         
            +
                  #   @return [Array<Tradier::Account>] An array of accounts with history.
         
     | 
| 
      
 107 
     | 
    
         
            +
                  # @overload events(account_number)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  #   Request a specific account's events.
         
     | 
| 
      
 109 
     | 
    
         
            +
                  #   @param [String] account_number An account number (optional).
         
     | 
| 
      
 110 
     | 
    
         
            +
                  #   @return [Array<Tradier::Event>] An array of [Tradier::Event] objects for a given account.
         
     | 
| 
      
 111 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 112 
     | 
    
         
            +
                  def events(account_number=nil, options={})
         
     | 
| 
      
 113 
     | 
    
         
            +
                    if account_number
         
     | 
| 
      
 114 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Event, :get, "/accounts/#{account_number}/history", options).body
         
     | 
| 
      
 115 
     | 
    
         
            +
                    else
         
     | 
| 
      
 116 
     | 
    
         
            +
                      object_from_response(Tradier::API::Utils::Account, :get, '/user/history', options).body
         
     | 
| 
      
 117 
     | 
    
         
            +
                    end
         
     | 
| 
      
 118 
     | 
    
         
            +
                  end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
              end
         
     | 
| 
      
 122 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,113 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tradier/api/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Tradier
         
     | 
| 
      
 4 
     | 
    
         
            +
              module API
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Markets
         
     | 
| 
      
 6 
     | 
    
         
            +
                  include Tradier::API::Utils
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-quotes
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # Obtain quotes.
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # @param [String] symbols A comma delimited list of symbols.
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # @return [Array<Tradier::Quote>] An array of expiration dates.
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 15 
     | 
    
         
            +
                  def quotes(symbols, options={})
         
     | 
| 
      
 16 
     | 
    
         
            +
                    options.merge!('symbols' => normalized_symbols(symbols))
         
     | 
| 
      
 17 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::Quote, :get, '/markets/quotes', options).body
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                  alias quote quotes
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-options-chains
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 24 
     | 
    
         
            +
                  # Obtain an option chain.
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # @param [String] symbol The underlier's symbol.
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # @return [Array<Tradier::OptionQuote>] An array of option quotes.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  def chains(symbol, options={})
         
     | 
| 
      
 29 
     | 
    
         
            +
                    options.merge!('symbol' => symbol)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::OptionQuote, :get, '/markets/options/chains', options).body
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  alias chain chains
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-options-expirations
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # Obtain an underlier's expiration dates.
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # @param [String] symbol The underlier's symbol.
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # @return [Array<Date>] An array of expiration dates.
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 41 
     | 
    
         
            +
                  def expirations(symbol)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::Expiration, :get, '/markets/options/expirations', :symbol => symbol).body
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-options-strikes
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 48 
     | 
    
         
            +
                  # Obtain an underlier's expiration strikes for an expiration date.
         
     | 
| 
      
 49 
     | 
    
         
            +
                  # @param [String] symbol The underlier symbol.
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # @param [String] expiration The expiration date.
         
     | 
| 
      
 51 
     | 
    
         
            +
                  # @return [Array<String>] An array of strike prices.
         
     | 
| 
      
 52 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 53 
     | 
    
         
            +
                  def strikes(symbol, expiration)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::Strike, :get, '/markets/options/strikes', :symbol => symbol, :expiration => expiration).body
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-clock
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # Obtain the market clock
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # @return [Tradier::Clock] A clock.
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 63 
     | 
    
         
            +
                  def clock(options={})
         
     | 
| 
      
 64 
     | 
    
         
            +
                    object_from_response(Tradier::Clock, :get, '/markets/clock', options)
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-calendar
         
     | 
| 
      
 68 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 69 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 70 
     | 
    
         
            +
                  # Obtain the market calendar
         
     | 
| 
      
 71 
     | 
    
         
            +
                  # @return [Tradier::Calendar] A calendar.
         
     | 
| 
      
 72 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def calendar(options={})
         
     | 
| 
      
 74 
     | 
    
         
            +
                    object_from_response(Tradier::Calendar, :get, '/markets/calendar', options)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-timesales
         
     | 
| 
      
 78 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 79 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 80 
     | 
    
         
            +
                  # Get time and sales for a given symbol.
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # @param [String] symbol The symbol.
         
     | 
| 
      
 82 
     | 
    
         
            +
                  # @return [Array<Tradier::Timesales>] An array of Time and Sales quotes.
         
     | 
| 
      
 83 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 84 
     | 
    
         
            +
                  def timesales(symbol, options={})
         
     | 
| 
      
 85 
     | 
    
         
            +
                    options.merge!('symbol' => symbol)
         
     | 
| 
      
 86 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::Timesales, :get, '/markets/timesales', options).body
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  # @see https://developer.tradier.com/documentation/markets/get-history
         
     | 
| 
      
 90 
     | 
    
         
            +
                  # @rate_limited Yes
         
     | 
| 
      
 91 
     | 
    
         
            +
                  # @authentication Requires user context
         
     | 
| 
      
 92 
     | 
    
         
            +
                  # Get historical pricing for a given symbol.
         
     | 
| 
      
 93 
     | 
    
         
            +
                  # @param [String] symbol The symbol.
         
     | 
| 
      
 94 
     | 
    
         
            +
                  # @return [Array<Tradier::Event>] An array of historical quotes.
         
     | 
| 
      
 95 
     | 
    
         
            +
                  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
         
     | 
| 
      
 96 
     | 
    
         
            +
                  def history(symbol, options={})
         
     | 
| 
      
 97 
     | 
    
         
            +
                    options.merge!('symbol' => symbol)
         
     | 
| 
      
 98 
     | 
    
         
            +
                    object_from_response(Tradier::API::Utils::History, :get, '/markets/history', options).body
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  private
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  def normalized_symbols(symbols)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    if symbols.is_a? Array
         
     | 
| 
      
 105 
     | 
    
         
            +
                      symbols.map(&:strip).join(',')
         
     | 
| 
      
 106 
     | 
    
         
            +
                    else
         
     | 
| 
      
 107 
     | 
    
         
            +
                      symbols
         
     | 
| 
      
 108 
     | 
    
         
            +
                    end
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
            end
         
     |