Class: Agoo::Request

Inherits:
Object
  • Object
show all
Defined in:
ext/agoo/request.c,
ext/agoo/request.c,
ext/agoo/request.c

Overview

A representation of an HTTP request that is used with a handler that responds to the on_request method. The request is a more efficient encapsulation of the rack environment.

Instance Method Summary collapse

Instance Method Details

#bodyObject

call-seq: body()

Returns the body of the request as a String. If there is no body then nil is returned.



515
516
517
518
519
520
521
522
523
524
525
526
# File 'ext/agoo/request.c', line 515

static VALUE
body(VALUE self) {
    Req   r = DATA_PTR(self);

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    if (NULL == r->body.start) {
  return Qnil;
    }
    return rb_str_new(r->body.start, r->body.len);
}

#callObject

call-seq: call()

Returns an IO like object and hijacks the connection.



630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
# File 'ext/agoo/request.c', line 630

static VALUE
call(VALUE self) {
    Req     r = DATA_PTR(self);
    VALUE   args[1];
    volatile VALUE  io;

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    r->res->con->hijacked = true;

    // TBD try basic IO first. If that fails define a socket class
    // is a mode needed?

    args[0] = INT2NUM(r->res->con->sock);

    io = rb_class_new_instance(1, args, rb_cIO);
    rb_hash_aset(r->env, rack_hijack_io_val, io);
    
    return io;
}

#envObject

call-seq: to_h()

Returns a Hash representation of the request which is the same as a rack environment Hash.



601
602
603
604
605
606
607
608
609
# File 'ext/agoo/request.c', line 601

static VALUE
to_h(VALUE self) {
    Req   r = DATA_PTR(self);

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    return request_env(r, self);
}

#environmentObject

call-seq: to_h()

Returns a Hash representation of the request which is the same as a rack environment Hash.



601
602
603
604
605
606
607
608
609
# File 'ext/agoo/request.c', line 601

static VALUE
to_h(VALUE self) {
    Req   r = DATA_PTR(self);

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    return request_env(r, self);
}

#headersObject

call-seq: headers()

Returns the header of the request as a Hash.



494
495
496
497
498
499
500
501
502
503
504
505
506
# File 'ext/agoo/request.c', line 494

static VALUE
headers(VALUE self) {
    Req     r = DATA_PTR(self);
    volatile VALUE  h;

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    h = rb_hash_new();
    fill_headers(r, h);

    return h;
}

#path_infoObject

call-seq: path_info()

Returns the script name which is assumed to be either ‘/’ or the empty according to the rack restrictions are followed on what the script name and path info should be.



157
158
159
160
# File 'ext/agoo/request.c', line 157

static VALUE
path_info(VALUE self) {
    return req_path_info((Req)DATA_PTR(self));
}

#query_stringObject

call-seq: query_string()

Returns the query string of the request.



179
180
181
182
# File 'ext/agoo/request.c', line 179

static VALUE
query_string(VALUE self) {
    return req_query_string((Req)DATA_PTR(self));
}

#rack_errorsObject

call-seq: rack_errors()

Returns an error stream for the request. This stream is used to write error log entries.



335
336
337
338
# File 'ext/agoo/request.c', line 335

static VALUE
rack_errors(VALUE self) {
    return req_rack_errors((Req)DATA_PTR(self));
}

#rack_inputObject

call-seq: rack_input()

Returns an input stream for the request body. If no body is present then nil is returned.



318
319
320
321
# File 'ext/agoo/request.c', line 318

static VALUE
rack_input(VALUE self) {
    return req_rack_input((Req)DATA_PTR(self));
}

#rack_loggerObject

call-seq: rack_logger()

Returns a RackLogger that can be used to log messages with the server logger. The methods supported are debug(), info(), warn(), error(), and fatal(). The signature is the same as the standard Ruby Logger of info(message, &block).



542
543
544
545
# File 'ext/agoo/request.c', line 542

static VALUE
rack_logger(VALUE self) {
    return req_rack_logger((Req)DATA_PTR(self));
}

#rack_multiprocessObject

call-seq: rack_multiprocess()

Returns false since the server is a single process.



368
369
370
371
# File 'ext/agoo/request.c', line 368

static VALUE
rack_multiprocess(VALUE self) {
    return Qfalse;
}

#rack_multithreadObject

call-seq: rack_multithread()

Returns true is the server is using multiple handler worker threads.



357
358
359
360
# File 'ext/agoo/request.c', line 357

static VALUE
rack_multithread(VALUE self) {
    return req_rack_multithread((Req)DATA_PTR(self));
}

#rack_run_onceObject

call-seq: rack_run_once()

Returns false.



379
380
381
382
# File 'ext/agoo/request.c', line 379

static VALUE
rack_run_once(VALUE self) {
    return Qfalse;
}

#rack_upgrade?Boolean

call-seq: rack_upgrade?()

Returns the URL scheme or either http or https as a string.

Returns:

  • (Boolean)


267
268
269
270
# File 'ext/agoo/request.c', line 267

static VALUE
rack_upgrade(VALUE self) {
    return req_rack_upgrade((Req)DATA_PTR(self));
}

#rack_url_schemeObject

call-seq: rack_url_scheme()

Returns the URL scheme or either http or https as a string.



295
296
297
298
# File 'ext/agoo/request.c', line 295

static VALUE
rack_url_scheme(VALUE self) {
    return req_rack_url_scheme((Req)DATA_PTR(self));
}

#rack_versionObject

call-seq: rack_version()

Returns the rack version the request is compliant with.



278
279
280
281
# File 'ext/agoo/request.c', line 278

static VALUE
rack_version(VALUE self) {
    return rack_version_val_val;
}

#request_methodObject

call-seq: request_method()

Returns the HTTP method of the request.



104
105
106
107
# File 'ext/agoo/request.c', line 104

static VALUE
method(VALUE self) {
    return req_method((Req)DATA_PTR(self));
}

#script_nameObject

call-seq: script_name()

Returns the path info which is assumed to be the full path unless the root and then the rack restrictions are followed on what the script name and path info should be.



129
130
131
132
# File 'ext/agoo/request.c', line 129

static VALUE
script_name(VALUE self) {
    return req_script_name((Req)DATA_PTR(self));
}

#server_nameObject

call-seq: server_name()

Returns the server or host name.



213
214
215
216
# File 'ext/agoo/request.c', line 213

static VALUE
server_name(VALUE self) {
    return req_server_name((Req)DATA_PTR(self));
}

#server_portObject

call-seq: server_port()

Returns the server or host port as a string.



247
248
249
250
# File 'ext/agoo/request.c', line 247

static VALUE
server_port(VALUE self) {
    return req_server_port((Req)DATA_PTR(self));
}

#to_hObject

call-seq: to_h()

Returns a Hash representation of the request which is the same as a rack environment Hash.



601
602
603
604
605
606
607
608
609
# File 'ext/agoo/request.c', line 601

static VALUE
to_h(VALUE self) {
    Req   r = DATA_PTR(self);

    if (NULL == r) {
  rb_raise(rb_eArgError, "Request is no longer valid.");
    }
    return request_env(r, self);
}

#to_sObject

call-seq: to_s()

Returns a string representation of the request.



617
618
619
620
621
622
# File 'ext/agoo/request.c', line 617

static VALUE
to_s(VALUE self) {
    volatile VALUE  h = to_h(self);

    return rb_funcall(h, rb_intern("to_s"), 0);
}