Class: Fron::Request

Inherits:
Object show all
Extended by:
Forwardable, Eventable
Defined in:
opal/fron/request/request.rb

Overview

Low level wrapper for the XMLHTTPRequest class

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Eventable

off, on, trigger

Constructor Details

#initialize(url, headers = {}) ⇒ Request

Initialies the request

Parameters:

  • url (String)

    The url

  • headers (Hash) (defaults to: {})

    The headers



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

def initialize(url, headers = {})
  @url = url
  @headers = headers
  @request = `new XMLHttpRequest()`
  `#{@request}.addEventListener('readystatechange' , function(){#{handle_state_change}})`
  self
end

Instance Attribute Details

#headersHash (readonly)

Sets / gets the headers for the request

Parameters:

  • value (Hash)

    The headers

Returns:

  • (Hash)

    The headers



19
20
21
# File 'opal/fron/request/request.rb', line 19

def headers
  @headers
end

#urlString (readonly)

Sets / gets the URL

Parameters:

Returns:



13
14
15
# File 'opal/fron/request/request.rb', line 13

def url
  @url
end

Instance Method Details

#get(data) {|response| ... } ⇒ Object

Runs a GET request

Parameters:

  • data (Hash)

    The data

Yield Parameters:



65
66
67
# File 'opal/fron/request/request.rb', line 65

def get(data, &callback)
  request 'GET', data, &callback
end

#handle_state_changeObject (private)

Handles the hash change



117
118
119
120
121
122
123
124
125
# File 'opal/fron/request/request.rb', line 117

def handle_state_change
  return unless ready_state == 4
  begin
    response = Response.new `#{@request}.status`, `#{@request}.response`, `#{@request}.getAllResponseHeaders()`
    @callback.call response if @callback
  ensure
    trigger :loaded
  end
end

#post(data) {|response| ... } ⇒ Object

Runs a POST request

Parameters:

  • data (Hash)

    The data

Yield Parameters:



74
75
76
# File 'opal/fron/request/request.rb', line 74

def post(data, &callback)
  request 'POST', data, &callback
end

#put(data) {|response| ... } ⇒ Object

Runs a PUT request

Parameters:

  • data (Hash)

    The data

Yield Parameters:



83
84
85
# File 'opal/fron/request/request.rb', line 83

def put(data, &callback)
  request 'PUT', data, &callback
end

#ready_stateNumeric (private)

Returns the ready state of the request

Returns:



112
113
114
# File 'opal/fron/request/request.rb', line 112

def ready_state
  `#{@request}.readyState`
end

#request(method = 'GET', data = {}) {|response| ... } ⇒ Object

Runs a request

Parameters:

  • method (String) (defaults to: 'GET')

    The method

  • data (Hash) (defaults to: {})

    The data

Yield Parameters:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'opal/fron/request/request.rb', line 41

def request(method = 'GET', data = {}, &callback)
  raise 'The request is already running!' if ready_state != 0 && ready_state != 4
  method = method.upcase
  @callback = callback

  args = case method
         when 'UPLOAD'
           ['POST', @url, data.to_form_data]
         when 'GET'
           [method, "#{@url}?#{data.to_query_string}"]
         else
           [method, @url, data.to_json]
         end

  send(*args)

  trigger :loading
end

#send(method, url, data = nil) ⇒ Object (private)

Sends the given data to the given URL with the given method

Parameters:

  • method (String)

    The method

  • url (String)

    The URL

  • data (*) (defaults to: nil)

    The data



95
96
97
98
99
100
# File 'opal/fron/request/request.rb', line 95

def send(method, url, data = nil)
  `#{@request}.open(#{method}, #{url})`
  `#{@request}.withCredentials = true`
  set_headers
  `#{@request}.send(#{data})`
end

#set_headersObject (private)

Sets the headers



103
104
105
106
107
# File 'opal/fron/request/request.rb', line 103

def set_headers
  @headers.each_pair do |header, value|
    `#{@request}.setRequestHeader(#{header},#{value})`
  end
end