aws-sdk-core 2.0.0.rc1 → 2.0.0.rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.travis.yml +1 -0
 - data/README.md +6 -3
 - data/Rakefile +2 -0
 - data/apis/AutoScaling-2011-01-01.json +1 -0
 - data/apis/CloudFormation-2010-05-15.json +75 -0
 - data/apis/CloudFront-2012-05-05.json +1 -0
 - data/apis/CloudFront-2013-05-12.json +1 -0
 - data/apis/CloudFront-2013-08-26.json +1 -0
 - data/apis/CloudSearch-2011-02-01.json +1 -0
 - data/apis/CloudWatch-2010-08-01.json +1 -0
 - data/apis/DataPipeline-2012-10-29.json +1 -0
 - data/apis/DirectConnect-2012-10-25.json +1 -0
 - data/apis/DynamoDB-2011-12-05.json +1 -0
 - data/apis/DynamoDB-2012-08-10.json +1 -0
 - data/apis/EC2-2013-06-15.json +1 -0
 - data/apis/EC2-2013-10-01.json +1 -0
 - data/apis/EMR-2009-03-31.json +1 -0
 - data/apis/ElastiCache-2012-11-15.json +1 -0
 - data/apis/ElastiCache-2013-06-15.json +1 -0
 - data/apis/ElasticBeanstalk-2010-12-01.json +1 -0
 - data/apis/ElasticLoadBalancing-2012-06-01.json +73 -0
 - data/apis/ElasticTranscoder-2012-09-25.json +231 -0
 - data/apis/Glacier-2012-06-01.json +2 -0
 - data/apis/IAM-2010-05-08.json +1 -0
 - data/apis/ImportExport-2010-06-01.json +1 -0
 - data/apis/OpsWorks-2013-02-18.json +1 -0
 - data/apis/RDS-2013-01-10.json +1 -0
 - data/apis/RDS-2013-02-12.json +1 -0
 - data/apis/RDS-2013-05-15.json +1 -0
 - data/apis/Redshift-2012-12-01.json +1 -0
 - data/apis/Route53-2012-12-12.json +1 -0
 - data/apis/S3-2006-03-01.json +5 -0
 - data/apis/SDB-2009-04-15.json +1 -0
 - data/apis/SES-2010-12-01.json +1 -0
 - data/apis/SNS-2010-03-31.json +1 -0
 - data/apis/SQS-2012-11-05.json +1 -0
 - data/apis/STS-2011-06-15.json +1 -0
 - data/apis/SWF-2012-01-25.json +1 -0
 - data/apis/StorageGateway-2012-06-30.json +1 -0
 - data/apis/StorageGateway-2013-06-30.json +2018 -0
 - data/apis/Support-2013-04-15.json +1 -0
 - data/apis/source/cloudformation-2010-05-15.json +118 -12
 - data/apis/source/elasticloadbalancing-2012-06-01.json +347 -220
 - data/apis/source/elastictranscoder-2012-09-25.json +315 -5
 - data/apis/source/s3-2006-03-01.json +3 -0
 - data/apis/source/storagegateway-2013-06-30.json +12560 -0
 - data/apis/source/storagegateway-2013-06-30.paginators.json +28 -0
 - data/doc-src/plugins/apis.rb +44 -1
 - data/doc-src/templates/default/fulldoc/html/setup.rb +1 -1
 - data/features/common/step_definitions.rb +3 -5
 - data/features/env.rb +2 -0
 - data/features/glacier/client.feature +8 -0
 - data/features/glacier/step_definitions.rb +7 -7
 - data/features/s3/step_definitions.rb +2 -3
 - data/lib/aws.rb +75 -69
 - data/lib/aws/api/service_translators/glacier.rb +1 -0
 - data/lib/aws/api/translator.rb +13 -8
 - data/lib/aws/credentials.rb +5 -5
 - data/lib/aws/instance_profile_credentials.rb +113 -0
 - data/lib/aws/plugins/credentials.rb +2 -1
 - data/lib/aws/plugins/glacier_account_id.rb +11 -0
 - data/lib/aws/plugins/glacier_checksums.rb +7 -3
 - data/lib/aws/plugins/instance_profile_credentials.rb +14 -0
 - data/lib/aws/plugins/s3_bucket_dns.rb +17 -14
 - data/lib/aws/plugins/s3_md5s.rb +3 -3
 - data/lib/aws/service.rb +10 -9
 - data/lib/aws/signers/s3.rb +2 -2
 - data/lib/aws/signers/v2.rb +1 -1
 - data/lib/aws/signers/v4.rb +2 -2
 - data/lib/aws/version.rb +1 -1
 - data/lib/aws/xml/serializer.rb +1 -1
 - data/spec/aws/instance_profile_credentials_spec.rb +94 -0
 - data/spec/aws/operations_spec.rb +1 -1
 - data/spec/aws/plugins/credentials_spec.rb +2 -2
 - data/spec/fixtures/operations/glacier/account_id_param.yml +13 -0
 - data/spec/fixtures/operations/glacier/custom_account_id.yml +11 -0
 - data/spec/fixtures/operations/glacier/default_account_id.yml +10 -0
 - data/spec/fixtures/operations/s3/content_type_header.yml +12 -0
 - data/spec/fixtures/operations/s3/md5_checksum_disabled.yml +1 -1
 - data/tasks/apis.rake +2 -2
 - data/tasks/docs.rake +2 -1
 - data/tasks/handlers.rake +30 -0
 - data/vendor/seahorse/lib/seahorse/client.rb +1 -0
 - data/vendor/seahorse/lib/seahorse/client/base.rb +0 -18
 - data/vendor/seahorse/lib/seahorse/client/block_io.rb +0 -7
 - data/vendor/seahorse/lib/seahorse/client/configuration.rb +57 -37
 - data/vendor/seahorse/lib/seahorse/client/handler_list.rb +115 -78
 - data/vendor/seahorse/lib/seahorse/client/http/endpoint.rb +19 -15
 - data/vendor/seahorse/lib/seahorse/client/http/request.rb +0 -15
 - data/vendor/seahorse/lib/seahorse/client/logging/formatter.rb +0 -7
 - data/vendor/seahorse/lib/seahorse/client/managed_file.rb +14 -0
 - data/vendor/seahorse/lib/seahorse/client/net_http/handler.rb +1 -3
 - data/vendor/seahorse/lib/seahorse/client/plugins/content_length.rb +1 -1
 - data/vendor/seahorse/lib/seahorse/client/plugins/endpoint.rb +81 -10
 - data/vendor/seahorse/lib/seahorse/client/plugins/restful_bindings.rb +1 -71
 - data/vendor/seahorse/lib/seahorse/client/request.rb +26 -3
 - data/vendor/seahorse/spec/seahorse/client/base_spec.rb +1 -5
 - data/vendor/seahorse/spec/seahorse/client/configuration_spec.rb +1 -10
 - data/vendor/seahorse/spec/seahorse/client/handler_list_spec.rb +10 -10
 - data/vendor/seahorse/spec/seahorse/client/http/endpoint_spec.rb +46 -14
 - data/vendor/seahorse/spec/seahorse/client/http/request_spec.rb +1 -42
 - data/vendor/seahorse/spec/seahorse/client/logging/formatter_spec.rb +1 -6
 - data/vendor/seahorse/spec/seahorse/client/logging/handler_spec.rb +1 -1
 - data/vendor/seahorse/spec/seahorse/client/net_http/handler_spec.rb +5 -4
 - data/vendor/seahorse/spec/seahorse/client/param_converter_spec.rb +1 -0
 - data/vendor/seahorse/spec/seahorse/client/plugins/{restful_bindings/uri_path_builder_spec.rb → endpoint/request_uri_builder_spec.rb} +3 -3
 - data/vendor/seahorse/spec/seahorse/client/plugins/endpoint_spec.rb +1 -11
 - data/vendor/seahorse/spec/seahorse/client/request_spec.rb +63 -13
 - metadata +21 -3
 
    
        data/tasks/handlers.rake
    ADDED
    
    | 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            namespace :handlers do
         
     | 
