ruby-brs 1.1.0 → 1.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 +4 -4
 - data/README.md +63 -74
 - data/ext/brs_ext/common.h +3 -0
 - data/ext/brs_ext/error.c +0 -1
 - data/ext/brs_ext/io.c +48 -50
 - data/ext/brs_ext/main.c +0 -1
 - data/ext/brs_ext/option.c +0 -3
 - data/ext/brs_ext/option.h +2 -3
 - data/ext/brs_ext/stream/compressor.c +17 -20
 - data/ext/brs_ext/stream/compressor.h +3 -3
 - data/ext/brs_ext/stream/decompressor.c +13 -16
 - data/ext/brs_ext/stream/decompressor.h +3 -3
 - data/ext/brs_ext/string.c +8 -10
 - data/ext/extconf.rb +13 -0
 - data/lib/brs/file.rb +4 -0
 - data/lib/brs/stream/abstract.rb +9 -12
 - data/lib/brs/stream/raw/abstract.rb +6 -2
 - data/lib/brs/stream/raw/compressor.rb +5 -7
 - data/lib/brs/stream/raw/decompressor.rb +1 -5
 - data/lib/brs/stream/reader.rb +71 -52
 - data/lib/brs/stream/reader_helpers.rb +2 -0
 - data/lib/brs/stream/writer.rb +10 -5
 - data/lib/brs/stream/writer_helpers.rb +8 -10
 - data/lib/brs/validation.rb +15 -2
 - data/lib/brs/version.rb +1 -1
 - metadata +41 -13
 
| 
         @@ -34,7 +34,7 @@ module BRS 
     | 
|
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                        if need_more_destination
         
     | 
| 
       36 
36 
     | 
    
         
             
                          source = source.byteslice bytes_read, source.bytesize - bytes_read
         
     | 
| 
       37 
     | 
    
         
            -
                           
     | 
| 
      
 37 
     | 
    
         
            +
                          more_destination(&writer)
         
     | 
| 
       38 
38 
     | 
    
         
             
                          next
         
     | 
| 
       39 
39 
     | 
    
         
             
                        end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
         @@ -51,8 +51,6 @@ module BRS 
     | 
|
| 
       51 
51 
     | 
    
         
             
                      Validation.validate_proc writer
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
                      super
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                      nil
         
     | 
| 
       56 
54 
     | 
    
         
             
                    end
         
     | 
| 
       57 
55 
     | 
    
         | 
| 
       58 
56 
     | 
    
         
             
                    def close(&writer)
         
     | 
| 
         @@ -61,8 +59,6 @@ module BRS 
     | 
|
| 
       61 
59 
     | 
    
         
             
                      Validation.validate_proc writer
         
     | 
| 
       62 
60 
     | 
    
         | 
| 
       63 
61 
     | 
    
         
             
                      super
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                      nil
         
     | 
| 
       66 
62 
     | 
    
         
             
                    end
         
     | 
| 
       67 
63 
     | 
    
         
             
                  end
         
     | 
| 
       68 
64 
     | 
    
         
             
                end
         
     | 
    
        data/lib/brs/stream/reader.rb
    CHANGED
    
    | 
         @@ -20,79 +20,60 @@ module BRS 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                    initialize_source_buffer_length
         
     | 
| 
       22 
22 
     | 
    
         
             
                    reset_io_remainder
         
     | 
| 
      
 23 
     | 
    
         
            +
                    reset_need_to_flush
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
                    @lineno = 0
         
     | 
| 
       25 
26 
     | 
    
         
             
                  end
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
      
 28 
     | 
    
         
            +
                  protected def create_raw_stream
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Raw::Decompressor.new @options
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       27 
32 
     | 
    
         
             
                  protected def initialize_source_buffer_length
         
     | 
| 
       28 
33 
     | 
    
         
             
                    source_buffer_length = @options[:source_buffer_length]
         
     | 
| 
       29 
34 
     | 
    
         
             
                    Validation.validate_not_negative_integer source_buffer_length unless source_buffer_length.nil?
         
     | 
