fetch-rails 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/assets/javascripts/fetch.js +119 -35
- data/lib/fetch/rails.rb +0 -1
- data/lib/fetch/rails/railtie.rb +0 -1
- data/lib/fetch/rails/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e298d1be2c523d9c32dcaf0412de5db06353f76
|
4
|
+
data.tar.gz: 75cb0e4ff5f46742988a8fd0c639a31961f69a77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74883d98c2ae22ab903ef8d7f83ffd133201e6af5ced7b6b7f5041eee7d1b527f47d6f858f1844540163d0936fd463bad58537d34dbe71d58b97ebba698e5d08
|
7
|
+
data.tar.gz: ab8215a2f4145f8ee92799dd429ad5189b70494f3a625f7e62126a579a606182bc16251b256a1c23e99b7069f2c2aed417114f75b724d5b84dbe99f55db37ff4
|
data/README.md
CHANGED
@@ -1,10 +1,25 @@
|
|
1
|
-
(function() {
|
1
|
+
(function(self) {
|
2
2
|
'use strict';
|
3
3
|
|
4
4
|
if (self.fetch) {
|
5
5
|
return
|
6
6
|
}
|
7
7
|
|
8
|
+
var support = {
|
9
|
+
searchParams: 'URLSearchParams' in self,
|
10
|
+
iterable: 'Symbol' in self && 'iterator' in Symbol,
|
11
|
+
blob: 'FileReader' in self && 'Blob' in self && (function() {
|
12
|
+
try {
|
13
|
+
new Blob()
|
14
|
+
return true
|
15
|
+
} catch(e) {
|
16
|
+
return false
|
17
|
+
}
|
18
|
+
})(),
|
19
|
+
formData: 'FormData' in self,
|
20
|
+
arrayBuffer: 'ArrayBuffer' in self
|
21
|
+
}
|
22
|
+
|
8
23
|
function normalizeName(name) {
|
9
24
|
if (typeof name !== 'string') {
|
10
25
|
name = String(name)
|
@@ -22,6 +37,24 @@
|
|
22
37
|
return value
|
23
38
|
}
|
24
39
|
|
40
|
+
// Build a destructive iterator for the value list
|
41
|
+
function iteratorFor(items) {
|
42
|
+
var iterator = {
|
43
|
+
next: function() {
|
44
|
+
var value = items.shift()
|
45
|
+
return {done: value === undefined, value: value}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
if (support.iterable) {
|
50
|
+
iterator[Symbol.iterator] = function() {
|
51
|
+
return iterator
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
return iterator
|
56
|
+
}
|
57
|
+
|
25
58
|
function Headers(headers) {
|
26
59
|
this.map = {}
|
27
60
|
|
@@ -77,6 +110,28 @@
|
|
77
110
|
}, this)
|
78
111
|
}
|
79
112
|
|
113
|
+
Headers.prototype.keys = function() {
|
114
|
+
var items = []
|
115
|
+
this.forEach(function(value, name) { items.push(name) })
|
116
|
+
return iteratorFor(items)
|
117
|
+
}
|
118
|
+
|
119
|
+
Headers.prototype.values = function() {
|
120
|
+
var items = []
|
121
|
+
this.forEach(function(value) { items.push(value) })
|
122
|
+
return iteratorFor(items)
|
123
|
+
}
|
124
|
+
|
125
|
+
Headers.prototype.entries = function() {
|
126
|
+
var items = []
|
127
|
+
this.forEach(function(value, name) { items.push([name, value]) })
|
128
|
+
return iteratorFor(items)
|
129
|
+
}
|
130
|
+
|
131
|
+
if (support.iterable) {
|
132
|
+
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
|
133
|
+
}
|
134
|
+
|
80
135
|
function consumed(body) {
|
81
136
|
if (body.bodyUsed) {
|
82
137
|
return Promise.reject(new TypeError('Already read'))
|
@@ -107,22 +162,9 @@
|
|
107
162
|
return fileReaderReady(reader)
|
108
163
|
}
|
109
164
|
|
110
|
-
var support = {
|
111
|
-
blob: 'FileReader' in self && 'Blob' in self && (function() {
|
112
|
-
try {
|
113
|
-
new Blob();
|
114
|
-
return true
|
115
|
-
} catch(e) {
|
116
|
-
return false
|
117
|
-
}
|
118
|
-
})(),
|
119
|
-
formData: 'FormData' in self
|
120
|
-
}
|
121
|
-
|
122
165
|
function Body() {
|
123
166
|
this.bodyUsed = false
|
124
167
|
|
125
|
-
|
126
168
|
this._initBody = function(body) {
|
127
169
|
this._bodyInit = body
|
128
170
|
if (typeof body === 'string') {
|
@@ -131,11 +173,26 @@
|
|
131
173
|
this._bodyBlob = body
|
132
174
|
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
|
133
175
|
this._bodyFormData = body
|
176
|
+
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
|
177
|
+
this._bodyText = body.toString()
|
134
178
|
} else if (!body) {
|
135
179
|
this._bodyText = ''
|
180
|
+
} else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {
|
181
|
+
// Only support ArrayBuffers for POST method.
|
182
|
+
// Receiving ArrayBuffers happens via Blobs, instead.
|
136
183
|
} else {
|
137
184
|
throw new Error('unsupported BodyInit type')
|
138
185
|
}
|
186
|
+
|
187
|
+
if (!this.headers.get('content-type')) {
|
188
|
+
if (typeof body === 'string') {
|
189
|
+
this.headers.set('content-type', 'text/plain;charset=UTF-8')
|
190
|
+
} else if (this._bodyBlob && this._bodyBlob.type) {
|
191
|
+
this.headers.set('content-type', this._bodyBlob.type)
|
192
|
+
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
|
193
|
+
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
|
194
|
+
}
|
195
|
+
}
|
139
196
|
}
|
140
197
|
|
141
198
|
if (support.blob) {
|
@@ -236,6 +293,10 @@
|
|
236
293
|
this._initBody(body)
|
237
294
|
}
|
238
295
|
|
296
|
+
Request.prototype.clone = function() {
|
297
|
+
return new Request(this)
|
298
|
+
}
|
299
|
+
|
239
300
|
function decode(body) {
|
240
301
|
var form = new FormData()
|
241
302
|
body.trim().split('&').forEach(function(bytes) {
|
@@ -251,7 +312,7 @@
|
|
251
312
|
|
252
313
|
function headers(xhr) {
|
253
314
|
var head = new Headers()
|
254
|
-
var pairs = xhr.getAllResponseHeaders().trim().split('\n')
|
315
|
+
var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\n')
|
255
316
|
pairs.forEach(function(header) {
|
256
317
|
var split = header.trim().split(':')
|
257
318
|
var key = split.shift().trim()
|
@@ -268,31 +329,55 @@
|
|
268
329
|
options = {}
|
269
330
|
}
|
270
331
|
|
271
|
-
this._initBody(bodyInit)
|
272
332
|
this.type = 'default'
|
273
|
-
this.url = null
|
274
333
|
this.status = options.status
|
275
334
|
this.ok = this.status >= 200 && this.status < 300
|
276
335
|
this.statusText = options.statusText
|
277
336
|
this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)
|
278
337
|
this.url = options.url || ''
|
338
|
+
this._initBody(bodyInit)
|
279
339
|
}
|
280
340
|
|
281
341
|
Body.call(Response.prototype)
|
282
342
|
|
283
|
-
|
284
|
-
|
285
|
-
|
343
|
+
Response.prototype.clone = function() {
|
344
|
+
return new Response(this._bodyInit, {
|
345
|
+
status: this.status,
|
346
|
+
statusText: this.statusText,
|
347
|
+
headers: new Headers(this.headers),
|
348
|
+
url: this.url
|
349
|
+
})
|
350
|
+
}
|
286
351
|
|
287
|
-
|
288
|
-
var
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
352
|
+
Response.error = function() {
|
353
|
+
var response = new Response(null, {status: 0, statusText: ''})
|
354
|
+
response.type = 'error'
|
355
|
+
return response
|
356
|
+
}
|
357
|
+
|
358
|
+
var redirectStatuses = [301, 302, 303, 307, 308]
|
359
|
+
|
360
|
+
Response.redirect = function(url, status) {
|
361
|
+
if (redirectStatuses.indexOf(status) === -1) {
|
362
|
+
throw new RangeError('Invalid status code')
|
293
363
|
}
|
294
364
|
|
365
|
+
return new Response(null, {status: status, headers: {location: url}})
|
366
|
+
}
|
367
|
+
|
368
|
+
self.Headers = Headers
|
369
|
+
self.Request = Request
|
370
|
+
self.Response = Response
|
371
|
+
|
372
|
+
self.fetch = function(input, init) {
|
295
373
|
return new Promise(function(resolve, reject) {
|
374
|
+
var request
|
375
|
+
if (Request.prototype.isPrototypeOf(input) && !init) {
|
376
|
+
request = input
|
377
|
+
} else {
|
378
|
+
request = new Request(input, init)
|
379
|
+
}
|
380
|
+
|
296
381
|
var xhr = new XMLHttpRequest()
|
297
382
|
|
298
383
|
function responseURL() {
|
@@ -305,22 +390,17 @@
|
|
305
390
|
return xhr.getResponseHeader('X-Request-URL')
|
306
391
|
}
|
307
392
|
|
308
|
-
return
|
393
|
+
return
|
309
394
|
}
|
310
395
|
|
311
396
|
xhr.onload = function() {
|
312
|
-
var status = (xhr.status === 1223) ? 204 : xhr.status
|
313
|
-
if (status < 100 || status > 599) {
|
314
|
-
reject(new TypeError('Network request failed'))
|
315
|
-
return
|
316
|
-
}
|
317
397
|
var options = {
|
318
|
-
status: status,
|
398
|
+
status: xhr.status,
|
319
399
|
statusText: xhr.statusText,
|
320
400
|
headers: headers(xhr),
|
321
401
|
url: responseURL()
|
322
402
|
}
|
323
|
-
var body = 'response' in xhr ? xhr.response : xhr.responseText
|
403
|
+
var body = 'response' in xhr ? xhr.response : xhr.responseText
|
324
404
|
resolve(new Response(body, options))
|
325
405
|
}
|
326
406
|
|
@@ -328,6 +408,10 @@
|
|
328
408
|
reject(new TypeError('Network request failed'))
|
329
409
|
}
|
330
410
|
|
411
|
+
xhr.ontimeout = function() {
|
412
|
+
reject(new TypeError('Network request failed'))
|
413
|
+
}
|
414
|
+
|
331
415
|
xhr.open(request.method, request.url, true)
|
332
416
|
|
333
417
|
if (request.credentials === 'include') {
|
@@ -346,4 +430,4 @@
|
|
346
430
|
})
|
347
431
|
}
|
348
432
|
self.fetch.polyfill = true
|
349
|
-
})();
|
433
|
+
})(typeof self !== 'undefined' ? self : this);
|
data/lib/fetch/rails.rb
CHANGED
data/lib/fetch/rails/railtie.rb
CHANGED
@@ -6,7 +6,6 @@ module Fetch
|
|
6
6
|
FETCH_GEM_ROOT = Pathname.new('../../../../').expand_path(__FILE__)
|
7
7
|
|
8
8
|
config.before_initialize do |app|
|
9
|
-
puts FETCH_GEM_ROOT.join('lib/assets/javascripts/').to_s
|
10
9
|
app.config.assets.paths << FETCH_GEM_ROOT.join('lib/assets/javascripts/').to_s
|
11
10
|
end
|
12
11
|
|
data/lib/fetch/rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fetch-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vipul A M
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.6.3
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: A window.fetch polyfill for browser from Rails using https://github.com/github/fetch
|