| 
      
 2 
     | 
    
         
            +
              Aws.service_classes.each do |svc_name, svc_class|
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                # create a task for each service, e.g. handlers:s3
         
     | 
| 
      
 5 
     | 
    
         
            +
                desc "Displays handlers for #{svc_class.name}"
         
     | 
| 
      
 6 
     | 
    
         
            +
                task(svc_name) do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  svc = svc_class.new
         
     | 
| 
      
 8 
     | 
    
         
            +
                  if operation_name = ENV['OPERATION']
         
     | 
| 
      
 9 
     | 
    
         
            +
                    print_handlers(svc.build_request(operation_name).handlers)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  else
         
     | 
| 
      
 11 
     | 
    
         
            +
                    puts ""
         
     | 
| 
      
 12 
     | 
    
         
            +
                    puts "Diplaying handlers applied to all #{svc_class.name} operations,"
         
     | 
| 
      
 13 
     | 
    
         
            +
                    puts "  use OPERATION=name to include operation specific handlers"
         
     | 
| 
      
 14 
     | 
    
         
            +
                    puts ""
         
     | 
| 
      
 15 
     | 
    
         
            +
                    print_handlers(svc.handlers)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            def print_handlers(handlers)
         
     | 
| 
      
 23 
     | 
    
         
            +
              row = '%-6s %-11s %-9s %s'
         
     | 
| 
      
 24 
     | 
    
         
            +
              puts row % ['Order', 'Step', 'Priority', 'Handler Class']
         
     | 
| 
      
 25 
     | 
    
         
            +
              puts '---------------------------------------------------------'
         
     | 
| 
      
 26 
     | 
    
         
            +
              entries = handlers.entries.sort.reverse.select{ |e| e.operations.empty? }
         
     | 
| 
      
 27 
     | 
    
         
            +
              entries.each_with_index do |entry, n|
         
     | 
| 
      
 28 
     | 
    
         
            +
                puts row % [n + 1, entry.step, entry.priority, entry.handler_class]
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -7,6 +7,7 @@ module Seahorse 
     | 
|
| 
       7 
7 
     | 
    
         
             
                autoload :Handler, 'seahorse/client/handler'
         
     | 
