bzip2-ffi 1.0.0 → 1.1.0

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
- SHA1:
3
- metadata.gz: 91dd417ec50336680acdedba3bc7eb9c80a268f6
4
- data.tar.gz: 637b7684138b2e615ce3720dd8d9a927029481bb
2
+ SHA256:
3
+ metadata.gz: 03b164babce536cf85cdf6fa03a4baa85651c8a9463284eeb633a0db4ffcc6fa
4
+ data.tar.gz: 42a231de039d293fe25cf5dc98c22d4650225a73fb363cee7fb3c16d69af0355
5
5
  SHA512:
6
- metadata.gz: a74b7c8e55a23de078c58b0d1c10b9f1addba8867a3b91bac0fbd7c4f22a663e5dccbbc1523814c5e6fdd779728c2d6acb92ad08bce3c05102a42eb97dd743b4
7
- data.tar.gz: 10a5f0950a4bb5e4005632679097bcfdfb838bfcebf120ea9f986b9d30c5d1042ebb01bb7e866cb1891a919cbc90746f2a30df5dbce58bc3aa0c570cd828c750
6
+ metadata.gz: 12a699a68f65e217b5c958697709bc65f3a64e2d627ab1ee16bf7519c43a0571321bb435a38f199639b6b1a9842a0e179022d91fd033ebf8ac907897c9e76c27
7
+ data.tar.gz: 0dc68221d4c9ee943efd3bffaea0584cefd6d5b30f5ad4d998384177a3d6fe83e29691f344e4ee110786a0558355f2a90a74aed2624ff30257e72c66ad90727f
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1 @@
1
- {-l�P["A���V�>����{�9�2 ���gc=CZ_
2
- ��!���O �>g<��f�d���{s�L}V0>O�x�cp��8��L�91��ʯh��e���ˑ�
1
+ |��k���\s��u�G�y�_�|R�l�M?�;5�+j����.�ѩR;yfo[� 1�LU�|x��H�*I��9}_X�ȭҨ��e��y@ʭCƐ߀��W����N>ޤjE�!��A�Sy�#(h?b3�7�3�E�-ˇ�����SZ�N ��۳�T3��`�O ����:�F�r�}�A�D��M����|\����i��Q�$EZ�`� �^�q`��#]'�w�K�~��}�(��ͷ~�ک`��V �
data.tar.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,4 +1,25 @@
1
- Version 1.0.0 - 28-Feb-2015
2
- ---------------------------
1
+ # Changes
2
+
3
+ ## Version 1.1.0 - 27-Feb-2021
4
+
5
+ * `Bzip2::FFI::Reader` will now read all consecutive bzip2 compressed structures
6
+ in the input by default instead of just the first (the same as the
7
+ bzip2/bunzip2 commands). A new `:first_only` option has been added to allow
8
+ the version 1.0.0 behaviour to be retained. #1.
9
+ * Added `#eof?` and `#eof` to `Bzip2::FFI::Reader`, indicating when
10
+ decompression has completed.
11
+ * Added `Bzip2::FFI::Reader#pos`, returning the number of decompressed bytes
12
+ that have been read.
13
+ * Added `Bzip2::FFI::Writer#pos`, returning the number of uncompressed bytes
14
+ that have been written.
15
+ * Support using Bzip2::FFI with frozen string literals enabled (and enable in
16
+ all files with `# frozen_string_literal: true`).
17
+ * Constants documented as private in version 1.0.0 are now set as private using
18
+ `Module#private_constant`.
19
+ * `require_relative` is now used when loading dependencies for a minor
20
+ performance gain.
21
+
22
+
23
+ ## Version 1.0.0 - 28-Feb-2015
3
24
 
4
25
  * First release.
data/Gemfile CHANGED
@@ -3,12 +3,43 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem 'rake', '~> 10.0'
6
+ gem 'rake', ['>= 12.2.1', '< 14']
7
7
  gem 'git', '~> 1.2', require: false
8
8
  end
9
9
 
10
10
  group :test do
11
11
  gem 'minitest', '~> 5.0'
12
12
  gem 'simplecov', '~> 0.9', require: false
13
- gem 'coveralls', '~> 0.7', require: false
13
+
14
+ # coveralls is no longer maintained, but supports Ruby < 2.3.
15
+ # coveralls_reborn is maintained, but requires Ruby >= 2.3.
16
+ gem 'coveralls', '~> 0.8', require: false if RUBY_VERSION < '2.3'
17
+ gem 'coveralls_reborn', '~> 0.13', require: false if RUBY_VERSION >= '2.3'
18
+
19
+
20
+ # json is a dependency of simplecov. Version 2.3.0 is declared as compatible
21
+ # with Ruby >= 1.9, but actually fails with a syntax error:
22
+ # https://travis-ci.org/tzinfo/tzinfo/jobs/625092293#L605
23
+ #
24
+ # 2.5.1 is declared as compatible with Ruby >= 2.0, but actually fails to
25
+ # compile with an undefined reference to `rb_funcallv` on Windows:
26
+ # https://github.com/tzinfo/tzinfo/runs/1664656059#step:3:757
27
+ #
28
+ # 2.3.0 also fails to build the native extension with Rubinius:
29
+ # https://travis-ci.org/tzinfo/tzinfo/jobs/625092305#L1310
30
+ #
31
+ # Limit to earlier compatible versions.
32
+ if RUBY_VERSION < '2.0' || RUBY_ENGINE == 'rbx'
33
+ gem 'json', '< 2.3.0'
34
+ elsif RUBY_VERSION < '2.1' && RUBY_PLATFORM =~ /mingw/
35
+ gem 'json', '< 2.5.0'
36
+ end
37
+
38
+ # ffi 1.9.15 is declared as compatible with Ruby >= 1.8.7, but doesn't compile
39
+ # on Ruby 1.9.3 on Windows.
40
+ #
41
+ # Limit to earlier compatible versions.
42
+ if RUBY_VERSION < '2.0' && RUBY_PLATFORM =~ /mingw/
43
+ gem 'ffi', '< 1.9.0'
44
+ end
14
45
  end
data/LICENSE CHANGED
@@ -1,19 +1,19 @@
1
- Copyright (c) 2015 Philip Ross
1
+ Copyright (c) 2015-2021 Philip Ross
2
2
 
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of
4
- this software and associated documentation files (the "Software"), to deal in
5
- the Software without restriction, including without limitation the rights to
6
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
- of the Software, and to permit persons to whom the Software is furnished to do
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
8
  so, subject to the following conditions:
9
9
 
10
- The above copyright notice and this permission notice shall be included in all
10
+ The above copyright notice and this permission notice shall be included in all
11
11
  copies or substantial portions of the Software.
12
12
 
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  THE SOFTWARE.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Bzip2::FFI #
1
+ # Bzip2::FFI
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/bzip2-ffi.svg)](http://badge.fury.io/rb/bzip2-ffi) [![Build Status](https://travis-ci.org/philr/bzip2-ffi.svg?branch=master)](https://travis-ci.org/philr/bzip2-ffi) [![Coverage Status](https://coveralls.io/repos/philr/bzip2-ffi/badge.svg?branch=master)](https://coveralls.io/r/philr/bzip2-ffi?branch=master)
3
+ [![RubyGems](https://img.shields.io/gem/v/bzip2-ffi?logo=rubygems&label=Gem)](https://rubygems.org/gems/bzip2-ffi) [![Tests](https://github.com/philr/bzip2-ffi/workflows/Tests/badge.svg?branch=master&event=push)](https://github.com/philr/bzip2-ffi/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush) [![Coverage Status](https://img.shields.io/coveralls/github/philr/bzip2-ffi/master?label=Coverage&logo=Coveralls)](https://coveralls.io/github/philr/bzip2-ffi?branch=master)
4
4
 
5
5
  Bzip2::FFI is a Ruby wrapper for libbz2 using FFI bindings.
6
6
 
@@ -8,24 +8,19 @@ The Bzip2::FFI Reader and Writer classes support reading and writing bzip2
8
8
  compressed data as an `IO`-like stream.
9
9
 
10
10
 
11
- ## Installation ##
11
+ ## Installation
12
12
 
13
- To install the Bzip2::FFI gem, run the following command:
13
+ The Bzip2::FFI gem can be installed by running `gem install bzip2-ffi` or by
14
+ adding `gem 'bzip2-ffi'` to your `Gemfile` and running `bundle install`.
14
15
 
15
- gem install bzip2-ffi
16
16
 
17
- To add Bzip2::FFI as a Bundler dependency, add the following line to your
18
- `Gemfile`:
17
+ ## Compatibility
19
18
 
20
- gem 'bzip2-ffi'
19
+ Bzip2::FFI requires a minimum of Ruby MRI 1.9.3 or JRuby 1.7 (in 1.9 mode or
20
+ later).
21
21
 
22
22
 
23
- ## Compatibility ##
24
-
25
- Bzip2::FFI is tested on Ruby MRI 1.9.3+, JRuby 1.7+ and Rubinius 2+.
26
-
27
-
28
- ## Runtime Dependencies ##
23
+ ## Runtime Dependencies
29
24
 
30
25
  Bzip2::FFI is a pure-Ruby library that uses
31
26
  [Ruby-FFI](https://rubygems.org/gems/ffi) (Foreign Function Interface) to load
@@ -36,7 +31,7 @@ libbz2 is available as a package on most UNIX-based systems (for example,
36
31
  CentOS).
37
32
 
38
33
 
39
- ### Windows ###
34
+ ### Windows
40
35
 
41
36
  On Windows, you will need to have `libbz2.dll` or `bz2.dll` available on the
42
37
  `PATH` or in the Ruby `bin` directory.
@@ -46,99 +41,113 @@ Suitable builds of `libbz2.dll` are available from the
46
41
  Download the DLL only package that matches your Ruby installation (x86 or x64)
47
42
  and extract to your `ruby\bin` directory.
48
43
 
49
- Builds from the bzip2-windows project depend on the Visual Studio 2013 C Runtime
50
- Library (msvcr120.dll). This can be installed using the
51
- [Visual C++ Redistributable Packages for Visual Studio 2013 installer](http://www.microsoft.com/en-gb/download/details.aspx?id=40784).
44
+ Builds from the bzip2-windows project depend on the Visual Studio C Runtime
45
+ Library. Links to the installer can be found on the bzip2-windows release page.
52
46
 
53
47
 
54
- ## Usage ##
48
+ ## Usage
55
49
 
56
50
  To use Bzip2::FFI, it must first be loaded with:
57
51
 
58
- require 'bzip2/ffi'
52
+ ```ruby
53
+ require 'bzip2/ffi'
54
+ ```
59
55
 
60
56
 
61
- ### Compressing ###
57
+ ### Compressing
62
58
 
63
59
  Data can be compressed using the `Bzip2::FFI::Writer` class. For example, the
64
- following compresses lines read from standard input (`ARGF`):
60
+ following compresses lines read from `ARGF` (either standard input, or file
61
+ names given as command-line arguments:
65
62
 
66
- Bzip2::FFI::Writer.open(io_or_path) do |writer|
67
- ARGF.each_line do |line|
68
- writer.write(line)
69
- end
70
- end
63
+ ```ruby
64
+ Bzip2::FFI::Writer.open(io_or_path) do |writer|
65
+ ARGF.each_line do |line|
66
+ writer.write(line)
67
+ end
68
+ end
69
+ ```
71
70
 
72
71
  Alternatively, without passing a block to `open`:
73
72
 
74
- writer = Bzip2::FFI::Writer.open(io_or_path)
75
- begin
76
- ARGF.each_line do |line|
77
- writer.write(line)
78
- end
79
- ensure
80
- writer.close
81
- end
73
+ ```ruby
74
+ writer = Bzip2::FFI::Writer.open(io_or_path)
75
+ begin
76
+ ARGF.each_line do |line|
77
+ writer.write(line)
78
+ end
79
+ ensure
80
+ writer.close
81
+ end
82
+ ```
82
83
 
83
84
  An entire bzip2 structure can also be written in a single step:
84
85
 
85
- Bzip2::FFI::Writer.write(io_or_path, 'Hello, World!')
86
+ ```ruby
87
+ Bzip2::FFI::Writer.write(io_or_path, 'Hello, World!')
88
+ ```
86
89
 
87
90
  In each of the examples above, `io_or_path` can either be a path to a file to
88
- write to or an `IO`-like object that has a `write` method.
91
+ write to or an `IO`-like object that has a `#write` method.
89
92
 
90
93
 
91
- ### Decompressing ###
94
+ ### Decompressing
92
95
 
93
96
  Data can be decompressed using the `Bzip2::FFI::Reader` class. For example:
94
97
 
95
- Bzip2::FFI::Reader.open(io_or_path) do |reader|
96
- while buffer = reader.read(1024) do
97
- # process uncompressed bytes in buffer
98
- end
99
- end
98
+ ```ruby
99
+ Bzip2::FFI::Reader.open(io_or_path) do |reader|
100
+ while buffer = reader.read(1024) do
101
+ # process uncompressed bytes in buffer
102
+ end
103
+ end
104
+ ```
100
105
 
101
106
  Alternatively, without passing a block to `open`:
102
107
 
103
- reader = Bzip2::FFI::Reader.open(io_or_path)
104
- begin
105
- while buffer = reader.read(1024) do
106
- # process uncompressed bytes in buffer
107
- end
108
- ensure
109
- reader.close
110
- end
108
+ ```ruby
109
+ reader = Bzip2::FFI::Reader.open(io_or_path)
110
+ begin
111
+ while buffer = reader.read(1024) do
112
+ # process uncompressed bytes in buffer
113
+ end
114
+ ensure
115
+ reader.close
116
+ end
117
+ ```
111
118
 
112
- An entire bzip2 structure can be read and decompressed in a single step:
119
+ All the available bzipped data can be read and decompressed in a single step:
113
120
 
114
- uncompressed = Bzip2::FFI::Reader.read(io_or_path)
121
+ ```ruby
122
+ uncompressed = Bzip2::FFI::Reader.read(io_or_path)
123
+ ```
115
124
 
116
125
  In each of the examples above, `io_or_path` can either be a path to a file to
117
- read from or an `IO`-like object that has a `read` method.
126
+ read from or an `IO`-like object that has a `#read` method.
118
127
 
119
128
 
120
- ### Character Encoding ###
129
+ ### Character Encoding
121
130
 
122
131
  Bzip2::FFI does not perform any encoding conversion when reading or writing.
123
132
  Data read using `Bzip2::FFI::Reader` is returned as `String` instances with
124
133
  ASCII-8BIT (BINARY) encoding representing the raw decompressed bytes.
125
- `Bzip2::FFI::Writer` compresses the raw bytes from the `Strings` passed to the
126
- `write` method (using the encoding of the `String`).
134
+ `Bzip2::FFI::Writer` compresses the raw bytes from the `String` instances passed
135
+ to the `#write` method (using the encoding of the `String`).
127
136
 
128
137
 
129
- ## Documentation ##
138
+ ## Documentation
130
139
 
131
140
  Documentation for Bzip2::FFI is available on
132
- [RubyDoc.info](http://www.rubydoc.info/gems/bzip2-ffi).
141
+ [RubyDoc.info](https://www.rubydoc.info/gems/bzip2-ffi).
133
142
 
134
143
 
135
- ## License ##
144
+ ## License
136
145
 
137
146
  Bzip2::FFI is distributed under the terms of the MIT license. A copy of this
138
147
  license can be found in the included LICENSE file.
139
148
 
140
149
 
141
- ## GitHub Project ##
150
+ ## GitHub Project
142
151
 
143
152
  Source code, release information and the issue tracker can be found on the
144
153
  [Bzip2::FFI GitHub project page](https://github.com/philr/bzip2-ffi).
data/Rakefile CHANGED
@@ -60,3 +60,27 @@ Rake::TestTask.new do |t|
60
60
  t.pattern = File.join(BASE_DIR, 'test', '**', '*_test.rb')
61
61
  t.warning = true
62
62
  end
63
+
64
+ # Coveralls expects an sh compatible shell when running git commands with Kernel#`
65
+ # On Windows, the results end up wrapped in single quotes.
66
+ # Patch Coveralls::Configuration to remove the quotes.
67
+ if RUBY_PLATFORM =~ /mingw/
68
+ module CoverallsFixConfigurationOnWindows
69
+ def self.included(base)
70
+ base.instance_eval do
71
+ class << self
72
+ alias_method :git_without_windows_fix, :git
73
+
74
+ def git
75
+ git_without_windows_fix.tap do |hash|
76
+ hash[:head] = hash[:head].map {|k, v| [k, v =~ /\A'(.*)'\z/ ? $1 : v] }.to_h
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ require 'coveralls'
85
+ Coveralls::Configuration.send(:include, CoverallsFixConfigurationOnWindows)
86
+ end
data/bzip2-ffi.gemspec CHANGED
@@ -14,6 +14,15 @@ Gem::Specification.new do |s|
14
14
  s.email = 'phil.ross@gmail.com'
15
15
  s.homepage = 'https://github.com/philr/bzip2-ffi'
16
16
  s.license = 'MIT'
17
+ if s.respond_to? :metadata=
18
+ s.metadata = {
19
+ 'bug_tracker_uri' => 'https://github.com/philr/bzip2-ffi/issues',
20
+ 'changelog_uri' => 'https://github.com/philr/bzip2-ffi/blob/master/CHANGES.md',
21
+ 'documentation_uri' => "https://rubydoc.info/gems/#{s.name}/#{s.version}",
22
+ 'homepage_uri' => s.homepage,
23
+ 'source_code_uri' => "https://github.com/philr/bzip2-ffi/tree/v#{s.version}"
24
+ }
25
+ end
17
26
  s.files = %w(CHANGES.md Gemfile LICENSE README.md Rakefile bzip2-ffi.gemspec .yardopts) +
18
27
  Dir['lib/**/*.rb'] +
19
28
  Dir['test/**/*.rb'] +
data/lib/bzip2/ffi.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
1
4
  module Bzip2
2
5
  # Bzip2::FFI is a wrapper for libbz2 using FFI bindings. Bzip2 compressed data
3
6
  # can be read and written as a stream using the Reader and Writer classes.
@@ -5,10 +8,10 @@ module Bzip2
5
8
  end
6
9
  end
7
10
 
8
- require 'bzip2/ffi/libbz2'
9
- require 'bzip2/ffi/error'
10
- require 'bzip2/ffi/io'
11
- require 'bzip2/ffi/reader'
12
- require 'bzip2/ffi/writer'
13
- require 'bzip2/ffi/version'
11
+ require_relative 'ffi/libbz2'
12
+ require_relative 'ffi/error'
13
+ require_relative 'ffi/io'
14
+ require_relative 'ffi/reader'
15
+ require_relative 'ffi/writer'
16
+ require_relative 'ffi/version'
14
17
 
@@ -1,7 +1,10 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
1
4
  module Bzip2
2
5
  module FFI
3
- # The Bzip2::FFI::Error namespace contains exception classes that are raised
4
- # if an error occurs whilst compressing or decompressing data.
6
+ # The {Error} module contains exception classes that are raised if an error
7
+ # occurs whilst compressing or decompressing data.
5
8
  module Error
6
9
  # Base class for Bzip2::FFI exceptions.
7
10
  class Bzip2Error < IOError
data/lib/bzip2/ffi/io.rb CHANGED
@@ -1,19 +1,22 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
1
4
  module Bzip2
2
5
  module FFI
3
- # `IO` is a base class providing common functionality for the {Reader} and
6
+ # {IO} is a base class providing common functionality for the {Reader} and
4
7
  # {Writer} subclasses.
5
8
  #
6
- # `Bzip2::FFI::IO` holds a reference to an underlying `IO`-like stream
7
- # representing the bzip2-compressed data to be read from or written to.
9
+ # Holds a reference to an underlying IO-like stream representing the bzip2
10
+ # compressed data to be read from or written to.
8
11
  class IO
9
12
  class << self
10
13
  protected :new
11
14
 
12
15
  protected
13
16
 
14
- # If no block is provided, returns a new `IO`. If a block is provided,
15
- # a new `IO` is created and yielded to the block. After the block has
16
- # executed, the `IO` is closed and the result of the block is returned.
17
+ # If no block is provided, returns a new {IO}. If a block is provided,
18
+ # a new {IO} is created and yielded to the block. After the block has
19
+ # executed, the {IO} is closed and the result of the block is returned.
17
20
  #
18
21
  # If `io_or_proc` is a `Proc`, it is called to obtain an IO-like
19
22
  # instance to pass to `new`. Otherwise `io_or_proc` is passed directly
@@ -22,6 +25,11 @@ module Bzip2
22
25
  # @param io_or_proc [Object] An IO-like object or a `Proc` that returns
23
26
  # an IO-like object when called.
24
27
  # @param options [Hash] Options to pass to `new`.
28
+ # @yield [io] If a block is given, it is yielded to.
29
+ # @yieldparam io [IO] The new {IO} instance.
30
+ # @yieldresult [Object] A result to be returned as the result of {open}.
31
+ # @return [Object] The result of the block if a block is given,
32
+ # otherwise the new {IO} instance.
25
33
  def open(io_or_proc, options = {})
26
34
  if io_or_proc.kind_of?(Proc)
27
35
  io = io_or_proc.call
@@ -36,7 +44,7 @@ module Bzip2
36
44
  end
37
45
 
38
46
  if block_given?
39
- begin
47
+ begin
40
48
  yield bz_io
41
49
  ensure
42
50
  bz_io.close unless bz_io.closed?
@@ -46,7 +54,7 @@ module Bzip2
46
54
  end
47
55
  end
48
56
 
49
- # Opens and returns a bzip `File` using the specified mode. The system
57
+ # Opens and returns a bzip file using the specified mode. The system
50
58
  # is advised that the file will be accessed once sequentially.
51
59
  #
52
60
  # @param path [String] The path to open.
@@ -67,9 +75,9 @@ module Bzip2
67
75
 
68
76
  private
69
77
 
70
- # Advises the system that an `IO` will be accessed once sequentially.
78
+ # Advises the system that an `::IO` will be accessed once sequentially.
71
79
  #
72
- # @param io [IO] An `IO` instance to advise.
80
+ # @param io [::IO] An `::IO` instance to advise.
73
81
  def after_open_file(io)
74
82
  # JRuby 1.7.18 doesn't have a File#advise method (in any mode).
75
83
  if io.respond_to?(:advise)
@@ -79,67 +87,69 @@ module Bzip2
79
87
  end
80
88
  end
81
89
 
82
- # Returns `true` if the underlying compressed `IO` instance will be closed
83
- # when {#close} is called, otherwise `false`.
90
+ # Returns `true` if the underlying compressed IO-like instance will be
91
+ # closed when {#close} is called, otherwise `false`.
84
92
  #
85
- # @return [Boolean] `true` if the underlying compressed IO instance will
86
- # be closed when {#close} is closed, otherwise `false`.
87
- # @raise [IOError] If the instance has been closed.
93
+ # @return [Boolean] `true` if the underlying compressed IO-like instance
94
+ # will be closed when {#close} is closed, otherwise
95
+ # `false`.
96
+ # @raise [IOError] If the {IO} instance has been closed.
88
97
  def autoclose?
89
98
  check_closed
90
99
  @autoclose
91
100
  end
92
101
 
93
- # Sets whether the underlying compressed `IO` instance should be closed
102
+ # Sets whether the underlying compressed IO-like instance should be closed
94
103
  # when {#close} is called (`true`) or left open (`false`).
95
104
  #
96
105
  # @param autoclose [Boolean] `true` if the underlying compressed `IO`
97
106
  # instance should be closed when {#close} is
98
107
  # called, or `false` if it should be left open.
99
- # @raise [IOError] If the instance has been closed.
108
+ # @raise [IOError] If the {IO} instance has been closed.
100
109
  def autoclose=(autoclose)
101
110
  check_closed
102
111
  @autoclose = !!autoclose
103
112
  end
104
113
 
105
- # Returns `true` to indicate that the `IO` is operating in binary mode
106
- # (as is always the case).
114
+ # Returns `true` to indicate that the {IO} instance is operating in binary
115
+ # mode (as is always the case).
107
116
  #
108
117
  # @return [Boolean] `true`.
109
- # @raise [IOError] If the `IO` has been closed.
118
+ # @raise [IOError] If the {IO} instance has been closed.
110
119
  def binmode?
111
120
  check_closed
112
121
  true
113
122
  end
114
123
 
115
- # Puts the `IO` into binary mode.
124
+ # Puts the {IO} instance into binary mode.
116
125
  #
117
- # Note that `Bzip2::FFI::IO` and subclasses always operate in binary mode,
118
- # so calling `binmode` has no effect.
126
+ # Note that {IO} and subclasses always operate in binary mode, so calling
127
+ # `binmode` has no effect.
119
128
  #
120
129
  # @return [IO] `self`.
121
- # @raise [IOError] If the `IO` has been closed.
130
+ # @raise [IOError] If the {IO} instance has been closed.
122
131
  def binmode
123
132
  check_closed
124
133
  self
125
134
  end
126
135
 
127
- # Closes the `IO`.
136
+ # Closes the {IO} instance.
128
137
  #
129
- # If {#autoclose?} is true and the underlying compressed `IO` responds to
130
- # `close`, it will also be closed.
138
+ # If {#autoclose?} is true and the underlying compressed IO-like instance
139
+ # responds to `close`, it will also be closed.
131
140
  #
132
141
  # @return [NilClass] `nil`.
133
- # @raise [IOError] If the `IO` has already been closed.
142
+ # @raise [IOError] If the {IO} instance has already been closed.
134
143
  def close
135
144
  check_closed
136
145
  @io.close if autoclose? && @io.respond_to?(:close)
137
146
  @stream = nil
138
147
  end
139
148
 
140
- # Indicates whether the `IO` has been closed by calling {#close}.
149
+ # Indicates whether the {IO} instance has been closed by calling {#close}.
141
150
  #
142
- # @return [Boolean] `true` if the `IO` has been closed, otherwise `false`.
151
+ # @return [Boolean] `true` if the {IO} instance has been closed, otherwise
152
+ # `false`.
143
153
  def closed?
144
154
  !@stream
145
155
  end
@@ -151,7 +161,7 @@ module Bzip2
151
161
  # returns `Encoding::ASCII_8BIT` (also known as `Encoding::BINARY`).
152
162
  #
153
163
  # @return [Encoding] `Encoding::ASCII_8BIT`.
154
- # @raise [IOError] If the `IO` has been closed.
164
+ # @raise [IOError] If the {IO} instance has been closed.
155
165
  def external_encoding
156
166
  check_closed
157
167
  Encoding::ASCII_8BIT
@@ -168,32 +178,33 @@ module Bzip2
168
178
  check_closed
169
179
  Encoding::ASCII_8BIT
170
180
  end
171
-
181
+
172
182
  protected
173
183
 
174
- # The underlying compressed `IO` instance.
184
+ # The underlying compressed IO-like instance.
175
185
  attr_reader :io
176
186
 
177
- # Initializes a new {Bzip2::FFI::IO} instance with an underlying
178
- # compressed `IO` instance and `options` `Hash`.
187
+ # Initializes a new {IO} instance with an underlying compressed IO-like
188
+ # instance and `options` `Hash`.
179
189
  #
180
190
  # `binmode` is called on `io` if `io` responds to `binmode`.
181
191
  #
182
- # A single `:autoclose` option is supported. Set `:autoclose` to true
183
- # to close the underlying compressed `IO` instance when {#close} is
192
+ # A single `:autoclose` option is supported. Set `:autoclose` to true to
193
+ # close the underlying compressed IO-like instance when {#close} is
184
194
  # called.
185
195
  #
186
- # @param io [IO] An `IO`-like object that represents the compressed data.
196
+ # @param io [Object] An IO-like object that represents the compressed
197
+ # data.
187
198
  # @param options [Hash] Optional parameters (:autoclose).
188
199
  # @raise [ArgumentError] If `io` is nil.
189
200
  def initialize(io, options = {})
190
201
  raise ArgumentError, 'io is required' unless io
191
-
202
+
192
203
  @io = io
193
- @io.binmode if @io.respond_to?(:binmode)
204
+ @io.binmode if @io.respond_to?(:binmode)
194
205
 
195
206
  @autoclose = !!options[:autoclose]
196
-
207
+
197
208
  @stream = Libbz2::BzStream.new
198
209
  end
199
210
 
@@ -202,22 +213,23 @@ module Bzip2
202
213
  #
203
214
  # @return [Libbz2::BzStream] The {Libbz2::BzStream} instance being used
204
215
  # to interface with libbz2.
205
- # @raise [IOError] If the `IO` has been closed.
216
+ # @raise [IOError] If the {IO} instance has been closed.
206
217
  def stream
207
218
  check_closed
208
219
  @stream
209
- end
220
+ end
210
221
 
211
- # Raises an `IOError` if {#close} has been called to close the {IO}.
222
+ # Raises an `IOError` if {#close} has been called to close the {IO}
223
+ # instance.
212
224
  #
213
- # @raise [IOError] If the `IO` has been closed.
225
+ # @raise [IOError] If the {IO} instance has been closed.
214
226
  def check_closed
215
227
  raise IOError, 'closed stream' if closed?
216
228
  end
217
229
 
218
230
  # Checks a return code from a libbz2 function. If it is greater than or
219
231
  # equal to 0 (success), the return code is returned. If it is less than
220
- # zero (an error), the appropriate {Bzip2::Bzip2Error} sub-class is
232
+ # zero (an error), the appropriate {Error::Bzip2Error} sub-class is
221
233
  # raised.
222
234
  #
223
235
  # @param res [Integer] The result of a call to a libbz2 function.
@@ -244,7 +256,7 @@ module Bzip2
244
256
  end
245
257
 
246
258
  raise error_class.new
247
- end
259
+ end
248
260
  end
249
261
  end
250
262
  end