xqsr3 0.34.0 → 0.36.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 +5 -5
- data/lib/xqsr3/all_extensions.rb +6 -0
- data/lib/xqsr3/array_utilities.rb +10 -0
- data/lib/xqsr3/command_line_utilities.rb +10 -0
- data/lib/xqsr3/containers.rb +11 -0
- data/lib/xqsr3/conversion.rb +11 -0
- data/lib/xqsr3/diagnostics.rb +11 -0
- data/lib/xqsr3/extensions.rb +13 -0
- data/lib/xqsr3/extensions/array.rb +3 -0
- data/lib/xqsr3/extensions/io/writelines.rb +38 -6
- data/lib/xqsr3/extensions/test/unit/assert_raise_with_message.rb +0 -2
- data/lib/xqsr3/hash_utilities.rb +11 -0
- data/lib/xqsr3/io/writelines.rb +41 -11
- data/lib/xqsr3/quality.rb +8 -1
- data/lib/xqsr3/string_utilities.rb +16 -0
- data/lib/xqsr3/version.rb +3 -2
- data/test/unit/extensions/io/tc_writelines.rb +36 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4e3f5e422b5b6d6f88ee0c0eb620f38ce468ef54e1cf9d55ab41f24e909c897b
|
4
|
+
data.tar.gz: 80f3675582a96f52a108687c4a77911691972dd0a2167138ffa0c9992c13e3ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41b2ac34f613f74b684223073ff61c3350b8433bda18520bb0af25db2464a22ed1be8fe53859eaf37f60d366d7053d8cab77d653b45b33a57ebd1a619b6186c6
|
7
|
+
data.tar.gz: 28d271b3501677420540ec6a55b1bf69bedf398dc422362ff7ca5e50e1d827d4f4fccc45c73eece170949bab755a47472d78f207a0b7c992cb942b13d368be76
|
@@ -5,13 +5,13 @@
|
|
5
5
|
# Purpose: Adds a writelines() method to the IO class
|
6
6
|
#
|
7
7
|
# Created: 13th April 2007
|
8
|
-
# Updated:
|
8
|
+
# Updated: 31st October 2019
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
12
12
|
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2007-
|
14
|
+
# Copyright (c) 2007-2019, Matthew Wilson and Synesis Software
|
15
15
|
# All rights reserved.
|
16
16
|
#
|
17
17
|
# Redistribution and use in source and binary forms, with or without
|
@@ -54,13 +54,45 @@ require 'xqsr3/io/writelines'
|
|
54
54
|
|
55
55
|
class IO
|
56
56
|
|
57
|
-
# Extends +IO+ class with the
|
58
|
-
#
|
59
|
-
|
57
|
+
# Extends +IO+ class with the +::Xqsr3::IO::write_lines+ method
|
58
|
+
#
|
59
|
+
#
|
60
|
+
#def self.writelines(path, contents, lineSep = nil, columnSep = nil)
|
61
|
+
def self.writelines(path, contents, *args)
|
60
62
|
|
61
|
-
|
63
|
+
options = {}
|
64
|
+
|
65
|
+
case args.size
|
66
|
+
when 0
|
67
|
+
|
68
|
+
;
|
69
|
+
when 1
|
70
|
+
|
71
|
+
arg3 = args[0]
|
72
|
+
|
73
|
+
if arg3.respond_to?(:to_hash)
|
74
|
+
|
75
|
+
options.merge! arg3.to_hash
|
76
|
+
else
|
77
|
+
|
78
|
+
options[:line_separator] = arg3
|
79
|
+
end
|
80
|
+
when 2
|
81
|
+
|
82
|
+
arg3 = args[0]
|
83
|
+
arg4 = args[1]
|
84
|
+
|
85
|
+
options[:line_separator] = arg2
|
86
|
+
options[:column_separator] = arg2
|
87
|
+
else
|
88
|
+
|
89
|
+
raise ArgumentError, "wrong number of arguments (given #{2 + args.size}, expected 2..4)"
|
90
|
+
end
|
91
|
+
|
92
|
+
::Xqsr3::IO.writelines path, contents, **options
|
62
93
|
end
|
63
94
|
end # class IO
|
64
95
|
|
65
96
|
# ############################## end of file ############################# #
|
66
97
|
|
98
|
+
|
@@ -11,11 +11,9 @@ module X_assert_raise_with_message_ # :nodoc: all
|
|
11
11
|
|
12
12
|
if TestUnitVersion_.is_at_least? [ 3, 0, 8 ]
|
13
13
|
|
14
|
-
# @!visibility private
|
15
14
|
AssertionFailedError_ = Test::Unit::AssertionFailedError # :nodoc:
|
16
15
|
else
|
17
16
|
|
18
|
-
# @!visibility private
|
19
17
|
class AssertionFailedError_ < ArgumentError; end # :nodoc:
|
20
18
|
end
|
21
19
|
|
data/lib/xqsr3/io/writelines.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Purpose: Adds a writelines() method to the IO module
|
6
6
|
#
|
7
7
|
# Created: 13th April 2007
|
8
|
-
# Updated:
|
8
|
+
# Updated: 31st October 2019
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
@@ -60,26 +60,54 @@ module IO
|
|
60
60
|
module WriteLine_Constants_ #:nodoc: all
|
61
61
|
|
62
62
|
NUMBER_OF_LINES_TO_EXAMINE = 20
|
63
|
-
|
64
63
|
end # module WriteLine_Constants_
|
65
64
|
|
66
65
|
private
|
67
66
|
|
68
67
|
# @!visibility private
|
69
|
-
def self.write_to_target_ target, contents, line_separator, column_separator # :nodoc:
|
68
|
+
def self.write_to_target_ target, contents, line_separator, column_separator, no_last_eol # :nodoc:
|
70
69
|
|
71
|
-
$stderr.puts "#{self.class}.write_to_target_(target(#{target.class})='#{target}', contents(#{contents.class})='#{contents}', line_separator(#{line_separator.class})='#{line_separator}', column_separator
|
72
|
-
|
70
|
+
$stderr.puts "#{self.class}.write_to_target_(target(#{target.class})='#{target}', contents(#{contents.class})='#{contents}', line_separator(#{line_separator.class})='#{line_separator}', column_separator(#{column_separator.class})='#{column_separator}', no_last_eol(#{no_last_eol.class})=#{no_last_eol})" if $DEBUG
|
71
|
+
|
72
|
+
if no_last_eol
|
73
|
+
|
74
|
+
first = true
|
75
|
+
|
76
|
+
if contents.instance_of? ::Hash
|
77
|
+
|
78
|
+
contents.each do |k, v|
|
79
|
+
|
80
|
+
target << line_separator unless first
|
81
|
+
|
82
|
+
target << "#{k}#{column_separator}#{v}"
|
83
|
+
|
84
|
+
first = false
|
85
|
+
end
|
86
|
+
else
|
87
|
+
|
88
|
+
contents.each do |element|
|
89
|
+
|
90
|
+
target << line_separator unless first
|
73
91
|
|
74
|
-
|
92
|
+
target << "#{element}"
|
75
93
|
|
76
|
-
|
94
|
+
first = false
|
95
|
+
end
|
77
96
|
end
|
78
97
|
else
|
79
98
|
|
80
|
-
contents.
|
99
|
+
if contents.instance_of? ::Hash
|
100
|
+
|
101
|
+
contents.each do |k, v|
|
81
102
|
|
82
|
-
|
103
|
+
target << "#{k}#{column_separator}#{v}#{line_separator}"
|
104
|
+
end
|
105
|
+
else
|
106
|
+
|
107
|
+
contents.each do |element|
|
108
|
+
|
109
|
+
target << "#{element}#{line_separator}"
|
110
|
+
end
|
83
111
|
end
|
84
112
|
end
|
85
113
|
|
@@ -139,6 +167,7 @@ $stderr.puts "#{self.class}.write_to_target_(target(#{target.class})='#{target}'
|
|
139
167
|
# - +:column_separator+ {optional} The column separator, to be applied between each field in the case where +contents+ is a +Hash+.
|
140
168
|
# - +:eol_lookahead_limit+ {optional} The number of content elements (line/pair) to inspect to determine whether element has a terminating end-of-line sequence. Defaults to 20. If 0, and +:line_separator+ is not specified, then will default to <tt>"\n"</tt>. If +nil+, then every line will be inspected.
|
141
169
|
# - +:line_separator+ {optional} The line separator, to be applied to the end of line created from each entry. When not specified, it will be deduced by inspecting +contents+ (according to +eol_lookahead_limit+).
|
170
|
+
# - +:no_last_eol+ {optional} If present and _truey_, causes suppression of the addition of the +:line_separator+ on the last line.
|
142
171
|
#
|
143
172
|
# === Return
|
144
173
|
#
|
@@ -170,6 +199,7 @@ $stderr.puts "#{self.class}.write_to_target_(target(#{target.class})='#{target}'
|
|
170
199
|
options ||= {}
|
171
200
|
eol_lookahead_limit = options[:eol_lookahead_limit] || WriteLine_Constants_::NUMBER_OF_LINES_TO_EXAMINE
|
172
201
|
column_separator = options[:column_separator] || ''
|
202
|
+
no_last_eol = options[:no_last_eol] || false
|
173
203
|
line_separator = nil
|
174
204
|
line_separator ||= options[:line_separator]
|
175
205
|
line_separator ||= self.deduce_line_separator_(contents, eol_lookahead_limit) unless !eol_lookahead_limit.kind_of?(::Integer) || 0 == eol_lookahead_limit
|
@@ -186,11 +216,11 @@ $stderr.puts "#{self.class}.write_to_target_(target(#{target.class})='#{target}'
|
|
186
216
|
|
187
217
|
File.open(target, "w") do |io|
|
188
218
|
|
189
|
-
self.write_to_target_ io, contents, line_separator, column_separator
|
219
|
+
self.write_to_target_ io, contents, line_separator, column_separator, no_last_eol
|
190
220
|
end
|
191
221
|
else
|
192
222
|
|
193
|
-
self.write_to_target_ target, contents, line_separator, column_separator
|
223
|
+
self.write_to_target_ target, contents, line_separator, column_separator, no_last_eol
|
194
224
|
end
|
195
225
|
end # writelines
|
196
226
|
end # module IO
|
data/lib/xqsr3/quality.rb
CHANGED
data/lib/xqsr3/version.rb
CHANGED
@@ -5,12 +5,13 @@
|
|
5
5
|
# Purpose: Version for Xqsr3 library
|
6
6
|
#
|
7
7
|
# Created: 3rd April 2016
|
8
|
-
# Updated:
|
8
|
+
# Updated: 26th May 2020
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
12
12
|
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
+
# Copyright (c) 2019-2020, Matthew Wilson and Synesis Information Systems
|
14
15
|
# Copyright (c) 2016-2019, Matthew Wilson and Synesis Software
|
15
16
|
# All rights reserved.
|
16
17
|
#
|
@@ -50,7 +51,7 @@
|
|
50
51
|
module Xqsr3
|
51
52
|
|
52
53
|
# Current version of the Xqsr3 library
|
53
|
-
VERSION = '0.
|
54
|
+
VERSION = '0.36.0'
|
54
55
|
|
55
56
|
private
|
56
57
|
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
@@ -22,6 +22,18 @@ class Test_IO_writelines < Test::Unit::TestCase
|
|
22
22
|
assert_equal "abc\n", s.string
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_single_string_nolasteol
|
26
|
+
|
27
|
+
input = 'abc'
|
28
|
+
|
29
|
+
s = StringIO.new '', 'a'
|
30
|
+
|
31
|
+
r = ::IO.writelines s, input, no_last_eol: true
|
32
|
+
|
33
|
+
assert_equal 1, r
|
34
|
+
assert_equal "abc", s.string
|
35
|
+
end
|
36
|
+
|
25
37
|
def test_single_string_in_array
|
26
38
|
|
27
39
|
input = [ 'abc' ]
|
@@ -46,6 +58,18 @@ class Test_IO_writelines < Test::Unit::TestCase
|
|
46
58
|
assert_equal "abc\n", s.string
|
47
59
|
end
|
48
60
|
|
61
|
+
def test_single_string_in_hash_nolasteol
|
62
|
+
|
63
|
+
input = { 'abc' => '' }
|
64
|
+
|
65
|
+
s = StringIO.new '', 'a'
|
66
|
+
|
67
|
+
r = ::IO.writelines s, input, no_last_eol: true
|
68
|
+
|
69
|
+
assert_equal 1, r
|
70
|
+
assert_equal "abc", s.string
|
71
|
+
end
|
72
|
+
|
49
73
|
def test_two_strings_in_array
|
50
74
|
|
51
75
|
input = [ 'abc', 'def' ]
|
@@ -82,6 +106,18 @@ class Test_IO_writelines < Test::Unit::TestCase
|
|
82
106
|
assert_equal "abc\ndef\n", s.string
|
83
107
|
end
|
84
108
|
|
109
|
+
def test_two_strings_in_hash_nolasteol
|
110
|
+
|
111
|
+
input = { 'ab' => 'c', 'de' => 'f' }
|
112
|
+
|
113
|
+
s = StringIO.new '', 'a'
|
114
|
+
|
115
|
+
r = ::IO.writelines s, input, no_last_eol: true
|
116
|
+
|
117
|
+
assert_equal 2, r
|
118
|
+
assert_equal "abc\ndef", s.string
|
119
|
+
end
|
120
|
+
|
85
121
|
def test_ten_strings_in_array
|
86
122
|
|
87
123
|
input = (0...10).map { |i| i.to_s }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xqsr3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.36.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
eXtensions by fine Quantum for Standard Ruby and 3rd-party libraries is a
|
@@ -23,16 +23,24 @@ files:
|
|
23
23
|
- README.md
|
24
24
|
- examples/count_word_frequencies.md
|
25
25
|
- examples/count_word_frequencies.rb
|
26
|
+
- lib/xqsr3/all_extensions.rb
|
27
|
+
- lib/xqsr3/array_utilities.rb
|
26
28
|
- lib/xqsr3/array_utilities/join_with_or.rb
|
29
|
+
- lib/xqsr3/command_line_utilities.rb
|
27
30
|
- lib/xqsr3/command_line_utilities/map_option_string.rb
|
31
|
+
- lib/xqsr3/containers.rb
|
28
32
|
- lib/xqsr3/containers/frequency_map.rb
|
29
33
|
- lib/xqsr3/containers/multi_map.rb
|
34
|
+
- lib/xqsr3/conversion.rb
|
30
35
|
- lib/xqsr3/conversion/bool_parser.rb
|
31
36
|
- lib/xqsr3/conversion/integer_parser.rb
|
37
|
+
- lib/xqsr3/diagnostics.rb
|
32
38
|
- lib/xqsr3/diagnostics/exception_utilities.rb
|
33
39
|
- lib/xqsr3/diagnostics/exceptions/with_cause.rb
|
34
40
|
- lib/xqsr3/diagnostics/inspect_builder.rb
|
35
41
|
- lib/xqsr3/doc_.rb
|
42
|
+
- lib/xqsr3/extensions.rb
|
43
|
+
- lib/xqsr3/extensions/array.rb
|
36
44
|
- lib/xqsr3/extensions/array/join_with_or.rb
|
37
45
|
- lib/xqsr3/extensions/enumerable.rb
|
38
46
|
- lib/xqsr3/extensions/enumerable/collect_with_index.rb
|
@@ -68,12 +76,14 @@ files:
|
|
68
76
|
- lib/xqsr3/extensions/test/unit/assert_superclass_of.rb
|
69
77
|
- lib/xqsr3/extensions/test/unit/assert_true.rb
|
70
78
|
- lib/xqsr3/extensions/test/unit/assert_type_has_instance_methods.rb
|
79
|
+
- lib/xqsr3/hash_utilities.rb
|
71
80
|
- lib/xqsr3/hash_utilities/deep_transform.rb
|
72
81
|
- lib/xqsr3/hash_utilities/key_matching.rb
|
73
82
|
- lib/xqsr3/internal_/test_unit_version_.rb
|
74
83
|
- lib/xqsr3/io/writelines.rb
|
75
84
|
- lib/xqsr3/quality.rb
|
76
85
|
- lib/xqsr3/quality/parameter_checking.rb
|
86
|
+
- lib/xqsr3/string_utilities.rb
|
77
87
|
- lib/xqsr3/string_utilities/ends_with.rb
|
78
88
|
- lib/xqsr3/string_utilities/nil_if_empty.rb
|
79
89
|
- lib/xqsr3/string_utilities/nil_if_whitespace.rb
|
@@ -160,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
170
|
version: '0'
|
161
171
|
requirements: []
|
162
172
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.6
|
173
|
+
rubygems_version: 2.7.6
|
164
174
|
signing_key:
|
165
175
|
specification_version: 4
|
166
176
|
summary: xqsr3
|