strings 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
3
- FileList['tasks/**/*.rake'].each(&method(:import))
4
-
5
- desc 'Run all specs'
6
- task ci: %w[ spec ]
7
-
8
- task default: :spec
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "strings"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if ENV['COVERAGE'] || ENV['TRAVIS']
4
- require 'simplecov'
5
- require 'coveralls'
6
-
7
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ])
11
-
12
- SimpleCov.start do
13
- command_name 'spec'
14
- add_filter 'spec'
15
- end
16
- end
17
-
18
- require "bundler/setup"
19
- require "strings"
20
-
21
- module Helpers
22
- def unindent(text)
23
- text.gsub(/^[ \t]*/, '').chomp
24
- end
25
- end
26
-
27
- RSpec.configure do |config|
28
- config.include(Helpers)
29
-
30
- # Enable flags like --only-failures and --next-failure
31
- config.example_status_persistence_file_path = ".rspec_status"
32
-
33
- # Disable RSpec exposing methods globally on `Module` and `main`
34
- config.disable_monkey_patching!
35
-
36
- config.expect_with :rspec do |c|
37
- c.syntax = :expect
38
- end
39
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Strings::Align, '#align_left' do
4
- it "aligns line to left" do
5
- text = "the madness of men"
6
- expect(Strings::Align.align_left(text, 22)).to eq("the madness of men ")
7
- end
8
-
9
- it "fills empty" do
10
- expect(Strings::Align.align_left('', 22)).to eq(" ")
11
- end
12
-
13
- it "left justifies string with unicode characters" do
14
- text = "こんにちは"
15
- expect(Strings::Align.align(text, 20, direction: :left)).to eq("こんにちは ")
16
- end
17
-
18
- it "left justifies string with ansi codes" do
19
- text = "\e[32mthe madness of men\e[0m"
20
- expect(Strings::Align.align(text, 22, direction: :left)).to eq("\e[32mthe madness of men\e[0m ")
21
- end
22
-
23
- it "aligns multiline text to left" do
24
- text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
25
- expect(Strings::Align.align_left(text, 40)).to eq([
26
- "for there is no folly of the beast \n",
27
- "of the earth which \n",
28
- "is not infinitely \n",
29
- "outdone by the madness of men "
30
- ].join)
31
- end
32
-
33
- it "left justifies multiline utf text" do
34
- text = "ラドクリフ\n、マラソン五輪\n代表に1万m出\n場にも含み"
35
- expect(Strings::Align.align_left(text, 20)).to eq([
36
- "ラドクリフ \n",
37
- "、マラソン五輪 \n",
38
- "代表に1万m出 \n",
39
- "場にも含み "
40
- ].join)
41
- end
42
-
43
- it "left justifies ansi text" do
44
- text = "for \e[35mthere\e[0m is no folly of the beast\nof the \e[33mearth\e0m which\nis \e[34mnot infinitely\e[0m\n\e[33moutdone\e[0m by the madness of men"
45
- expect(Strings::Align.align_left(text, 40)).to eq([
46
- "for \e[35mthere\e[0m is no folly of the beast \n",
47
- "of the \e[33mearth\e0m which \n",
48
- "is \e[34mnot infinitely\e[0m \n",
49
- "\e[33moutdone\e[0m by the madness of men "
50
- ].join)
51
- end
52
-
53
- it "left justifies multiline text with fill of '*'" do
54
- text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
55
- expect(Strings::Align.align_left(text, 40, fill: '*')).to eq([
56
- "for there is no folly of the beast******\n",
57
- "of the earth which**********************\n",
58
- "is not infinitely***********************\n",
59
- "outdone by the madness of men***********"
60
- ].join)
61
- end
62
-
63
- it "handles \r\n line separator" do
64
- text = "Closes #360\r\n\r\nCloses !217"
65
- expect(Strings::Align.align_left(text, 27)).to eq([
66
- "Closes #360 ",
67
- " ",
68
- "Closes !217 "
69
- ].join("\r\n"))
70
- end
71
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Strings::Align, '#align_right' do
4
- it "aligns line to right" do
5
- text = "the madness of men"
6
- expect(Strings::Align.align_right(text, 22)).to eq(" the madness of men")
7
- end
8
-
9
- it "fills empty" do
10
- expect(Strings::Align.align_right('', 22)).to eq(" ")
11
- end
12
-
13
- it "aligns string to the right with unicode characters" do
14
- text = "こんにちは"
15
- expect(Strings::Align.align(text, 20, direction: :right)).to eq(" こんにちは")
16
- end
17
-
18
- it "aligns string to the right with ansi codees" do
19
- text = "\e[32mthe madness of men\e[0m"
20
- expect(Strings::Align.align(text, 22, direction: :right)).to eq(" \e[32mthe madness of men\e[0m")
21
- end
22
-
23
- it "aligns multiline text to the right" do
24
- text = "for there is no folly of the beast\n of the earth which\n is not infinitely\n outdone by the madness of men"
25
- expect(Strings::Align.align_right(text, 40)).to eq([
26
- " for there is no folly of the beast\n",
27
- " of the earth which\n",
28
- " is not infinitely\n",
29
- " outdone by the madness of men"
30
- ].join)
31
- end
32
-
33
- it "aligns multiline text to right with unicode characters" do
34
- text = "ラドクリフ\n、マラソン五輪\n代表に1万m出\n場にも含み"
35
- expect(Strings::Align.align_right(text, 20)).to eq([
36
- " ラドクリフ\n",
37
- " 、マラソン五輪\n",
38
- " 代表に1万m出\n",
39
- " 場にも含み"
40
- ].join)
41
- end
42
-
43
- it "right justfies ansi text" do
44
- text = "for \e[35mthere\e[0m is no folly of the beast\nof the \e[33mearth\e0m which\nis \e[34mnot infinitely\e[0m\n\e[33moutdone\e[0m by the madness of men"
45
- expect(Strings::Align.align_right(text, 40)).to eq([
46
- " for \e[35mthere\e[0m is no folly of the beast\n",
47
- " of the \e[33mearth\e0m which\n",
48
- " is \e[34mnot infinitely\e[0m\n",
49
- " \e[33moutdone\e[0m by the madness of men"
50
- ].join)
51
- end
52
-
53
- it "right justifies multiline text with fill of '*'" do
54
- text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
55
- expect(Strings::Align.align_right(text, 40, fill: '*')).to eq([
56
- "******for there is no folly of the beast\n",
57
- "**********************of the earth which\n",
58
- "***********************is not infinitely\n",
59
- "***********outdone by the madness of men"
60
- ].join)
61
- end
62
-
63
- it "handles \r\n line separator" do
64
- text = "Closes #360\r\n\r\nCloses !217"
65
- expect(Strings::Align.align_right(text, 27)).to eq([
66
- " Closes #360",
67
- " ",
68
- " Closes !217"
69
- ].join("\r\n"))
70
- end
71
- end
@@ -1,95 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Strings::Align, '#align' do
4
- it "doesn't align unrecognized direction" do
5
- text = "the madness of men"
6
- expect {
7
- Strings::Align.align(text, 22, direction: :unknown)
8
- }.to raise_error(ArgumentError, /Unknown alignment/)
9
- end
10
-
11
- it "fills empty" do
12
- expect(Strings::Align.align('', 22, direction: :center)).to eq(" ")
13
- end
14
-
15
- it "centers line" do
16
- text = "the madness of men"
17
- expect(Strings::Align.align_center(text, 22)).to eq(" the madness of men ")
18
- end
19
-
20
- it "centers unicode characters" do
21
- text = "こんにちは"
22
- expect(Strings::Align.align_center(text, 20)).to eq(" こんにちは ")
23
- end
24
-
25
- it "centers string with ansi codes" do
26
- text = "\e[32mthe madness of men\e[0m"
27
- expect(Strings::Align.align_center(text, 22)).to eq(" \e[32mthe madness of men\e[0m ")
28
- end
29
-
30
- it "centers multiline text" do
31
- text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
32
- expect(Strings::Align.align_center(text, 40)).to eq([
33
- " for there is no folly of the beast \n",
34
- " of the earth which \n",
35
- " is not infinitely \n",
36
- " outdone by the madness of men "
37
- ].join)
38
- end
39
-
40
- it "centers multiline text with exact width" do
41
- text = "the madness \nof men"
42
- expect(Strings::Align.align_center(text, 12)).to eq([
43
- "the madness \n",
44
- " of men "
45
- ].join)
46
- end
47
-
48
- it "centers multiline unicode text" do
49
- text = "ラドクリフ\n、マラソン五輪\n代表に1万m出\n場にも含み"
50
- expect(Strings::Align.align_center(text, 20)).to eq([
51
- " ラドクリフ \n",
52
- " 、マラソン五輪 \n",
53
- " 代表に1万m出 \n",
54
- " 場にも含み "
55
- ].join)
56
- end
57
-
58
- it "centers text with ansi codes" do
59
- text = "for \e[35mthere\e[0m is no folly of the beast\nof the \e[33mearth\e0m which\nis \e[34mnot infinitely\e[0m\n\e[33moutdone\e[0m by the madness of men"
60
- expect(Strings::Align.align_center(text, 40)).to eq([
61
- " for \e[35mthere\e[0m is no folly of the beast \n",
62
- " of the \e[33mearth\e0m which \n",
63
- " is \e[34mnot infinitely\e[0m \n",
64
- " \e[33moutdone\e[0m by the madness of men "
65
- ].join)
66
- end
67
-
68
- it "centers multiline text with fill character '*'" do
69
- text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
70
- expect(Strings::Align.align(text, 40, direction: :center, fill: '*')).to eq([
71
- "***for there is no folly of the beast***\n",
72
- "***********of the earth which***********\n",
73
- "***********is not infinitely************\n",
74
- "*****outdone by the madness of men******"
75
- ].join)
76
- end
77
-
78
- it "handles \r\n line separator" do
79
- text = "Closes #360\r\n\r\nCloses !217"
80
- expect(Strings::Align.align(text, 27)).to eq([
81
- "Closes #360 ",
82
- " ",
83
- "Closes !217 "
84
- ].join("\r\n"))
85
- end
86
-
87
- it "handles \r\n line separator and centers" do
88
- text = "Closes #360\r\n\r\nCloses !217"
89
- expect(Strings::Align.align_center(text, 27)).to eq([
90
- " Closes #360 ",
91
- " ",
92
- " Closes !217 "
93
- ].join("\r\n"))
94
- end
95
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Strings, '#align' do
4
- it "aligns text" do
5
- text = "the madness of men"
6
- expect(Strings.align(text, 22, direction: :center)).to eq(" the madness of men ")
7
- end
8
-
9
- it "aligns text to left" do
10
- text = "the madness of men"
11
- expect(Strings.align_left(text, 22)).to eq("the madness of men ")
12
- end
13
-
14
- it "aligns text to right" do
15
- text = "the madness of men"
16
- expect(Strings.align_right(text, 22)).to eq(" the madness of men")
17
- end
18
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Strings, '#ansi?' do
4
- it "checks if string has any ansi codes" do
5
- expect(Strings.ansi?("\e[33mfoo\e[0m")).to eq(true)
6
- end
7
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'strings/extensions'
4
-
5
- using Strings::Extensions
6
-
7
- RSpec.describe Strings::Extensions do
8
- let(:text) { "the madness of men" }
9
-
10
- it "aligns a line in the center" do
11
- expect(text.align(22, direction: :center)).to eq(" the madness of men ")
12
- end
13
-
14
- it "aligns a line to the left" do
15
- expect(text.align_left(22)).to eq("the madness of men ")
16
- end
17
-
18
- it "aligns a line to the right" do
19
- expect(text.align_right(22)).to eq(" the madness of men")
20
- end
21
-
22
- it "checks for ansi" do
23
- expect("\e[33mfoo\e[0m".ansi?).to eq(true)
24
- end
25
-
26
- it "removes ansi codes" do
27
- expect("\e[33mfoo\e[0m".sanitize).to eq('foo')
28
- end
29
-
30
- it "folds a line" do
31
- expect("foo\n\nbar\n".fold).to eq('foo bar ')
32
- end
33
-
34
- it "pads a line" do
35
- expect(text.pad(1)).to eq([
36
- " " * (text.size + 2),
37
- " #{text} ",
38
- " " * (text.size + 2),
39
- ].join("\n"))
40
- end
41
-
42
- it "pads a line" do
43
- expect(text.pad(1)).to eq([
44
- " " * (text.size + 2),
45
- " #{text} ",
46
- " " * (text.size + 2),
47
- ].join("\n"))
48
- end
49
-
50
- it "pads a line with custom fill" do
51
- expect(text.pad(1, fill: "*")).to eq([
52
- "*" * (text.size + 2),
53
- "*#{text}*",
54
- "*" * (text.size + 2),
55
- ].join("\n"))
56
- end
57
-
58
- it "truncates a line" do
59
- text = "the madness of men"
60
- expect(text.truncate(10)).to eq("the madn…")
61
- end
62
-
63
- it "truncates a line with a custom trailing" do
64
- text = "the madness of men"
65
- expect(text.truncate(10, trailing: "...")).to eq("the ma...")
66
- end
67
-
68
- it "truncates into words with a custom trailing" do
69
- text = "the madness of men"
70
- expect(text.truncate(16, trailing: "...", separator: " ")).to eq("the madness...")
71
- end
72
-
73
- it "wraps a line" do
74
- expect('foobar1'.wrap(3)).to eq("foo\nbar\n1")
75
- end
76
- end
77
-
@@ -1,28 +0,0 @@
1
- # unicode: utf-8
2
- # frozen_string_literals: true
3
-
4
- RSpec.describe Strings, '#fold' do
5
- {
6
- " \n" => ' ',
7
- "\n " => ' ',
8
- "\n" => ' ',
9
- "\n\n\n" => ' ',
10
- " \n " => ' ',
11
- " \n \n \n" => ' '
12
- }.each do |actual, expected|
13
- it "removes newline '#{actual.gsub(/\n/, '\\n')}' to '#{expected}'" do
14
- expect(Strings::Fold.fold(actual)).to eq(expected)
15
- end
16
- end
17
-
18
- {
19
- " \r\n" => ' ',
20
- "\r\n " => ' ',
21
- "\r\n" => ' ',
22
- " \r\n " => ' ',
23
- }.each do |actual, expected|
24
- it "squashes '#{actual.gsub(/\r\n/, '\\r\\n')}' to '#{expected}'" do
25
- expect(Strings::Fold.fold(actual, "\r\n")).to eq(expected)
26
- end
27
- end
28
- end