| 
       30 
35 
     | 
    
         | 
| 
       31 
36 
     | 
    
         
             
                    source_buffer_length = Buffer::DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR \
         
     | 
| 
       32 
     | 
    
         
            -
                      if source_buffer_length  
     | 
| 
      
 37 
     | 
    
         
            +
                      if source_buffer_length.nil? || source_buffer_length.zero?
         
     | 
| 
       33 
38 
     | 
    
         | 
| 
       34 
39 
     | 
    
         
             
                    @source_buffer_length = source_buffer_length
         
     | 
| 
       35 
40 
     | 
    
         
             
                  end
         
     | 
| 
       36 
41 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                  protected def create_raw_stream
         
     | 
| 
       38 
     | 
    
         
            -
                    Raw::Decompressor.new @options
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
42 
     | 
    
         
             
                  protected def reset_io_remainder
         
     | 
| 
       42 
43 
     | 
    
         
             
                    @io_remainder = ::String.new :encoding => ::Encoding::BINARY
         
     | 
| 
       43 
44 
     | 
    
         
             
                  end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
      
 46 
     | 
    
         
            +
                  protected def reset_need_to_flush
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @need_to_flush = false
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       45 
50 
     | 
    
         
             
                  # -- synchronous --
         
     | 
| 
       46 
51 
     | 
    
         | 
| 
       47 
52 
     | 
    
         
             
                  def read(bytes_to_read = nil, out_buffer = nil)
         
     | 
| 
       48 
53 
     | 
    
         
             
                    Validation.validate_not_negative_integer bytes_to_read unless bytes_to_read.nil?
         
     | 
| 
       49 
54 
     | 
    
         
             
                    Validation.validate_string out_buffer unless out_buffer.nil?
         
     | 
| 
       50 
55 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                    return ::String.new :encoding => ::Encoding::BINARY if bytes_to_read == 0
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
56 
     | 
    
         
             
                    unless bytes_to_read.nil?
         
     | 
| 
      
 57 
     | 
    
         
            +
                      return ::String.new :encoding => ::Encoding::BINARY if bytes_to_read.zero?
         
     | 
| 
       54 
58 
     | 
    
         
             
                      return nil if eof?
         
     | 
| 
       55 
59 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                       
     | 
| 
      
 60 
     | 
    
         
            +
                      append_io_data @io.read(@source_buffer_length) while @buffer.bytesize < bytes_to_read && !@io.eof?
         
     | 
| 
      
 61 
     | 
    
         
            +
                      flush_io_data if @buffer.bytesize < bytes_to_read
         
     | 
| 
       57 
62 
     | 
    
         | 
| 
       58 
63 
     | 
    
         
             
                      return read_bytes_from_buffer bytes_to_read, out_buffer
         
     | 
| 
       59 
64 
     | 
    
         
             
                    end
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
                     
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                    result = @buffer
         
     | 
| 
       64 
     | 
    
         
            -
                    reset_buffer
         
     | 
| 
       65 
     | 
    
         
            -
                    @pos += result.bytesize
         
     | 
| 
      
 66 
     | 
    
         
            +
                    append_io_data @io.read(@source_buffer_length) until @io.eof?
         
     | 
| 
      
 67 
     | 
    
         
            +
                    flush_io_data
         
     | 
| 
       66 
68 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                     
     | 
| 
       68 
     | 
    
         
            -
                    result = transcode_to_internal result
         
     | 
| 
       69 
     | 
    
         
            -
                    result = out_buffer.replace result unless out_buffer.nil?
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                    result
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                  protected def read_more_from_buffer
         
     | 
| 
       75 
     | 
    
         
            -
                    io_data = @io.read @source_buffer_length
         
     | 
| 
       76 
     | 
    
         
            -
                    append_io_data_to_buffer io_data
         
     | 
| 
       77 
     | 
    
         
            -
                  end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                  def readpartial(bytes_to_read = nil, out_buffer = nil)
         
     | 
