ruby-brs 1.3.1 → 1.3.2

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
  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.