bowser 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95e9589b4b3a1ad43cbf589ee1d13093c0e6ea44
4
- data.tar.gz: d7f0e1233bd6e89fc2759233a12ca0bcd9b07e4c
3
+ metadata.gz: 30eccdfa1a9fdd25efe66a4e7b69f9ef0dff07d4
4
+ data.tar.gz: d4e62c0377fbd2f1d690d010d93eef4aa2c13de1
5
5
  SHA512:
6
- metadata.gz: 2b77f3dda657fafe47a7b79cac128012aedb38ac3266edb6d7d28118e7fe45472dd904c696e2bb080e5c1aaa978dfd881aba5518ac9fa14ade0b38c2fd879d56
7
- data.tar.gz: cba81e8918c17a2d785c058314cd40a240e859cc61cbe48cf76f60fa4f4f87e4dcebdc7778ff66f287e3a85d58daae4e61ee592a5c92dc7a67f670c193d28cb6
6
+ metadata.gz: 8f353bd279771bf383e9233b15211ed4f780f7082287ccb3e49920f7bdae95f205163ba6746526b5c63406a51c9f56fefb23709e180308852cc9935e9ea571ba
7
+ data.tar.gz: 626063d6efea1c1fd45b4d642192d56f40d0c1a7029ce782aae41c12084d45ba152576833841e126a8b23b0c813a7852d49ece7bb552df0c8717ad43e8e8be8d
@@ -1,3 +1,3 @@
1
1
  module Bowser
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -48,6 +48,11 @@ module Bowser
48
48
  `#@native.value`
49
49
  end
50
50
 
51
+ # Convenience for when you only need a single file
52
+ def file
53
+ files.first
54
+ end
55
+
51
56
  def files
52
57
  FileList.new(`#@native.files`)
53
58
  end
@@ -1,3 +1,4 @@
1
+ require 'bowser/event_target'
1
2
  require 'promise'
2
3
 
3
4
  module Bowser
@@ -6,12 +7,13 @@ module Bowser
6
7
 
7
8
  def initialize native
8
9
  @native = `#{native} || []`
10
+ @files = length.times.each_with_object([]) { |index, array|
11
+ array[index] = File.new(`#@native[index]`)
12
+ }
9
13
  end
10
14
 
11
15
  def [] index
12
- if index < length && index >= 0
13
- File.new(`#@native[index]`)
14
- end
16
+ @files[index]
15
17
  end
16
18
 
17
19
  def length
@@ -20,19 +22,26 @@ module Bowser
20
22
  alias size length
21
23
 
22
24
  def each &block
23
- length.times.each do |i|
24
- block.call self[i]
25
+ @files.each do |file|
26
+ block.call file
25
27
  end
26
28
  end
27
29
 
28
30
  def to_a
29
- map { |file| file }
31
+ @files.dup # Don't return a value that can mutate our internal state
30
32
  end
31
33
  alias to_ary to_a
32
34
 
35
+ def to_s
36
+ @files.to_s
37
+ end
38
+
33
39
  class File
40
+ attr_reader :data
41
+
34
42
  def initialize native
35
43
  @native = native
44
+ @data = nil
36
45
  end
37
46
 
38
47
  def name
@@ -53,17 +62,38 @@ module Bowser
53
62
 
54
63
  def read
55
64
  promise = Promise.new
56
- reader = Native(`new FileReader()`)
57
- reader[:onload] = proc do
58
- promise.resolve reader.result
65
+ reader = FileReader.new
66
+ reader.on :load do
67
+ result = reader.result
68
+
69
+ @data = result
70
+ promise.resolve result
59
71
  end
60
- reader[:onerror] = proc do
72
+
73
+ reader.on :error do
61
74
  promise.reject reader.result
62
75
  end
63
- reader.readAsBinaryString(`#@native`)
76
+
77
+ reader.read_as_binary_string self
64
78
 
65
79
  promise
66
80
  end
81
+
82
+ class FileReader
83
+ include EventTarget
84
+
85
+ def initialize
86
+ @native = `new FileReader()`
87
+ end
88
+
89
+ def result
90
+ `#@native.result`
91
+ end
92
+
93
+ def read_as_binary_string file
94
+ `#@native.readAsBinaryString(file.native)`
95
+ end
96
+ end
67
97
  end
68
98
  end
69
99
  end
data/opal/bowser/http.rb CHANGED
@@ -2,6 +2,7 @@ require 'native'
2
2
  require 'promise'
3
3
 
4
4
  require 'bowser/http/request'
5
+ require 'bowser/http/form_data'
5
6
 
6
7
  module Bowser
7
8
  module HTTP
@@ -11,12 +12,8 @@ module Bowser
11
12
  promise = Promise.new
12
13
  request = Request.new(:get, url)
13
14
 