| 
       80 
     | 
    
         
            -
                    raise ::EOFError if eof?
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                    readpartial_from_buffer until @buffer.bytesize >= bytes_to_read || @io.eof?
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                    read_bytes_from_buffer bytes_to_read, out_buffer
         
     | 
| 
       85 
     | 
    
         
            -
                  end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                  protected def readpartial_from_buffer
         
     | 
| 
       88 
     | 
    
         
            -
                    io_data = @io.readpartial @source_buffer_length
         
     | 
| 
       89 
     | 
    
         
            -
                    append_io_data_to_buffer io_data
         
     | 
| 
      
 69 
     | 
    
         
            +
                    read_buffer out_buffer
         
     | 
| 
       90 
70 
     | 
    
         
             
                  end
         
     | 
| 
       91 
71 
     | 
    
         | 
| 
       92 
72 
     | 
    
         
             
                  def rewind
         
     | 
| 
       93 
73 
     | 
    
         
             
                    raw_wrapper :close
         
     | 
| 
       94 
74 
     | 
    
         | 
| 
       95 
75 
     | 
    
         
             
                    reset_io_remainder
         
     | 
| 
      
 76 
     | 
    
         
            +
                    reset_need_to_flush
         
     | 
| 
       96 
77 
     | 
    
         | 
| 
       97 
78 
     | 
    
         
             
                    super
         
     | 
| 
       98 
79 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -103,25 +84,61 @@ module BRS 
     | 
|
| 
       103 
84 
     | 
    
         
             
                    super
         
     | 
| 
       104 
85 
     | 
    
         
             
                  end
         
     | 
| 
       105 
86 
     | 
    
         | 
| 
      
 87 
     | 
    
         
            +
                  def eof?
         
     | 
| 
      
 88 
     | 
    
         
            +
                    empty? && @io.eof?
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       106 
91 
     | 
    
         
             
                  # -- asynchronous --
         
     | 
| 
       107 
92 
     | 
    
         | 
| 
      
 93 
     | 
    
         
            +
                  def readpartial(bytes_to_read, out_buffer = nil)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    read_more_nonblock(bytes_to_read, out_buffer) { @io.readpartial @source_buffer_length }
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
       108 
97 
     | 
    
         
             
                  def read_nonblock(bytes_to_read, out_buffer = nil, *options)
         
     | 
| 
       109 
     | 
    
         
            -
                     
     | 
| 
      
 98 
     | 
    
         
            +
                    read_more_nonblock(bytes_to_read, out_buffer) { @io.read_nonblock(@source_buffer_length, *options) }
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  protected def read_more_nonblock(bytes_to_read, out_buffer, &_block)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    Validation.validate_not_negative_integer bytes_to_read
         
     | 
| 
      
 103 
     | 
    
         
            +
                    Validation.validate_string out_buffer unless out_buffer.nil?
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                    return ::String.new :encoding => ::Encoding::BINARY if bytes_to_read.zero?
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    io_provided_eof_error = false
         
     | 
| 
       110 
108 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                     
     | 
| 
      
 109 
     | 
    
         
            +
                    if @buffer.bytesize < bytes_to_read
         
     | 
| 
      
 110 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 111 
     | 
    
         
            +
                        append_io_data yield
         
     | 
| 
      
 112 
     | 
    
         
            +
                      rescue ::EOFError
         
     | 
| 
      
 113 
     | 
    
         
            +
                        io_provided_eof_error = true
         
     | 
| 
      
 114 
     | 
    
         
            +
                      end
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                    flush_io_data if @buffer.bytesize < bytes_to_read
         
     | 
| 
      
 118 
     | 
    
         
            +
                    raise ::EOFError if empty? && io_provided_eof_error
         
     | 
| 
       112 
119 
     | 
    
         | 
| 
       113 
120 
     | 
    
         
             
                    read_bytes_from_buffer bytes_to_read, out_buffer
         
     | 
| 
       114 
121 
     | 
    
         
             
                  end
         
     | 
| 
       115 
