linodeapi 1.0.1 → 2.0.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/.circle-ruby +3 -0
 - data/.prospectus +15 -21
 - data/.rubocop.yml +5 -2
 - data/Gemfile +0 -1
 - data/README.md +7 -1
 - data/Rakefile +1 -2
 - data/circle.yml +3 -8
 - data/dev/spec.yml +10 -37
 - data/lib/linodeapi.rb +3 -0
 - data/lib/linodeapi/errors.rb +47 -0
 - data/lib/linodeapi/raw.rb +42 -25
 - data/lib/linodeapi/retryable.rb +36 -0
 - data/linodeapi.gemspec +10 -9
 - data/spec/linodeapi/raw_spec.rb +1 -1
 - metadata +32 -15
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 386eb467c95101a915f20e0859bf356bb8c765ed
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 45437aba6937cb0e0a03de655948479d5938241d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 18391de6e8204d94eef64f38b28a6f5fba0e0c3f37bb948029237cdeebfbbddcd00df70e107c88450c14e6700f2c1cb9b1c257d968cd5d6b87586dd27cfff1ed
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a01e3df48784a83b12a8cabf96e0608505c825d56a7fd4a81a7ebd330fd41d18a26ec1d7134df3b69a23cc0191c0d37e89f0e5b294c93b3f34e35df9618569f5
         
     | 
    
        data/.circle-ruby
    ADDED
    
    
    
        data/.prospectus
    CHANGED
    
    | 
         @@ -1,31 +1,25 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            Prospectus.extra_dep('file', 'prospectus_circleci')
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
              expected do
         
     | 
| 
       5 
     | 
    
         
            -
                static
         
     | 
| 
       6 
     | 
    
         
            -
                set 'green'
         
     | 
| 
       7 
     | 
    
         
            -
              end
         
     | 
| 
      
 3 
     | 
    
         
            +
            my_slug = 'akerl/linodeapi'
         
     | 
| 
       8 
4 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                slug 'akerl/linodeapi'
         
     | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
            item do
         
     | 
| 
      
 6 
     | 
    
         
            +
              noop
         
     | 
| 
       13 
7 
     | 
    
         | 
| 
       14 
8 
     | 
    
         
             
              deps do
         
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
       17 
     | 
    
         
            -
                    name "api.spec.#{item_name}"
         
     | 
| 
      
 9 
     | 
    
         
            +
                item do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  name 'gems'
         
     | 
| 
       18 
11 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                  expected do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    static
         
     | 
| 
      
 14 
     | 
    
         
            +
                    set 'green'
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
       23 
16 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  actual do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    gemnasium
         
     | 
| 
      
 19 
     | 
    
         
            +
                    slug my_slug
         
     | 
| 
       28 
20 
     | 
    
         
             
                  end
         
     | 
| 
       29 
21 
     | 
    
         
             
                end
         
     | 
| 
       30 
22 
     | 
    
         
             
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              extend ProspectusCircleci::Build.new(my_slug)
         
     | 
| 
       31 
