Class: Dommy::FileReader
Overview
FileReader — reads Blob / File instances into Strings, byte
arrays, or data URLs. Asynchronous reads schedule a microtask that
fires load + loadend; sync access (via result after the
microtask drain) mirrors browser behavior.
Spec: https://w3c.github.io/FileAPI/#APIASynch
Constant Summary
collapse
- EMPTY =
0
- LOADING =
1
- DONE =
2
- INLINE_HANDLERS =
%w[loadstart progress load loadend abort error].freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
included
#__dommy_dump_event_failure__, #__internal_deliver_event__, #__internal_process_event_handler_return__, #add_event_listener, capture_flag, #deliver_at, #dispatch_event, #event_name_from_on, #invoke_listener_isolated, js_truthy?, #on_handler, #remove_event_listener, #set_on_handler
Constructor Details
#initialize(window) ⇒ FileReader
Returns a new instance of FileReader.
21
22
23
24
25
26
27
28
29
|
# File 'lib/dommy/file_reader.rb', line 21
def initialize(window)
@window = window
@ready_state = EMPTY
@result = nil
@error = nil
@inline_handlers = {}
@aborted = false
@generation = 0
end
|
Instance Attribute Details
#error ⇒ Object
Returns the value of attribute error.
19
20
21
|
# File 'lib/dommy/file_reader.rb', line 19
def error
@error
end
|
#ready_state ⇒ Object
Returns the value of attribute ready_state.
19
20
21
|
# File 'lib/dommy/file_reader.rb', line 19
def ready_state
@ready_state
end
|
#result ⇒ Object
Returns the value of attribute result.
19
20
21
|
# File 'lib/dommy/file_reader.rb', line 19
def result
@result
end
|
Instance Method Details
#__internal_event_parent__ ⇒ Object
125
126
127
|
# File 'lib/dommy/file_reader.rb', line 125
def __internal_event_parent__
nil
end
|
#__js_call__(method, args) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/dommy/file_reader.rb', line 104
def __js_call__(method, args)
case method
when "readAsText"
read_as_text(args[0], args[1])
when "readAsDataURL"
read_as_data_url(args[0])
when "readAsArrayBuffer"
read_as_array_buffer(args[0])
when "readAsBinaryString"
read_as_binary_string(args[0])
when "abort"
abort
when "addEventListener"
add_event_listener(args[0], args[1], args[2])
when "removeEventListener"
remove_event_listener(args[0], args[1], args[2])
when "dispatchEvent"
dispatch_event(args[0])
end
end
|
#__js_get__(key) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/dommy/file_reader.rb', line 72
def __js_get__(key)
case key
when "readyState"
@ready_state
when "result"
@result
when "error"
@error
when "EMPTY"
EMPTY
when "LOADING"
LOADING
when "DONE"
DONE
else
@inline_handlers[inline_event_for(key)]
end
end
|
#__js_set__(key, value) ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/dommy/file_reader.rb', line 91
def __js_set__(key, value)
event = inline_event_for(key)
return Bridge::UNHANDLED unless event
set_inline_handler(event, value)
nil
end
|
#abort ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/dommy/file_reader.rb', line 60
def abort
return if @ready_state != LOADING
@aborted = true
@generation += 1
@ready_state = DONE
@result = nil
dispatch_event(Event.new("abort"))
dispatch_event(Event.new("loadend"))
nil
end
|
#read_as_array_buffer(blob) ⇒ Object
Also known as:
readAsArrayBuffer
47
48
49
50
|
# File 'lib/dommy/file_reader.rb', line 47
def read_as_array_buffer(blob)
schedule_read(blob) { |raw| Bridge::ArrayBuffer.new(raw.bytes) }
end
|
#read_as_binary_string(blob) ⇒ Object
Also known as:
readAsBinaryString
54
55
56
|
# File 'lib/dommy/file_reader.rb', line 54
def read_as_binary_string(blob)
schedule_read(blob) { |raw| raw.dup.force_encoding("ASCII-8BIT") }
end
|
#read_as_data_url(blob) ⇒ Object
Also known as:
readAsDataURL
37
38
39
40
41
42
43
|
# File 'lib/dommy/file_reader.rb', line 37
def read_as_data_url(blob)
schedule_read(blob) do |raw|
mime = blob.respond_to?(:type) ? blob.type.to_s : ""
mime = "application/octet-stream" if mime.empty?
"data:#{mime};base64,#{[raw].pack("m0")}"
end
end
|
#read_as_text(blob, _encoding = "utf-8") ⇒ Object
Also known as:
readAsText
31
32
33
|
# File 'lib/dommy/file_reader.rb', line 31
def read_as_text(blob, _encoding = "utf-8")
schedule_read(blob) { |raw| raw.dup.force_encoding("UTF-8") }
end
|