agcod 0.0.4 → 0.0.6
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 +9 -4
- data/Gemfile +4 -0
- data/Rakefile +12 -39
- data/agcod.gemspec +20 -67
- data/lib/agcod.rb +1 -2
- data/lib/agcod/configuration.rb +16 -11
- data/lib/agcod/request.rb +34 -19
- data/lib/agcod/version.rb +3 -0
- data/test/agcod/configuration_test.rb +14 -7
- data/test/agcod/request_test.rb +45 -0
- data/test/fixtures/create_gift_card/non-error-failure.xml +22 -0
- data/test/fixtures/create_gift_card/retry.xml +17 -0
- data/test/fixtures/create_gift_card/success.xml +22 -0
- data/test/fixtures/health_check/success.xml +15 -0
- data/test/test_helper.rb +21 -3
- metadata +144 -48
- data/.document +0 -5
- data/VERSION +0 -1
    
        data/.gitignore
    CHANGED
    
    | @@ -1,9 +1,14 @@ | |
| 1 | 
            +
            *.gem
         | 
| 1 2 | 
             
            *.sw?
         | 
| 2 3 | 
             
            .DS_Store
         | 
| 4 | 
            +
            .bundle
         | 
| 5 | 
            +
            .rvmrc
         | 
| 6 | 
            +
            Gemfile.lock
         | 
| 7 | 
            +
            agcod_cucumber.log
         | 
| 3 8 | 
             
            coverage
         | 
| 4 | 
            -
            rdoc
         | 
| 5 | 
            -
            pkg
         | 
| 6 9 | 
             
            features/support/app_root/config/agcod.yml
         | 
| 7 | 
            -
            log
         | 
| 8 | 
            -
            agcod_cucumber.log
         | 
| 9 10 | 
             
            features/support/certification_requests
         | 
| 11 | 
            +
            log
         | 
| 12 | 
            +
            pkg/*
         | 
| 13 | 
            +
            rdoc
         | 
| 14 | 
            +
            vendor/bundle
         | 
    
        data/Gemfile
    ADDED
    
    
    
        data/Rakefile
    CHANGED
    
    | @@ -1,27 +1,13 @@ | |
| 1 | 
            -
            require ' | 
| 2 | 
            -
            require 'rake'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            begin
         | 
| 5 | 
            -
              require 'jeweler'
         | 
| 6 | 
            -
              Jeweler::Tasks.new do |gem|
         | 
| 7 | 
            -
                gem.name = "agcod"
         | 
| 8 | 
            -
                gem.summary = %Q{A Wrapper for Amazon Gift Cards On Demand}
         | 
| 9 | 
            -
                gem.email = "dpickett@enlightsolutions.com"
         | 
| 10 | 
            -
                gem.homepage = "http://github.com/dpickett/agcod"
         | 
| 11 | 
            -
                gem.authors = ["Dan Pickett"]
         | 
| 12 | 
            -
                # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
         | 
| 13 | 
            -
              end
         | 
| 1 | 
            +
            require 'bundler/gem_tasks'
         | 
| 2 | 
            +
            require 'rake/testtask'
         | 
| 14 3 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
               | 
| 4 | 
            +
            Rake::TestTask.new('test') do |t|
         | 
| 5 | 
            +
              t.libs << 'lib' << 'test'
         | 
| 6 | 
            +
              t.pattern = 'test/**/*_test.rb'
         | 
| 7 | 
            +
              t.verbose = true
         | 
| 17 8 | 
             
            end
         | 
| 18 9 |  | 
| 19 | 
            -
             | 
| 20 | 
            -
            Rake::TestTask.new(:test) do |test|
         | 
| 21 | 
            -
              test.libs << 'lib' << 'test'
         | 
| 22 | 
            -
              test.pattern = 'test/**/*_test.rb'
         | 
| 23 | 
            -
              test.verbose = true
         | 
| 24 | 
            -
            end
         | 
| 10 | 
            +
            task :default => :test
         | 
| 25 11 |  | 
| 26 12 | 
             
            begin
         | 
| 27 13 | 
             
              require 'rcov/rcovtask'
         | 
| @@ -37,30 +23,17 @@ rescue LoadError | |
| 37 23 | 
             
              end
         | 
| 38 24 | 
             
            end
         | 
| 39 25 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
              Cucumber::Rake::Task.new(:features)
         | 
| 43 | 
            -
            rescue LoadError
         | 
| 44 | 
            -
              task :features do
         | 
| 45 | 
            -
                abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
         | 
| 46 | 
            -
              end
         | 
| 47 | 
            -
            end
         | 
| 26 | 
            +
            require 'cucumber/rake/task'
         | 
| 27 | 
            +
            Cucumber::Rake::Task.new(:features)
         | 
| 48 28 |  | 
| 49 29 | 
             
            require File.join(File.dirname(__FILE__), "lib", "agcod", "tasks")
         | 
| 50 30 |  | 
| 51 | 
            -
            task | 
| 52 | 
            -
             | 
| 53 | 
            -
            require 'rake/rdoctask'
         | 
| 31 | 
            +
            require 'rdoc/task'
         | 
| 54 32 | 
             
            Rake::RDocTask.new do |rdoc|
         | 
| 55 | 
            -
               | 
| 56 | 
            -
                config = YAML.load(File.read('VERSION.yml'))
         | 
| 57 | 
            -
                version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
         | 
| 58 | 
            -
              else
         | 
| 59 | 
            -
                version = ""
         | 
| 60 | 
            -
              end
         | 
| 33 | 
            +
              require 'agcod/version'
         | 
| 61 34 |  | 
| 62 35 | 
             
              rdoc.rdoc_dir = 'rdoc'
         | 
| 63 | 
            -
              rdoc.title = "agcod #{ | 
| 36 | 
            +
              rdoc.title = "agcod #{ Agcod::VERSION }"
         | 