| 
       8 
8 
     | 
    
         
             
                autoload :HandlerBuilder, 'seahorse/client/handler_builder'
         
     | 
| 
       9 
9 
     | 
    
         
             
                autoload :HandlerList, 'seahorse/client/handler_list'
         
     | 
| 
      
 10 
     | 
    
         
            +
                autoload :ManagedFile, 'seahorse/client/managed_file'
         
     | 
| 
       10 
11 
     | 
    
         
             
                autoload :ParamConverter, 'seahorse/client/param_converter'
         
     | 
| 
       11 
12 
     | 
    
         
             
                autoload :ParamValidator, 'seahorse/client/param_validator'
         
     | 
| 
       12 
13 
     | 
    
         
             
                autoload :Plugin, 'seahorse/client/plugin'
         
     | 
| 
         @@ -97,24 +97,6 @@ module Seahorse 
     | 
|
| 
       97 
97 
     | 
    
         | 
| 
       98 
98 
     | 
    
         
             
                  class << self
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
                    # @option options [String] :endpoint
         
     | 
| 
       101 
     | 
    
         
            -
                    #   Endpoints specify the http scheme, hostname and port to connect
         
     | 
| 
       102 
     | 
    
         
            -
                    #   to.  You must specify at a minimum the hostname.  Endpoints without
         
     | 
| 
       103 
     | 
    
         
            -
                    #   a uri scheme will default to https on port 443.
         
     | 
| 
       104 
     | 
    
         
            -
                    #
         
     | 
| 
       105 
     | 
    
         
            -
                    #       # defaults to https on port 443
         
     | 
| 
       106 
     | 
    
         
            -
                    #       hostname: 'domain.com'
         
     | 
| 
       107 
     | 
    
         
            -
                    #
         
     | 
| 
       108 
     | 
    
         
            -
                    #       # defaults to http on port 80
         
     | 
| 
       109 
     | 
    
         
            -
                    #       hostname: 'domain.com', ssl_default: false
         
     | 
| 
       110 
     | 
    
         
            -
                    #
         
     | 
| 
       111 
     | 
    
         
            -
                    #       # defaults are ignored, as scheme and port are present
         
     | 
| 
       112 
     | 
    
         
            -
                    #       hostname: 'http://domain.com:123'
         
     | 
| 
       113 
     | 
    
         
            -
                    #
         
     | 
| 
       114 
     | 
    
         
            -
                    # @option options [Boolean] :ssl_default (true) Specifies the default
         
     | 
| 
       115 
     | 
    
         
            -
                    #   scheme for the #endpoint when not specified.  Defaults to `true`
         
     | 
| 
       116 
     | 
    
         
            -
                    #   which creates https endpoints.
         
     | 
| 
       117 
     | 
    
         
            -
                    #
         
     | 
| 
       118 
100 
     | 
    
         
             
                    def new(options = {})
         
     | 
| 
       119 
101 
     | 
    
         
             
                      plugins = build_plugins
         
     | 
| 
       120 
102 
     | 
    
         
             
                      options = options.dup
         
     | 
| 
         @@ -51,9 +51,23 @@ module Seahorse 
     | 
|
| 
       51 
51 
     | 
    
         
             
                #
         
     | 
| 
       52 
52 
     | 
    
         
             
                class Configuration
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
      
 54 
     | 
    
         
            +
                  # @api private
         
     | 
| 
      
 55 
     | 
    
         
            +
                  Defaults = Class.new(Array) do
         
     | 
| 
      
 56 
     | 
    
         
            +
                    def each(&block)
         
     | 
| 
      
 57 
     | 
    
         
            +
                      reverse.each(&block)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  # @api private
         
     | 
| 
      
 62 
     | 
    
         
            +
                  DynamicDefault = Struct.new(:block) do
         
     | 
| 
      
 63 
     | 
    
         
            +
                    def call(*args)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      block.call(*args)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    end
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       54 
68 
     | 
    
         
             
                  # @api private
         
     | 
| 
       55 
69 
     | 
    
         
             
                  def initialize
         
     | 
| 
       56 
     | 
    
         
            -
                    @defaults = {}
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @defaults = Hash.new { |h,k| h[k] = Defaults.new }
         
     | 
| 
       57 
71 
     | 
    
         
             
                  end
         
     | 
| 
       58 
72 
     | 
    
         | 
| 
       59 
73 
     | 
    
         
             
                  # Adds a getter method that returns the named option or a default
         
     | 
| 
         @@ -84,9 +98,8 @@ module Seahorse 
     | 
|
| 
       84 
98 
     | 
    
         
             
                  #
         
     | 
| 
       85 
99 
     | 
    
         
             
                  # @return [self]
         
     | 
| 
       86 
100 
     | 
    
         
             
                  def add_option(name, default = nil, &block)
         
     | 
| 
       87 
     | 
    
         
            -
                     
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                      default
         
     | 
| 
      
 101 
     | 
    
         
            +
                    default = DynamicDefault.new(Proc.new) if block_given?
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @defaults[name.to_sym] << default
         
     | 
| 
       90 
103 
     | 
    
         
             
                    self
         
     | 