122 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
                   
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
      
 123 
     | 
    
         
            +
                  # -- common --
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                  protected def append_io_data(io_data)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    io_portion    = @io_remainder + io_data
         
     | 
| 
      
 127 
     | 
    
         
            +
                    bytes_read    = raw_wrapper :read, io_portion
         
     | 
| 
      
 128 
     | 
    
         
            +
                    @io_remainder = io_portion.byteslice bytes_read, io_portion.bytesize - bytes_read
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                    # Even empty io data may require flush.
         
     | 
| 
      
 131 
     | 
    
         
            +
                    @need_to_flush = true
         
     | 
| 
       119 
132 
     | 
    
         
             
                  end
         
     | 
| 
       120 
133 
     | 
    
         | 
| 
       121 
     | 
    
         
            -
                   
     | 
| 
      
 134 
     | 
    
         
            +
                  protected def flush_io_data
         
     | 
| 
      
 135 
     | 
    
         
            +
                    raw_wrapper :flush
         
     | 
| 
       122 
136 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
      
 137 
     | 
    
         
            +
                    @need_to_flush = false
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  protected def empty?
         
     | 
| 
      
 141 
     | 
    
         
            +
                    !@need_to_flush && @buffer.bytesize.zero?
         
     | 
| 
       125 
142 
     | 
    
         
             
                  end
         
     | 
| 
       126 
143 
     | 
    
         | 
| 
       127 
144 
     | 
    
         
             
                  protected def read_bytes_from_buffer(bytes_to_read, out_buffer)
         
     | 
| 
         @@ -136,18 +153,20 @@ module BRS 
     | 
|
| 
       136 
153 
     | 
    
         
             
                    result
         
     | 
| 
       137 
154 
     | 
    
         
             
                  end
         
     | 
| 
       138 
155 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
                  protected def  
     | 
| 
       140 
     | 
    
         
            -
                     
     | 
| 
       141 
     | 
    
         
            -
                     
     | 
| 
       142 
     | 
    
         
            -
                    @ 
     | 
| 
      
 156 
     | 
    
         
            +
                  protected def read_buffer(out_buffer)
         
     | 
| 
      
 157 
     | 
    
         
            +
                    result = @buffer
         
     | 
| 
      
 158 
     | 
    
         
            +
                    reset_buffer
         
     | 
| 
      
 159 
     | 
    
         
            +
                    @pos += result.bytesize
         
     | 
| 
       143 
160 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                     
     | 
| 
       145 
     | 
    
         
            -
                     
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
      
 161 
     | 
    
         
            +
                    result.force_encoding @external_encoding unless @external_encoding.nil?
         
     | 
| 
      
 162 
     | 
    
         
            +
                    result = transcode_to_internal result
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                    result = out_buffer.replace result unless out_buffer.nil?
         
     | 
| 
      
 165 
     | 
    
         
            +
                    result
         
     | 
| 
       147 
166 
     | 
    
         
             
                  end
         
     | 
| 
       148 
167 
     | 
    
         | 
| 
       149 
168 
     | 
    
         
             
                  protected def transcode_to_internal(data)
         
     | 
| 
       150 
     | 
    
         
            -
                    data = data.encode @internal_encoding,  
     | 
| 
      
 169 
     | 
    
         
            +
                    data = data.encode @internal_encoding, **@transcode_options unless @internal_encoding.nil?
         
     | 
| 
       151 
170 
     | 
    
         
             
                    data
         
     | 
| 
       152 
171 
     | 
    
         
             
                  end
         
     | 
| 
       153 
172 
     | 
    
         | 
    
        data/lib/brs/stream/writer.rb
    CHANGED
    
    | 
         @@ -64,7 +64,7 @@ module BRS 
     | 
|
| 
       64 
64 
     | 
    
         
             
                  end
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
                  protected def write_remaining_buffer
         
     | 
| 
       67 
     | 
    
         
            -
                    return nil if @buffer.bytesize 
     | 
| 
      
 67 
     | 
    
         
            +
                    return nil if @buffer.bytesize.zero?
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                    @io.write @buffer
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
         @@ -77,6 +77,11 @@ module BRS 
     | 
