ruby-lzws 1.2.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,9 +12,9 @@
12
12
 
13
13
  #include "lzws_ext/buffer.h"
14
14
  #include "lzws_ext/error.h"
15
+ #include "lzws_ext/gvl.h"
15
16
  #include "lzws_ext/macro.h"
16
17
  #include "lzws_ext/option.h"
17
- #include "ruby.h"
18
18
 
19
19
  // -- buffer --
20
20
 
@@ -41,30 +41,67 @@ static inline lzws_ext_result_t increase_destination_buffer(
41
41
  return 0;
42
42
  }
43
43
 
44
- // -- utils --
44
+ // -- compress --
45
45
 
46
- #define GET_SOURCE_DATA(source_value) \
47
- Check_Type(source_value, T_STRING); \
48
- \
49
- const char* source = RSTRING_PTR(source_value); \
50
- size_t source_length = RSTRING_LEN(source_value);
46
+ typedef struct
47
+ {
48
+ lzws_compressor_state_t* state_ptr;
49
+ lzws_ext_byte_t** remaining_source_ptr;
50
+ size_t* remaining_source_length_ptr;
51
+ lzws_ext_byte_t* remaining_destination_buffer;
52
+ size_t* remaining_destination_buffer_length_ptr;
53
+ lzws_result_t result;
54
+ } compress_args_t;
55
+
56
+ typedef struct
57
+ {
58
+ lzws_compressor_state_t* state_ptr;
59
+ lzws_ext_byte_t* remaining_destination_buffer;
60
+ size_t* remaining_destination_buffer_length_ptr;
61
+ lzws_result_t result;
62
+ } compressor_finish_args_t;
51
63
 
52
- // -- compress --
64
+ static inline void* compress_wrapper(void* data)
65
+ {
66
+ compress_args_t* args = data;
67
+
68
+ args->result = lzws_compress(
69
+ args->state_ptr,
70
+ args->remaining_source_ptr,
71
+ args->remaining_source_length_ptr,
72
+ &args->remaining_destination_buffer,
73
+ args->remaining_destination_buffer_length_ptr);
74
+
75
+ return NULL;
76
+ }
77
+
78
+ static inline void* compressor_finish_wrapper(void* data)
79
+ {
80
+ compressor_finish_args_t* args = data;
81
+
82
+ args->result = lzws_compressor_finish(
83
+ args->state_ptr, &args->remaining_destination_buffer, args->remaining_destination_buffer_length_ptr);
84
+
85
+ return NULL;
86
+ }
53
87
 