| 64 37 | 
             
              rdoc.rdoc_files.include('README*')
         | 
| 65 38 | 
             
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 66 39 | 
             
            end
         | 
    
        data/agcod.gemspec
    CHANGED
    
    | @@ -1,74 +1,27 @@ | |
| 1 | 
            -
            # Generated by jeweler
         | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         | 
| 4 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            $:.push File.expand_path("../lib", __FILE__)
         | 
| 3 | 
            +
            require "agcod/version"
         | 
| 5 4 |  | 
| 6 5 | 
             
            Gem::Specification.new do |s|
         | 
| 7 | 
            -
              s.name | 
| 8 | 
            -
              s.version | 
| 6 | 
            +
              s.name        = "agcod"
         | 
| 7 | 
            +
              s.version     = Agcod::VERSION
         | 
| 8 | 
            +
              s.authors     = ["Dan Pickett"]
         | 
| 9 | 
            +
              s.email       = %q{dpickett@enlightsolutions.com}
         | 
| 10 | 
            +
              s.homepage    = %q{http://github.com/dpickett/agcod}
         | 
| 11 | 
            +
              s.summary     = %q{A Wrapper for Amazon Gift Codes On Demand}
         | 
| 12 | 
            +
              s.description = %q{Access the Amazon API to order gift codes}
         | 
| 9 13 |  | 
| 10 | 
            -
              s. | 
| 11 | 
            -
              s.authors = ["Dan Pickett"]
         | 
| 12 | 
            -
              s.date = %q{2010-11-18}
         | 
| 13 | 
            -
              s.email = %q{dpickett@enlightsolutions.com}
         | 
| 14 | 
            -
              s.extra_rdoc_files = [
         | 
| 15 | 
            -
                "LICENSE",
         | 
| 16 | 
            -
                 "README.rdoc"
         | 
| 17 | 
            -
              ]
         | 
| 18 | 
            -
              s.files = [
         | 
| 19 | 
            -
                ".document",
         | 
| 20 | 
            -
                 ".gitignore",
         | 
| 21 | 
            -
                 "LICENSE",
         | 
| 22 | 
            -
                 "README.rdoc",
         | 
| 23 | 
            -
                 "Rakefile",
         | 
| 24 | 
            -
                 "VERSION",
         | 
| 25 | 
            -
                 "agcod.gemspec",
         | 
| 26 | 
            -
                 "cucumber.yml",
         | 
| 27 | 
            -
                 "features/error_handling.feature",
         | 
| 28 | 
            -
                 "features/step_definitions/agcod_steps.rb",
         | 
| 29 | 
            -
                 "features/success_certification.feature",
         | 
| 30 | 
            -
                 "features/support/app_root/config/agcod.example.yml",
         | 
| 31 | 
            -
                 "features/support/env.rb",
         | 
| 32 | 
            -
                 "lib/agcod.rb",
         | 
| 33 | 
            -
                 "lib/agcod/cancel_gift_card.rb",
         | 
| 34 | 
            -
                 "lib/agcod/configuration.rb",
         | 
| 35 | 
            -
                 "lib/agcod/create_gift_card.rb",
         | 
| 36 | 
            -
                 "lib/agcod/error/configuration_error.rb",
         | 
| 37 | 
            -
                 "lib/agcod/error/invalid_parameter.rb",
         | 
| 38 | 
            -
                 "lib/agcod/health_check.rb",
         | 
| 39 | 
            -
                 "lib/agcod/option_validators.rb",
         | 
| 40 | 
            -
                 "lib/agcod/request.rb",
         | 
| 41 | 
            -
                 "lib/agcod/tasks.rb",
         | 
| 42 | 
            -
                 "lib/agcod/tasks/certification.rake",
         | 
| 43 | 
            -
                 "lib/agcod/void_gift_card_creation.rb",
         | 
| 44 | 
            -
                 "manual_features/cancel_claimed_giftcard.feature",
         | 
| 45 | 
            -
                 "manual_features/insufficient_funds.feature",
         | 
| 46 | 
            -
                 "manual_features/retry_and_http.feature",
         | 
| 47 | 
            -
                 "tasks/agcod.rake",
         | 
| 48 | 
            -
                 "test/agcod/configuration_test.rb",
         | 
| 49 | 
            -
                 "test/app_root/config/agcod.yml",
         | 
| 50 | 
            -
                 "test/macros/configuration.rb",
         | 
| 51 | 
            -
                 "test/test_helper.rb"
         | 
| 52 | 
            -
              ]
         | 
| 53 | 
            -
              s.homepage = %q{http://github.com/dpickett/agcod}
         | 
| 54 | 
            -
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 55 | 
            -
              s.require_paths = ["lib"]
         | 
| 56 | 
            -
              s.rubygems_version = %q{1.3.7}
         | 
| 57 | 
            -
              s.summary = %q{A Wrapper for Amazon Gift Cards On Demand}
         | 
| 58 | 
            -
              s.test_files = [
         | 
| 59 | 
            -
                "test/agcod/configuration_test.rb",
         | 
| 60 | 
            -
                 "test/macros/configuration.rb",
         | 
| 61 | 
            -
                 "test/test_helper.rb"
         | 
| 62 | 
            -
              ]
         | 
| 14 | 
            +
              s.rubyforge_project = "agcod"
         | 
| 63 15 |  | 
| 64 | 
            -
               | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 16 | 
            +
              s.add_development_dependency 'cucumber'
         | 
| 17 | 
            +
              s.add_development_dependency 'fakeweb'
         | 
| 18 | 
            +
              s.add_development_dependency 'mocha'
         | 
| 19 | 
            +
              s.add_development_dependency 'rake'
         | 
| 20 | 
            +
              s.add_development_dependency 'rspec'
         | 
| 21 | 
            +
              s.add_development_dependency 'shoulda'
         | 
| 67 22 |  | 
| 68 | 
            -
             | 
| 69 | 
            -
                 | 
| 70 | 
            -
             | 
| 71 | 
            -
               | 
| 72 | 
            -
              end
         | 
| 23 | 
            +
              s.files         = `git ls-files`.split("\n")
         | 
| 24 | 
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 25 | 
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 26 | 
            +
              s.require_paths = ["lib"]
         | 
| 73 27 | 
             
            end
         | 
| 74 | 
            -
             | 
    
        data/lib/agcod.rb
    CHANGED
    
    
    
        data/lib/agcod/configuration.rb
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            module Agcod
         | 
| 2 2 | 
             
              class Configuration
         | 
| 3 | 
            -
                REQUIRED_OPTIONS = ["access_key", | 
| 3 | 
            +
                REQUIRED_OPTIONS = ["access_key",
         | 
| 4 4 | 
             
                  "secret_key",
         | 
| 5 5 | 
             
                  "partner_id",
         | 
| 6 6 | 
             
                  "uri",
         | 
| 7 7 | 
             
                  "discount_percentage"
         | 
| 8 | 
            -
                ] | 
| 9 | 
            -
             | 
| 8 | 
            +
                ]
         | 
| 9 | 
            +
             | 
| 10 10 | 
             
                class << self
         | 
| 11 11 | 
             
                  attr_reader :options
         | 
| 12 12 | 
             
                  attr_accessor :logger
         | 
| @@ -17,11 +17,11 @@ module Agcod | |
| 17 17 | 
             
                    else
         | 
| 18 18 | 
             
                      @app_root = Rails.root if defined?(Rails)
         | 
| 19 19 | 
             
                    end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    if @app_root.nil? || | 
| 20 | 
            +
             | 
| 21 | 
            +
                    if @app_root.nil? ||
         | 
| 22 22 | 
             
                      !FileTest.exists?(config_filename = File.join(@app_root, 'config', 'agcod.yml'))
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                      raise Error::ConfigurationError, "Configuration for AGCOD not found" | 
| 23 | 
            +
             | 
| 24 | 
            +
                      raise Error::ConfigurationError, "Configuration for AGCOD not found"
         | 
| 25 25 | 
             
                    end
         | 
| 26 26 |  | 
| 27 27 | 
             
                    config_file = File.read(config_filename)
         | 
| @@ -30,6 +30,7 @@ module Agcod | |
| 30 30 | 
             
                    environment = env if env
         | 
| 31 31 |  | 
| 32 32 | 
             
                    @options = YAML.load(config_file)[environment]
         | 
| 33 | 
            +
                    raise Error::ConfigurationError, "Configuration for AGCOD (#{ environment } environment) not found" unless @options
         | 
| 33 34 | 
             
                    validate_options
         | 
| 34 35 | 
             
                    @options
         | 
| 35 36 | 
             
                  end
         | 
| @@ -41,7 +42,7 @@ module Agcod | |
| 41 42 | 
             
                    validate_options
         | 
| 42 43 | 
             
                    @options
         | 
| 43 44 | 
             
                  end
         | 
| 44 | 
            -
             | 
| 45 | 
            +
             | 
| 45 46 | 
             
                  def access_key
         | 
| 46 47 | 
             
                    @options["access_key"]
         | 
| 47 48 | 
             
                  end
         | 
| @@ -62,14 +63,18 @@ module Agcod | |
| 62 63 | 
             
                    @options["discount_percentage"]
         | 
| 63 64 | 
             
                  end
         | 
| 64 65 |  | 
| 66 | 
            +
                  def verify_mode
         | 
| 67 | 
            +
                    @options["verify_mode"]
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 65 70 | 
             
                  private
         | 
| 66 | 
            -
             | 
| 71 | 
            +
             | 
| 67 72 | 
             
                  def validate_options
         | 
| 68 73 | 
             
                    REQUIRED_OPTIONS.each do |opt|
         | 
| 69 74 | 
             
                      if options[opt].nil? || options[opt] == ""
         | 
| 70 | 
            -
                        raise Error::ConfigurationError, "#{opt} was not specified" | 
| 75 | 
            +
                        raise Error::ConfigurationError, "#{opt} was not specified"
         | 
| 71 76 | 
             
                      end
         | 
| 72 | 
            -
                    end | 
| 77 | 
            +
                    end
         | 
| 73 78 | 
             
                  end
         | 
| 74 79 | 
             
                end
         | 
| 75 80 | 
             
              end
         | 
    
        data/lib/agcod/request.rb
    CHANGED
    
    | @@ -35,7 +35,8 @@ module Agcod | |
| 35 35 | 
             
                  #remove all the = and & from the serialized string
         | 
| 36 36 | 
             
                  sanitized_string = string_to_sign.gsub(/=|&/, "")
         | 
| 37 37 | 
             
                  # puts sanitized_string
         | 
| 38 | 
            -
                   | 
| 38 | 
            +
                  digest = OpenSSL::Digest::Digest.new('sha1')
         | 
| 39 | 
            +
                  sha1 = OpenSSL::HMAC.digest(digest, Agcod::Configuration.secret_key, sanitized_string)
         | 
| 39 40 |  | 
| 40 41 | 
             
                  #Base64 encoding adds a linefeed to the end of the string so chop the last character!
         | 
| 41 42 | 
             
                  CGI.escape(Base64.encode64(sha1).chomp)
         | 
| @@ -49,12 +50,15 @@ module Agcod | |
| 49 50 | 
             
                  @response_id || @options["response_id"]
         | 
| 50 51 | 
             
                end
         | 
| 51 52 |  | 
| 52 | 
            -
                 | 
| 53 | 
            +
                def request_url
         | 
| 54 | 
            +
                  "#{ Agcod::Configuration.uri }?#{ build_sorted_and_signed_request_string }"
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                protected
         | 
| 53 58 |  | 
| 54 59 | 
             
                def process_response
         | 
| 55 60 | 
             
                  parse_response
         | 
| 56 61 |  | 
| 57 | 
            -
             | 
| 58 62 | 
             
                  @errors = []
         | 
| 59 63 |  | 
| 60 64 | 
             
                  self.xml_response.root.elements.each("Error") do |e|
         | 
| @@ -63,6 +67,12 @@ module Agcod | |
| 63 67 |  | 
| 64 68 | 
             
                  @status = self.xml_response.root.elements["Status/statusCode"].text unless xml_response.root.elements["Status/statusCode"].nil?
         | 
| 65 69 |  | 
| 70 | 
            +
                  # in some cases we have a failure and no Error elements.  Check for
         | 
| 71 | 
            +
                  # a status message in this case
         | 
| 72 | 
            +
                  if @status == 'FAILURE'
         | 
| 73 | 
            +
                    @errors << self.xml_response.root.elements["Status/statusMessage"].text unless xml_response.root.elements["Status/statusMessage"].nil?
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 66 76 | 
             
                  #something happened before it got to ACGWS (most likely a signature problem)
         | 
| 67 77 | 
             
                  @status = "FAILURE" if self.errors.size > 0 && self.status.blank?
         | 
| 68 78 |  | 
| @@ -76,24 +86,29 @@ module Agcod | |
| 76 86 | 
             
                def attempt_retry
         | 
| 77 87 | 
             
                  #check for retry error
         | 
| 78 88 | 
             
                  if self.xml_response.root.elements["Status/errorCode"] &&
         | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 89 | 
            +
                     self.xml_response.root.elements["Status/errorCode"].text == "E100" &&
         | 
| 90 | 
            +
                     ! @sent_retry
         | 
| 91 | 
            +
                  then
         | 
| 82 92 | 
             
                    @sent_retry = true
         | 
| 83 | 
            -
                    submit | 
| 93 | 
            +
                    submit
         | 
| 84 94 | 
             
                  end
         | 
| 85 95 | 
             
                end
         | 
| 86 96 |  | 
| 87 | 
            -
                protected
         | 
| 88 97 | 
             
                def send_request
         | 
| 89 98 | 
             
                  #send the request
         | 
| 90 | 
            -
                  uri = URI.parse | 
| 99 | 
            +
                  uri = URI.parse request_url
         | 
| 91 100 | 
             
                  http = Net::HTTP.new(uri.host, uri.port)
         | 
| 92 101 | 
             
                  http.read_timeout = 20
         | 
| 93 102 | 
             
                  http.open_timeout = 20
         | 
| 94 103 | 
             
                  http.use_ssl = true
         | 
| 95 104 |  | 
| 96 | 
            -
                   | 
| 105 | 
            +
                  if Agcod::Configuration.verify_mode
         | 
| 106 | 
            +
                    http.verify_mode = Agcod::Configuration.verify_mode.constantize
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  @response = @xml_response = nil
         | 
| 110 | 
            +
                  net_response, @response = http.get(uri.path + "?" + uri.query)
         | 
| 111 | 
            +
                  @response ||= net_response.read_body
         | 
| 97 112 |  | 
| 98 113 | 
             
                  @sent = true
         | 
| 99 114 | 
             
                end
         | 
| @@ -101,15 +116,15 @@ module Agcod | |
| 101 116 | 
             
                def default_parameters
         | 
| 102 117 | 
             
                  @timestamp = Time.now.utc
         | 
| 103 118 | 
             
                  {
         | 
| 104 | 
            -
                    "Action" | 
| 105 | 
            -
                    "AWSAccessKeyId" | 
| 106 | 
            -
                    "SignatureVersion" | 
| 107 | 
            -
                    "MessageHeader.recipientId" | 
| 108 | 
            -
                    "MessageHeader.sourceId" | 
| 109 | 
            -
                    "MessageHeader.retryCount" | 
| 119 | 
            +
                    "Action"                       => self.action,
         | 
| 120 | 
            +
                    "AWSAccessKeyId"               => Agcod::Configuration.access_key,
         | 
| 121 | 
            +
                    "SignatureVersion"             => "1",
         | 
| 122 | 
            +
                    "MessageHeader.recipientId"    => "AMAZON",
         | 
| 123 | 
            +
                    "MessageHeader.sourceId"       => Agcod::Configuration.partner_id,
         | 
| 124 | 
            +
                    "MessageHeader.retryCount"     => "0",
         | 
| 110 125 | 
             
                    "MessageHeader.contentVersion" => "2008-01-01",
         | 
| 111 | 
            -
                    "MessageHeader.messageType" | 
| 112 | 
            -
                    "Timestamp" | 
| 126 | 
            +
                    "MessageHeader.messageType"    => self.action + "Request",
         | 
| 127 | 
            +
                    "Timestamp"                    => @timestamp.strftime("%Y-%m-%dT%H:%M:%S") + ".000Z"
         | 
| 113 128 | 
             
                  }
         | 
| 114 129 | 
             
                end
         | 
| 115 130 |  | 
| @@ -144,7 +159,7 @@ module Agcod | |
| 144 159 | 
             
                  log_string << " \##{self.request_id}" if self.request_id
         | 
| 145 160 | 
             
                  log_string << " received response #{self.response_id}" if self.response_id
         | 
| 146 161 | 
             
                  if self.respond_to?(:claim_code) && self.claim_code
         | 
| 147 | 
            -
                    log_string << " received claim_code #{self.claim_code}" | 
| 162 | 
            +
                    log_string << " received claim_code #{self.claim_code}"
         | 
| 148 163 | 
             
                  end
         | 
| 149 164 | 
             
                  Agcod::Configuration.logger.debug log_string
         | 
| 150 165 | 
             
                end
         | 
| @@ -14,7 +14,7 @@ class Agcod::ConfigurationTest < Test::Unit::TestCase | |
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 16 | 
             
                should "raise an error if the configuration file isn't specified" do
         | 
| 17 | 
            -
                  assert_raise Agcod::Error::ConfigurationError do | 
| 17 | 
            +
                  assert_raise Agcod::Error::ConfigurationError do
         | 
| 18 18 | 
             
                    Agcod::Configuration.load
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 | 
             
                end
         | 
| @@ -25,22 +25,28 @@ class Agcod::ConfigurationTest < Test::Unit::TestCase | |
| 25 25 | 
             
                  end
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 | 
            +
                should "raise an error if the environment key is not included in the config file" do
         | 
| 29 | 
            +
                  assert_raise Agcod::Error::ConfigurationError do
         | 
| 30 | 
            +
                    Agcod::Configuration.load(File.join(File.dirname(__FILE__), "..", "app_root"), "staging")
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 28 34 | 
             
                should "read configuration from a supplied app root" do
         | 
| 29 35 | 
             
                  Agcod::Configuration.load(File.join(File.dirname(__FILE__), "..", "app_root"), "test")
         | 
| 30 36 | 
             
                  Agcod::Configuration::REQUIRED_OPTIONS.each do |opt|
         | 
| 31 37 | 
             
                    assert_not_nil Agcod::Configuration.send(opt)
         | 
| 32 38 | 
             
                  end
         | 
| 33 39 | 
             
                end
         | 
| 34 | 
            -
             | 
| 40 | 
            +
             | 
| 35 41 | 
             
                should "allow me to set config options at runtime" do
         | 
| 36 42 | 
             
                  Agcod::Configuration.set(@valid_options)
         | 
| 37 43 | 
             
                  assert_equal Agcod::Configuration.access_key, @valid_options["access_key"]
         | 
| 38 44 | 
             
                end
         | 
| 39 45 |  | 
| 40 46 | 
             
                should_require_config_options [
         | 
| 41 | 
            -
                  "access_key", | 
| 42 | 
            -
                  "secret_key", | 
| 43 | 
            -
                  "partner_id", | 
| 47 | 
            +
                  "access_key",
         | 
| 48 | 
            +
                  "secret_key",
         | 
| 49 | 
            +
                  "partner_id",
         | 
| 44 50 | 
             
                  "uri",
         | 
| 45 51 | 
             
                  "discount_percentage"
         | 
| 46 52 | 
             
                ]
         | 
| @@ -50,6 +56,7 @@ class Agcod::ConfigurationTest < Test::Unit::TestCase | |
| 50 56 | 
             
                setup do
         | 
| 51 57 | 
             
                  configure_with_valid_options
         | 
| 52 58 | 
             
                  @log_path = File.join(File.dirname(__FILE__), "..", "log", "test.log")
         | 
| 59 | 
            +
                  FileUtils.mkdir_p(File.dirname(@log_path))
         | 
| 53 60 | 
             
                  FileUtils.touch(@log_path)
         | 
| 54 61 | 
             
                  @logger = Logger.new(@log_path)
         | 
| 55 62 | 
             
                  @logger.level = Logger::DEBUG
         | 
| @@ -57,7 +64,7 @@ class Agcod::ConfigurationTest < Test::Unit::TestCase | |
| 57 64 | 
             
                  Agcod::Configuration.logger = @logger
         | 
| 58 65 |  | 
| 59 66 | 
             
                  FakeWeb.allow_net_connect = false
         | 
| 60 | 
            -
             | 
| 67 | 
            +
             | 
| 61 68 | 
             
                  @request = Agcod::CreateGiftCard.new("request_id" => 34234, "value" => 12)
         | 
| 62 69 | 
             
                  @request.stubs(:response_id).returns(4323535)
         | 
| 63 70 | 
             
                  @request.stubs(:send_request)
         | 
| @@ -67,7 +74,7 @@ class Agcod::ConfigurationTest < Test::Unit::TestCase | |
| 67 74 | 
             
                end
         | 
| 68 75 |  | 
| 69 76 | 
             
                teardown do
         | 
| 70 | 
            -
                  FileUtils.rm_f(@log_path) | 
| 77 | 
            +
                  FileUtils.rm_f(@log_path)
         | 
| 71 78 | 
             
                end
         | 
| 72 79 |  | 
| 73 80 | 
             
                should "allow me to define a logger for logging requests" do
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            require "test_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Agcod::RequestTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              context 'a health check request' do
         | 
| 5 | 
            +
                setup do
         | 
| 6 | 
            +
                  Agcod::Configuration.load(File.join(File.dirname(__FILE__), "..", "app_root"), "test")
         | 
| 7 | 
            +
                  @request = Agcod::HealthCheck.new
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                should 'read response body' do
         | 
| 11 | 
            +
                  register_response @request.request_url, "health_check/success"
         | 
| 12 | 
            +
                  @request.submit
         | 
| 13 | 
            +
                  assert_equal "SUCCESS", @request.status
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              context 'retrying a create gift card request' do
         | 
| 18 | 
            +
                setup do
         | 
| 19 | 
            +
                  Agcod::Configuration.load(File.join(File.dirname(__FILE__), "..", "app_root"), "test")
         | 
| 20 | 
            +
                  @request = Agcod::CreateGiftCard.new('value' => 100, 'request_id' => 12345)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                should 'use response of retried request' do
         | 
| 24 | 
            +
                  uri = URI.parse(@request.request_url)
         | 
| 25 | 
            +
                  register_response %r{^#{ uri.scheme }://#{ uri.host }}, %w( create_gift_card/retry create_gift_card/success )
         | 
| 26 | 
            +
                  @request.submit
         | 
| 27 | 
            +
                  assert_equal "SUCCESS", @request.status
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              context 'handle for a non-error failure' do
         | 
| 32 | 
            +
                setup do
         | 
| 33 | 
            +
                  Agcod::Configuration.load(File.join(File.dirname(__FILE__), "..", "app_root"), "test")
         | 
| 34 | 
            +
                  @request = Agcod::CreateGiftCard.new('value' => 13.57, 'request_id' => 12345)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                should 'store failure from statusMessage' do
         | 
| 38 | 
            +
                  uri = URI.parse(@request.request_url)
         | 
| 39 | 
            +
                  register_response %r{^#{ uri.scheme }://#{ uri.host }}, %w( create_gift_card/non-error-failure create_gift_card/success )
         | 
| 40 | 
            +
                  @request.submit
         | 
| 41 | 
            +
                  assert_equal "FAILURE", @request.status
         | 
| 42 | 
            +
                  assert(@request.errors.count > 0)
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            <?xml version="1.0"?>
         | 
| 2 | 
            +
            <CreateGiftCardResponse xmlns="http://agcws.amazon.com/doc/2008-01-01/">
         | 
| 3 | 
            +
              <MessageHeader>
         | 
| 4 | 
            +
                <messageType>CreateGiftCardResponse</messageType>
         | 
| 5 | 
            +
                <sourceId>AMAZON</sourceId>
         | 
| 6 | 
            +
                <recipientId>SomebodyImportant</recipientId>
         | 
| 7 | 
            +
                <contentVersion>2008-01-01</contentVersion>
         | 
| 8 | 
            +
                <retryCount>1</retryCount>
         | 
| 9 | 
            +
              </MessageHeader>
         | 
| 10 | 
            +
              <Status>
         | 
| 11 | 
            +
                <statusCode>FAILURE</statusCode>
         | 
| 12 | 
            +
                <errorCode></errorCode>
         | 
| 13 | 
            +
                <statusMessage>Request Error </statusMessage>
         | 
| 14 | 
            +
              </Status>
         | 
| 15 | 
            +
              <gcCreationRequestId>SomebodyImportant12345</gcCreationRequestId>
         | 
| 16 | 
            +
              <gcCreationResponseId>ABC123DEF456</gcCreationResponseId>
         | 
| 17 | 
            +
              <gcClaimCode>AB12-CDE345-FG67</gcClaimCode>
         | 
| 18 | 
            +
              <gcValue>
         | 
| 19 | 
            +
                <amount>13.57</amount>
         | 
| 20 | 
            +
                <currencyCode>USD</currencyCode>
         | 
| 21 | 
            +
              </gcValue>
         | 
| 22 | 
            +
            </CreateGiftCardResponse>
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            <?xml version="1.0"?>
         | 
| 2 | 
            +
            <CreateGiftCardResponse xmlns="http://agcws.amazon.com/doc/2008-01-01/">
         | 
| 3 | 
            +
              <MessageHeader>
         | 
| 4 | 
            +
                <messageType>CreateGiftCardResponse</messageType>
         | 
| 5 | 
            +
                <sourceId>AMAZON</sourceId>
         | 
| 6 | 
            +
                <recipientId>SomebodyImportant</recipientId>
         | 
| 7 | 
            +
                <contentVersion>2008-01-01</contentVersion>
         | 
| 8 | 
            +
                <retryCount>0</retryCount>
         | 
| 9 | 
            +
              </MessageHeader>
         | 
| 10 | 
            +
              <Status>
         | 
| 11 | 
            +
                <statusCode>FAILURE</statusCode>
         | 
| 12 | 
            +
                <errorCode>E100</errorCode>
         | 
| 13 | 
            +
                <statusMessage>Please retry</statusMessage>
         | 
| 14 | 
            +
              </Status>
         | 
| 15 | 
            +
              <gcCreationRequestId>SomebodyImportant12345</gcCreationRequestId>
         | 
| 16 | 
            +
              <gcCreationResponseId>ABC123DEF456</gcCreationResponseId>
         | 
| 17 | 
            +
            </CreateGiftCardResponse>
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            <?xml version="1.0"?>
         | 
| 2 | 
            +
            <CreateGiftCardResponse xmlns="http://agcws.amazon.com/doc/2008-01-01/">
         | 
| 3 | 
            +
              <MessageHeader>
         | 
| 4 | 
            +
                <messageType>CreateGiftCardResponse</messageType>
         | 
| 5 | 
            +
                <sourceId>AMAZON</sourceId>
         | 
| 6 | 
            +
                <recipientId>SomebodyImportant</recipientId>
         | 
| 7 | 
            +
                <contentVersion>2008-01-01</contentVersion>
         | 
| 8 | 
            +
                <retryCount>1</retryCount>
         | 
| 9 | 
            +
              </MessageHeader>
         | 
| 10 | 
            +
              <Status>
         | 
| 11 | 
            +
                <statusCode>SUCCESS</statusCode>
         | 
| 12 | 
            +
                <errorCode></errorCode>
         | 
| 13 | 
            +
                <statusMessage>CreateGiftCard Request successful</statusMessage>
         | 
| 14 | 
            +
              </Status>
         | 
| 15 | 
            +
              <gcCreationRequestId>SomebodyImportant12345</gcCreationRequestId>
         | 
| 16 | 
            +
              <gcCreationResponseId>ABC123DEF456</gcCreationResponseId>
         | 
| 17 | 
            +
              <gcClaimCode>AB12-CDE345-FG67</gcClaimCode>
         | 
| 18 | 
            +
              <gcValue>
         | 
| 19 | 
            +
                <amount>100</amount>
         | 
| 20 | 
            +
                <currencyCode>USD</currencyCode>
         | 
| 21 | 
            +
              </gcValue>
         | 
| 22 | 
            +
            </CreateGiftCardResponse>
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            <?xml version="1.0"?>
         | 
| 2 | 
            +
            <HealthCheckResponse xmlns="http://agcws.amazon.com/doc/2008-01-01/">
         | 
| 3 | 
            +
              <MessageHeader>
         | 
| 4 | 
            +
                <messageType>HealthCheckResponse</messageType>
         | 
| 5 | 
            +
                <sourceId>AMAZON</sourceId>
         | 
| 6 | 
            +
                <recipientId>SomebodyImportant</recipientId>
         | 
| 7 | 
            +
                <contentVersion>2008-01-01</contentVersion>
         | 
| 8 | 
            +
                <retryCount>0</retryCount>
         | 
| 9 | 
            +
              </MessageHeader>
         | 
| 10 | 
            +
              <Status>
         | 
| 11 | 
            +
                <statusCode>SUCCESS</statusCode>
         | 
| 12 | 
            +
                <errorCode/>
         | 
| 13 | 
            +
                <statusMessage>HealthCheck Request successful</statusMessage>
         | 
| 14 | 
            +
              </Status>
         | 
| 15 | 
            +
            </HealthCheckResponse>
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -4,19 +4,37 @@ require 'shoulda' | |
| 4 4 | 
             
            require 'fakeweb'
         | 
| 5 5 | 
             
            require 'mocha'
         | 
| 6 6 |  | 
| 7 | 
            +
            module ActiveResource
         | 
| 8 | 
            +
              class TimeoutError < StandardError
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            class String
         | 
| 13 | 
            +
              def blank?
         | 
| 14 | 
            +
                empty?
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 7 18 | 
             
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 8 19 | 
             
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 9 20 | 
             
            require 'agcod'
         | 
| 10 21 |  | 
| 11 | 
            -
            begin | 
| 22 | 
            +
            begin
         | 
| 23 | 
            +
              require "redgreen"
         | 
| 24 | 
            +
            rescue LoadError
         | 
| 25 | 
            +
            end
         | 
| 12 26 |  | 
| 13 27 | 
             
            FakeWeb.allow_net_connect = false
         | 
| 14 28 |  | 
| 15 29 | 
             
            require "macros/configuration"
         | 
| 16 30 |  | 
| 17 31 | 
             
            class Test::Unit::TestCase
         | 
| 18 | 
            -
              def register_response( | 
| 19 | 
            -
                
         | 
| 32 | 
            +
              def register_response(uri, fixtures)
         | 
| 33 | 
            +
                fixtures = [fixtures].flatten.map do |f|
         | 
| 34 | 
            +
                  { :body => IO.read(xml_fixture_path(f)) }
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                FakeWeb.register_uri(:get, uri, fixtures)
         | 
| 20 38 | 
             
              end
         | 
| 21 39 |  | 
| 22 40 | 
             
              def xml_fixture_path(fixture)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,40 +1,123 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: agcod
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
              prerelease:  | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 0
         | 
| 9 | 
            -
              - 4
         | 
| 10 | 
            -
              version: 0.0.4
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.6
         | 
| 5 | 
            +
              prerelease: 
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 13 8 | 
             
            - Dan Pickett
         | 
| 14 9 | 
             
            autorequire: 
         | 
| 15 10 | 
             
            bindir: bin
         | 
| 16 11 | 
             
            cert_chain: []
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 12 | 
            +
            date: 2013-01-09 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: cucumber
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0'
         | 
| 22 | 
            +
              type: :development
         | 
| 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: fakeweb
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ! '>='
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            +
                    version: '0'
         | 
| 38 | 
            +
              type: :development
         | 
| 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 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            +
              name: mocha
         | 
| 48 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            +
                none: false
         | 
| 50 | 
            +
                requirements:
         | 
| 51 | 
            +
                - - ! '>='
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            +
                    version: '0'
         | 
| 54 | 
            +
              type: :development
         | 
| 55 | 
            +
              prerelease: false
         | 
| 56 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                none: false
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ! '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            +
              name: rake
         | 
| 64 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                none: false
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - ! '>='
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '0'
         | 
| 70 | 
            +
              type: :development
         | 
| 71 | 
            +
              prerelease: false
         | 
| 72 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
                none: false
         | 
| 74 | 
            +
                requirements:
         | 
| 75 | 
            +
                - - ! '>='
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            +
                    version: '0'
         | 
| 78 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 79 | 
            +
              name: rspec
         | 
| 80 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            +
                none: false
         | 
| 82 | 
            +
                requirements:
         | 
| 83 | 
            +
                - - ! '>='
         | 
| 84 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 85 | 
            +
                    version: '0'
         | 
| 86 | 
            +
              type: :development
         | 
| 87 | 
            +
              prerelease: false
         | 
| 88 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            +
                none: false
         | 
| 90 | 
            +
                requirements:
         | 
| 91 | 
            +
                - - ! '>='
         | 
| 92 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 93 | 
            +
                    version: '0'
         | 
| 94 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 95 | 
            +
              name: shoulda
         | 
| 96 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 97 | 
            +
                none: false
         | 
| 98 | 
            +
                requirements:
         | 
| 99 | 
            +
                - - ! '>='
         | 
| 100 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 101 | 
            +
                    version: '0'
         | 
| 102 | 
            +
              type: :development
         | 
| 103 | 
            +
              prerelease: false
         | 
| 104 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            +
                none: false
         | 
| 106 | 
            +
                requirements:
         | 
| 107 | 
            +
                - - ! '>='
         | 
| 108 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            +
                    version: '0'
         | 
| 110 | 
            +
            description: Access the Amazon API to order gift codes
         | 
| 23 111 | 
             
            email: dpickett@enlightsolutions.com
         | 
| 24 112 | 
             
            executables: []
         | 
| 25 | 
            -
             | 
| 26 113 | 
             
            extensions: []
         | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
            - LICENSE
         | 
| 30 | 
            -
            - README.rdoc
         | 
| 31 | 
            -
            files: 
         | 
| 32 | 
            -
            - .document
         | 
| 114 | 
            +
            extra_rdoc_files: []
         | 
| 115 | 
            +
            files:
         | 
| 33 116 | 
             
            - .gitignore
         | 
| 117 | 
            +
            - Gemfile
         | 
| 34 118 | 
             
            - LICENSE
         | 
| 35 119 | 
             
            - README.rdoc
         | 
| 36 120 | 
             
            - Rakefile
         | 
| 37 | 
            -
            - VERSION
         | 
| 38 121 | 
             
            - agcod.gemspec
         | 
| 39 122 | 
             
            - cucumber.yml
         | 
| 40 123 | 
             
            - features/error_handling.feature
         | 
| @@ -53,50 +136,63 @@ files: | |
| 53 136 | 
             
            - lib/agcod/request.rb
         | 
| 54 137 | 
             
            - lib/agcod/tasks.rb
         | 
| 55 138 | 
             
            - lib/agcod/tasks/certification.rake
         | 
| 139 | 
            +
            - lib/agcod/version.rb
         | 
| 56 140 | 
             
            - lib/agcod/void_gift_card_creation.rb
         | 
| 57 141 | 
             
            - manual_features/cancel_claimed_giftcard.feature
         | 
| 58 142 | 
             
            - manual_features/insufficient_funds.feature
         | 
| 59 143 | 
             
            - manual_features/retry_and_http.feature
         | 
| 60 144 | 
             
            - tasks/agcod.rake
         | 
| 61 145 | 
             
            - test/agcod/configuration_test.rb
         | 
| 146 | 
            +
            - test/agcod/request_test.rb
         | 
| 62 147 | 
             
            - test/app_root/config/agcod.yml
         | 
| 148 | 
            +
            - test/fixtures/create_gift_card/non-error-failure.xml
         | 
| 149 | 
            +
            - test/fixtures/create_gift_card/retry.xml
         | 
| 150 | 
            +
            - test/fixtures/create_gift_card/success.xml
         | 
| 151 | 
            +
            - test/fixtures/health_check/success.xml
         | 
| 63 152 | 
             
            - test/macros/configuration.rb
         | 
| 64 153 | 
             
            - test/test_helper.rb
         | 
| 65 | 
            -
            has_rdoc: true
         | 
| 66 154 | 
             
            homepage: http://github.com/dpickett/agcod
         | 
| 67 155 | 
             
            licenses: []
         | 
| 68 | 
            -
             | 
| 69 156 | 
             
            post_install_message: 
         | 
| 70 | 
            -
            rdoc_options: 
         | 
| 71 | 
            -
             | 
| 72 | 
            -
            require_paths: 
         | 
| 157 | 
            +
            rdoc_options: []
         | 
| 158 | 
            +
            require_paths:
         | 
| 73 159 | 
             
            - lib
         | 
| 74 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 160 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 75 161 | 
             
              none: false
         | 
| 76 | 
            -
              requirements: | 
| 77 | 
            -
              - -  | 
| 78 | 
            -
                - !ruby/object:Gem::Version | 
| 79 | 
            -
                   | 
| 80 | 
            -
                  segments: | 
| 162 | 
            +
              requirements:
         | 
| 163 | 
            +
              - - ! '>='
         | 
| 164 | 
            +
                - !ruby/object:Gem::Version
         | 
| 165 | 
            +
                  version: '0'
         | 
| 166 | 
            +
                  segments:
         | 
| 81 167 | 
             
                  - 0
         | 
| 82 | 
            -
                   | 
| 83 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 168 | 
            +
                  hash: 2406941575318541167
         | 
| 169 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 84 170 | 
             
              none: false
         | 
| 85 | 
            -
              requirements: | 
| 86 | 
            -
              - -  | 
| 87 | 
            -
                - !ruby/object:Gem::Version | 
| 88 | 
            -
                   | 
| 89 | 
            -
                  segments: | 
| 171 | 
            +
              requirements:
         | 
| 172 | 
            +
              - - ! '>='
         | 
| 173 | 
            +
                - !ruby/object:Gem::Version
         | 
| 174 | 
            +
                  version: '0'
         | 
| 175 | 
            +
                  segments:
         | 
| 90 176 | 
             
                  - 0
         | 
| 91 | 
            -
                   | 
| 177 | 
            +
                  hash: 2406941575318541167
         | 
| 92 178 | 
             
            requirements: []
         | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
            rubygems_version: 1.3.7
         | 
| 179 | 
            +
            rubyforge_project: agcod
         | 
| 180 | 
            +
            rubygems_version: 1.8.23
         | 
| 96 181 | 
             
            signing_key: 
         | 
| 97 182 | 
             
            specification_version: 3
         | 
| 98 | 
            -
            summary: A Wrapper for Amazon Gift  | 
| 99 | 
            -
            test_files: | 
| 183 | 
            +
            summary: A Wrapper for Amazon Gift Codes On Demand
         | 
| 184 | 
            +
            test_files:
         | 
| 185 | 
            +
            - features/error_handling.feature
         | 
| 186 | 
            +
            - features/step_definitions/agcod_steps.rb
         | 
| 187 | 
            +
            - features/success_certification.feature
         | 
| 188 | 
            +
            - features/support/app_root/config/agcod.example.yml
         | 
| 189 | 
            +
            - features/support/env.rb
         | 
| 100 190 | 
             
            - test/agcod/configuration_test.rb
         | 
| 191 | 
            +
            - test/agcod/request_test.rb
         | 
| 192 | 
            +
            - test/app_root/config/agcod.yml
         | 
| 193 | 
            +
            - test/fixtures/create_gift_card/non-error-failure.xml
         | 
| 194 | 
            +
            - test/fixtures/create_gift_card/retry.xml
         | 
| 195 | 
            +
            - test/fixtures/create_gift_card/success.xml
         | 
| 196 | 
            +
            - test/fixtures/health_check/success.xml
         | 
| 101 197 | 
             
            - test/macros/configuration.rb
         | 
| 102 198 | 
             
            - test/test_helper.rb
         | 
    
        data/.document
    DELETED
    
    
    
        data/VERSION
    DELETED
    
    | @@ -1 +0,0 @@ | |
| 1 | 
            -
            0.0.4
         |