|
| 
       77 
77 
     | 
    
         | 
| 
       78 
78 
     | 
    
         
             
                  # -- asynchronous --
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
      
 80 
     | 
    
         
            +
                  # IO write nonblock can raise wait writable error.
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # After resolving this error user may provide same content again.
         
     | 
| 
      
 82 
     | 
    
         
            +
                  # It is not possible to revert accepted content after error.
         
     | 
| 
      
 83 
     | 
    
         
            +
                  # So we have to accept content after processing IO write nonblock.
         
     | 
| 
      
 84 
     | 
    
         
            +
                  # It means that first write nonblock won't call IO write nonblock.
         
     | 
| 
       80 
85 
     | 
    
         
             
                  def write_nonblock(object, *options)
         
     | 
| 
       81 
86 
     | 
    
         
             
                    return 0 unless write_remaining_buffer_nonblock(*options)
         
     | 
| 
       82 
87 
     | 
    
         | 
| 
         @@ -120,14 +125,14 @@ module BRS 
     | 
|
| 
       120 
125 
     | 
    
         
             
                  end
         
     | 
| 
       121 
126 
     | 
    
         | 
| 
       122 
127 
     | 
    
         
             
                  protected def write_remaining_buffer_nonblock(*options)
         
     | 
| 
       123 
     | 
    
         
            -
                    return true if @buffer.bytesize 
     | 
| 
      
 128 
     | 
    
         
            +
                    return true if @buffer.bytesize.zero?
         
     | 
| 
       124 
129 
     | 
    
         | 
| 
       125 
130 
     | 
    
         
             
                    bytes_written = @io.write_nonblock @buffer, *options
         
     | 
| 
       126 
     | 
    
         
            -
                    return false if bytes_written 
     | 
| 
      
 131 
     | 
    
         
            +
                    return false if bytes_written.zero?
         
     | 
| 
       127 
132 
     | 
    
         | 
| 
       128 
133 
     | 
    
         
             
                    @buffer = @buffer.byteslice bytes_written, @buffer.bytesize - bytes_written
         
     | 
| 
       129 
134 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
                    @buffer.bytesize 
     | 
| 
      
 135 
     | 
    
         
            +
                    @buffer.bytesize.zero?
         
     | 
| 
       131 
136 
     | 
    
         
             
                  end
         
     | 
| 
       132 
137 
     | 
    
         | 
| 
       133 
138 
     | 
    
         
             
                  protected def raw_nonblock_wrapper(method_name, *args)
         
     | 
| 
         @@ -137,7 +142,7 @@ module BRS 
     | 
|
| 
       137 
142 
     | 
    
         
             
                  # -- common --
         
     | 
| 
       138 
143 
     | 
    
         | 
| 
       139 
144 
     | 
    
         
             
                  protected def transcode(data)
         
     | 
| 
       140 
     | 
    
         
            -
                    data = data.encode @external_encoding,  
     | 
| 
      
 145 
     | 
    
         
            +
                    data = data.encode @external_encoding, **@transcode_options unless @external_encoding.nil?
         
     | 
| 
       141 
146 
     | 
    
         
             
                    data
         
     | 
| 
       142 
147 
     | 
    
         
             
                  end
         
     | 
| 
       143 
148 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Ruby bindings for brotli library.
         
     | 
| 
       2 
2 
     | 
    
         
             
            # Copyright (c) 2019 AUTHORS, MIT License.
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            require "English"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       4 
6 
     | 
    
         
             
            require_relative "../error"
         
     | 
| 
       5 
7 
     | 
    
         
             
            require_relative "../validation"
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
         @@ -11,18 +13,13 @@ module BRS 
     | 
|
| 
       11 
13 
     | 
    
         
             
                    write object
         
     | 
| 
       12 
14 
     | 
    
         
             
                  end
         
     | 
| 
       13 
15 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                  def print(*objects)
         
     | 
