Class: Ramaze::Request

Inherits:
Innate::Request
  • Object
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 convinient methods for our own use.

Constant Summary collapse

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

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args) ⇒ Object

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

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



36
37
38
39
40
# File 'lib/ramaze/request.rb', line 36

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

#accept_language(string = env['HTTP_ACCEPT_LANGUAGE']) ⇒ Array 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. 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



57
58
59
60
61
# File 'lib/ramaze/request.rb', line 57

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

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

#accept_language_with_weight(string = ) ⇒ Array

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: )

    the value of HTTP_ACCEPT_LANGUAGE

Returns:

  • (Array)

    array of [lang, weight] arrays

See Also:

Author:

  • manveru



79
80
81
82
83
84
# File 'lib/ramaze/request.rb', line 79

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

#http_variablesObject Also known as: http_vars

Interesting HTTP variables from env



90
91
92
# File 'lib/ramaze/request.rb', line 90

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

#pretty_print(pp) ⇒ Object

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



104
105
106
107
108
109
110
111
112
113
# File 'lib/ramaze/request.rb', line 104

def pretty_print(pp)
  pp.object_group(self){
    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

#to_instance_variables(*args) ⇒ Object 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'}
to_ivs(:name, :q)
@q    # => 'google'
@name # => 'manveru'
@lang # => nil


27
28
29
30
31
32
33
# File 'lib/ramaze/request.rb', line 27

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

#to_sObject Also known as: inspect



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

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