maxcdn 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/.gitignore +19 -0
 - data/.travis.yml +8 -0
 - data/Gemfile +11 -0
 - data/LICENSE +22 -0
 - data/README.md +81 -0
 - data/Rakefile +2 -0
 - data/VERSION +1 -0
 - data/examples/cache.rb +44 -0
 - data/examples/report.rb +50 -0
 - data/examples/simple.rb +15 -0
 - data/lib/maxcdn.rb +122 -0
 - data/lib/maxcdn/version.rb +3 -0
 - data/maxcdn.gemspec +18 -0
 - data/test/benchmark.rb +64 -0
 - data/test/integration.rb +60 -0
 - data/test/test.rb +130 -0
 - metadata +94 -0
 
    
        data/.gitignore
    ADDED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2012 David Litvak Bruno
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            MIT License
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 6 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 7 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 8 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 9 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 10 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 11 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 14 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 17 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 18 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 19 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 20 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 22 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,81 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # MaxCDN is Hiring!
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Do you like building cool stuff?  Do APIs keep you up at night? We're looking for our next superstar hacker and you could be it. Interested? Check out our job posting on [stackoverflow](http://careers.stackoverflow.com/jobs/37078/senior-web-engineer-for-fun-growing-la-startup-maxcdn&a=JdFbT4OY).
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # MaxCDN REST Web Services Ruby Client
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ``` bash
         
     | 
| 
      
 10 
     | 
    
         
            +
            gem install maxcdn
         
     | 
| 
      
 11 
     | 
    
         
            +
            ```
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            #### With Bundler
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ```
         
     | 
| 
      
 16 
     | 
    
         
            +
            bundle init
         
     | 
| 
      
 17 
     | 
    
         
            +
            echo "gem 'maxcdn'" >> Gemfile
         
     | 
| 
      
 18 
     | 
    
         
            +
            bundle install --path vendor/bundle
         
     | 
| 
      
 19 
     | 
    
         
            +
            ```
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 22 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 23 
     | 
    
         
            +
            require 'maxcdn'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            api = MaxCDN::Client.new("myalias", "consumer_key", "consumer_secret")
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            api.get("/account.json")
         
     | 
| 
      
 28 
     | 
    
         
            +
            ```
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ## Methods
         
     | 
| 
      
 31 
     | 
    
         
            +
            It has support for `GET`, `POST`, `PUT` and `DELETE` OAuth 1.0a signed requests.
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 34 
     | 
    
         
            +
            # To create a new Pull Zone
         
     | 
| 
      
 35 
     | 
    
         
            +
            api.post("/zones/pull.json", {'name' => 'test_zone', 'url' => 'http://my-test-site.com'})
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            # To update an existing zone
         
     | 
| 
      
 38 
     | 
    
         
            +
            api.put("/zones/pull.json/1234", {'name' => 'i_didnt_like_test'})
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            # To delete a zone
         
     | 
| 
      
 41 
     | 
    
         
            +
            api.delete("/zones/pull.json/1234")
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            # To purge a file (robots.txt) from cache
         
     | 
| 
      
 44 
     | 
    
         
            +
            api.delete("/zones/pull.json/1234/cache", {"file" => "/robots.txt"})
         
     | 
| 
      
 45 
     | 
    
         
            +
            ```
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            ### We now have a shortcut for Purge Calls!
         
     | 
| 
      
 48 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 49 
     | 
    
         
            +
            zone_id = 12345
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            # Purge Zone
         
     | 
| 
      
 52 
     | 
    
         
            +
            api.purge(zone_id)
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            # Purge File
         
     | 
| 
      
 55 
     | 
    
         
            +
            api.purge(zone_id, '/some_file')
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            # Purge Files
         
     | 
| 
      
 58 
     | 
    
         
            +
            api.purge(zone_id, ['/some_file', '/another_file'])
         
     | 
| 
      
 59 
     | 
    
         
            +
            ```
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            ## Development Quick Start
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            ``` bash
         
     | 