14
- request.on :success do
15
- promise.resolve request.response
16
- end
17
- request.on :error do |event|
18
- promise.reject Native(event)
19
- end
15
+ connect_events_to_promise request, promise
16
+
20
17
  request.send
21
18
 
22
19
  promise
@@ -26,15 +23,40 @@ module Bowser
26
23
  promise = Promise.new
27
24
  request = Request.new(:post, url)
28
25
 
26
+ connect_events_to_promise request, promise
27
+
28
+ request.send(data: data, headers: { 'Content-Type' => content_type })
29
+
30
+ promise
31
+ end
32
+
33
+ def upload_files(url, files, key: 'files', key_suffix: '[]')
34
+ promise = Promise.new
35
+ request = Request.new(:post, url)
36
+
37
+ connect_events_to_promise request, promise
38
+
39
+ form = FormData.new
40
+ files.each do |file|
41
+ form.append "#{key}#{key_suffix}", file
42
+ end
43
+
44
+ request.send(data: form)
45
+
46
+ promise
47
+ end
48
+
49
+ def upload_file(url, file, key: 'file')
50
+ upload_files(url, [file], key: key, key_suffix: nil)
51
+ end
52
+
53
+ def connect_events_to_promise(request, promise)
29
54
  request.on :success do
30
55
  promise.resolve request.response
31
56
  end
32
57
  request.on :error do |event|
33
58
  promise.reject Native(event)
34
59
  end
35
- request.send(data: data, headers: { 'Content-Type' => content_type })
36
-
37
- promise
38
60
  end
39
61
  end
40
62
  end
@@ -0,0 +1,19 @@
1
+ module Bowser
2
+ module HTTP
3
+ class FormData
4
+ def initialize
5
+ @native = `new FormData()`
6
+ end
7
+
8
+ def append key, value
9
+ data = if `!!value.native`
10
+ `value.native`
11
+ else
12
+ value
13
+ end
14
+
15
+ `#@native.append(key, data)`
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,6 +4,8 @@ require 'bowser/http/event'
4
4
  module Bowser
5
5
  module HTTP
6
6
  class Request
7
+ include EventTarget
8
+
7
9
  attr_reader :method, :url, :data, :headers, :promise
8
10
  attr_accessor :response
9
11
 
@@ -17,52 +19,32 @@ module Bowser
17
19
  @native = native
18
20
  @method = method
19
21
  @url = url
20
-
21
- @ready_state_callbacks = []
22
- %x{
23
- #@native.onreadystatechange = #{
24
- proc do |event|
25
- @ready_state_callbacks.each do |callback|
26
- callback.call event
27
- end
28
- end
29
- }
30
- }
31
-
32
22
  @response = Response.new(@native)
33
23
  end
34
24
 
35
- def on event_name, &block
36
- handler = proc { |event| block.call(Event.new(event)) }
37
- case event_name
38
- when :readystatechange
39
- @ready_state_callbacks << handler
40
- when :success
41
- @ready_state_callbacks << proc { |event|
42
- block.call Event.new(event) if done? && response.success?
43
- }
25
+ def send(data: {}, headers: {})
26
+ `#@native.open(#{method}, #{url})`
27
+ @data = data
28
+ self.headers = headers
29
+
30
+ if method == :get || method == :delete
31
+ `#@native.send()`
32
+ elsif Hash === data
33
+ `#@native.send(#{JSON.generate data})`
34
+ elsif `!!data.native`
35
+ `#@native.send(data.native)`
44
36
  else
45
- object = post? ? `#@native.upload` : @native
46
- `object.addEventListener(event_name, handler)`
37
+ `#@native.send(data)`
47
38
  end
48
39
 
49
40
  self
50
41
  end
51
42
 
52
- def send(data: {}, headers: {})
53
- `#@native.open(#{method}, #{url})`
54
- @data = data
43
+ def headers= headers
55
44
  @headers = headers
56
45
  headers.each do |attr, value|
57
46
  `#@native.setRequestHeader(attr, value)`
58
47
  end
59
- if method == :get || method == :delete
60
- `#@native.send()`
61
- else
62
- `#@native.send(#{JSON.generate data})`
63
- end
64
-
65
- self
66
48
  end
67
49
 
68
50
  def post?
@@ -15,7 +15,7 @@ module Bowser
15
15
  end
16
16
  else
17
17
  def animation_frame &block
18
- delay(0.16, &block)
18
+ delay(1.0 / 60, &block)
19
19
  self
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bowser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Gaskins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-01 00:00:00.000000000 Z
11
+ date: 2016-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -100,6 +100,7 @@ files:
100
100
  - opal/bowser/file_list.rb
101
101
  - opal/bowser/http.rb
102
102
  - opal/bowser/http/event.rb
103
+ - opal/bowser/http/form_data.rb
103
104
  - opal/bowser/http/request.rb
104
105
  - opal/bowser/http/response.rb
105
106
  - opal/bowser/websocket.rb