ruby-brs 1.3.1 → 1.3.2

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
  SHA256:
3
- metadata.gz: 863866e6104d00a5ddb331c3dbf693789b9c45d6669613128daebdf19fd1814d
4
- data.tar.gz: d6bdbf9826d47a28b7360b3899953a57ba6769053bac9e5c1d598b70494de6ef
3
+ metadata.gz: 614baececc4a64311bdd172a962cb5f9bc721b2ade99ed84216ab79908f5a0ca
4
+ data.tar.gz: 88899da83cd343c1217652b7558a6770e43bd7722f3db7e1e3023ad54888bb54
5
5
  SHA512:
6
- metadata.gz: 9d2dbcdea7dd3904429b79a2af1cec88d6695e17437547f76c08649c117bb19d0943a4db7e9cc6335eebfdac04d1f818ca08af733a943b9b79e1b426909de751
7
- data.tar.gz: ff911df08d9cd98516cbb4c734af7816de17d80346939ecdf39bc3c6a0dfe0c0bbb1d9d0e31e81f34d06b6b32a9e791805f7a7983cfaf2b3f6562532f9351322
6
+ metadata.gz: efb6e0ec7ee97e4d4c6977b6843ee81ae6ec334af2985674634ea31a24ff00373753cc828bbc250ec137700fa721f84e1071fd6486cbbc2db869e4e6850e7255
7
+ data.tar.gz: 0ad07a2ebbbbbd27ff47a4e2780e90f297f4d02b36107f2877d45863f538b3f9b32b6aab18451a6376f620c6eee50118b6023b405cdb1f7c8079f1b8a295fd82
data/AUTHORS CHANGED
@@ -1 +1,2 @@
1
1
  Andrew Aladjev
