bowser 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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