| 
      
 65 
     | 
    
         
            +
            # get it
         
     | 
| 
      
 66 
     | 
    
         
            +
            git clone git@github.com:<fork repo>/ruby-maxcdn.git
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            # setup
         
     | 
| 
      
 69 
     | 
    
         
            +
            cd ruby-maxcdn
         
     | 
| 
      
 70 
     | 
    
         
            +
            bundle install --path vendor/bundle
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            # unit tests
         
     | 
| 
      
 73 
     | 
    
         
            +
            bundle exec ruby ./test/test.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            # integration tests
         
     | 
| 
      
 76 
     | 
    
         
            +
            export ALIAS=<your alias>
         
     | 
| 
      
 77 
     | 
    
         
            +
            export KEY=<your key>
         
     | 
| 
      
 78 
     | 
    
         
            +
            export SECRET=<your secret>
         
     | 
| 
      
 79 
     | 
    
         
            +
            bundle exec ruby ./test/integration.rb # requires host's IP be whitelisted
         
     | 
| 
      
 80 
     | 
    
         
            +
            ```
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
    
        data/Rakefile
    ADDED
    
    
    
        data/VERSION
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            0.0.1
         
     | 
    
        data/examples/cache.rb
    ADDED
    
    | 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "pp"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.join("./", File.dirname(__FILE__), "..","lib","maxcdn")
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            zoneid = ARGV.shift
         
     | 
| 
      
 6 
     | 
    
         
            +
            files  = ARGV.clone
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            if ENV["ALIAS"].nil? or ENV["KEY"].nil? or ENV["SECRET"].nil?
         
     | 
| 
      
 9 
     | 
    
         
            +
              puts <<-EOU
         
     | 
| 
      
 10 
     | 
    
         
            +
            Usage: cache.rb zoneid [files...]
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              Add credentials to your environment like so:
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              $ export ALIAS=<alias>
         
     | 
| 
      
 15 
     | 
    
         
            +
              $ export KEY=<key>
         
     | 
| 
      
 16 
     | 
    
         
            +
              $ export SECRET=<secret>
         
     | 
| 
      
 17 
     | 
    
         
            +
              $ bundle exec ruby cache.rb 12345 ./master.css ./another.css
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              Or by adding to the script call:
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              $ ALIAS=<alias> KEY=<key> SECRET=<secret> bundle exec ruby cache.rb \
         
     | 
| 
      
 22 
     | 
    
         
            +
                    12345 ./master.css ./another.css
         
     | 
| 
      
 23 
     | 
    
         
            +
            EOU
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            maxcdn = MaxCDN::Client.new(ENV["ALIAS"], ENV["KEY"], ENV["SECRET"])
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            if zoneid.nil?
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              maxcdn.get("/zones/pull.json")["data"]["pullzones"].map { |z| z["id"] }.each do |zid|
         
     | 
| 
      
 31 
     | 
    
         
            +
                puts "Purging zone #{zid}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                pp maxcdn.purge(zid)
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            else
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              puts "Purging zone #{zoneid}"
         
     | 
| 
      
 38 
     | 
    
         
            +
              if files.empty?
         
     | 
| 
      
 39 
     | 
    
         
            +
                pp maxcdn.purge(zoneid)
         
     | 
| 
      
 40 
     | 
    
         
            +
              else
         
     | 
| 
      
 41 
     | 
    
         
            +
                pp maxcdn.purge(zoneid, files)
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
    
        data/examples/report.rb
    ADDED
    
    | 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "pp"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.join("./", File.dirname(__FILE__), "..","lib","maxcdn")
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            arg = ARGV.shift
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            if ENV["ALIAS"].nil? or ENV["KEY"].nil? or ENV["SECRET"].nil? or (!arg.nil? and !arg.match(/hourly|daily|monthly/))
         
     | 
| 
      
 8 
     | 
    
         
            +
              puts <<-EOU
         
     | 
| 
      
 9 
     | 
    
         
            +
            Usage: report.rb [hourly|daily|monthly]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              Report types only cover summary.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              Add credentials to your environment like so:
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              $ export ALIAS=<alias>
         
     | 
| 
      
 16 
     | 
    
         
            +
              $ export KEY=<key>
         
     | 
| 
      
 17 
     | 
    
         
            +
              $ export SECRET=<secret>
         
     | 
| 
      
 18 
     | 
    
         
            +
              $ ./report.rb
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              Or by adding to the script call:
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              $ ALIAS=<alias> KEY=<key> SECRET=<secret> ./report.rb
         
     | 
| 
      
 23 
     | 
    
         
            +
            EOU
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            maxcdn = MaxCDN::Client.new(ENV["ALIAS"], ENV["KEY"], ENV["SECRET"])
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            report = arg.nil? ? "" : "/#{arg}"
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            maxcdn.get("/zones/pull.json")["data"]["pullzones"].each do |zone|
         
     | 
| 
      
 31 
     | 
    
         
            +
              # title
         
     | 
| 
      
 32 
     | 
    
         
            +
              puts "Zone report for: #{zone["name"]} (#{zone["url"]})"
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              # summary
         
     | 
| 
      
 35 
     | 
    
         
            +
              maxcdn.get("/reports/#{zone["id"]}/stats.json#{report}")["data"]["summary"].each do |k, v|
         
     | 
| 
      
 36 
     | 
    
         
            +
                puts " - #{k}: #{v}"
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              # popularfiles
         
     | 
| 
      
 40 
     | 
    
         
            +
              puts " "
         
     | 
| 
      
 41 
     | 
    
         
            +
              puts "Popular Files:"
         
     | 
| 
      
 42 
     | 
    
         
            +
              maxcdn.get("/reports/#{zone["id"]}/popularfiles.json?page_size=10")["data"]["popularfiles"].each do |file|
         
     | 
| 
      
 43 
     | 
    
         
            +
                puts " - url: #{file["uri"]}"
         
     | 
| 
      
 44 
     | 
    
         
            +
                puts "   - hits: #{file["hit"]}"
         
     | 
| 
      
 45 
     | 
    
         
            +
                puts "   - size: #{file["size"]}"
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              puts " "
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
    
        data/examples/simple.rb
    ADDED
    
    | 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'pp'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.join('./', File.dirname(__FILE__), '..','lib','maxcdn')
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            maxcdn = MaxCDN::Client.new(ENV['ALIAS'], ENV['KEY'], ENV['SECRET'])
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            puts 'GET /account.json'
         
     | 
| 
      
 8 
     | 
    
         
            +
            pp maxcdn.get('/account.json')
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            puts 'GET /account.json/address'
         
     | 
| 
      
 11 
     | 
    
         
            +
            pp maxcdn.get('/account.json/address')
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            puts 'GET /reports/stats.json/hourly'
         
     | 
| 
      
 14 
     | 
    
         
            +
            pp maxcdn.get('/reports/stats.json/hourly')
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
    
        data/lib/maxcdn.rb
    ADDED
    
    | 
         @@ -0,0 +1,122 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "signet/oauth_1/client"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "curb-fu"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module MaxCDN
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Utils
         
     | 
| 
      
 7 
     | 
    
         
            +
                RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~]/
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def escape(value)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  URI::escape(value.to_s, MaxCDN::Utils::RESERVED_CHARACTERS)
         
     | 
| 
      
 11 
     | 
    
         
            +
                rescue ArgumentError
         
     | 
| 
      
 12 
     | 
    
         
            +
                  URI::escape(value.to_s.force_encoding(Encoding::UTF_8), MaxCDN::Utils::RESERVED_CHARACTERS)
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def encode_params params={}
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Hash[params.map { |k, v| [escape(k), escape(v)] }]
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              class APIException < Exception
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 24 
     | 
    
         
            +
                include MaxCDN::Utils
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                attr_accessor :client
         
     | 
| 
      
 27 
     | 
    
         
            +
                def initialize(company_alias, key, secret, server="rws.maxcdn.com", secure_connection=true)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @company_alias = company_alias
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @server = server
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @secure_connection = secure_connection
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @request_signer = Signet::OAuth1::Client.new(
         
     | 
| 
      
 32 
     | 
    
         
            +
                    :client_credential_key => key,
         
     | 
| 
      
 33 
     | 
    
         
            +
                    :client_credential_secret => secret,
         
     | 
| 
      
 34 
     | 
    
         
            +
                    :two_legged => true
         
     | 
| 
      
 35 
     | 
    
         
            +
                  )
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                def _connection_type
         
     | 
| 
      
 39 
     | 
    
         
            +
                  return "http" unless @secure_connection
         
     | 
| 
      
 40 
     | 
    
         
            +
                  "https"
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def _encode_params params={}
         
     | 
| 
      
 44 
     | 
    
         
            +
                  encode_params(params).map { |k, v|
         
     | 
| 
      
 45 
     | 
    
         
            +
                    "#{k}=#{v}"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  }.join "&"
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def _get_url uri, params={}
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  url = "#{_connection_type}://#{@server}/#{@company_alias}/#{uri.gsub(/^\//, "")}"
         
     | 
| 
      
 52 
     | 
    
         
            +
                  if not params.empty?
         
     | 
| 
      
 53 
     | 
    
         
            +
                    url += "?#{_encode_params(params)}"
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  url
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                def _response_as_json method, uri, options={}, *attributes
         
     | 
| 
      
 60 
     | 
    
         
            +
                  if options.delete(:debug)
         
     | 
| 
      
 61 
     | 
    
         
            +
                    puts "Making #{method.upcase} request to #{_get_url uri}"
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  request_options = {
         
     | 
| 
      
 65 
     | 
    
         
            +
                    :uri => _get_url(uri, options[:body] ? attributes[0] : {}),
         
     | 
| 
      
 66 
     | 
    
         
            +
                    :method => method
         
     | 
| 
      
 67 
     | 
    
         
            +
                  }
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  request_options[:body] = _encode_params(attributes[0]) if options[:body]
         
     | 
| 
      
 70 
     | 
    
         
            +
                  request = @request_signer.generate_authenticated_request(request_options)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  request.headers["User-Agent"] = "Ruby MaxCDN API Client"
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 74 
     | 
    
         
            +
                    curb_options = {}
         
     | 
| 
      
 75 
     | 
    
         
            +
                    curb_options[:url] = request_options[:uri]
         
     | 
| 
      
 76 
     | 
    
         
            +
                    curb_options[:headers] = request.headers
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    if not options[:body]
         
     | 
| 
      
 79 
     | 
    
         
            +
                      response = CurbFu.send method, curb_options
         
     | 
| 
      
 80 
     | 
    
         
            +
                    else
         
     | 
| 
      
 81 
     | 
    
         
            +
                      response = CurbFu.send method, curb_options, request.body
         
     | 
| 
      
 82 
     | 
    
         
            +
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    return response if options[:debug_request]
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                    response_json = JSON.load(response.body)
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                    return response_json if options[:debug_json]
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    if not (response.success? or response.redirect?)
         
     | 
| 
      
 91 
     | 
    
         
            +
                      error_message = response_json["error"]["message"]
         
     | 
| 
      
 92 
     | 
    
         
            +
                      raise MaxCDN::APIException.new("#{response.status}: #{error_message}")
         
     | 
| 
      
 93 
     | 
    
         
            +
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  rescue TypeError
         
     | 
| 
      
 95 
     | 
    
         
            +
                    raise MaxCDN::APIException.new(
         
     | 
| 
      
 96 
     | 
    
         
            +
                      "#{response.status}: No information supplied by the server"
         
     | 
| 
      
 97 
     | 
    
         
            +
                    )
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  response_json
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                [ :get, :post, :put, :delete ].each do |meth|
         
     | 
| 
      
 104 
     | 
    
         
            +
                  define_method(meth) do |uri, data={}, options={}|
         
     | 
| 
      
 105 
     | 
    
         
            +
                    options[:body] = (meth == :post || meth == :put)
         
     | 
| 
      
 106 
     | 
    
         
            +
                    self._response_as_json meth.to_s, uri, options, data
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                def purge zone_id, file_or_files=nil, options={}
         
     | 
| 
      
 111 
     | 
    
         
            +
                  unless file_or_files.nil?
         
     | 
| 
      
 112 
     | 
    
         
            +
                    return self.delete(
         
     | 
| 
      
 113 
     | 
    
         
            +
                      "/zones/pull.json/#{zone_id}/cache",
         
     | 
| 
      
 114 
     | 
    
         
            +
                      {"file" => file_or_files},
         
     | 
| 
      
 115 
     | 
    
         
            +
                        options
         
     | 
| 
      
 116 
     | 
    
         
            +
                    )
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                  self.delete("/zones/pull.json/#{zone_id}/cache", {}, options)
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
              end
         
     | 
| 
      
 122 
     | 
    
         
            +
            end
         
     | 
    
        data/maxcdn.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.expand_path('../lib/maxcdn/version', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            Gem::Specification.new do |gem|
         
     | 
| 
      
 5 
     | 
    
         
            +
              gem.name = "maxcdn"
         
     | 
| 
      
 6 
     | 
    
         
            +
              gem.homepage = "http://www.maxcdn.com"
         
     | 
| 
      
 7 
     | 
    
         
            +
              gem.version = MaxCDN::VERSION
         
     | 
| 
      
 8 
     | 
    
         
            +
              gem.license = "MIT"
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem.files = `git ls-files`.split($\)
         
     | 
| 
      
 10 
     | 
    
         
            +
              gem.require_paths = ['lib']
         
     | 
| 
      
 11 
     | 
    
         
            +
              gem.summary = %Q{A Rest Client For MaxCDN Rest Web Services}
         
     | 
| 
      
 12 
     | 
    
         
            +
              gem.description = %Q{A Rest Client For MaxCDN Rest Web Services}
         
     | 
| 
      
 13 
     | 
    
         
            +
              gem.email = "joshua@mervine.net"
         
     | 
| 
      
 14 
     | 
    
         
            +
              gem.authors = ["Joshua P. Mervine"]
         
     | 
| 
      
 15 
     | 
    
         
            +
              gem.add_dependency 'json' if RUBY_VERSION.start_with? "1.8"
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem.add_dependency 'signet'
         
     | 
| 
      
 17 
     | 
    
         
            +
              gem.add_dependency 'curb-fu'
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
    
        data/test/benchmark.rb
    ADDED
    
    | 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            if (ENV["ALIAS"].nil? or ENV["KEY"].nil? or ENV["SECRET"].nil?)
         
     | 
| 
      
 3 
     | 
    
         
            +
              abort "Please export ALIAS, KEY and SECRET with your credentials and ensure that you're test host's IP is whitelisted."
         
     | 
| 
      
 4 
     | 
    
         
            +
            end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'benchmark'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require "./lib/maxcdn"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            @time = Time.now.to_i.to_s
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            puts "Running benchmarks as follows in order:"
         
     | 
| 
      
 12 
     | 
    
         
            +
            puts " "
         
     | 
| 
      
 13 
     | 
    
         
            +
            puts " maxcdn.get('zones/pull.json')"
         
     | 
| 
      
 14 
     | 
    
         
            +
            puts " maxcdn.get('reports/popularfiles.json')"
         
     | 
| 
      
 15 
     | 
    
         
            +
            puts " maxcdn.post('zones/pull.json', { :name => 'NAM', :url => 'URL' })"
         
     | 
| 
      
 16 
     | 
    
         
            +
            puts " maxcdn.put('account.json', { :name => 'NAME' })"
         
     | 
| 
      
 17 
     | 
    
         
            +
            puts " maxcdn.delete('zones/pull.json/ZONEID')"
         
     | 
| 
      
 18 
     | 
    
         
            +
            puts " maxcdn.purge('ZONEID')"
         
     | 
| 
      
 19 
     | 
    
         
            +
            puts " maxcdn.purge('ZONEID', 'FILE')"
         
     | 
| 
      
 20 
     | 
    
         
            +
            puts " maxcdn.purge('ZONEID', [ 'FILE1','FILE2' ])"
         
     | 
| 
      
 21 
     | 
    
         
            +
            puts " "
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            Benchmark.bm do |mark|
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              maxcdn = MaxCDN::Client.new(ENV["ALIAS"], ENV["KEY"], ENV["SECRET"])
         
     | 
| 
      
 26 
     | 
    
         
            +
              time = Time.now.to_i.to_s
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              mark.report("get   :") do
         
     | 
| 
      
 29 
     | 
    
         
            +
                @pullzone = maxcdn.get("zones/pull.json")["data"]["pullzones"][0]["id"]
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              mark.report("get   :") do
         
     | 
| 
      
 33 
     | 
    
         
            +
                @popularfiles = maxcdn.get("reports/popularfiles.json")["data"]["popularfiles"]
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              @zone = {
         
     | 
| 
      
 37 
     | 
    
         
            +
                :name => @time,
         
     | 
| 
      
 38 
     | 
    
         
            +
                :url  => "http://www.example.com"
         
     | 
| 
      
 39 
     | 
    
         
            +
              }
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              mark.report("post  :") do
         
     | 
| 
      
 42 
     | 
    
         
            +
                @zoneid = maxcdn.post("zones/pull.json", @zone)["data"]["pullzone"]["id"]
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              mark.report("put   :") do
         
     | 
| 
      
 46 
     | 
    
         
            +
                maxcdn.put("account.json", { :name => @time })
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              mark.report("delete:") do
         
     | 
| 
      
 50 
     | 
    
         
            +
                maxcdn.delete("zones/pull.json/#{@zoneid}")
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              mark.report("purge :") do
         
     | 
| 
      
 54 
     | 
    
         
            +
                maxcdn.purge(@pullzone)
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              mark.report("purge :") do
         
     | 
| 
      
 58 
     | 
    
         
            +
                maxcdn.purge(@pullzone, @popularfiles[0]["uri"])
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              mark.report("purge :") do
         
     | 
| 
      
 62 
     | 
    
         
            +
                maxcdn.purge(@pullzone, [ @popularfiles[0]["uri"], @popularfiles[1]["uri"] ])
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
            end
         
     | 
    
        data/test/integration.rb
    ADDED
    
    | 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "minitest/autorun"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "minitest/reporters"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "./lib/maxcdn"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            if (ENV["ALIAS"].nil? or ENV["KEY"].nil? or ENV["SECRET"].nil?)
         
     | 
| 
      
 10 
     | 
    
         
            +
              abort "Please export ALIAS, KEY and SECRET with your credentials and ensure that you're test host's IP is whitelisted."
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            class Client < Minitest::Test
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 16 
     | 
    
         
            +
                @max  = MaxCDN::Client.new(ENV["ALIAS"], ENV["KEY"], ENV["SECRET"])
         
     | 
| 
      
 17 
     | 
    
         
            +
                @time = Time.now.to_i.to_s
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def test_get
         
     | 
| 
      
 21 
     | 
    
         
            +
                [ "account.json",
         
     | 
| 
      
 22 
     | 
    
         
            +
                  "account.json/address",
         
     | 
| 
      
 23 
     | 
    
         
            +
                  "users.json",
         
     | 
| 
      
 24 
     | 
    
         
            +
                  "zones.json"
         
     | 
| 
      
 25 
     | 
    
         
            +
                ].each do |end_point|
         
     | 
| 
      
 26 
     | 
    
         
            +
                  key = end_point.include?("/") ? end_point.split("/")[1] : end_point.gsub(/\.json/, "")
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  assert @max.get(end_point)["data"][key], "get #{key} with data"
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_post_and_delete
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                zone = {
         
     | 
| 
      
 35 
     | 
    
         
            +
                  :name => @time,
         
     | 
| 
      
 36 
     | 
    
         
            +
                  :url  => "http://www.example.com"
         
     | 
| 
      
 37 
     | 
    
         
            +
                }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                zid = @max.post("zones/pull.json", zone)["data"]["pullzone"]["id"]
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert zid, "post"
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal 200, @max.delete("zones/pull.json/#{zid}")["code"], "delete (warning: manually delete zone #{zid} at https://cp.maxcdn.com/zones/pull)."
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def test_put
         
     | 
| 
      
 46 
     | 
    
         
            +
                name = @time + "_put"
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal name, @max.put("account.json", { :name => name })["data"]["account"]["name"], "put"
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def test_purge
         
     | 
| 
      
 51 
     | 
    
         
            +
                zone = @max.get("zones/pull.json")["data"]["pullzones"][0]["id"]
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert_equal 200, @max.purge(zone)["code"], "purge"
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                popularfiles = @max.get("reports/popularfiles.json")["data"]["popularfiles"]
         
     | 
| 
      
 55 
     | 
    
         
            +
                assert_equal 200, @max.purge(zone, popularfiles[0]["uri"])["code"], "purge file"
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                assert_equal 200, @max.purge(zone, [ popularfiles[0]["uri"], popularfiles[1]["uri"]])["code"], "purge files"
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
    
        data/test/test.rb
    ADDED
    
    | 
         @@ -0,0 +1,130 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "curb-fu"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "minitest/autorun"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "minitest/mock"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "minitest/reporters"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            #require "signet/oauth_1/client"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require "./lib/maxcdn"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            class Client < Minitest::Test
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def new_response
         
     | 
| 
      
 15 
     | 
    
         
            +
                response = Minitest::Mock.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                response.expect(:body, '{ "foo": "bar" }')
         
     | 
| 
      
 17 
     | 
    
         
            +
                response.expect(:success?, true)
         
     | 
| 
      
 18 
     | 
    
         
            +
                response
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 22 
     | 
    
         
            +
                @max = MaxCDN::Client.new("alias", "key", "secret")
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def test_initialize
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal "alias", @max.instance_variable_get(:@company_alias)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              def test__connection_type
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal "https", @max._connection_type
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                m = MaxCDN::Client.new("alias", "key", "secret", "foo", false)
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal "http", m._connection_type
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def test__encode_params
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "foo=foo%20bar&bah=boo",
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @max._encode_params({ :foo => "foo bar", :bah => "boo" })
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def test__get_url
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal "https://rws.maxcdn.com/alias/foo",
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @max._get_url("/foo")
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal "https://rws.maxcdn.com/alias/foo?foo=foo%20bar",
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @max._get_url("/foo", { :foo => "foo bar" })
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              def test__response_as_json_standard
         
     | 
| 
      
 49 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 50 
     | 
    
         
            +
                CurbFu::Request.stub :get, response do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  res = @max._response_as_json("get", "http://example.com")
         
     | 
| 
      
 52 
     | 
    
         
            +
                  assert res
         
     | 
| 
      
 53 
     | 
    
         
            +
                  assert response.verify
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              def test__response_as_json_standard
         
     | 
| 
      
 58 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 59 
     | 
    
         
            +
                CurbFu::Request.stub :get, response do
         
     | 
| 
      
 60 
     | 
    
         
            +
                  res = @max._response_as_json("get", "http://example.com",
         
     | 
| 
      
 61 
     | 
    
         
            +
                                               { :debug_request => true })
         
     | 
| 
      
 62 
     | 
    
         
            +
                  assert res.body
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def test_get
         
     | 
| 
      
 67 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 68 
     | 
    
         
            +
                CurbFu::Request.stub :get, response do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.get("/account.json"))
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              def test_post
         
     | 
| 
      
 75 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 76 
     | 
    
         
            +
                CurbFu::Request.stub :post, response do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.post("/zones/pull.json", {'name' => 'test_zone', 'url' => 'http://my-test-site.com'}))
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              def test_put
         
     | 
| 
      
 83 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 84 
     | 
    
         
            +
                CurbFu::Request.stub :put, response do
         
     | 
| 
      
 85 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.put("/zones/pull.json/1234", {'name' => 'i_didnt_like_test'}))
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
              def test_delete
         
     | 
| 
      
 91 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 92 
     | 
    
         
            +
                CurbFu::Request.stub :delete, response do
         
     | 
| 
      
 93 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.delete("/zones/pull.json/1234"))
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
              def test_delete_file
         
     | 
| 
      
 99 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 100 
     | 
    
         
            +
                CurbFu::Request.stub :delete, response do
         
     | 
| 
      
 101 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.delete("/zones/pull.json/1234/cache", {"file" => "/robots.txt"}))
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 104 
     | 
    
         
            +
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
              def test_purge
         
     | 
| 
      
 107 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 108 
     | 
    
         
            +
                CurbFu::Request.stub :delete, response do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.purge(12345))
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              def test_purge_file
         
     | 
| 
      
 115 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 116 
     | 
    
         
            +
                CurbFu::Request.stub :delete, response do
         
     | 
| 
      
 117 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.purge(12345, "/foo.txt"))
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 120 
     | 
    
         
            +
              end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
              def test_purge_files
         
     | 
| 
      
 123 
     | 
    
         
            +
                response = new_response
         
     | 
| 
      
 124 
     | 
    
         
            +
                CurbFu::Request.stub :delete, response do
         
     | 
| 
      
 125 
     | 
    
         
            +
                  assert_equal({ "foo" => "bar" }, @max.purge(12345, [ "/foo.txt", "/bar.txt" ]))
         
     | 
| 
      
 126 
     | 
    
         
            +
                end
         
     | 
| 
      
 127 
     | 
    
         
            +
                assert response.verify
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
            end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: maxcdn
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 6 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Joshua P. Mervine
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2014-02-10 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: signet
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 18 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 19 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 22 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 30 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 31 
     | 
    
         
            +
              name: curb-fu
         
     | 
| 
      
 32 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 33 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 34 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 35 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 36 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 37 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 38 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 39 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 40 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 41 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 42 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 43 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 44 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 45 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 46 
     | 
    
         
            +
            description: A Rest Client For MaxCDN Rest Web Services
         
     | 
| 
      
 47 
     | 
    
         
            +
            email: joshua@mervine.net
         
     | 
| 
      
 48 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 49 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 50 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 51 
     | 
    
         
            +
            files:
         
     | 
| 
      
 52 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 53 
     | 
    
         
            +
            - .travis.yml
         
     | 
| 
      
 54 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 55 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 56 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 57 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 58 
     | 
    
         
            +
            - VERSION
         
     | 
| 
      
 59 
     | 
    
         
            +
            - examples/cache.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - examples/report.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - examples/simple.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/maxcdn.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/maxcdn/version.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - maxcdn.gemspec
         
     | 
| 
      
 65 
     | 
    
         
            +
            - test/benchmark.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - test/integration.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - test/test.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            homepage: http://www.maxcdn.com
         
     | 
| 
      
 69 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 70 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 71 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 72 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 73 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 75 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 76 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 77 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 78 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 79 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 80 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 81 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 82 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 83 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 84 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 85 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 86 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 87 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 88 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 89 
     | 
    
         
            +
            rubygems_version: 1.8.23
         
     | 
| 
      
 90 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 91 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 92 
     | 
    
         
            +
            summary: A Rest Client For MaxCDN Rest Web Services
         
     | 
| 
      
 93 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 94 
     | 
    
         
            +
            has_rdoc: 
         
     |