2
+ Jenner La Fave
data/README.md CHANGED
@@ -8,7 +8,17 @@ See [brotli library](https://github.com/google/brotli).
8
8
 
9
9
  ## Installation
10
10
 
11
- Please install brotli library first, use latest 1.0.0+ version.
11
+ Operating systems: GNU/Linux, FreeBSD, OSX, Windows (MinGW).
12
+
13
+ Dependencies: [brotli](https://github.com/google/brotli) 1.0.0+ version.
14
+
15
+ | Popular OS | Dependencies |
16
+ |------------|---------------------------|
17
+ | Ubuntu | `libbrotli-dev` |
18
+ | CentOS | `brotli-devel` |
19
+ | ArchLinux | `brotli` |
20
+ | OSX | `brotli` |
21
+ | Windows | `mingw-w64-x86_64-brotli` |
12
22
 
13
23
  ```sh
14
24
  gem install ruby-brs
@@ -23,6 +33,22 @@ gem install pkg/ruby-brs-*.gem
23
33
 
24
34
  You can also use [overlay](https://github.com/andrew-aladev/overlay) for gentoo.
25
35
 
36
+ ### Installation in macOS on Apple Silicon
37
+
38
+ On M1 Macs, Homebrew installs to /opt/homebrew, so you'll need to specify its
39
+ include and lib paths when building the native extension for brotli.
40
+
41
+ ```sh
42
+ brew install brotli
43
+ gem install ruby-brs -- --with-opt-include=/opt/homebrew/include --with-opt-lib=/opt/homebrew/lib
44
+ ```
45
+
46
+ You can also configure Bundler to use those options when installing:
47
+
48
+ ```sh
49
+ bundle config set build.ruby-brs "--with-opt-include=/opt/homebrew/include --with-opt-lib=/opt/homebrew/lib"
50
+ ```
51
+
26
52
  ## Usage
27
53
 
28
54
  There are simple APIs: `String` and `File`. Also you can use generic streaming API: `Stream::Writer` and `Stream::Reader`.
@@ -367,10 +393,6 @@ You should lock all shared data between threads.
367
393
  For example: you should not use same compressor/decompressor inside multiple threads.
368
394
  Please verify that you are using each processor inside single thread at the same time.
369
395
 
370
- ## Operating systems
371
-
372
- GNU/Linux, FreeBSD, OSX, Windows (MinGW).
373
-
374
396
  ## CI
375
397
 
376
398
  Please visit [scripts/test-images](scripts/test-images).
data/ext/brs_ext/gvl.h CHANGED
@@ -4,7 +4,7 @@
4
4
  #if !defined(BRS_EXT_GVL_H)
5
5
  #define BRS_EXT_GVL_H
6
6
 
7
- #ifdef HAVE_RB_THREAD_CALL_WITHOUT_GVL
7
+ #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
8
8
 
9
9
  #include "ruby/thread.h"
10
10
 
@@ -19,6 +19,6 @@
19
19
 
20
20
  #define BRS_EXT_GVL_WRAP(_gvl, function, data) function((void*) data);
21
21
 
22
- #endif
22
+ #endif // HAVE_RB_THREAD_CALL_WITHOUT_GVL
23
23
 
24
24
  #endif // BRS_EXT_GVL_H
data/ext/brs_ext/macro.h CHANGED
@@ -8,6 +8,6 @@
8
8
  #define BRS_EXT_UNUSED(x) x __attribute__((__unused__))
9
9
  #else
10
10
  #define BRS_EXT_UNUSED(x) x
11
- #endif
11
+ #endif // __GNUC__
12
12
 
13
13
  #endif // BRS_EXT_MACRO_H
@@ -24,9 +24,7 @@ module BRS
24
24
 
25
25
  def initialize(io, options = {})
26
26
  @raw_stream = create_raw_stream
27
-
28
- Validation.validate_io io
29
- @io = io
27
+ @io = io
30
28
 
31
29
  @stat = Stat.new @io.stat if @io.respond_to? :stat
32
30
 
@@ -135,13 +133,19 @@ module BRS
135
133
  end
136
134
 
137
135
  def close
138
- @io.close
136
+ @io.close if @io.respond_to? :close
139
137
 
140
138
  nil
141
139
  end
142
140
 
143
141
  def closed?
144
- @raw_stream.closed? && @io.closed?
142
+ return false unless @raw_stream.closed?
143
+
144
+ if @io.respond_to? :closed
145
+ @io.closed?
146
+ else
147
+ true
148
+ end
145
149
  end
146
150
 
147
151
  def to_io
@@ -54,6 +54,9 @@ module BRS
54
54
  Validation.validate_not_negative_integer bytes_to_read unless bytes_to_read.nil?
55
55
  Validation.validate_string out_buffer unless out_buffer.nil?
56
56
 
57
+ raise ValidateError, "io should be responsible to read and eof" unless
58
+ @io.respond_to?(:read) && @io.respond_to?(:eof?)
59
+
57
60
  unless bytes_to_read.nil?
58
61
  return ::String.new :encoding => ::Encoding::BINARY if bytes_to_read.zero?
59
62
  return nil if eof?
@@ -86,16 +89,22 @@ module BRS
86
89
  end
87
90
 
88
91
  def eof?
92
+ raise ValidateError, "io should be responsible to eof" unless @io.respond_to? :eof?
93
+
89
94
  empty? && @io.eof?
90
95
  end
91
96
 
92
97
  # -- asynchronous --
93
98
 
94
99
  def readpartial(bytes_to_read, out_buffer = nil)
100
+ raise ValidateError, "io should be responsible to readpartial" unless @io.respond_to? :readpartial
101
+
95
102
  read_more_nonblock(bytes_to_read, out_buffer) { @io.readpartial @source_buffer_length }
96
103
  end
97
104
 
98
105
  def read_nonblock(bytes_to_read, out_buffer = nil, *options)
106
+ raise ValidateError, "io should be responsible to read nonblock" unless @io.respond_to? :read_nonblock
107
+
99
108
  read_more_nonblock(bytes_to_read, out_buffer) { @io.read_nonblock(@source_buffer_length, *options) }
100
109
  end
101
110
 
@@ -23,6 +23,8 @@ module BRS
23
23
  # -- synchronous --
24
24
 
25
25
  def write(*objects)
26
+ validate_write
27
+
26
28
  write_remaining_buffer
27
29
 
28
30
  bytes_written = 0
@@ -38,20 +40,26 @@ module BRS
38
40
  end
39
41
 
40
42
  def flush
43
+ validate_write
44
+
41
45
  finish :flush
42
46
 
43
- @io.flush
47
+ @io.flush if @io.respond_to? :flush
44
48
 
45
49
  self
46
50
  end
47
51
 
48
52
  def rewind
53
+ validate_write
54
+
49
55
  finish :close
50
56
 
51
57
  super
52
58
  end
53
59
 
54
60
  def close
61
+ validate_write
62
+
55
63
  finish :close
56
64
 
57
65
  super
@@ -75,6 +83,10 @@ module BRS
75
83
  @raw_stream.send(method_name, *args) { |portion| @io.write portion }
76
84
  end
77
85
 
86
+ def validate_write
87
+ raise ValidateError, "io should be responsible to write" unless @io.respond_to? :write
88
+ end
89
+
78
90
  # -- asynchronous --
79
91
 
80
92
  # IO write nonblock can raise wait writable error.
@@ -83,6 +95,8 @@ module BRS
83
95
  # So we have to accept content after processing IO write nonblock.
84
96
  # It means that first write nonblock won't call IO write nonblock.
85
97
  def write_nonblock(object, *options)
98
+ validate_write_nonblock
99
+
86
100
  return 0 unless write_remaining_buffer_nonblock(*options)
87
101
 
88
102
  source = transcode object.to_s
@@ -93,14 +107,18 @@ module BRS
93
107
  end
94
108
 
95
109
  def flush_nonblock(*options)
110
+ validate_write_nonblock
111
+
96
112
  return false unless finish_nonblock :flush, *options
97
113
 
98
- @io.flush
114
+ @io.flush if @io.respond_to? :flush
99
115
 
100
116
  true
101
117
  end
102
118
 
103
119
  def rewind_nonblock(*options)
120
+ validate_write_nonblock
121
+
104
122
  return false unless finish_nonblock :close, *options
105
123
 
106
124
  method(:rewind).super_method.call
@@ -109,6 +127,8 @@ module BRS
109
127
  end
110
128
 
111
129
  def close_nonblock(*options)
130
+ validate_write_nonblock
131
+
112
132
  return false unless finish_nonblock :close, *options
113
133
 
114
134
  method(:close).super_method.call
@@ -139,6 +159,10 @@ module BRS
139
159
  @raw_stream.send(method_name, *args) { |portion| @buffer << portion }
140
160
  end
141
161
 
162
+ def validate_write_nonblock
163
+ raise ValidateError, "io should be responsible to write nonblock" unless @io.respond_to? :write_nonblock
164
+ end
165
+
142
166
  # -- common --
143
167
 
144
168
  protected def transcode(data)
@@ -5,45 +5,20 @@ 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
-
21
8
  def self.validate_bool(value)
22
9
  raise ValidateError, "invalid bool" unless value.is_a?(::TrueClass) || value.is_a?(::FalseClass)
23
10
  end
24
11
 
25
- def self.validate_positive_integer(value)
26
- raise ValidateError, "invalid positive integer" unless value.is_a?(::Integer) && value.positive?
12
+ def self.validate_hash(value)
13
+ raise ValidateError, "invalid hash" unless value.is_a? ::Hash
27
14
  end
28
15
 
29
16
  def self.validate_not_negative_integer(value)
30
17
  raise ValidateError, "invalid not negative integer" unless value.is_a?(::Integer) && value >= 0
31
18
  end
32
19
 
33
- def self.validate_string(value)
34
- raise ValidateError, "invalid string" unless value.is_a? ::String
35
- end
36
-
37
- def self.validate_symbol(value)
38
- raise ValidateError, "invalid symbol" unless value.is_a? ::Symbol
39
- end
40
-
41
- def self.validate_io(value)
42
- raise ValidateError, "invalid io" unless IO_METHODS.all? { |method| value.respond_to? method }
43
- end
44
-
45
- def self.validate_hash(value)
46
- raise ValidateError, "invalid hash" unless value.is_a? ::Hash
20
+ def self.validate_positive_integer(value)
21
+ raise ValidateError, "invalid positive integer" unless value.is_a?(::Integer) && value.positive?
47
22
  end
48
23
 
49
24
  def self.validate_proc(value)
@@ -51,5 +26,13 @@ module BRS
51
26
  raise ValidateError, "invalid proc"
52
27
  end
53
28
  end
29
+
30
+ def self.validate_string(value)
31
+ raise ValidateError, "invalid string" unless value.is_a? ::String
32
+ end
33
+
34
+ def self.validate_symbol(value)
35
+ raise ValidateError, "invalid symbol" unless value.is_a? ::Symbol
36
+ end
54
37
  end
55
38
  end
data/lib/brs/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  module BRS
5
- VERSION = "1.3.1".freeze
5
+ VERSION = "1.3.2".freeze
6
6
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-brs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Aladjev
8
+ - Jenner La Fave
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2022-01-07 00:00:00.000000000 Z
12
+ date: 2022-03-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: codecov
@@ -128,14 +129,14 @@ dependencies:
128
129
  requirements:
129
130
  - - "~>"
130
131
  - !ruby/object:Gem::Version
131
- version: '1.24'
132
+ version: '1.26'
132
133
  type: :development
133
134
  prerelease: false
134
135
  version_requirements: !ruby/object:Gem::Requirement
135
136
  requirements:
136
137
  - - "~>"
137
138
  - !ruby/object:Gem::Version
138
- version: '1.24'
139
+ version: '1.26'
139
140
  - !ruby/object:Gem::Dependency
140
141
  name: rubocop-minitest
141
142
  requirement: !ruby/object:Gem::Requirement
@@ -258,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
259
  - !ruby/object:Gem::Version
259
260
  version: '0'
260
261
  requirements: []
261
- rubygems_version: 3.3.3
262
+ rubygems_version: 3.3.7
262
263
  signing_key:
263
264
  specification_version: 4
264
265
  summary: Ruby bindings for brotli library.