| 
       15 
     | 
    
         
            -
                    if objects.empty?
         
     | 
| 
       16 
     | 
    
         
            -
                      write $LAST_READ_LINE unless $LAST_READ_LINE.nil?
         
     | 
| 
       17 
     | 
    
         
            -
                      return nil
         
     | 
| 
       18 
     | 
    
         
            -
                    end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def print(*objects, field_separator: $OUTPUT_FIELD_SEPARATOR, record_separator: $OUTPUT_RECORD_SEPARATOR)
         
     | 
| 
       20 
17 
     | 
    
         
             
                    objects.each do |object|
         
     | 
| 
       21 
18 
     | 
    
         
             
                      write object
         
     | 
| 
       22 
     | 
    
         
            -
                      write  
     | 
| 
      
 19 
     | 
    
         
            +
                      write field_separator unless field_separator.nil?
         
     | 
| 
       23 
20 
     | 
    
         
             
                    end
         
     | 
| 
       24 
21 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    write  
     | 
| 
      
 22 
     | 
    
         
            +
                    write record_separator unless record_separator.nil?
         
     | 
| 
       26 
23 
     | 
    
         | 
| 
       27 
24 
     | 
    
         
             
                    nil
         
     | 
| 
       28 
25 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -34,9 +31,10 @@ module BRS 
     | 
|
| 
       34 
31 
     | 
    
         
             
                  end
         
     | 
| 
       35 
32 
     | 
    
         | 
| 
       36 
33 
     | 
    
         
             
                  def putc(object, encoding: ::Encoding::BINARY)
         
     | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
      
 34 
     | 
    
         
            +
                    case object
         
     | 
| 
      
 35 
     | 
    
         
            +
                    when ::Numeric
         
     | 
| 
       38 
36 
     | 
    
         
             
                      write object.chr(encoding)
         
     | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
      
 37 
     | 
    
         
            +
                    when ::String
         
     | 
| 
       40 
38 
     | 
    
         
             
                      write object[0]
         
     | 
| 
       41 
39 
     | 
    
         
             
                    else
         
     | 
| 
       42 
40 
     | 
    
         
             
                      raise ValidateError, "invalid object: \"#{object}\" for putc"
         
     | 
    
        data/lib/brs/validation.rb
    CHANGED
    
    | 
         @@ -5,12 +5,25 @@ require_relative "error" 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            module BRS
         
     | 
| 
       7 
7 
     | 
    
         
             
              module Validation
         
     | 
| 
      
 8 
     | 
    
         
            +
                IO_METHODS = %i[
         
     | 
| 
      
 9 
     | 
    
         
            +
                  read
         
     | 
| 
      
 10 
     | 
    
         
            +
                  write
         
     | 
| 
      
 11 
     | 
    
         
            +
                  readpartial
         
     | 
| 
      
 12 
     | 
    
         
            +
                  read_nonblock
         
     | 
| 
      
 13 
     | 
    
         
            +
                  write_nonblock
         
     | 
| 
      
 14 
     | 
    
         
            +
                  eof?
         
     | 
| 
      
 15 
     | 
    
         
            +
                  flush
         
     | 
| 
      
 16 
     | 
    
         
            +
                  close
         
     | 
| 
      
 17 
     | 
    
         
            +
                  closed?
         
     | 
| 
      
 18 
     | 
    
         
            +
                ]
         
     | 
| 
      
 19 
     | 
    
         
            +
                .freeze
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       8 
21 
     | 
    
         
             
                def self.validate_bool(value)
         
     | 
| 
       9 
22 
     | 
    
         
             
                  raise ValidateError, "invalid bool" unless value.is_a?(::TrueClass) || value.is_a?(::FalseClass)
         
     | 
| 
       10 
23 
     | 
    
         
             
                end
         
     | 
| 
       11 
24 
     | 
    
         | 
| 
       12 
25 
     | 
    
         
             
                def self.validate_positive_integer(value)
         
     | 
| 
       13 
     | 
    
         
            -
                  raise ValidateError, "invalid positive integer" unless value.is_a?(::Integer) && value 
     | 
