Class: Ramaze::Request

Inherits:
Innate::Request show all
Defined in:
lib/ramaze/request.rb

Overview

The purpose of this class is to act as a simple wrapper for Rack::Request and provide some convenient methods for our own use.

Constant Summary

INTERESTING_HTTP_VARIABLES =
(/USER|HOST|REQUEST|REMOTE|FORWARD|REFER|PATH|QUERY|VERSION|KEEP|CACHE/)
REQUEST_STRING_FORMAT =
"#<%s params=%p cookies=%p env=%p>"

Constants inherited from Innate::Request

Innate::Request::LOCAL

Instance Method Summary (collapse)

Methods inherited from Innate::Request

#[], current, #domain, #local_net?, #request_uri, #subset

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(meth, *args)

you can access the original @request via this method_missing, first it tries to match your method with any of the HTTP parameters then, in case that fails, it will relay to @request



12
13
14
15
16
# File 'lib/ramaze/request.rb', line 12

def method_missing meth, *args
  key = meth.to_s.upcase
  return env[key] if env.has_key?(key)
  super
end

Instance Method Details

- (Object) accept_charset(default = 'UTF-8')



39
40
41
42
43
# File 'lib/ramaze/request.rb', line 39

def accept_charset(default = 'UTF-8')
  return default unless charsets = env['HTTP_ACCEPT_CHARSET']
  charset = charsets.split(',', 2).first
  charset == '*' ? default : charset
end

- (Array) accept_language(string = env['HTTP_ACCEPT_LANGUAGE']) Also known as: locales

Try to find out which languages the client would like to have and sort them by weight, (most wanted first).

Returns and array of locales from env['HTTP_ACCEPT_LANGUAGE]. e.g. ["fi", "en", "ja", "fr", "de", "es", "it", "nl", "sv"]

Usage:

request.accept_language # => ['en-us', 'en', 'de-at', 'de']

Parameters:

  • string (String #to_s) (defaults to: env['HTTP_ACCEPT_LANGUAGE'])

    the value of HTTP_ACCEPT_LANGUAGE

Returns:

  • (Array)

    list of locales

See Also:

Author:

  • manveru



61
62
63
64
65
# File 'lib/ramaze/request.rb', line 61

def accept_language(string = env['HTTP_ACCEPT_LANGUAGE'])
  return [] unless string

  accept_language_with_weight(string).map{|lang, weight| lang }
end

- (Array) accept_language_with_weight(string = env['HTTP_ACCEPT_LANGUAGE'])

Transform the HTTP_ACCEPT_LANGUAGE header into an Array with:

[[lang, weight], [lang, weight], ...]

This algorithm was taken and improved from the locales library.

Usage:

request.accept_language_with_weight
# => [["en-us", 1.0], ["en", 0.8], ["de-at", 0.5], ["de", 0.3]]

Parameters:

  • string (String #to_s) (defaults to: env['HTTP_ACCEPT_LANGUAGE'])

    the value of HTTP_ACCEPT_LANGUAGE

Returns:

  • (Array)

    array of [lang, weight] arrays

See Also:

Author:

  • manveru



85
86
87
88
89
90
# File 'lib/ramaze/request.rb', line 85

def accept_language_with_weight(string = env['HTTP_ACCEPT_LANGUAGE'])
  string.to_s.gsub(/\s+/, '').split(',').
        map{|chunk|        chunk.split(';q=', 2) }.
        map{|lang, weight| [lang, weight ? weight.to_f : 1.0] }.
    sort_by{|lang, weight| -weight }
end

- (Object) http_variables Also known as: http_vars

Interesting HTTP variables from env



96
97
98
# File 'lib/ramaze/request.rb', line 96

def http_variables
  env.reject{|key, value| key.to_s !~ INTERESTING_HTTP_VARIABLES }
end

- (Object) pretty_print(pp)

Pretty prints current action with parameters, cookies and environment variables.



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/ramaze/request.rb', line 110

def pretty_print(pp)
  pp.object_group(self) do
    group = {
      'params'  => params,
      'cookies' => cookies,
      'env'     => http_variables
    }

    group.each do |name, hash|
      pp.breakable
      pp.text " @#{name}="
      pp.nest(name.size + 3){ pp.pp_hash(hash) }
    end
  end
end

- (Object) to_instance_variables(*args) Also known as: to_ivs

Sets any arguments passed as @instance_variables for the current action.

Usage:

request.params # => {'name' => 'manveru', 'q' => 'google', 'lang' => 'de'}
request.to_ivs(:name, :q)

@q    # => 'google'
@name # => 'manveru'
@lang # => nil


30
31
32
33
34
35
36
# File 'lib/ramaze/request.rb', line 30

def to_instance_variables(*args)
  instance = Current.action.instance
  args.each do |arg|
    next unless value = self[arg]
    instance.instance_variable_set("@#{arg}", value)
  end
end

- (Object) to_s Also known as: inspect



103
104
105
# File 'lib/ramaze/request.rb', line 103

def to_s
  REQUEST_STRING_FORMAT % [self.class, params, cookies, http_variables]
end