ruby-lzws 1.2.0 → 1.4.1

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.
@@ -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: []