| 
      
 26 
     | 
    
         
            +
                  raise ValidateError, "invalid positive integer" unless value.is_a?(::Integer) && value.positive?
         
     | 
| 
       14 
27 
     | 
    
         
             
                end
         
     | 
| 
       15 
28 
     | 
    
         | 
| 
       16 
29 
     | 
    
         
             
                def self.validate_not_negative_integer(value)
         
     | 
| 
         @@ -26,7 +39,7 @@ module BRS 
     | 
|
| 
       26 
39 
     | 
    
         
             
                end
         
     | 
| 
       27 
40 
     | 
    
         | 
| 
       28 
41 
     | 
    
         
             
                def self.validate_io(value)
         
     | 
| 
       29 
     | 
    
         
            -
                  raise ValidateError, "invalid io" unless value. 
     | 
| 
      
 42 
     | 
    
         
            +
                  raise ValidateError, "invalid io" unless IO_METHODS.all? { |method| value.respond_to? method }
         
     | 
| 
       30 
43 
     | 
    
         
             
                end
         
     | 
| 
       31 
44 
     | 
    
         | 
| 
       32 
45 
     | 
    
         
             
                def self.validate_hash(value)
         
     | 
    
        data/lib/brs/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,29 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ruby-brs
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andrew Aladjev
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-10-09 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: codecov
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       13 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
28 
     | 
    
         
             
              name: minitar
         
     | 
| 
       15 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -52,20 +66,34 @@ dependencies: 
     | 
|
| 
       52 
66 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
68 
     | 
    
         
             
                    version: '1.1'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       55 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
84 
     | 
    
         
             
              name: rake-compiler
         
     | 
| 
       57 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - - " 
     | 
| 
      
 87 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       60 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       62 
90 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
91 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
92 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
     | 
    
         
            -
                - - " 
     | 
| 
      
 94 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       67 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       69 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
98 
     | 
    
         
             
              name: rubocop
         
     | 
| 
       71 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -95,19 +123,19 @@ dependencies: 
     | 
|
| 
       95 
123 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       96 
124 
     | 
    
         
             
                    version: '1.5'
         
     | 
| 
       97 
125 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       98 
     | 
    
         
            -
              name:  
     | 
| 
      
 126 
     | 
    
         
            +
              name: simplecov
         
     | 
| 
       99 
127 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       100 
128 
     | 
    
         
             
                requirements:
         
     | 
| 
       101 
     | 
    
         
            -
                - - " 
     | 
| 
      
 129 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       102 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       103 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 131 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       104 
132 
     | 
    
         
             
              type: :development
         
     | 
| 
       105 
133 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       106 
134 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       107 
135 
     | 
    
         
             
                requirements:
         
     | 
| 
       108 
     | 
    
         
            -
                - - " 
     | 
| 
      
 136 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       109 
137 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       110 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 138 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       111 
139 
     | 
    
         
             
            description: 
         
     | 
| 
       112 
140 
     | 
    
         
             
            email: aladjev.andrew@gmail.com
         
     | 
| 
       113 
141 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -165,14 +193,14 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       165 
193 
     | 
    
         
             
              requirements:
         
     | 
| 
       166 
194 
     | 
    
         
             
              - - ">="
         
     | 
| 
       167 
195 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       168 
     | 
    
         
            -
                  version: ' 
     | 
| 
      
 196 
     | 
    
         
            +
                  version: '2.5'
         
     | 
| 
       169 
197 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       170 
198 
     | 
    
         
             
              requirements:
         
     | 
| 
       171 
199 
     | 
    
         
             
              - - ">="
         
     | 
| 
       172 
200 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       173 
201 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       174 
202 
     | 
    
         
             
            requirements: []
         
     | 
| 
       175 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 203 
     | 
    
         
            +
            rubygems_version: 3.1.4
         
     | 
| 
       176 
204 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       177 
205 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       178 
206 
     | 
    
         
             
            summary: Ruby bindings for brotli library.
         
     |