iostreams 1.0.0 → 1.1.0
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 +4 -4
- data/lib/io_streams/io_streams.rb +18 -0
- data/lib/io_streams/paths/matcher.rb +1 -1
- data/lib/io_streams/paths/sftp.rb +1 -1
- data/lib/io_streams/stream.rb +0 -1
- data/lib/io_streams/utils.rb +4 -1
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/zip/reader.rb +1 -1
- data/test/paths/matcher_test.rb +15 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a047f1f33b360bf1aa4f028da098e5d2364e4e4ebc4f4c603c445e6f43f99d8
|
4
|
+
data.tar.gz: 42e7095dcdb7707ec774f6d5efe104418fcb632af97d2978e736ddd3ec7c72ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef9b14f94069a48f81cfb52960a115f0bfb83bcebde57850002d52148e2cb495a0eed9a9f1a6505e1210dd259cc1ab8555e36cb7e9769410a48ca11daa4c4b9c
|
7
|
+
data.tar.gz: b8b0bc72a97bbb7174c32e3d852ce171e6443d246950f788016ed4309e539d644703765fd2767c36ea4df7b8218d7b14b84c94a8630d5214a1bc60b0f4659472
|
@@ -233,6 +233,24 @@ module IOStreams
|
|
233
233
|
@root_paths.dup
|
234
234
|
end
|
235
235
|
|
236
|
+
# Set the temporary path to use when creating local temp files.
|
237
|
+
def self.temp_dir=(temp_dir)
|
238
|
+
temp_dir = File.expand_path(temp_dir)
|
239
|
+
FileUtils.mkdir_p(temp_dir) unless ::File.exist?(temp_dir)
|
240
|
+
|
241
|
+
@temp_dir = temp_dir
|
242
|
+
end
|
243
|
+
|
244
|
+
# Returns the temporary path used when creating local temp files.
|
245
|
+
#
|
246
|
+
# Default:
|
247
|
+
# ENV['TMPDIR'], or ENV['TMP'], or ENV['TEMP'], or `Etc.systmpdir`, or '/tmp', otherwise '.'
|
248
|
+
def self.temp_dir
|
249
|
+
@temp_dir ||= Dir.tmpdir
|
250
|
+
end
|
251
|
+
|
252
|
+
@temp_dir = nil
|
253
|
+
|
236
254
|
# Register a file extension and the reader and writer streaming classes
|
237
255
|
#
|
238
256
|
# Example:
|
@@ -19,7 +19,7 @@ module IOStreams
|
|
19
19
|
def initialize(path, pattern, case_sensitive: false, hidden: false)
|
20
20
|
extract_optimized_path(path, pattern)
|
21
21
|
|
22
|
-
@flags = ::File::FNM_EXTGLOB
|
22
|
+
@flags = ::File::FNM_EXTGLOB | ::File::FNM_PATHNAME
|
23
23
|
@flags |= ::File::FNM_CASEFOLD unless case_sensitive
|
24
24
|
@flags |= ::File::FNM_DOTMATCH if hidden
|
25
25
|
end
|
@@ -71,7 +71,7 @@ module IOStreams
|
|
71
71
|
# end
|
72
72
|
#
|
73
73
|
# # When using the sftp executable use an identity file instead of a password to authenticate:
|
74
|
-
# IOStreams.path("sftp://test.com/path/file_name.csv", username: "jack", IdentityFile: "~/.ssh/private_key").reader do |io|
|
74
|
+
# IOStreams.path("sftp://test.com/path/file_name.csv", username: "jack", ssh_options: {IdentityFile: "~/.ssh/private_key"}).reader do |io|
|
75
75
|
# puts io.read
|
76
76
|
# end
|
77
77
|
def initialize(url, username: nil, password: nil, ssh_options: {})
|
data/lib/io_streams/stream.rb
CHANGED
data/lib/io_streams/utils.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
require 'uri'
|
1
2
|
module IOStreams
|
2
3
|
module Utils
|
4
|
+
MAX_TEMP_FILE_NAME_ATTEMPTS = 5
|
5
|
+
|
3
6
|
# Lazy load dependent gem so that it remains a soft dependency.
|
4
7
|
def self.load_soft_dependency(gem_name, stream_type, require_name = gem_name)
|
5
8
|
require require_name
|
@@ -23,7 +26,7 @@ module IOStreams
|
|
23
26
|
# File is deleted upon completion if present.
|
24
27
|
def self.temp_file_name(basename, extension = '')
|
25
28
|
result = nil
|
26
|
-
::Dir::Tmpname.create([basename, extension]) do |tmpname|
|
29
|
+
::Dir::Tmpname.create([basename, extension], IOStreams.temp_dir, max_try: MAX_TEMP_FILE_NAME_ATTEMPTS) do |tmpname|
|
27
30
|
begin
|
28
31
|
result = yield(tmpname)
|
29
32
|
ensure
|
data/lib/io_streams/version.rb
CHANGED
@@ -48,7 +48,7 @@ module IOStreams
|
|
48
48
|
# The input stream from the first file found in the zip file is passed
|
49
49
|
# to the supplied block
|
50
50
|
def self.file(file_name, entry_file_name: nil, &block)
|
51
|
-
Utils.load_soft_dependency('rubyzip', 'Read Zip', 'zip') unless defined?(::Zip)
|
51
|
+
Utils.load_soft_dependency('rubyzip v1.x', 'Read Zip', 'zip') unless defined?(::Zip)
|
52
52
|
|
53
53
|
::Zip::File.open(file_name) do |zip_file|
|
54
54
|
if entry_file_name
|
data/test/paths/matcher_test.rb
CHANGED
@@ -11,11 +11,11 @@ module Paths
|
|
11
11
|
expected_path: "/path/work/a/b/c",
|
12
12
|
expected_pattern: "**/*",
|
13
13
|
recursive: true,
|
14
|
-
matches: %w[/path/work/a/b/c/any/file /path/work/a/b/c/other/file
|
15
|
-
not_matches: %w[/path/work/a/b/c/.profile]
|
14
|
+
matches: %w[/path/work/a/b/c/any/file /path/work/a/b/c/other/file],
|
15
|
+
not_matches: %w[/path/work/a/b/c/.profile /path/work/a/b/c/sub/.name]
|
16
16
|
},
|
17
|
-
{path: "/path/work", pattern: "a/b/c
|
18
|
-
{path: "/path/work", pattern: "
|
17
|
+
{path: "/path/work", pattern: "a/b/c?/**", expected_path: "/path/work/a/b", expected_pattern: "c?/**", recursive: true},
|
18
|
+
{path: "/path/work", pattern: "**", expected_path: "/path/work", expected_pattern: "**", recursive: true},
|
19
19
|
# Case-insensitive exists that returns the actual file name.
|
20
20
|
{path: "/path/work", pattern: "a/b/file.txt", expected_path: "/path/work/a/b/file.txt", expected_pattern: nil, recursive: false},
|
21
21
|
{
|
@@ -25,7 +25,17 @@ module Paths
|
|
25
25
|
expected_pattern: "file*{zip,gz}",
|
26
26
|
recursive: false,
|
27
27
|
matches: %w[/path/work/a/b/file.GZ /path/work/a/b/FILE.ZIP /path/work/a/b/file123.zIp],
|
28
|
-
not_matches: %w[/path/work/a/b/.profile /path/work/a/b/filter.zip],
|
28
|
+
not_matches: %w[/path/work/a/b/.profile /path/work/a/b/filter.zip /path/work/a/b/outgoing/filter.zip],
|
29
|
+
case_sensitive: false
|
30
|
+
},
|
31
|
+
{
|
32
|
+
path: "/path/work",
|
33
|
+
pattern: "a/b/*",
|
34
|
+
expected_path: "/path/work/a/b",
|
35
|
+
expected_pattern: "*",
|
36
|
+
recursive: false,
|
37
|
+
matches: %w[/path/work/a/b/file.GZ /path/work/a/b/FILE.ZIP /path/work/a/b/file123.zIp],
|
38
|
+
not_matches: %w[/path/work/a/b/.profile /path/work/a/b/my/filter.zip /path/work/a/b/outgoing/filter.zip],
|
29
39
|
case_sensitive: false
|
30
40
|
},
|
31
41
|
{
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iostreams
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.0.6
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: Input and Output streaming for Ruby.
|