| 
       91 
104 
     | 
    
         
             
                  end
         
     | 
| 
       92 
105 
     | 
    
         | 
| 
         @@ -126,7 +139,19 @@ module Seahorse 
     | 
|
| 
       126 
139 
     | 
    
         
             
                  # @param [Hash] options ({}) A hash of configuration options.
         
     | 
| 
       127 
140 
     | 
    
         
             
                  # @return [Struct] Returns a frozen configuration `Struct`.
         
     | 
| 
       128 
141 
     | 
    
         
             
                  def build!(options = {})
         
     | 
| 
       129 
     | 
    
         
            -
                    struct =  
     | 
| 
      
 142 
     | 
    
         
            +
                    struct = empty_struct
         
     | 
| 
      
 143 
     | 
    
         
            +
                    apply_options(struct, options)
         
     | 
| 
      
 144 
     | 
    
         
            +
                    apply_defaults(struct, options)
         
     | 
| 
      
 145 
     | 
    
         
            +
                    struct
         
     | 
| 
      
 146 
     | 
    
         
            +
                  end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                  private
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                  def empty_struct
         
     | 
| 
      
 151 
     | 
    
         
            +
                    Struct.new(*@defaults.keys.sort).new
         
     | 
| 
      
 152 
     | 
    
         
            +
                  end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                  def apply_options(struct, options)
         
     | 
| 
       130 
155 
     | 
    
         
             
                    options.each do |opt, value|
         
     | 
| 
       131 
156 
     | 
    
         
             
                      begin
         
     | 
| 
       132 
157 
     | 
    
         
             
                        struct[opt] = value
         
     | 
| 
         @@ -135,62 +160,57 @@ module Seahorse 
     | 
|
| 
       135 
160 
     | 
    
         
             
                        raise ArgumentError, msg
         
     | 
| 
       136 
161 
     | 
    
         
             
                      end
         
     | 
| 
       137 
162 
     | 
    
         
             
                    end
         
     | 
| 
       138 
     | 
    
         
            -
                    OptionBlockResolver.new(struct).struct.freeze
         
     | 
| 
       139 
163 
     | 
    
         
             
                  end
         
     | 
| 
       140 
164 
     | 
    
         | 
| 
       141 
     | 
    
         
            -
                   
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       148 
     | 
    
         
            -
                  class UnresolvedOption
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
                    def initialize(block)
         
     | 
| 
       151 
     | 
    
         
            -
                      @block = block
         
     | 
| 
      
 165 
     | 
    
         
            +
                  def apply_defaults(struct, options)
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @defaults.each do |opt_name, defaults|
         
     | 
| 
      
 167 
     | 
    
         
            +
                      unless options.key?(opt_name)
         
     | 
| 
      
 168 
     | 
    
         
            +
                        struct[opt_name] = defaults
         
     | 
| 
      
 169 
     | 
    
         
            +
                      end
         
     | 
| 
       152 
170 
     | 
    
         
             
                    end
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
                    attr_reader :block
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
      
 171 
     | 
    
         
            +
                    DefaultResolver.new(struct).resolve
         
     | 
| 
       156 
172 
     | 
    
         
             
                  end
         
     | 
| 
       157 
173 
     | 
    
         | 
| 
       158 
174 
     | 
    
         
             
                  # @api private
         
     | 
| 
       159 
     | 
    
         
            -
                  class  
     | 
| 
      
 175 
     | 
    
         
            +
                  class DefaultResolver
         
     | 
| 
       160 
176 
     | 
    
         | 
| 
       161 
177 
     | 
    
         
             
                    def initialize(struct)
         
     | 
| 
       162 
178 
     | 
    
         
             
                      @struct = struct
         
     | 
| 
       163 
179 
     | 
    
         
             
                      @members = Set.new(@struct.members)
         
     | 
| 
       164 
     | 
    
         
            -
                      @struct.members.each do |opt|
         
     | 
| 
       165 
     | 
    
         
            -
                        if struct[opt].is_a?(UnresolvedOption)
         
     | 
| 
       166 
     | 
    
         
            -
                          struct[opt] = struct[opt].block.call(self)
         
     | 
| 
       167 
     | 
    
         
            -
                        end
         
     | 
| 
       168 
     | 
    
         
            -
                      end
         
     | 
| 
       169 
180 
     | 
    
         
             
                    end
         
     | 
| 
       170 
181 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
                     
     | 
| 
      
 182 
     | 
    
         
            +
                    def resolve
         
     | 
| 
      
 183 
     | 
    
         
            +
                      @members.each { |opt_name| value_at(opt_name) }
         
     | 
| 
      
 184 
     | 
    
         
            +
                    end
         
     | 
| 
       172 
185 
     | 
    
         | 
| 
       173 
     | 
    
         
            -
                    def respond_to?(method_name)
         
     | 