54
- #define BUFFERED_COMPRESS(function, ...) \
88
+ #define BUFFERED_COMPRESS(gvl, wrapper, args) \
55
89
  while (true) { \
56
90
  lzws_ext_byte_t* remaining_destination_buffer = \
57
91
  (lzws_ext_byte_t*) RSTRING_PTR(destination_value) + destination_length; \
58
92
  size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length; \
59
93
  \
60
- result = function(__VA_ARGS__, &remaining_destination_buffer, &remaining_destination_buffer_length); \
61
- if (result != 0 && result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
94
+ args.remaining_destination_buffer = remaining_destination_buffer; \
95
+ args.remaining_destination_buffer_length_ptr = &remaining_destination_buffer_length; \
96
+ \
97
+ LZWS_EXT_GVL_WRAP(gvl, wrapper, &args); \
98
+ if (args.result != 0 && args.result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
62
99
  return LZWS_EXT_ERROR_UNEXPECTED; \
63
100
  } \
64
101
  \
65
102
  destination_length += prev_remaining_destination_buffer_length - remaining_destination_buffer_length; \
66
103
  \
67
- if (result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
104
+ if (args.result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
68
105
  ext_result = increase_destination_buffer( \
69
106
  destination_value, destination_length, &remaining_destination_buffer_length, destination_buffer_length); \
70
107
  \
@@ -83,17 +120,24 @@ static inline lzws_ext_result_t compress(
83
120
  const char* source,
84
121
  size_t source_length,
85
122
  VALUE destination_value,
86
- size_t destination_buffer_length)
123
+ size_t destination_buffer_length,
124
+ bool gvl)
87
125
  {
88
- lzws_result_t result;
89
126
  lzws_ext_result_t ext_result;
90
127
  lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source;
91
128
  size_t remaining_source_length = source_length;
92
129
  size_t destination_length = 0;
93
130
  size_t remaining_destination_buffer_length = destination_buffer_length;
94
131
 
95
- BUFFERED_COMPRESS(lzws_compress, state_ptr, &remaining_source, &remaining_source_length);
96
- BUFFERED_COMPRESS(lzws_compressor_finish, state_ptr);
132
+ compress_args_t args = {
133
+ .state_ptr = state_ptr,
134
+ .remaining_source_ptr = &remaining_source,
135
+ .remaining_source_length_ptr = &remaining_source_length};
136
+
137
+ BUFFERED_COMPRESS(gvl, compress_wrapper, args);
138
+
139
+ compressor_finish_args_t finish_args = {.state_ptr = state_ptr};
140
+ BUFFERED_COMPRESS(gvl, compressor_finish_wrapper, finish_args);
97
141
 
98
142
  int exception;
99
143
 
@@ -107,10 +151,11 @@ static inline lzws_ext_result_t compress(
107
151
 
108
152
  VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value, VALUE options)
109
153
  {
110
- GET_SOURCE_DATA(source_value);
154
+ Check_Type(source_value, T_STRING);
111
155
  Check_Type(options, T_HASH);
156
+ LZWS_EXT_GET_SIZE_OPTION(options, destination_buffer_length);
157
+ LZWS_EXT_GET_BOOL_OPTION(options, gvl);
112
158
  LZWS_EXT_GET_COMPRESSOR_OPTIONS(options);
113
- LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, destination_buffer_length);
114
159
 
115
160
  lzws_compressor_state_t* state_ptr;
116
161
 
@@ -138,8 +183,11 @@ VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value,
138
183
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
139
184
  }
140
185
 
186
+ const char* source = RSTRING_PTR(source_value);
187
+ size_t source_length = RSTRING_LEN(source_value);
188
+
141
189
  lzws_ext_result_t ext_result =
142
- compress(state_ptr, source, source_length, destination_value, destination_buffer_length);
190
+ compress(state_ptr, source, source_length, destination_value, destination_buffer_length, gvl);
143
191
 
144
192
  lzws_compressor_free_state(state_ptr);
145
193
 
@@ -152,34 +200,60 @@ VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value,
152
200
 
153
201
  // -- decompress --
154
202
 
203
+ typedef struct
204
+ {
205
+ lzws_decompressor_state_t* state_ptr;
206
+ lzws_ext_byte_t** remaining_source_ptr;
207
+ size_t* remaining_source_length_ptr;
208
+ lzws_ext_byte_t* remaining_destination_buffer;
209
+ size_t* remaining_destination_buffer_length_ptr;
210
+ lzws_result_t result;
211
+ } decompress_args_t;
212
+
213
+ static inline void* decompress_wrapper(void* data)
214
+ {
215
+ decompress_args_t* args = data;
216
+
217
+ args->result = lzws_decompress(
218
+ args->state_ptr,
219
+ args->remaining_source_ptr,
220
+ args->remaining_source_length_ptr,
221
+ &args->remaining_destination_buffer,
222
+ args->remaining_destination_buffer_length_ptr);
223
+
224
+ return NULL;
225
+ }
226
+
155
227
  static inline lzws_ext_result_t decompress(
156
228
  lzws_decompressor_state_t* state_ptr,
157
229
  const char* source,
158
230
  size_t source_length,
159
231
  VALUE destination_value,
160
- size_t destination_buffer_length)
232
+ size_t destination_buffer_length,
233
+ bool gvl)
161
234
  {
162
- lzws_result_t result;
163
235
  lzws_ext_result_t ext_result;
164
236
  lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source;
165
237
  size_t remaining_source_length = source_length;
166
238
  size_t destination_length = 0;
167
239
  size_t remaining_destination_buffer_length = destination_buffer_length;
168
240
 
241
+ decompress_args_t args = {
242
+ .state_ptr = state_ptr,
243
+ .remaining_source_ptr = &remaining_source,
244
+ .remaining_source_length_ptr = &remaining_source_length};
245
+
169
246
  while (true) {
170
247
  lzws_ext_byte_t* remaining_destination_buffer =
171
248
  (lzws_ext_byte_t*) RSTRING_PTR(destination_value) + destination_length;
172
249
  size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
173
250
 
174
- result = lzws_decompress(
175
- state_ptr,
176
- &remaining_source,
177
- &remaining_source_length,
178
- &remaining_destination_buffer,
179
- &remaining_destination_buffer_length);
251
+ args.remaining_destination_buffer = remaining_destination_buffer;
252
+ args.remaining_destination_buffer_length_ptr = &remaining_destination_buffer_length;
180
253
 
181
- if (result != 0 && result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
182
- switch (result) {
254
+ LZWS_EXT_GVL_WRAP(gvl, decompress_wrapper, &args);
255
+ if (args.result != 0 && args.result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
256
+ switch (args.result) {
183
257
  case LZWS_DECOMPRESSOR_INVALID_MAGIC_HEADER:
184
258
  case LZWS_DECOMPRESSOR_INVALID_MAX_CODE_BIT_LENGTH:
185
259
  return LZWS_EXT_ERROR_VALIDATE_FAILED;
@@ -192,7 +266,7 @@ static inline lzws_ext_result_t decompress(
192
266
 
193
267
  destination_length += prev_remaining_destination_buffer_length - remaining_destination_buffer_length;
194
268
 
195
- if (result == LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
269
+ if (args.result == LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
196
270
  ext_result = increase_destination_buffer(
197
271
  destination_value, destination_length, &remaining_destination_buffer_length, destination_buffer_length);
198
272
 
@@ -218,10 +292,11 @@ static inline lzws_ext_result_t decompress(
218
292
 
219
293
  VALUE lzws_ext_decompress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value, VALUE options)
220
294
  {
221
- GET_SOURCE_DATA(source_value);
295
+ Check_Type(source_value, T_STRING);
222
296
  Check_Type(options, T_HASH);
297
+ LZWS_EXT_GET_SIZE_OPTION(options, destination_buffer_length);
298
+ LZWS_EXT_GET_BOOL_OPTION(options, gvl);
223
299
  LZWS_EXT_GET_DECOMPRESSOR_OPTIONS(options);
224
- LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, destination_buffer_length);
225
300
 
226
301
  lzws_decompressor_state_t* state_ptr;
227
302
 
@@ -247,8 +322,11 @@ VALUE lzws_ext_decompress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value
247
322
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
248
323
  }
249
324
 
325
+ const char* source = RSTRING_PTR(source_value);
326
+ size_t source_length = RSTRING_LEN(source_value);
327
+
250
328
  lzws_ext_result_t ext_result =
251
- decompress(state_ptr, source, source_length, destination_value, destination_buffer_length);
329
+ decompress(state_ptr, source, source_length, destination_value, destination_buffer_length, gvl);
252
330
 
253
331
  lzws_decompressor_free_state(state_ptr);
254
332
 
@@ -259,6 +337,8 @@ VALUE lzws_ext_decompress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value
259
337
  return destination_value;
260
338
  }
261
339
 
340
+ // -- exports --
341
+
262
342
  void lzws_ext_string_exports(VALUE root_module)
263
343
  {
264
344
  rb_define_module_function(root_module, "_native_compress_string", RUBY_METHOD_FUNC(lzws_ext_compress_string), 2);
data/lib/lzws/file.rb CHANGED
@@ -17,7 +17,7 @@ module LZWS
17
17
 
18
18
  options = Option.get_compressor_options options, BUFFER_LENGTH_NAMES
19
19
 
20
- open_files(source, destination) do |source_io, destination_io|
20
+ open_files source, destination do |source_io, destination_io|
21
21
  LZWS._native_compress_io source_io, destination_io, options
22
22
  end
23
23
 
@@ -30,7 +30,7 @@ module LZWS
30
30
 
31
31
  options = Option.get_decompressor_options options, BUFFER_LENGTH_NAMES
32
32
 
33
- open_files(source, destination) do |source_io, destination_io|
33
+ open_files source, destination do |source_io, destination_io|
34
34
  LZWS._native_decompress_io source_io, destination_io, options
35
35
  end
36
36
 
data/lib/lzws/option.rb CHANGED
@@ -10,14 +10,39 @@ module LZWS
10
10
  module Option
11
11
  DEFAULT_BUFFER_LENGTH = 0
12
12
 
13
+ COMPRESSOR_DEFAULTS = {
14
+ :gvl => false,
15
+ :max_code_bit_length => nil,
16
+ :without_magic_header => nil,
17
+ :block_mode => nil,
18
+ :msb => nil,
19
+ :unaligned_bit_groups => nil,
20
+ :quiet => nil
21
+ }
22
+ .freeze
23
+
24
+ DECOMPRESSOR_DEFAULTS = {
25
+ :gvl => false,
26
+ :without_magic_header => nil,
27
+ :msb => nil,
28
+ :unaligned_bit_groups => nil,
29
+ :quiet => nil
30
+ }
31
+ .freeze
32
+
13
33
  def self.get_compressor_options(options, buffer_length_names)
14
34
  Validation.validate_hash options
15
35
 
16
- buffer_length_defaults = buffer_length_names.each_with_object({}) { |name, defaults| defaults[name] = DEFAULT_BUFFER_LENGTH }
17
- options = buffer_length_defaults.merge options
36
+ buffer_length_defaults = buffer_length_names.each_with_object({}) do |name, defaults|
37
+ defaults[name] = DEFAULT_BUFFER_LENGTH
38
+ end
39
+
40
+ options = COMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
18
41
 
19
42
  buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
20
43
 
44
+ Validation.validate_bool options[:gvl]
45
+
21
46
  max_code_bit_length = options[:max_code_bit_length]
22
47
  unless max_code_bit_length.nil?
23
48
  Validation.validate_positive_integer max_code_bit_length
@@ -46,11 +71,16 @@ module LZWS
46
71
  def self.get_decompressor_options(options, buffer_length_names)
47
72
  Validation.validate_hash options
48
73
 
49
- buffer_length_defaults = buffer_length_names.each_with_object({}) { |name, defaults| defaults[name] = DEFAULT_BUFFER_LENGTH }
50
- options = buffer_length_defaults.merge options
74
+ buffer_length_defaults = buffer_length_names.each_with_object({}) do |name, defaults|
75
+ defaults[name] = DEFAULT_BUFFER_LENGTH
76
+ end
77
+
78
+ options = DECOMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
51
79
 
52
80
  buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
53
81
 
82
+ Validation.validate_bool options[:gvl]
83
+
54
84
  without_magic_header = options[:without_magic_header]
55
85
  Validation.validate_bool without_magic_header unless without_magic_header.nil?
56
86
 
@@ -12,7 +12,8 @@ module LZWS
12
12
  # Native stream is not seekable by design.
13
13
  # Related methods like "seek" and "pos=" can't be implemented.
14
14
 
15
- # It is not possible to maintain correspondance between bytes consumed from source and bytes written to destination by design.
15
+ # It is not possible to maintain correspondance between bytes
16
+ # consumed from source and bytes written to destination by design.
16
17
  # We will consume all source bytes and maintain buffer with remaining destination data.
17
18
 
18
19
  include Delegates
@@ -89,8 +90,9 @@ module LZWS
89
90
  end
90
91
 
91
92
  internal_encoding = args[1]
92
- Validation.validate_string internal_encoding \
93
- unless internal_encoding.nil? || internal_encoding.is_a?(::Encoding)
93
+ unless internal_encoding.nil? || internal_encoding.is_a?(::Encoding)
94
+ Validation.validate_string internal_encoding
95
+ end
94
96
 
95
97
  transcode_options = args[2]
96
98
  Validation.validate_hash transcode_options unless transcode_options.nil?
@@ -33,8 +33,9 @@ module LZWS
33
33
  source_buffer_length = @options[:source_buffer_length]
34
34
  Validation.validate_not_negative_integer source_buffer_length unless source_buffer_length.nil?
35
35
 
36
- source_buffer_length = Buffer::DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR \
37
- if source_buffer_length.nil? || source_buffer_length.zero?
36
+ if source_buffer_length.nil? || source_buffer_length.zero?
37
+ source_buffer_length = Buffer::DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR
38
+ end
38
39
 
39
40
  @source_buffer_length = source_buffer_length
40
41
  end
@@ -143,7 +143,7 @@ module LZWS
143
143
  end
144
144
 
145
145
  protected def each_string(each_proc, &block)
146
- return enum_for __method__ unless block.is_a? ::Proc
146
+ return enum_for __method__, each_proc unless block.is_a? ::Proc
147
147
 
148
148
  loop do
149
149
  string = each_proc.call
@@ -43,7 +43,9 @@ module LZWS
43
43
  end
44
44
 
45
45
  def self.validate_proc(value)
46
- raise ValidateError, "invalid proc" unless value.is_a?(::Proc) || value.is_a?(::Method) || value.is_a?(::UnboundMethod)
46
+ unless value.is_a?(::Proc) || value.is_a?(::Method) || value.is_a?(::UnboundMethod)
47
+ raise ValidateError, "invalid proc"
48
+ end
47
49
  end
48
50
  end
49
51
  end
data/lib/lzws/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  module LZWS
5
- VERSION = "1.2.0".freeze
5
+ VERSION = "1.4.1".freeze
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lzws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Aladjev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-14 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: minitar
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +58,42 @@ dependencies:
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '5.14'
61
+ version: '5.15'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '5.14'
68
+ version: '5.15'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: ocg
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '1.1'
75
+ version: '1.4'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '1.1'
82
+ version: '1.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: parallel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rake
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +128,56 @@ dependencies:
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '0.93'
131
+ version: '1.24'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.24'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-minitest
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.17'
104
146
  type: :development
105
147
  prerelease: false
106
148
  version_requirements: !ruby/object:Gem::Requirement
107
149
  requirements:
108
150
  - - "~>"
109
151
  - !ruby/object:Gem::Version
110
- version: '0.93'
152
+ version: '0.17'
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: rubocop-performance
113
155
  requirement: !ruby/object:Gem::Requirement
114
156
  requirements:
115
157
  - - "~>"
116
158
  - !ruby/object:Gem::Version
117
- version: '1.8'
159
+ version: '1.13'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.13'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.6'
118
174
  type: :development
119
175
  prerelease: false
120
176
  version_requirements: !ruby/object:Gem::Requirement
121
177
  requirements:
122
178
  - - "~>"
123
179
  - !ruby/object:Gem::Version
124
- version: '1.8'
180
+ version: '0.6'
125
181
  - !ruby/object:Gem::Dependency
126
182
  name: simplecov
127
183
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +192,7 @@ dependencies:
136
192
  - - ">="
137
193
  - !ruby/object:Gem::Version
138
194
  version: '0'
139
- description:
195
+ description:
140
196
  email: aladjev.andrew@gmail.com
141
197
  executables: []
142
198
  extensions:
@@ -152,6 +208,7 @@ files:
152
208
  - ext/lzws_ext/common.h
153
209
  - ext/lzws_ext/error.c
154
210
  - ext/lzws_ext/error.h
211
+ - ext/lzws_ext/gvl.h
155
212
  - ext/lzws_ext/io.c
156
213
  - ext/lzws_ext/io.h
157
214
  - ext/lzws_ext/macro.h
@@ -184,8 +241,9 @@ files:
184
241
  homepage: https://github.com/andrew-aladev/ruby-lzws
185
242
  licenses:
186
243
  - MIT
187
- metadata: {}
188
- post_install_message:
244
+ metadata:
245
+ rubygems_mfa_required: 'true'
246
+ post_install_message:
189
247
  rdoc_options: []
190
248
  require_paths:
191
249
  - lib
@@ -200,8 +258,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
258
  - !ruby/object:Gem::Version
201
259
  version: '0'
202
260
  requirements: []
203
- rubygems_version: 3.1.4
204
- signing_key:
261
+ rubygems_version: 3.3.3
262
+ signing_key:
205
263
  specification_version: 4
206
- summary: Ruby bindings for lzws library.
264
+ summary: Ruby bindings for lzws library (compatible with UNIX compress).
207
265
  test_files: []