strings 0.1.8 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +4 -2
- data/lib/strings.rb +7 -7
- data/lib/strings/align.rb +6 -5
- data/lib/strings/extensions.rb +1 -1
- data/lib/strings/fold.rb +1 -1
- data/lib/strings/pad.rb +7 -7
- data/lib/strings/padder.rb +2 -2
- data/lib/strings/truncate.rb +6 -6
- data/lib/strings/version.rb +1 -1
- data/lib/strings/wrap.rb +24 -23
- metadata +15 -51
- data/Rakefile +0 -8
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/spec/spec_helper.rb +0 -39
- data/spec/unit/align/align_left_spec.rb +0 -71
- data/spec/unit/align/align_right_spec.rb +0 -71
- data/spec/unit/align/align_spec.rb +0 -95
- data/spec/unit/align_spec.rb +0 -18
- data/spec/unit/ansi_spec.rb +0 -7
- data/spec/unit/extensions_spec.rb +0 -77
- data/spec/unit/fold/fold_spec.rb +0 -28
- data/spec/unit/fold_spec.rb +0 -7
- data/spec/unit/pad/pad_spec.rb +0 -74
- data/spec/unit/pad_spec.rb +0 -12
- data/spec/unit/padder/parse_spec.rb +0 -35
- data/spec/unit/sanitize_spec.rb +0 -7
- data/spec/unit/truncate/truncate_spec.rb +0 -74
- data/spec/unit/truncate_spec.rb +0 -8
- data/spec/unit/wrap/insert_ansi_spec.rb +0 -65
- data/spec/unit/wrap/wrap_spec.rb +0 -207
- data/spec/unit/wrap_spec.rb +0 -15
- data/strings.gemspec +0 -34
- data/tasks/console.rake +0 -9
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d112bf8f896e770e61346f4f64c2dff39c1d5ec630321d811fadbcf4a96cb0b
|
4
|
+
data.tar.gz: 58242b6240dc5400dd1262a4e7692574d60fe2415e6957db8bf7ec0fd52d861c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e35d997825c8f3f5349236688db5be5b7c1fc8f5b560f53321e666a4e7dc7dd94c837fe6bf13d97c13d22d34010f0201d3a697956b212c157d835a3549fb15
|
7
|
+
data.tar.gz: '087381e615bfa11ddeeacdeca1fbfb866ca4c70977f60df1ad4d02e7fd25b12154e32158e32ada3fe4815ce122288a097112877e85c3ac0cbe4e6bf284b878c0'
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## [v0.2.0] - 2020-08-11
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
* Change String#wrap to preserve newline character breaks
|
7
|
+
* Change gemspec to remove test artefacts and bundler dev dependency
|
8
|
+
* Change gemspec to require Ruby >= 2.0.0
|
9
|
+
|
3
10
|
## [v0.1.8] - 2019-11-24
|
4
11
|
|
5
12
|
### Fixed
|
@@ -53,6 +60,7 @@
|
|
53
60
|
|
54
61
|
* Initial implementation and release
|
55
62
|
|
63
|
+
[v0.2.0]: https://github.com/piotrmurach/strings/compare/v0.1.8...v0.2.0
|
56
64
|
[v0.1.8]: https://github.com/piotrmurach/strings/compare/v0.1.7...v0.1.8
|
57
65
|
[v0.1.7]: https://github.com/piotrmurach/strings/compare/v0.1.6...v0.1.7
|
58
66
|
[v0.1.6]: https://github.com/piotrmurach/strings/compare/v0.1.5...v0.1.6
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
[coverage]: https://coveralls.io/github/piotrmurach/strings?branch=master
|
19
19
|
[inchpages]: http://inch-ci.org/github/piotrmurach/strings
|
20
20
|
|
21
|
-
>
|
21
|
+
> A set of useful methods for working with strings such as align, truncate, wrap, and many more.
|
22
22
|
|
23
23
|
## Installation
|
24
24
|
|
@@ -293,7 +293,7 @@ To wrap text into lines no longer than `wrap_at` argument length, the `wrap` met
|
|
293
293
|
Given the following text:
|
294
294
|
|
295
295
|
```ruby
|
296
|
-
text "Think not, is my eleventh commandment; and sleep when you can, is my twelfth."
|
296
|
+
text = "Think not, is my eleventh commandment; and sleep when you can, is my twelfth."
|
297
297
|
```
|
298
298
|
|
299
299
|
Then to wrap the text to given length do:
|
@@ -377,6 +377,8 @@ using Strings::Extensions
|
|
377
377
|
| ------------ | ----------- | -------- |
|
378
378
|
| [strings-ansi](https://github.com/piotrmurach/strings-ansi) | Handle ANSI escape codes in strings. | [docs](http://www.rubydoc.info/gems/strings-ansi) |
|
379
379
|
| [strings-case](https://github.com/piotrmurach/strings-case) | Handle case transformations in strings. | [docs](http://www.rubydoc.info/gems/strings-case) |
|
380
|
+
| [strings-inflection](https://github.com/piotrmurach/strings-inflection) | Inflects English nouns and verbs. | [docs](http://www.rubydoc.info/gems/strings-inflection) |
|
381
|
+
| [strings-numeral](https://github.com/piotrmurach/strings-numeral) | Express numbers as word numerals. | [docs](http://www.rubydoc.info/gems/strings-numeral) |
|
380
382
|
|
381
383
|
## Development
|
382
384
|
|
data/lib/strings.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "strings-ansi"
|
4
4
|
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require_relative
|
8
|
-
require_relative
|
9
|
-
require_relative
|
10
|
-
require_relative
|
5
|
+
require_relative "strings/align"
|
6
|
+
require_relative "strings/fold"
|
7
|
+
require_relative "strings/pad"
|
8
|
+
require_relative "strings/truncate"
|
9
|
+
require_relative "strings/wrap"
|
10
|
+
require_relative "strings/version"
|
11
11
|
|
12
12
|
module Strings
|
13
13
|
# Align text within the width.
|
data/lib/strings/align.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "strings-ansi"
|
4
|
+
require "unicode/display_width"
|
5
5
|
|
6
6
|
module Strings
|
7
7
|
# Responsible for text alignment
|
8
8
|
module Align
|
9
|
-
NEWLINE = "\n"
|
10
|
-
SPACE = " "
|
9
|
+
NEWLINE = "\n"
|
10
|
+
SPACE = " "
|
11
11
|
LINE_BREAK = %r{\r\n|\r|\n}.freeze
|
12
12
|
|
13
13
|
# Aligns text within the width.
|
@@ -32,12 +32,13 @@ module Strings
|
|
32
32
|
# Strings::Align(text, 22, direction: :right)
|
33
33
|
# # => " the madness of men"
|
34
34
|
#
|
35
|
-
# Strings::Align.align(text, 22, direction: :center, fill:
|
35
|
+
# Strings::Align.align(text, 22, direction: :center, fill: "*")
|
36
36
|
# # => "***the madness of men***"
|
37
37
|
#
|
38
38
|
# @api public
|
39
39
|
def align(text, width, direction: :left, **options)
|
40
40
|
return text if width.nil?
|
41
|
+
|
41
42
|
method = to_alignment(direction)
|
42
43
|
send(method, text, width, **options)
|
43
44
|
end
|
data/lib/strings/extensions.rb
CHANGED
data/lib/strings/fold.rb
CHANGED
data/lib/strings/pad.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "strings-ansi"
|
4
|
+
require "unicode/display_width"
|
5
5
|
|
6
|
-
require_relative
|
6
|
+
require_relative "padder"
|
7
7
|
|
8
8
|
module Strings
|
9
9
|
# Responsible for text padding
|
10
10
|
module Pad
|
11
|
-
NEWLINE = "\n"
|
12
|
-
SPACE = " "
|
13
|
-
LINE_BREAK =
|
11
|
+
NEWLINE = "\n"
|
12
|
+
SPACE = " "
|
13
|
+
LINE_BREAK = %r{\r\n|\r|\n}.freeze
|
14
14
|
|
15
15
|
# Apply padding to multiline text with ANSI codes
|
16
16
|
#
|
@@ -79,7 +79,7 @@ module Strings
|
|
79
79
|
# @api private
|
80
80
|
def max_line_length(text, separator)
|
81
81
|
lines = text.split(separator, -1)
|
82
|
-
display_width(lines.max_by { |line| display_width(line) } ||
|
82
|
+
display_width(lines.max_by { |line| display_width(line) } || "")
|
83
83
|
end
|
84
84
|
module_function :max_line_length
|
85
85
|
|
data/lib/strings/padder.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Strings
|
4
4
|
# A class responsible for parsing padding value
|
@@ -45,7 +45,7 @@ module Strings
|
|
45
45
|
elsif value.size == 4
|
46
46
|
value
|
47
47
|
else
|
48
|
-
raise ParseError,
|
48
|
+
raise ParseError, "Wrong :padding parameter, must be an array"
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
data/lib/strings/truncate.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "strings-ansi"
|
4
|
+
require "unicode/display_width"
|
5
|
+
require "unicode_utils/each_grapheme"
|
6
6
|
|
7
7
|
module Strings
|
8
8
|
# A module responsible for text truncation
|
9
9
|
module Truncate
|
10
|
-
DEFAULT_TRAILING =
|
10
|
+
DEFAULT_TRAILING = "…".freeze
|
11
11
|
|
12
12
|
DEFAULT_LENGTH = 30
|
13
13
|
|
@@ -32,10 +32,10 @@ module Strings
|
|
32
32
|
# Strings::Truncate.truncate(text, 20)
|
33
33
|
# # => "The sovereignest t…"
|
34
34
|
#
|
35
|
-
# Strings::Truncate.truncate(text, 20, separator:
|
35
|
+
# Strings::Truncate.truncate(text, 20, separator: " " )
|
36
36
|
# # => "The sovereignest…"
|
37
37
|
#
|
38
|
-
# Strings::Truncate.truncate(text, 40, trailing:
|
38
|
+
# Strings::Truncate.truncate(text, 40, trailing: "... (see more)" )
|
39
39
|
# # => "The sovereignest thing on... (see more)"
|
40
40
|
#
|
41
41
|
# @api public
|
data/lib/strings/version.rb
CHANGED
data/lib/strings/wrap.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
|
7
|
-
require_relative 'fold'
|
3
|
+
require "strings-ansi"
|
4
|
+
require "unicode/display_width"
|
5
|
+
require "unicode_utils/each_grapheme"
|
8
6
|
|
9
7
|
module Strings
|
10
8
|
module Wrap
|
11
9
|
DEFAULT_WIDTH = 80
|
12
|
-
NEWLINE = "\n"
|
13
|
-
SPACE = " "
|
10
|
+
NEWLINE = "\n"
|
11
|
+
SPACE = " "
|
14
12
|
LINE_BREAK = %r{\r\n|\r|\n}.freeze
|
15
|
-
LINE_BREAKS = "\r\n+|\r+|\n+"
|
13
|
+
LINE_BREAKS = "\r\n+|\r+|\n+"
|
16
14
|
|
17
15
|
# Wrap a text into lines no longer than wrap_at length.
|
18
16
|
# Preserves existing lines and existing word boundaries.
|
@@ -22,31 +20,30 @@ module Strings
|
|
22
20
|
# # => "Some \nlongish \ntext"
|
23
21
|
#
|
24
22
|
# @api public
|
25
|
-
def wrap(text, wrap_at = DEFAULT_WIDTH, separator:
|
23
|
+
def wrap(text, wrap_at = DEFAULT_WIDTH, separator: NEWLINE)
|
26
24
|
if text.scan(/[[:print:]]/).length < wrap_at.to_i || wrap_at.to_i.zero?
|
27
25
|
return text
|
28
26
|
end
|
27
|
+
|
29
28
|
ansi_stack = []
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end * sep
|
29
|
+
text.lines.map do |line|
|
30
|
+
format_line(line, wrap_at, ansi_stack).join(separator)
|
31
|
+
end.join
|
34
32
|
end
|
35
33
|
module_function :wrap
|
36
34
|
|
37
|
-
# Format
|
35
|
+
# Format line to be maximum of wrap_at length
|
38
36
|
#
|
39
|
-
# @param [String]
|
40
|
-
# the
|
37
|
+
# @param [String] text_line
|
38
|
+
# the line to format
|
41
39
|
# @param [Integer] wrap_at
|
42
|
-
# the maximum length to wrap the
|
40
|
+
# the maximum length to wrap the line
|
43
41
|
#
|
44
42
|
# @return [Array[String]]
|
45
43
|
# the wrapped lines
|
46
44
|
#
|
47
45
|
# @api private
|
48
|
-
def
|
49
|
-
cleared_para = Fold.fold(paragraph)
|
46
|
+
def format_line(text_line, wrap_at, ansi_stack)
|
50
47
|
lines = []
|
51
48
|
line = []
|
52
49
|
word = []
|
@@ -55,10 +52,10 @@ module Strings
|
|
55
52
|
word_length = 0
|
56
53
|
line_length = 0
|
57
54
|
char_length = 0 # visible char length
|
58
|
-
text_length = display_width(
|
55
|
+
text_length = display_width(text_line)
|
59
56
|
total_length = 0
|
60
57
|
|
61
|
-
UnicodeUtils.each_grapheme(
|
58
|
+
UnicodeUtils.each_grapheme(text_line) do |char|
|
62
59
|
# we found ansi let's consume
|
63
60
|
if char == Strings::ANSI::CSI || ansi.length > 0
|
64
61
|
ansi << char
|
@@ -115,7 +112,7 @@ module Strings
|
|
115
112
|
lines << insert_ansi(word.join, ansi_stack) unless word.empty?
|
116
113
|
lines
|
117
114
|
end
|
118
|
-
module_function :
|
115
|
+
module_function :format_line
|
119
116
|
|
120
117
|
# Insert ANSI code into string
|
121
118
|
#
|
@@ -151,7 +148,11 @@ module Strings
|
|
151
148
|
matched_reset = false
|
152
149
|
new_stack << ansi # keep the ansi
|
153
150
|
next if ansi[1] == length
|
154
|
-
output.
|
151
|
+
if output.end_with?(NEWLINE)
|
152
|
+
output.insert(-2, ansi_reset)
|
153
|
+
else
|
154
|
+
output.insert(-1, ansi_reset) # add reset at the end
|
155
|
+
end
|
155
156
|
end
|
156
157
|
|
157
158
|
output.insert(ansi[1], ansi[0])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: strings-ansi
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: unicode_utils
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: bundler
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.5'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '1.5'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,20 +80,20 @@ dependencies:
|
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '3.0'
|
97
|
-
description: A set of
|
98
|
-
|
83
|
+
description: A set of methods for working with strings such as align, truncate, wrap
|
84
|
+
and many more.
|
99
85
|
email:
|
100
|
-
-
|
86
|
+
- piotr@piotrmurach.com
|
101
87
|
executables: []
|
102
88
|
extensions: []
|
103
|
-
extra_rdoc_files:
|
89
|
+
extra_rdoc_files:
|
90
|
+
- README.md
|
91
|
+
- CHANGELOG.md
|
92
|
+
- LICENSE.txt
|
104
93
|
files:
|
105
94
|
- CHANGELOG.md
|
106
95
|
- LICENSE.txt
|
107
96
|
- README.md
|
108
|
-
- Rakefile
|
109
|
-
- bin/console
|
110
|
-
- bin/setup
|
111
97
|
- lib/strings.rb
|
112
98
|
- lib/strings/align.rb
|
113
99
|
- lib/strings/extensions.rb
|
@@ -117,28 +103,6 @@ files:
|
|
117
103
|
- lib/strings/truncate.rb
|
118
104
|
- lib/strings/version.rb
|
119
105
|
- lib/strings/wrap.rb
|
120
|
-
- spec/spec_helper.rb
|
121
|
-
- spec/unit/align/align_left_spec.rb
|
122
|
-
- spec/unit/align/align_right_spec.rb
|
123
|
-
- spec/unit/align/align_spec.rb
|
124
|
-
- spec/unit/align_spec.rb
|
125
|
-
- spec/unit/ansi_spec.rb
|
126
|
-
- spec/unit/extensions_spec.rb
|
127
|
-
- spec/unit/fold/fold_spec.rb
|
128
|
-
- spec/unit/fold_spec.rb
|
129
|
-
- spec/unit/pad/pad_spec.rb
|
130
|
-
- spec/unit/pad_spec.rb
|
131
|
-
- spec/unit/padder/parse_spec.rb
|
132
|
-
- spec/unit/sanitize_spec.rb
|
133
|
-
- spec/unit/truncate/truncate_spec.rb
|
134
|
-
- spec/unit/truncate_spec.rb
|
135
|
-
- spec/unit/wrap/insert_ansi_spec.rb
|
136
|
-
- spec/unit/wrap/wrap_spec.rb
|
137
|
-
- spec/unit/wrap_spec.rb
|
138
|
-
- strings.gemspec
|
139
|
-
- tasks/console.rake
|
140
|
-
- tasks/coverage.rake
|
141
|
-
- tasks/spec.rake
|
142
106
|
homepage: https://github.com/piotrmurach/strings
|
143
107
|
licenses:
|
144
108
|
- MIT
|
@@ -156,15 +120,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
156
120
|
requirements:
|
157
121
|
- - ">="
|
158
122
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
123
|
+
version: 2.0.0
|
160
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
125
|
requirements:
|
162
126
|
- - ">="
|
163
127
|
- !ruby/object:Gem::Version
|
164
128
|
version: '0'
|
165
129
|
requirements: []
|
166
|
-
rubygems_version: 3.
|
130
|
+
rubygems_version: 3.1.2
|
167
131
|
signing_key:
|
168
132
|
specification_version: 4
|
169
|
-
summary: A set of
|
133
|
+
summary: A set of methods for working with strings.
|
170
134
|
test_files: []
|