25 
     | 
    
         
             
            end
         
     | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ linodeapi 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            [](https://rubygems.org/gems/linodeapi)
         
     | 
| 
       5 
5 
     | 
    
         
             
            [](https://gemnasium.com/akerl/linodeapi)
         
     | 
| 
       6 
     | 
    
         
            -
            [](https://circleci.com/gh/akerl/linodeapi)
         
     | 
| 
      
 6 
     | 
    
         
            +
            [](https://circleci.com/gh/akerl/linodeapi)
         
     | 
| 
       7 
7 
     | 
    
         
             
            [](https://codecov.io/github/akerl/linodeapi)
         
     | 
| 
       8 
8 
     | 
    
         
             
            [](https://www.codacy.com/app/akerl/linodeapi)
         
     | 
| 
       9 
9 
     | 
    
         
             
            [](https://tldrlegal.com/license/mit-license)
         
     | 
| 
         @@ -54,6 +54,12 @@ api.linode.create 
     | 
|
| 
       54 
54 
     | 
    
         
             
            # ArgumentError: linode.create requires planid
         
     | 
| 
       55 
55 
     | 
    
         
             
            ```
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
            ### Retryable helper
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            The LinodeAPI::Retryable class automatically handles 429 errors (really, any HTTP error that is accompanied by a Retry-After header).
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            This class behaves identially to the LinodeAPI::Raw class, with 2 additional parameters at creation: `max_retries` sets the total number of requests it will attempt per call and `max_delay` sets the maximum delay between attempts. They default to 3 tries and 60 seconds, respectively.
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       57 
63 
     | 
    
         
             
            ## Installation
         
     | 
| 
       58 
64 
     | 
    
         | 
| 
       59 
65 
     | 
    
         
             
                gem install linodeapi
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -7,8 +7,7 @@ RSpec::Core::RakeTask.new(:spec) 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            desc 'Run Rubocop on the gem'
         
     | 
| 
       9 
9 
     | 
    
         
             
            RuboCop::RakeTask.new(:rubocop) do |task|
         
     | 
| 
       10 
     | 
    
         
            -
              task.patterns = ['lib/**/*.rb', 'spec/**/*.rb', 'dev/*.rb']
         
     | 
| 
       11 
10 
     | 
    
         
             
              task.fail_on_error = true
         
     | 
| 
       12 
11 
     | 
    
         
             
            end
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            task default: [ 
     | 
| 
      
 13 
     | 
    
         
            +
            task default: %i[spec rubocop build install]
         
     | 
    
        data/circle.yml
    CHANGED
    
    | 
         @@ -1,12 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            dependencies:
         
     | 
| 
       2 
2 
     | 
    
         
             
              override:
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                - 'rvm-exec 2.1.6 bundle install'
         
     | 
| 
       6 
     | 
    
         
            -
                - 'rvm-exec 2.2.2 bundle install'
         
     | 
| 
      
 3 
     | 
    
         
            +
              - 'for i in $(cat .circle-ruby) ; do rvm-exec $i gem update --system --no-doc || exit 1 ; done'
         
     | 
| 
      
 4 
     | 
    
         
            +
              - 'for i in $(cat .circle-ruby) ; do rvm-exec $i bundle install || exit 1 ; done'
         
     | 
| 
       7 
5 
     | 
    
         
             
            test:
         
     | 
| 
       8 
6 
     | 
    
         
             
              override:
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                - 'rvm-exec 2.0.0-p645 bundle exec rake'
         
     | 
| 
       11 
     | 
    
         
            -
                - 'rvm-exec 2.1.6 bundle exec rake'
         
     | 
| 
       12 
     | 
    
         
            -
                - 'rvm-exec 2.2.2 bundle exec rake'
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 'for i in $(cat .circle-ruby) ; do rvm-exec $i bundle exec rake || exit 1 ; done'
         
     | 
    
        data/dev/spec.yml
    CHANGED
    
    | 
         @@ -686,39 +686,10 @@ linode: 
     | 
|
| 
       686 
686 
     | 
    
         
             
                create:
         
     | 
| 
       687 
687 
     | 
    
         
             
                - desc: ''
         
     | 
| 
       688 
688 
     | 
    
         
             
                - params:
         
     | 
| 
       689 
     | 
    
         
            -
                  - fromdistributionid:
         
     | 
| 
       690 
     | 
    
         
            -
                    - desc: ''
         
     | 
| 
       691 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       692 
     | 
    
         
            -
                    - type: :numeric
         
     | 
| 
       693 
     | 
    
         
            -
                  - isreadonly:
         
     | 
| 
       694 
     | 
    
         
            -
                    - desc: Enable forced read-only for this Disk
         
     | 
| 
       695 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       696 
     | 
    
         
            -
                    - type: :boolean
         
     | 
| 
       697 
     | 
    
         
            -
                  - label:
         
     | 
| 
       698 
     | 
    
         
            -
                    - desc: The display label for this Disk
         
     | 
| 
       699 
     | 
    
         
            -
                    - required: true
         
     | 
| 
       700 
     | 
    
         
            -
                    - type: :string
         
     | 
| 
       701 
689 
     | 
    
         
             
                  - linodeid:
         
     | 
| 
       702 
690 
     | 
    
         
             
                    - desc: ''
         
     | 
| 
       703 
691 
     | 
    
         
             
                    - required: true
         
     | 
| 
       704 
692 
     | 
    
         
             
                    - type: :numeric
         
     | 
| 
       705 
     | 
    
         
            -
                  - rootpass:
         
     | 
| 
       706 
     | 
    
         
            -
                    - desc: ''
         
     | 
| 
       707 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       708 
     | 
    
         
            -
                    - type: :string
         
     | 
| 
       709 
     | 
    
         
            -
                  - rootsshkey:
         
     | 
| 
       710 
     | 
    
         
            -
                    - desc: ''
         
     | 
| 
       711 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       712 
     | 
    
         
            -
                    - type: :string
         
     | 
| 
       713 
     | 
    
         
            -
                  - size:
         
     | 
| 
       714 
     | 
    
         
            -
                    - desc: The size in MB of this Disk.
         
     | 
| 
       715 
     | 
    
         
            -
                    - required: true
         
     | 
| 
       716 
     | 
    
         
            -
                    - type: :numeric
         
     | 
| 
       717 
     | 
    
         
            -
                  - type:
         
     | 
| 
       718 
     | 
    
         
            -
                    - desc: 'The formatted type of this disk.  Valid types are: ext3, ext4, swap,
         
     | 
| 
       719 
     | 
    
         
            -
                        raw'
         
     | 
| 
       720 
     | 
    
         
            -
                    - required: true
         
     | 
| 
       721 
     | 
    
         
            -
                    - type: :string
         
     | 
| 
       722 
693 
     | 
    
         
             
                - throws:
         
     | 
| 
       723 
694 
     | 
    
         
             
                  - NOTFOUND
         
     | 
| 
       724 
695 
     | 
    
         
             
                  - VALIDATION
         
     | 
| 
         @@ -912,14 +883,6 @@ linode: 
     | 
|
| 
       912 
883 
     | 
    
         
             
                    - desc: ''
         
     | 
| 
       913 
884 
     | 
    
         
             
                    - required: true
         
     | 
| 
       914 
885 
     | 
    
         
             
                    - type: :numeric
         
     | 
| 
       915 
     | 
    
         
            -
                  - isreadonly:
         
     | 
| 
       916 
     | 
    
         
            -
                    - desc: Enable forced read-only for this Disk
         
     | 
| 
       917 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       918 
     | 
    
         
            -
                    - type: :boolean
         
     | 
| 
       919 
     | 
    
         
            -
                  - label:
         
     | 
| 
       920 
     | 
    
         
            -
                    - desc: The display label for this Disk
         
     | 
| 
       921 
     | 
    
         
            -
                    - required: false
         
     | 
| 
       922 
     | 
    
         
            -
                    - type: :string
         
     | 
| 
       923 
886 
     | 
    
         
             
                  - linodeid:
         
     | 
| 
       924 
887 
     | 
    
         
             
                    - desc: ''
         
     | 
| 
       925 
888 
     | 
    
         
             
                    - required: false
         
     | 
| 
         @@ -1016,6 +979,16 @@ linode: 
     | 
|
| 
       1016 
979 
     | 
    
         
             
                    - required: false
         
     | 
| 
       1017 
980 
     | 
    
         
             
                    - type: :boolean
         
     | 
| 
       1018 
981 
     | 
    
         
             
                - throws: []
         
     | 
| 
      
 982 
     | 
    
         
            +
              kvmify:
         
     | 
| 
      
 983 
     | 
    
         
            +
              - desc: Changes a Linode's hypervisor from Xen to KVM.
         
     | 
| 
      
 984 
     | 
    
         
            +
              - params:
         
     | 
| 
      
 985 
     | 
    
         
            +
                - linodeid:
         
     | 
| 
      
 986 
     | 
    
         
            +
                  - desc: The LinodeID to migrate to KVM.
         
     | 
| 
      
 987 
     | 
    
         
            +
                  - required: true
         
     | 
| 
      
 988 
     | 
    
         
            +
                  - type: :numeric
         
     | 
| 
      
 989 
     | 
    
         
            +
              - throws:
         
     | 
| 
      
 990 
     | 
    
         
            +
                - NOTFOUND
         
     | 
| 
      
 991 
     | 
    
         
            +
                - VALIDATION
         
     | 
| 
       1019 
992 
     | 
    
         
             
              list:
         
     | 
| 
       1020 
993 
     | 
    
         
             
              - desc: 'Returns a list of all Linodes user has access or delete to, including some
         
     | 
| 
       1021 
994 
     | 
    
         
             
                  properties.  Status values are -1: Being Created, 0: Brand New, 1: Running,
         
     | 
    
        data/lib/linodeapi.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module LinodeAPI
         
     | 
| 
      
 2 
     | 
    
         
            +
              ##
         
     | 
| 
      
 3 
     | 
    
         
            +
              # A standard HTTP error with an embedded error code
         
     | 
| 
      
 4 
     | 
    
         
            +
              class HTTPError < StandardError
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :code
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(code, msg = 'HTTP Error encountered')
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @code = code
         
     | 
| 
      
 9 
     | 
    
         
            +
                  super(msg)
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              ##
         
     | 
| 
      
 14 
     | 
    
         
            +
              # A retryable error that has exceeded its max retries
         
     | 
| 
      
 15 
     | 
    
         
            +
              class RetriedHTTPError < HTTPError
         
     | 
| 
      
 16 
     | 
    
         
            +
                attr_reader :retries
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def initialize(code, retries, msg = nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @retries = retries
         
     | 
| 
      
 20 
     | 
    
         
            +
                  msg ||= "HTTP Error encountered (retried #{retries} times)"
         
     | 
| 
      
 21 
     | 
    
         
            +
                  super(code, msg)
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              ##
         
     | 
| 
      
 26 
     | 
    
         
            +
              # A retryable API error with embedded code and requested delay
         
     | 
| 
      
 27 
     | 
    
         
            +
              class RetryableHTTPError < HTTPError
         
     | 
| 
      
 28 
     | 
    
         
            +
                attr_reader :delay
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def initialize(code, delay, msg = 'Retryable HTTP Error encountered')
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @delay = delay.to_i
         
     | 
| 
      
 32 
     | 
    
         
            +
                  super(code, msg)
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              ##
         
     | 
| 
      
 37 
     | 
    
         
            +
              # An API error in the body of the HTTP response
         
     | 
| 
      
 38 
     | 
    
         
            +
              class APIError < StandardError
         
     | 
| 
      
 39 
     | 
    
         
            +
                attr_reader :action, :details
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def initialize(resp, msg = 'API Error encountered')
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @action = resp['ACTION']
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @details = resp['ERRORARRAY']
         
     | 
| 
      
 44 
     | 
    
         
            +
                  super(msg)
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/linodeapi/raw.rb
    CHANGED
    
    | 
         @@ -9,17 +9,16 @@ module LinodeAPI 
     | 
|
| 
       9 
9 
     | 
    
         
             
              class Raw
         
     | 
| 
       10 
10 
     | 
    
         
             
                include HTTParty
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                attr_reader :apikey, :spec, :names
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
12 
     | 
    
         
             
                def initialize(params = {})
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @options = params
         
     | 
| 
       15 
14 
     | 
    
         
             
                  self.class.base_uri params.fetch(:endpoint, DEFAULT_ENDPOINT)
         
     | 
| 
       16 
     | 
    
         
            -
                  @ 
     | 
| 
       17 
     | 
    
         
            -
                  @ 
     | 
| 
       18 
     | 
    
         
            -
                  @ 
     | 
| 
      
 15 
     | 
    
         
            +
                  @options[:names] ||= []
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @options[:spec] ||= LinodeAPI.spec
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @options[:apikey] ||= authenticate(params)
         
     | 
| 
       19 
18 
     | 
    
         
             
                end
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                def  
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
      
 20 
     | 
    
         
            +
                def respond_to_missing?(method, include_private = false)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  spec[:subs].include?(method) || super
         
     | 
| 
       23 
22 
     | 
    
         
             
                end
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
24 
     | 
    
         
             
                def to_s
         
     | 
| 
         @@ -27,10 +26,22 @@ module LinodeAPI 
     | 
|
| 
       27 
26 
     | 
    
         
             
                end
         
     | 
| 
       28 
27 
     | 
    
         
             
                alias inspect to_s
         
     | 
| 
       29 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                def names
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @names ||= @options[:names]
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def spec
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @spec ||= @options[:spec]
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def apikey
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @apikey ||= @options[:apikey]
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
       30 
41 
     | 
    
         
             
                private
         
     | 
| 
       31 
42 
     | 
    
         | 
| 
       32 
43 
     | 
    
         
             
                def authenticate(params = {})
         
     | 
| 
       33 
     | 
    
         
            -
                  return [] unless  
     | 
| 
      
 44 
     | 
    
         
            +
                  return [] unless names.empty?
         
     | 
| 
       34 
45 
     | 
    
         
             
                  unless (params.values_at :username, :password).all?
         
     | 
| 
       35 
46 
     | 
    
         
             
                    raise ArgumentError, 'You must provide either an API key or user/pass'
         
     | 
| 
       36 
47 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -39,18 +50,18 @@ module LinodeAPI 
     | 
|
| 
       39 
50 
     | 
    
         | 
| 
       40 
51 
     | 
    
         
             
                def method_missing(method, *args, &block)
         
     | 
| 
       41 
52 
     | 
    
         
             
                  return super unless respond_to? method
         
     | 
| 
       42 
     | 
    
         
            -
                  case  
     | 
| 
      
 53 
     | 
    
         
            +
                  case spec[:subs][method][:type]
         
     | 
| 
       43 
54 
     | 
    
         
             
                  when :group then make_group method
         
     | 
| 
       44 
55 
     | 
    
         
             
                  when :call then make_call method, *args
         
     | 
| 
       45 
56 
     | 
    
         
             
                  end
         
     | 
| 
       46 
57 
     | 
    
         
             
                end
         
     | 
| 
       47 
58 
     | 
    
         | 
| 
       48 
59 
     | 
    
         
             
                def make_group(method)
         
     | 
| 
       49 
     | 
    
         
            -
                  group =  
     | 
| 
       50 
     | 
    
         
            -
                     
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                     
     | 
| 
      
 60 
     | 
    
         
            +
                  group = self.class.new(
         
     | 
| 
      
 61 
     | 
    
         
            +
                    @options.dup.merge(
         
     | 
| 
      
 62 
     | 
    
         
            +
                      spec: spec[:subs][method],
         
     | 
| 
      
 63 
     | 
    
         
            +
                      names: names + [method]
         
     | 
| 
      
 64 
     | 
    
         
            +
                    )
         
     | 
| 
       54 
65 
     | 
    
         
             
                  )
         
     | 
| 
       55 
66 
     | 
    
         
             
                  name = "@#{method}".to_sym
         
     | 
| 
       56 
67 
     | 
    
         
             
                  instance_variable_set name, group
         
     | 
| 
         @@ -64,28 +75,34 @@ module LinodeAPI 
     | 
|
| 
       64 
75 
     | 
    
         
             
                end
         
     | 
| 
       65 
76 
     | 
    
         | 
| 
       66 
77 
     | 
    
         
             
                def call(method, params = {})
         
     | 
| 
       67 
     | 
    
         
            -
                   
     | 
| 
       68 
     | 
    
         
            -
                  method = ( 
     | 
| 
       69 
     | 
    
         
            -
                  options = self.class.validate method,  
     | 
| 
       70 
     | 
    
         
            -
                  options[:api_key] =  
     | 
| 
      
 78 
     | 
    
         
            +
                  mspec = spec[:subs][method]
         
     | 
| 
      
 79 
     | 
    
         
            +
                  method = (names + [method.to_s]).join '.'
         
     | 
| 
      
 80 
     | 
    
         
            +
                  options = self.class.validate method, mspec[:params], params
         
     | 
| 
      
 81 
     | 
    
         
            +
                  options[:api_key] = apikey
         
     | 
| 
       71 
82 
     | 
    
         
             
                  options[:api_action] = method
         
     | 
| 
       72 
83 
     | 
    
         
             
                  error_check self.class.post('', body: options)
         
     | 
| 
       73 
84 
     | 
    
         
             
                end
         
     | 
| 
       74 
85 
     | 
    
         | 
| 
       75 
86 
     | 
    
         
             
                def error_check(resp)
         
     | 
| 
       76 
     | 
    
         
            -
                   
     | 
| 
       77 
     | 
    
         
            -
                  raise( 
     | 
| 
      
 87 
     | 
    
         
            +
                  error = create_http_error(resp)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  raise(error) if error
         
     | 
| 
       78 
89 
     | 
    
         
             
                  data = resp.parsed_response
         
     | 
| 
       79 
90 
     | 
    
         
             
                  raise('Invalid API response received') if data.nil?
         
     | 
| 
       80 
91 
     | 
    
         
             
                  self.class.parse data
         
     | 
| 
       81 
92 
     | 
    
         
             
                end
         
     | 
| 
       82 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                def create_http_error(resp)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  code = resp.code
         
     | 
| 
      
 96 
     | 
    
         
            +
                  return nil if code == 200
         
     | 
| 
      
 97 
     | 
    
         
            +
                  delay = resp.headers['Retry-After']
         
     | 
| 
      
 98 
     | 
    
         
            +
                  return RetryableHTTPError.new(code, delay) if delay
         
     | 
| 
      
 99 
     | 
    
         
            +
                  HTTPError.new(code)
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
       83 
102 
     | 
    
         
             
                class << self
         
     | 
| 
       84 
103 
     | 
    
         
             
                  def parse(resp)
         
     | 
| 
       85 
104 
     | 
    
         
             
                    resp['ERRORARRAY'].reject! { |x| x['ERRORCODE'].zero? }
         
     | 
| 
       86 
     | 
    
         
            -
                    unless resp['ERRORARRAY'].empty?
         
     | 
| 
       87 
     | 
    
         
            -
                      raise "API Error on #{resp['ACTION']}: #{resp['ERRORARRAY']}"
         
     | 
| 
       88 
     | 
    
         
            -
                    end
         
     | 
| 
      
 105 
     | 
    
         
            +
                    raise(APIError, resp) unless resp['ERRORARRAY'].empty?
         
     | 
| 
       89 
106 
     | 
    
         
             
                    data = resp['DATA']
         
     | 
| 
       90 
107 
     | 
    
         
             
                    data.is_a?(Hash) ? clean(data) : data.map { |x| clean x }
         
     | 
| 
       91 
108 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -94,8 +111,8 @@ module LinodeAPI 
     | 
|
| 
       94 
111 
     | 
    
         
             
                    OpenStruct.new(Hash[object.map { |k, v| [k.downcase.to_sym, v] }])
         
     | 
| 
       95 
112 
     | 
    
         
             
                  end
         
     | 
| 
       96 
113 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                  def validate(method,  
     | 
| 
       98 
     | 
    
         
            -
                     
     | 
| 
      
 114 
     | 
    
         
            +
                  def validate(method, mspec, given)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    mspec.each_with_object({}) do |(param, info), options|
         
     | 
| 
       99 
116 
     | 
    
         
             
                      if given.include? param
         
     | 
| 
       100 
117 
     | 
    
         
             
                        options[param] = VALIDATION_METHODS[info[:type]].call given[param]
         
     | 
| 
       101 
118 
     | 
    
         
             
                      elsif info[:required]
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module LinodeAPI
         
     | 
| 
      
 2 
     | 
    
         
            +
              ##
         
     | 
| 
      
 3 
     | 
    
         
            +
              # A wrapper for the Raw API that can retry retryable errors
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Retryable < Raw
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(params = {})
         
     | 
| 
      
 6 
     | 
    
         
            +
                  super
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @options[:max_retries] ||= 3
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @options[:max_delay] ||= 60
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                private
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                alias single_call call
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def call(*args)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  call_with_retries(max_retries, *args)
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def call_with_retries(remaining, *args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  single_call(*args)
         
     | 
| 
      
 21 
     | 
    
         
            +
                rescue RetryableHTTPError => e
         
     | 
| 
      
 22 
     | 
    
         
            +
                  raise(RetriedHTTPError.new(e.code, max_retries)) if remaining < 0
         
     | 
| 
      
 23 
     | 
    
         
            +
                  delay = [e.delay, max_delay].min
         
     | 
| 
      
 24 
     | 
    
         
            +
                  sleep delay
         
     | 
| 
      
 25 
     | 
    
         
            +
                  call_with_retries(remaining - 1, *args)
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def max_retries
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @options[:max_retries]
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def max_delay
         
     | 
| 
      
 33 
     | 
    
         
            +
                  @options[:max_delay]
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
    
        data/linodeapi.gemspec
    CHANGED
    
    | 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       2 
2 
     | 
    
         
             
              s.name        = 'linodeapi'
         
     | 
| 
       3 
     | 
    
         
            -
              s.version     = ' 
     | 
| 
       4 
     | 
    
         
            -
              s.date        = Time.now.strftime( 
     | 
| 
      
 3 
     | 
    
         
            +
              s.version     = '2.0.0'
         
     | 
| 
      
 4 
     | 
    
         
            +
              s.date        = Time.now.strftime('%Y-%m-%d')
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              s.summary     = 'Linode API wrapper'
         
     | 
| 
       7 
     | 
    
         
            -
              s.description =  
     | 
| 
      
 7 
     | 
    
         
            +
              s.description = 'Wraps the Linode API with multiple levels of interaction'
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.authors     = ['Les Aker']
         
     | 
| 
       9 
9 
     | 
    
         
             
              s.email       = 'me@lesaker.org'
         
     | 
| 
       10 
10 
     | 
    
         
             
              s.homepage    = 'https://github.com/akerl/linodeapi'
         
     | 
| 
         @@ -13,13 +13,14 @@ Gem::Specification.new do |s| 
     | 
|
| 
       13 
13 
     | 
    
         
             
              s.files       = `git ls-files`.split
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.test_files  = `git ls-files spec/*`.split
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
              s.add_dependency 'httparty', '~> 0. 
     | 
| 
      
 16 
     | 
    
         
            +
              s.add_dependency 'httparty', '~> 0.15.5'
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
              s.add_development_dependency 'rubocop', '~> 0. 
     | 
| 
       19 
     | 
    
         
            -
              s.add_development_dependency ' 
     | 
| 
      
 18 
     | 
    
         
            +
              s.add_development_dependency 'rubocop', '~> 0.50.0'
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.add_development_dependency 'goodcop', '~> 0.1.0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.add_development_dependency 'rake', '~> 12.1.0'
         
     | 
| 
       20 
21 
     | 
    
         
             
              s.add_development_dependency 'codecov', '~> 0.1.1'
         
     | 
| 
       21 
     | 
    
         
            -
              s.add_development_dependency 'rspec', '~> 3. 
     | 
| 
       22 
     | 
    
         
            -
              s.add_development_dependency 'fuubar', '~> 2. 
     | 
| 
       23 
     | 
    
         
            -
              s.add_development_dependency 'webmock', '~>  
     | 
| 
      
 22 
     | 
    
         
            +
              s.add_development_dependency 'rspec', '~> 3.6.0'
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.add_development_dependency 'fuubar', '~> 2.2.0'
         
     | 
| 
      
 24 
     | 
    
         
            +
              s.add_development_dependency 'webmock', '~> 3.0.0'
         
     | 
| 
       24 
25 
     | 
    
         
             
              s.add_development_dependency 'vcr', '~> 3.0.0'
         
     | 
| 
       25 
26 
     | 
    
         
             
            end
         
     | 
    
        data/spec/linodeapi/raw_spec.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: linodeapi
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Les Aker
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-10-03 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: httparty
         
     | 
| 
         @@ -16,42 +16,56 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 0.15.5
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 0.15.5
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: rubocop
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
31 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 0.50.0
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :development
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
38 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 0.50.0
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: goodcop
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 0.1.0
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 0.1.0
         
     | 
| 
       41 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
56 
     | 
    
         
             
              name: rake
         
     | 
| 
       43 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
59 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       46 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
     | 
    
         
            -
                    version:  
     | 
| 
      
 61 
     | 
    
         
            +
                    version: 12.1.0
         
     | 
| 
       48 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
66 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
     | 
    
         
            -
                    version:  
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 12.1.0
         
     | 
| 
       55 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
70 
     | 
    
         
             
              name: codecov
         
     | 
| 
       57 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -72,42 +86,42 @@ dependencies: 
     | 
|
| 
       72 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
87 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       74 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version: 3. 
     | 
| 
      
 89 
     | 
    
         
            +
                    version: 3.6.0
         
     | 
| 
       76 
90 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
91 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
92 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
94 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       81 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version: 3. 
     | 
| 
      
 96 
     | 
    
         
            +
                    version: 3.6.0
         
     | 
| 
       83 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
98 
     | 
    
         
             
              name: fuubar
         
     | 
| 
       85 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       86 
100 
     | 
    
         
             
                requirements:
         
     | 
| 
       87 
101 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       88 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       89 
     | 
    
         
            -
                    version: 2. 
     | 
| 
      
 103 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       90 
104 
     | 
    
         
             
              type: :development
         
     | 
| 
       91 
105 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       92 
106 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       93 
107 
     | 
    
         
             
                requirements:
         
     | 
| 
       94 
108 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       95 
109 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       96 
     | 
    
         
            -
                    version: 2. 
     | 
| 
      
 110 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       97 
111 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       98 
112 
     | 
    
         
             
              name: webmock
         
     | 
| 
       99 
113 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       100 
114 
     | 
    
         
             
                requirements:
         
     | 
| 
       101 
115 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       102 
116 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       103 
     | 
    
         
            -
                    version:  
     | 
| 
      
 117 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
       104 
118 
     | 
    
         
             
              type: :development
         
     | 
| 
       105 
119 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       106 
120 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       107 
121 
     | 
    
         
             
                requirements:
         
     | 
| 
       108 
122 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       109 
123 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       110 
     | 
    
         
            -
                    version:  
     | 
| 
      
 124 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
       111 
125 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       112 
126 
     | 
    
         
             
              name: vcr
         
     | 
| 
       113 
127 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -128,6 +142,7 @@ executables: [] 
     | 
|
| 
       128 
142 
     | 
    
         
             
            extensions: []
         
     | 
| 
       129 
143 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       130 
144 
     | 
    
         
             
            files:
         
     | 
| 
      
 145 
     | 
    
         
            +
            - ".circle-ruby"
         
     | 
| 
       131 
146 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       132 
147 
     | 
    
         
             
            - ".prospectus"
         
     | 
| 
       133 
148 
     | 
    
         
             
            - ".rspec"
         
     | 
| 
         @@ -142,7 +157,9 @@ files: 
     | 
|
| 
       142 
157 
     | 
    
         
             
            - dev/spec.yml
         
     | 
| 
       143 
158 
     | 
    
         
             
            - dev/version
         
     | 
| 
       144 
159 
     | 
    
         
             
            - lib/linodeapi.rb
         
     | 
| 
      
 160 
     | 
    
         
            +
            - lib/linodeapi/errors.rb
         
     | 
| 
       145 
161 
     | 
    
         
             
            - lib/linodeapi/raw.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
            - lib/linodeapi/retryable.rb
         
     | 
| 
       146 
163 
     | 
    
         
             
            - linodeapi.gemspec
         
     | 
| 
       147 
164 
     | 
    
         
             
            - spec/fixtures/cassettes/basic_auth.yml
         
     | 
| 
       148 
165 
     | 
    
         
             
            - spec/fixtures/cassettes/basic_auth_fail.yml
         
     | 
| 
         @@ -173,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       173 
190 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       174 
191 
     | 
    
         
             
            requirements: []
         
     | 
| 
       175 
192 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       176 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 193 
     | 
    
         
            +
            rubygems_version: 2.6.13
         
     | 
| 
       177 
194 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       178 
195 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       179 
196 
     | 
    
         
             
            summary: Linode API wrapper
         
     |