Sha256: 8321ce36bf866baea97f0d70c50b1376d0ab64b2f967de7cae1c336e6960b0a3

Contents?: true

Size: 1.65 KB

Versions: 8

Compression:

Stored size: 1.65 KB

Contents

require 'bowser/event_target'
require 'promise'

module Bowser
  class FileList
    include Enumerable

    def initialize native
      @native = `#{native} || []`
      @files = length.times.each_with_object([]) { |index, array|
        array[index] = File.new(`#@native[index]`)
      }
    end

    def [] index
      @files[index]
    end

    def length
      `#@native.length`
    end
    alias size length

    def each &block
      @files.each do |file|
        block.call file
      end
    end

    def to_a
      @files.dup # Don't return a value that can mutate our internal state
    end
    alias to_ary to_a

    def to_s
      @files.to_s
    end

    class File
      attr_reader :data

      def initialize native
        @native = native
        @data = nil
      end

      def name
        `#@native.name`
      end

      def size
        `#@native.size`
      end

      def type
        `#@native.type`
      end

      def last_modified
        `#@native.lastModifiedDate`
      end

      def read
        promise = Promise.new
        reader = FileReader.new
        reader.on :load do
          result = reader.result

          @data = result
          promise.resolve result
        end

        reader.on :error do
          promise.reject reader.result
        end

        reader.read_as_binary_string self

        promise
      end

      class FileReader
        include EventTarget

        def initialize
          @native = `new FileReader()`
        end

        def result
          `#@native.result`
        end

        def read_as_binary_string file
          `#@native.readAsBinaryString(file.native)`
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
bowser-0.4.1 opal/bowser/file_list.rb
bowser-0.4.0 opal/bowser/file_list.rb
bowser-0.3.0 opal/bowser/file_list.rb
bowser-0.2.2 opal/bowser/file_list.rb
bowser-0.2.1 opal/bowser/file_list.rb
bowser-0.2.0 opal/bowser/file_list.rb
bowser-0.1.6 opal/bowser/file_list.rb
bowser-0.1.5 opal/bowser/file_list.rb