| 
       174 
     | 
    
         
            -
                      @members.include?(method_name 
     | 
| 
      
 186 
     | 
    
         
            +
                    def respond_to?(method_name, *args)
         
     | 
| 
      
 187 
     | 
    
         
            +
                      @members.include?(method_name) or super
         
     | 
| 
       175 
188 
     | 
    
         
             
                    end
         
     | 
| 
       176 
189 
     | 
    
         | 
| 
       177 
190 
     | 
    
         
             
                    private
         
     | 
| 
       178 
191 
     | 
    
         | 
| 
      
 192 
     | 
    
         
            +
                    def value_at(opt_name)
         
     | 
| 
      
 193 
     | 
    
         
            +
                      value = @struct[opt_name]
         
     | 
| 
      
 194 
     | 
    
         
            +
                      value.is_a?(Defaults) ? resolve_defaults(opt_name, value) : value
         
     | 
| 
      
 195 
     | 
    
         
            +
                    end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                    def resolve_defaults(opt_name, defaults)
         
     | 
| 
      
 198 
     | 
    
         
            +
                      defaults.each do |default|
         
     | 
| 
      
 199 
     | 
    
         
            +
                        default = default.call(self) if default.is_a?(DynamicDefault)
         
     | 
| 
      
 200 
     | 
    
         
            +
                        @struct[opt_name] = default
         
     | 
| 
      
 201 
     | 
    
         
            +
                        break if !default.nil?
         
     | 
| 
      
 202 
     | 
    
         
            +
                      end
         
     | 
| 
      
 203 
     | 
    
         
            +
                      @struct[opt_name]
         
     | 
| 
      
 204 
     | 
    
         
            +
                    end
         
     | 
| 
      
 205 
     | 
    
         
            +
             
     | 
| 
       179 
206 
     | 
    
         
             
                    def method_missing(method_name, *args)
         
     | 
| 
       180 
207 
     | 
    
         
             
                      if @members.include?(method_name)
         
     | 
| 
       181 
     | 
    
         
            -
                         
     | 
| 
      
 208 
     | 
    
         
            +
                        value_at(method_name)
         
     | 
| 
       182 
209 
     | 
    
         
             
                      else
         
     | 
| 
       183 
210 
     | 
    
         
             
                        super
         
     | 
| 
       184 
211 
     | 
    
         
             
                      end
         
     | 
| 
       185 
212 
     | 
    
         
             
                    end
         
     | 
| 
       186 
213 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                    def resolve_blocks(member)
         
     | 
| 
       188 
     | 
    
         
            -
                      if @struct[member].is_a?(UnresolvedOption)
         
     | 
| 
       189 
     | 
    
         
            -
                        @struct[member] = @struct[member].block.call(self)
         
     | 
| 
       190 
     | 
    
         
            -
                      end
         
     | 
| 
       191 
     | 
    
         
            -
                      @struct[member]
         
     | 
| 
       192 
     | 
    
         
            -
                    end
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
214 
     | 
    
         
             
                  end
         
     | 
| 
       195 
215 
     | 
    
         
             
                end
         
     | 
| 
       196 
216 
     | 
    
         
             
              end
         
     | 
| 
         @@ -20,33 +20,109 @@ module Seahorse 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    end
         
     | 
| 
       21 
21 
     | 
    
         
             
                  end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                   
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
                  class Entry
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    # @api private
         
     | 
| 
      
 26 
     | 
    
         
            +
                    STEPS = {
         
     | 
| 
      
 27 
     | 
    
         
            +
                      initialize: 400,
         
     | 
| 
      
 28 
     | 
    
         
            +
                      validate: 300,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      build: 200,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      sign: 100,
         
     | 
| 
      
 31 
     | 
    
         
            +
                      send: 0,
         
     | 
| 
      
 32 
     | 
    
         
            +
                    }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    def initialize(handler, inserted, options)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      @handler = handler
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @inserted = inserted
         
     | 
| 
      
 37 
     | 
    
         
            +
                      @operations = Set.new((options[:operations] || []).map(&:to_s))
         
     | 
| 
      
 38 
     | 
    
         
            +
                      @step = :build
         
     | 
| 
      
 39 
     | 
    
         
            +
                      @priority = 50
         
     | 
| 
      
 40 
     | 
    
         
            +
                      self.step = options[:step] if options[:step]
         
     | 
| 
      
 41 
     | 
    
         
            +
                      self.priority = options[:priority] if options[:priority]
         
     | 
| 
      
 42 
     | 
    
         
            +
                      compute_weight unless @weight
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    # @return [Handler, Class<Handler>] Returns the handler.  This may
         
     | 
| 
      
 46 
     | 
    
         
            +
                    #   be a constructed handler object or a handler class.
         
     | 
| 
      
 47 
     | 
    
         
            +
                    attr_accessor :handler
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    # @return [Integer] The insertion order/position.  This is used to
         
     | 
| 
      
 50 
     | 
    
         
            +
                    #   determine sort order when two entries have the same priority.
         
     | 
| 
      
 51 
     | 
    
         
            +
                    #   Entries inserted later (with a higher inserted value) have a
         
     | 
| 
      
 52 
     | 
    
         
            +
                    #   lower priority.
         
     | 
| 
      
 53 
     | 
    
         
            +
                    attr_accessor :inserted
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    # @return [Symbol]
         
     | 
| 
      
 56 
     | 
    
         
            +
                    attr_accessor :step
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    # @return [Integer]
         
     | 
| 
      
 59 
     | 
    
         
            +
                    attr_accessor :priority
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    # @return [Set<String>]
         
     | 
| 
      
 62 
     | 
    
         
            +
                    attr_accessor :operations
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    # @return [Integer]
         
     | 
| 
      
 65 
     | 
    
         
            +
                    attr_accessor :weight
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    # @return [Class]
         
     | 
| 
      
 68 
     | 
    
         
            +
                    def handler_class
         
     | 
| 
      
 69 
     | 
    
         
            +
                      handler.is_a?(Class) ? handler : handler.class
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                    # @param [Symbol] step
         
     | 
| 
      
 73 
     | 
    
         
            +
                    def step=(step)
         
     | 
| 
      
 74 
     | 
    
         
            +
                      raise InvalidStepError, step unless STEPS.key?(step)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      @step = step
         
     | 
| 
      
 76 
     | 
    
         
            +
                      compute_weight
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                    # @param [Integer<0..99>] priority
         
     | 
| 
      
 80 
     | 
    
         
            +
                    def priority=(priority)
         
     | 
| 
      
 81 
     | 
    
         
            +
                      raise InvalidPriorityError, priority unless (0..99).include?(priority)
         
     | 
| 
      
 82 
     | 
    
         
            +
                      @priority = priority
         
     | 
| 
      
 83 
     | 
    
         
            +
                      compute_weight
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                    # @api private
         
     | 
| 
      
 87 
     | 
    
         
            +
                    def dup
         
     | 
| 
      
 88 
     | 
    
         
            +
                      duplicate = super
         
     | 
| 
      
 89 
     | 
    
         
            +
                      duplicate.operations = operations.dup
         
     | 
| 
      
 90 
     | 
    
         
            +
                      duplicate
         
     | 
| 
      
 91 
     | 
    
         
            +
                    end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                    # @api private
         
     | 
| 
       25 
94 
     | 
    
         
             
                    def <=>(other)
         
     | 
| 
       26 
     | 
    
         
            -
                      if  
     | 
| 
       27 
     | 
    
         
            -
                        inserted <=>  
     | 
| 
      
 95 
     | 
    
         
            +
                      if weight == other.weight
         
     | 
| 
      
 96 
     | 
    
         
            +
                        other.inserted <=> inserted
         
     | 
| 
       28 
97 
     | 
    
         
             
                      else
         
     | 
| 
       29 
     | 
    
         
            -
                         
     | 
| 
      
 98 
     | 
    
         
            +
                        weight <=> other.weight
         
     | 
| 
       30 
99 
     | 
    
         
             
                      end
         
     | 
| 
       31 
100 
     | 
    
         
             
                    end
         
     | 
| 
       32 
     | 
    
         
            -
                  end
         
     | 
| 
       33 
101 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                     
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                     
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
      
 102 
     | 
    
         
            +
                    private
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                    def compute_weight
         
     | 
| 
      
 105 
     | 
    
         
            +
                      @weight = STEPS[@step] + @priority
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
       41 
109 
     | 
    
         | 
| 
       42 
110 
     | 
    
         
             
                  include Enumerable
         
     | 
| 
       43 
111 
     | 
    
         | 
| 
       44 
112 
     | 
    
         
             
                  # @api private
         
     | 
| 
       45 
113 
     | 
    
         
             
                  def initialize(options = {})
         
     | 
| 
       46 
114 
     | 
    
         
             
                    @index = options[:index] || 0
         
     | 
| 
       47 
     | 
    
         
            -
                    @ 
     | 
| 
       48 
     | 
    
         
            -
                    @handlers = options[:handlers] || []
         
     | 
| 
      
 115 
     | 
    
         
            +
                    @entries = {}
         
     | 
| 
       49 
116 
     | 
    
         
             
                    @mutex = Mutex.new
         
     | 
| 
      
 117 
     | 
    
         
            +
                    entries = options[:entries] || []
         
     | 
| 
      
 118 
     | 
    
         
            +
                    add_entries(entries) unless entries.empty?
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  # @return [Array<Entry>]
         
     | 
| 
      
 122 
     | 
    
         
            +
                  def entries
         
     | 
| 
      
 123 
     | 
    
         
            +
                    @mutex.synchronize do
         
     | 
| 
      
 124 
     | 
    
         
            +
                      @entries.values
         
     | 
| 
      
 125 
     | 
    
         
            +
                    end
         
     | 
| 
       50 
126 
     | 
    
         
             
                  end
         
     | 
| 
       51 
127 
     | 
    
         | 
| 
       52 
128 
     | 
    
         
             
                  # Registers a handler.  Handlers are used to build a handler stack.
         
     | 
| 
         @@ -126,36 +202,23 @@ module Seahorse 
     | 
|
| 
       126 
202 
     | 
    
         
             
                  #
         
     | 
| 
       127 
203 
     | 
    
         
             
                  # @return [Class<Handler>] Returns the handler class that was added.
         
     | 
| 
       128 
204 
     | 
    
         
             
                  #
         
     | 
| 
       129 
     | 
    
         
            -
                  def add( 
     | 
| 
      
 205 
     | 
    
         
            +
                  def add(handler, options = {})
         
     | 
| 
       130 
206 
     | 
    
         
             
                    @mutex.synchronize do
         
     | 
| 
       131 
     | 
    
         
            -
                       
     | 
| 
       132 
     | 
    
         
            -
                        @send = handler_class
         
     | 
| 
       133 
     | 
    
         
            -
                      else
         
     | 
| 
       134 
     | 
    
         
            -
                        @handlers << Entry.new(
         
     | 
| 
       135 
     | 
    
         
            -
                          handler_class,
         
     | 
| 
       136 
     | 
    
         
            -
                          options,
         
     | 
| 
       137 
     | 
    
         
            -
                          operations(options),
         
     | 
| 
       138 
     | 
    
         
            -
                          priority(options),
         
     | 
| 
       139 
     | 
    
         
            -
                          next_index,
         
     | 
| 
       140 
     | 
    
         
            -
                        )
         
     | 
| 
       141 
     | 
    
         
            -
                      end
         
     | 
| 
      
 207 
     | 
    
         
            +
                      add_entry(Entry.new(handler, next_index, options))
         
     | 
| 
       142 
208 
     | 
    
         
             
                    end
         
     | 
| 
       143 
     | 
    
         
            -
                     
     | 
| 
      
 209 
     | 
    
         
            +
                    handler
         
     | 
| 
       144 
210 
     | 
    
         
             
                  end
         
     | 
| 
       145 
211 
     | 
    
         | 
| 
       146 
212 
     | 
    
         
             
                  # Copies handlers from the `source_list` onto the current handler list.
         
     | 
| 
       147 
213 
     | 
    
         
             
                  # @param [HandlerList] source_list
         
     | 
| 
       148 
214 
     | 
    
         
             
                  # @return [void]
         
     | 
| 
       149 
215 
     | 
    
         
             
                  def copy_from(source_list)
         
     | 
| 
       150 
     | 
    
         
            -
                     
     | 
| 
       151 
     | 
    
         
            -
                       
     | 
| 
       152 
     | 
    
         
            -
                       
     | 
| 
       153 
     | 
    
         
            -
                       
     | 
| 
       154 
     | 
    
         
            -
                        new_handler = handler.dup
         
     | 
| 
       155 
     | 
    
         
            -
                        new_handler.inserted = next_index
         
     | 
| 
       156 
     | 
    
         
            -
                        @handlers << new_handler
         
     | 
| 
       157 
     | 
    
         
            -
                      end
         
     | 
| 
      
 216 
     | 
    
         
            +
                    entries = source_list.entries.collect do |entry|
         
     | 
| 
      
 217 
     | 
    
         
            +
                      new_entry = entry.dup
         
     | 
| 
      
 218 
     | 
    
         
            +
                      new_entry.inserted = next_index
         
     | 
| 
      
 219 
     | 
    
         
            +
                      new_entry
         
     | 
| 
       158 
220 
     | 
    
         
             
                    end
         
     | 
| 
      
 221 
     | 
    
         
            +
                    add_entries(entries)
         
     | 
| 
       159 
222 
     | 
    
         
             
                  end
         
     | 
| 
       160 
223 
     | 
    
         | 
| 
       161 
224 
     | 
    
         
             
                  # Returns a handler list for the given operation.  The returned
         
     | 
| 
         @@ -164,22 +227,13 @@ module Seahorse 
     | 
|
| 
       164 
227 
     | 
    
         
             
                  # @param [String] operation The name of an operation.
         
     | 
| 
       165 
228 
     | 
    
         
             
                  # @return [HandlerList]
         
     | 
| 
       166 
229 
     | 
    
         
             
                  def for(operation)
         
     | 
| 
       167 
     | 
    
         
            -
                    @ 
     | 
| 
       168 
     | 
    
         
            -
                      HandlerList.new(
         
     | 
| 
       169 
     | 
    
         
            -
                        index: @index,
         
     | 
| 
       170 
     | 
    
         
            -
                        send: @send,
         
     | 
| 
       171 
     | 
    
         
            -
                        handlers: filter(operation.to_s),
         
     | 
| 
       172 
     | 
    
         
            -
                      )
         
     | 
| 
       173 
     | 
    
         
            -
                    end
         
     | 
| 
      
 230 
     | 
    
         
            +
                    HandlerList.new(index: @index, entries: filter(operation.to_s))
         
     | 
| 
       174 
231 
     | 
    
         
             
                  end
         
     | 
| 
       175 
232 
     | 
    
         | 
| 
       176 
233 
     | 
    
         
             
                  # Yields the handlers in stack order, which is reverse priority.
         
     | 
| 
       177 
234 
     | 
    
         
             
                  def each(&block)
         
     | 
| 
       178 
     | 
    
         
            -
                     
     | 
| 
       179 
     | 
    
         
            -
                      yield( 
     | 
| 
       180 
     | 
    
         
            -
                      @handlers.sort.each do |handler|
         
     | 
| 
       181 
     | 
    
         
            -
                        yield(handler.klass) if handler.operations.nil?
         
     | 
| 
       182 
     | 
    
         
            -
                      end
         
     | 
| 
      
 235 
     | 
    
         
            +
                    entries.sort.each do |entry|
         
     | 
| 
      
 236 
     | 
    
         
            +
                      yield(entry.handler) if entry.operations.empty?
         
     | 
| 
       183 
237 
     | 
    
         
             
                    end
         
     | 
| 
       184 
238 
     | 
    
         
             
                  end
         
     | 
| 
       185 
239 
     | 
    
         | 
| 
         @@ -200,51 +254,34 @@ module Seahorse 
     | 
|
| 
       200 
254 
     | 
    
         | 
| 
       201 
255 
     | 
    
         
             
                  private
         
     | 
| 
       202 
256 
     | 
    
         | 
| 
       203 
     | 
    
         
            -
                  def  
     | 
| 
       204 
     | 
    
         
            -
                     
     | 
| 
      
 257 
     | 
    
         
            +
                  def add_entries(entries)
         
     | 
| 
      
 258 
     | 
    
         
            +
                    @mutex.synchronize do
         
     | 
| 
      
 259 
     | 
    
         
            +
                      entries.each { |entry| add_entry(entry) }
         
     | 
| 
      
 260 
     | 
    
         
            +
                    end
         
     | 
| 
      
 261 
     | 
    
         
            +
                  end
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
                  def add_entry(entry)
         
     | 
| 
      
 264 
     | 
    
         
            +
                    key = entry.step == :send ? :send : entry.object_id
         
     | 
| 
      
 265 
     | 
    
         
            +
                    @entries[key] = entry
         
     | 
| 
       205 
266 
     | 
    
         
             
                  end
         
     | 
| 
       206 
267 
     | 
    
         | 
| 
       207 
268 
     | 
    
         
             
                  def filter(operation)
         
     | 
| 
       208 
     | 
    
         
            -
                    filtered  
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
                      if handler.operations.nil?
         
     | 
| 
      
 269 
     | 
    
         
            +
                    entries.inject([]) do |filtered, handler|
         
     | 
| 
      
 270 
     | 
    
         
            +
                      if handler.operations.empty?
         
     | 
| 
       211 
271 
     | 
    
         
             
                        filtered << handler
         
     | 
| 
       212 
272 
     | 
    
         
             
                      elsif handler.operations.include?(operation)
         
     | 
| 
       213 
273 
     | 
    
         
             
                        handler = handler.dup
         
     | 
| 
       214 
     | 
    
         
            -
                        handler.operations 
     | 
| 
      
 274 
     | 
    
         
            +
                        handler.operations.clear
         
     | 
| 
       215 
275 
     | 
    
         
             
                        filtered << handler
         
     | 
| 
       216 
276 
     | 
    
         
             
                      end
         
     | 
| 
      
 277 
     | 
    
         
            +
                      filtered
         
     | 
| 
       217 
278 
     | 
    
         
             
                    end
         
     | 
| 
       218 
     | 
    
         
            -
                    filtered
         
     | 
| 
       219 
279 
     | 
    
         
             
                  end
         
     | 
| 
       220 
280 
     | 
    
         | 
| 
       221 
281 
     | 
    
         
             
                  def next_index
         
     | 
| 
       222 
282 
     | 
    
         
             
                    @index += 1
         
     | 
| 
       223 
283 
     | 
    
         
             
                  end
         
     | 
| 
       224 
284 
     | 
    
         | 
| 
       225 
     | 
    
         
            -
                  # @return [Integer]
         
     | 
| 
       226 
     | 
    
         
            -
                  def priority(options)
         
     | 
| 
       227 
     | 
    
         
            -
                    step_value(options) + priority_value(options)
         
     | 
| 
       228 
     | 
    
         
            -
                  end
         
     | 
| 
       229 
     | 
    
         
            -
             
     | 
| 
       230 
     | 
    
         
            -
                  # @return [Integer]
         
     | 
| 
       231 
     | 
    
         
            -
                  def step_value(options)
         
     | 
| 
       232 
     | 
    
         
            -
                    step = options[:step] || :build
         
     | 
| 
       233 
     | 
    
         
            -
                    raise InvalidStepError, step unless STEPS.key?(step)
         
     | 
| 
       234 
     | 
    
         
            -
                    STEPS[step]
         
     | 
| 
       235 
     | 
    
         
            -
                  end
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
                  # @return [Integer]
         
     | 
| 
       238 
     | 
    
         
            -
                  def priority_value(options)
         
     | 
| 
       239 
     | 
    
         
            -
                    priority = options[:priority] || 50
         
     | 
| 
       240 
     | 
    
         
            -
                    raise InvalidPriorityError, priority unless (0..99).include?(priority)
         
     | 
| 
       241 
     | 
    
         
            -
                    priority
         
     | 
| 
       242 
     | 
    
         
            -
                  end
         
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
                  def handlers
         
     | 
| 
       245 
     | 
    
         
            -
                    [@send, @handlers]
         
     | 
| 
       246 
     | 
    
         
            -
                  end
         
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
285 
     | 
    
         
             
                end
         
     | 
| 
       249 
286 
     | 
    
         
             
              end
         
     | 
| 
       250 
287 
     | 
    
         
             
            end
         
     |