Module: Jeff

Defined in:
lib/jeff.rb,
lib/jeff/version.rb

Overview

Jeff mixes in client behaviour for Amazon Web Services (AWS) that require Signature version 2 authentication.

It’s Jeff, as in Jeff Bezos.

Defined Under Namespace

Modules: ClassMethods, Utils Classes: Content, Query, Request, Signature

Constant Summary collapse

USER_AGENT =

Amazon recommends to include a User-Agent header with every request to identify the application, its version number, programming language, and host.

If not happy, override.

"Jeff/#{VERSION} (Language=Ruby; #{`hostname`.chomp})"
VERSION =
'0.7.4'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#aws_access_key_idObject

Accessors for required AWS attributes.



122
123
124
# File 'lib/jeff.rb', line 122

def aws_access_key_id
  @aws_access_key_id
end

#aws_endpointObject

Accessors for required AWS attributes.



122
123
124
# File 'lib/jeff.rb', line 122

def aws_endpoint
  @aws_endpoint
end

#aws_secret_access_keyObject

Accessors for required AWS attributes.



122
123
124
# File 'lib/jeff.rb', line 122

def aws_secret_access_key
  @aws_secret_access_key
end

Class Method Details

.included(base) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/jeff.rb', line 97

def self.included(base)
  base.extend(ClassMethods)

  # Common parameters required by all AWS requests.
  #
  # Add other common parameters using `Jeff.params` if required in your
  # implementation.
  base.params(
    'AWSAccessKeyId'   => -> { aws_access_key_id },
    'SignatureVersion' => '2',
    'SignatureMethod'  => 'HmacSHA256',
    'Timestamp'        => -> { Time.now.utc.iso8601 }
  )
end

Instance Method Details

#connectionObject

A reusable HTTP connection.



113
114
115
116
117
118
119
# File 'lib/jeff.rb', line 113

def connection
  @connection ||= Excon.new(aws_endpoint,
    headers: { 'User-Agent' => USER_AGENT },
    expects: 200,
    omit_default_port: true
  )
end