Class: Gliffy::SignedURL
- Inherits:
-
Object
- Object
- Gliffy::SignedURL
- Defined in:
- lib/gliffy/url.rb
Overview
Handles signing and assembling the URL
Constant Summary collapse
- READ_ONLY_PARAMS =
{ 'oauth_consumer_key' => true, 'oauth_token' => true, 'oauth_signature_method' => true, 'oauth_version' => true, 'oauth_nonce' => true, 'oauth_timestamp' => true, }
Instance Attribute Summary collapse
-
#logger ⇒ Object
Modify the logger.
Class Method Summary collapse
-
.encode(string) ⇒ Object
Ruby’s SignedURL::encode doesn’t encode spaces correctly.
Instance Method Summary collapse
-
#[]=(param, value) ⇒ Object
Sets a request parameter.
-
#full_url(timestamp = nil, nonce = nil) ⇒ Object
Gets the full URL, signed and ready to be requested.
-
#initialize(credentials, url, method, logger = nil) ⇒ SignedURL
constructor
Create a new SignedURL.
-
#params=(params_hash) ⇒ Object
Sets all request parameters to those in the hash.
Constructor Details
#initialize(credentials, url, method, logger = nil) ⇒ SignedURL
Create a new SignedURL
credentails
-
The credentials available when signing the request (required).
url
-
The URL (without parameters) to request (required)
method
-
The HTTP Request method that will be made (required)
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/gliffy/url.rb', line 34 def initialize(credentials,url,method,logger=nil) raise ArgumentError.new("credentials is required") if credentials.nil? raise ArgumentError.new("url is required") if url.nil? raise ArgumentError.new("method is required") if method.nil? @credentials = credentials @logger = logger || Logger.new(STDOUT) @logger.level = Logger::INFO @params = { 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_version' => '1.0', } @params['oauth_consumer_key'] = credentials.consumer_key @params['oauth_token'] = credentials.access_token.token if credentials.access_token @consumer_secret = credentials.consumer_secret if credentials.access_token @access_secret = credentials.access_token.secret else @access_secret = nil end @method = method.upcase @url = url end |
Instance Attribute Details
#logger ⇒ Object
Modify the logger
27 28 29 |
# File 'lib/gliffy/url.rb', line 27 def logger @logger end |
Class Method Details
.encode(string) ⇒ Object
Ruby’s SignedURL::encode doesn’t encode spaces correctly
20 21 22 23 24 |
# File 'lib/gliffy/url.rb', line 20 def self.encode(string) string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do '%' + $1.unpack('H2' * $1.size).join('%').upcase end.gsub(' ', '%20') end |
Instance Method Details
#[]=(param, value) ⇒ Object
Sets a request parameter
- param
-
the name of the parameter, as a string or symbol
- value
-
the value of the parameter, unencoded
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/gliffy/url.rb', line 65 def []=(param,value) raise ArgumentError.new("param may not be nil") if param.nil? param = param.to_s raise ArgumentError.new("You may not override #{param}") if READ_ONLY_PARAMS[param] if value.nil? @params.delete(param) else @params[param] = value.to_s end end |
#full_url(timestamp = nil, nonce = nil) ⇒ Object
Gets the full URL, signed and ready to be requested
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/gliffy/url.rb', line 85 def full_url(=nil,nonce=nil) @logger.debug("Getting full_url of #{@url}") @logger.debug("OAuth Part 1 : #{@method}") escaped_url = SignedURL::encode(@url) to_sign = @method + "&" + escaped_url + "&" @logger.debug("OAuth Part 2 (raw) : #{@url}") @logger.debug("OAuth Part 2 (esc) : #{escaped_url}") =Time.now.to_i if .nil? nonce=@credentials.nonce if nonce.nil? param_part,url_params = handle_params(,nonce) escaped_params = SignedURL::encode(param_part) @logger.debug("OAuth Part 3 (raw) : #{param_part}") @logger.debug("OAuth Part 3 (esc) : #{escaped_params}") to_sign += escaped_params signature = get_signature(to_sign) url_params['oauth_signature'] = SignedURL::encode(signature) assembled_url = assemble_url(url_params) @logger.debug("Full URL is " + assembled_url) return assembled_url end |
#params=(params_hash) ⇒ Object
Sets all request parameters to those in the hash.
77 78 79 80 81 82 |
# File 'lib/gliffy/url.rb', line 77 def params=(params_hash) raise ArgumentError.new('you may not set params to nil') if params_hash.nil? params_hash.each do |k,v| self[k]=v end end |