Skip to content

Commit ffc6edc

Browse files
committed
* Result block value for SevenZipReader.open & .open_file
They were always returning `nil` (from SevenZipReader#close_file) Also changed &block + block.call to block_given? + yield
1 parent 5ff4742 commit ffc6edc

2 files changed

Lines changed: 50 additions & 8 deletions

File tree

lib/seven_zip_ruby/seven_zip_reader.rb

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,17 @@ class << self
9898
# SevenZipRuby::Reader.open(stream) do |szr|
9999
# szr.extract(:all, "path_to_dir")
100100
# end
101-
def open(stream, param = {}, &block) # :yield: szr
101+
def open(stream, param = {}) # :yield: szr
102102
szr = self.new
103103
szr.open(stream, param)
104-
if (block)
104+
# Using `block_given?`, `yield` & omitting `&block`
105+
# is faster
106+
# Ref: https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode
107+
if block_given?
105108
begin
106-
block.call(szr)
107-
szr.close
109+
yield(szr).tap do
110+
szr.close
111+
end
108112
ensure
109113
szr.close_file
110114
end
@@ -135,13 +139,17 @@ def open(stream, param = {}, &block) # :yield: szr
135139
# szr = SevenZipRuby::SevenZipReader.open_file("filename.7z")
136140
# # Read and extract archive.
137141
# szr.close
138-
def open_file(filename, param = {}, &block) # :yield: szr
142+
def open_file(filename, param = {}) # :yield: szr
139143
szr = self.new
140144
szr.open_file(filename, param)
141-
if (block)
145+
# Using `block_given?`, `yield` & omitting `&block`
146+
# is faster
147+
# Ref: https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode
148+
if block_given?
142149
begin
143-
block.call(szr)
144-
szr.close
150+
yield(szr).tap do
151+
szr.close
152+
end
145153
ensure
146154
szr.close_file
147155
end

spec/seven_zip_ruby_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,40 @@
9797
end
9898
end
9999

100+
describe "singleton method: open" do
101+
context "called with block" do
102+
let(:block_value) { "Block value" }
103+
104+
subject(:returned_result) do
105+
File.open(SevenZipRubySpecHelper::SEVEN_ZIP_FILE, "rb") do |file|
106+
SevenZipRuby::SevenZipReader.open(file) do |_szr|
107+
block_value
108+
end
109+
end
110+
end
111+
112+
it "returns block value" do
113+
should eq(block_value)
114+
end
115+
end
116+
end
117+
118+
describe "singleton method: open_file" do
119+
context "called with block" do
120+
let(:block_value) { "Block value" }
121+
122+
subject(:returned_result) do
123+
SevenZipRuby::SevenZipReader.open_file(SevenZipRubySpecHelper::SEVEN_ZIP_FILE) do |_szr|
124+
block_value
125+
end
126+
end
127+
128+
it "returns block value" do
129+
should eq(block_value)
130+
end
131+
end
132+
end
133+
100134
example "extract archive" do
101135
File.open(SevenZipRubySpecHelper::SEVEN_ZIP_FILE, "rb") do |file|
102136
SevenZipRuby::SevenZipReader.open(file) do |szr|

0 commit comments

Comments
 (0)