lovely_rufus 0.2.1 → 0.3.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/.rubocop.yml +4 -7
- data/.ruby-version +1 -1
- data/Gemfile.lock +41 -26
- data/README.md +2 -2
- data/Rakefile +5 -6
- data/bin/lovely-rufus +1 -1
- data/config/reek.yml +7 -7
- data/lib/lovely_rufus.rb +9 -6
- data/lib/lovely_rufus/cli_wrapper.rb +1 -2
- data/lib/lovely_rufus/layers/basic_wrapper.rb +14 -0
- data/lib/lovely_rufus/layers/code_comment_stripper.rb +13 -0
- data/lib/lovely_rufus/layers/email_quote_stripper.rb +15 -0
- data/lib/lovely_rufus/layers/hangout_wrapper.rb +57 -0
- data/lib/lovely_rufus/layers/layer.rb +15 -0
- data/lib/lovely_rufus/layers/one_letter_gluer.rb +14 -0
- data/lib/lovely_rufus/layers/quote_stripper.rb +29 -0
- data/lib/lovely_rufus/text_wrapper.rb +11 -7
- data/lovely_rufus.gemspec +6 -4
- data/{spec/lovely_rufus/cli_wrapper_spec.rb → test/lovely_rufus/cli_wrapper_test.rb} +5 -5
- data/test/lovely_rufus/layers/basic_wrapper_test.rb +55 -0
- data/test/lovely_rufus/layers/code_comment_stripper_test.rb +90 -0
- data/test/lovely_rufus/layers/email_quote_stripper_test.rb +101 -0
- data/test/lovely_rufus/layers/hangout_wrapper_test.rb +40 -0
- data/test/lovely_rufus/layers/one_letter_gluer_test.rb +33 -0
- data/{spec/lovely_rufus/settings_spec.rb → test/lovely_rufus/settings_test.rb} +1 -1
- data/{spec/lovely_rufus/text_wrapper_spec.rb → test/lovely_rufus/text_wrapper_test.rb} +2 -2
- data/{spec/lovely_rufus/text_wrapper_spec.yml → test/lovely_rufus/text_wrapper_test.yml} +0 -0
- data/{spec/lovely_rufus/wrap_spec.rb → test/lovely_rufus/wrap_test.rb} +3 -3
- data/{spec/lovely_rufus_spec.rb → test/lovely_rufus_test.rb} +1 -1
- data/test/test_helper.rb +37 -0
- metadata +51 -33
- data/lib/lovely_rufus/basic_wrapper.rb +0 -12
- data/lib/lovely_rufus/hangout_wrapper.rb +0 -56
- data/lib/lovely_rufus/layer.rb +0 -14
- data/lib/lovely_rufus/one_letter_gluer.rb +0 -12
- data/lib/lovely_rufus/quote_stripper.rb +0 -32
- data/spec/lovely_rufus/basic_wrapper_spec.rb +0 -53
- data/spec/lovely_rufus/hangout_wrapper_spec.rb +0 -38
- data/spec/lovely_rufus/one_letter_gluer_spec.rb +0 -31
- data/spec/lovely_rufus/quote_stripper_spec.rb +0 -131
- data/spec/spec_helper.rb +0 -14
data/lovely_rufus.gemspec
CHANGED
@@ -7,17 +7,19 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.license = 'AGPL-3.0'
|
8
8
|
gem.name = 'lovely_rufus'
|
9
9
|
gem.summary = 'lovely_rufus: text wrapper'
|
10
|
-
gem.version = '0.
|
10
|
+
gem.version = '0.3.0'
|
11
11
|
|
12
12
|
gem.files = `git ls-files -z`.split("\0")
|
13
13
|
gem.executables = gem.files.grep(/^bin\//).map { |path| File.basename(path) }
|
14
|
-
gem.test_files = gem.files.grep(/^
|
14
|
+
gem.test_files = gem.files.grep(/^test\/.*\.rb$/)
|
15
|
+
|
16
|
+
gem.add_dependency 'private_attr', '~> 1.0'
|
15
17
|
|
16
18
|
gem.add_development_dependency 'bogus', '~> 0.1.4'
|
17
19
|
gem.add_development_dependency 'minitest', '~> 5.0'
|
18
20
|
gem.add_development_dependency 'minitest-focus', '~> 1.1'
|
19
21
|
gem.add_development_dependency 'rake', '~> 10.1'
|
20
|
-
gem.add_development_dependency 'reek', '~>
|
22
|
+
gem.add_development_dependency 'reek', '~> 2.0'
|
21
23
|
gem.add_development_dependency 'rerun', '~> 0.10.0'
|
22
|
-
gem.add_development_dependency 'rubocop', '~> 0.
|
24
|
+
gem.add_development_dependency 'rubocop', '~> 0.29.0'
|
23
25
|
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
require 'stringio'
|
2
|
-
require_relative '../
|
2
|
+
require_relative '../test_helper'
|
3
3
|
require_relative '../../lib/lovely_rufus/cli_wrapper'
|
4
4
|
|
5
5
|
module LovelyRufus
|
6
6
|
describe CLIWrapper do
|
7
7
|
describe '#run' do
|
8
|
-
let(:
|
9
|
-
let(:
|
8
|
+
let(:stream) { StringIO.new(text) }
|
9
|
+
let(:text) { "all right: stop, collaborate and listen\n" }
|
10
|
+
let(:text_wrapper) { fake(:text_wrapper, as: :class) }
|
10
11
|
|
11
12
|
it 'reads the passed stream to TextWrapper and prints the results' do
|
12
13
|
stub(text_wrapper).wrap(text, width: 72) { text }
|
13
14
|
lambda do
|
14
|
-
CLIWrapper.new(text_wrapper: text_wrapper).run
|
15
|
+
CLIWrapper.new(text_wrapper: text_wrapper).run stream
|
15
16
|
end.must_output text
|
16
17
|
end
|
17
18
|
|
18
19
|
it 'accepts the desired width and passes it to TextWrapper' do
|
19
20
|
capture_io do
|
20
|
-
stream = StringIO.new(text)
|
21
21
|
CLIWrapper.new(%w(--width=22), text_wrapper: text_wrapper).run stream
|
22
22
|
end
|
23
23
|
text_wrapper.must_have_received :wrap, [text, { width: 22 }]
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/lovely_rufus/layers/basic_wrapper'
|
3
|
+
require_relative '../../../lib/lovely_rufus/wrap'
|
4
|
+
|
5
|
+
module LovelyRufus
|
6
|
+
module Layers
|
7
|
+
describe BasicWrapper do
|
8
|
+
describe '#call' do
|
9
|
+
it 'wraps text to the given width' do
|
10
|
+
text = 'I go crazy when I hear a cymbal and a hi-hat ' \
|
11
|
+
'with a souped-up tempo'
|
12
|
+
wrap = <<-end.dedent
|
13
|
+
I go crazy when I hear
|
14
|
+
a cymbal and a hi-hat
|
15
|
+
with a souped-up tempo
|
16
|
+
end
|
17
|
+
bw = BasicWrapper.new
|
18
|
+
bw.call(Wrap[text, width: 22]).must_equal Wrap[wrap, width: 22]
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'extends past the given width when necessary' do
|
22
|
+
text = 'I’m killing your brain like a poisonous mushroom'
|
23
|
+
wrap = <<-end.dedent
|
24
|
+
I’m
|
25
|
+
killing
|
26
|
+
your
|
27
|
+
brain
|
28
|
+
like
|
29
|
+
a
|
30
|
+
poisonous
|
31
|
+
mushroom
|
32
|
+
end
|
33
|
+
bw = BasicWrapper.new
|
34
|
+
bw.call(Wrap[text, width: 5]).must_equal Wrap[wrap, width: 5]
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'rewraps a String from zero' do
|
38
|
+
text = <<-end.dedent
|
39
|
+
turn off
|
40
|
+
the lights and I’ll glow
|
41
|
+
end
|
42
|
+
wrap = "turn off the lights and I’ll glow\n"
|
43
|
+
BasicWrapper.new.call(Wrap[text]).must_equal Wrap[wrap]
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'passes the fixed text to the next layer and returns its outcome' do
|
47
|
+
final = fake(:wrap)
|
48
|
+
layer = fake(:layer)
|
49
|
+
mock(layer).call(Wrap["I\nO\nU\n", width: 2]) { final }
|
50
|
+
BasicWrapper.new(layer).call(Wrap['I O U', width: 2]).must_equal final
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/lovely_rufus/layers/code_comment_stripper'
|
3
|
+
require_relative '../../../lib/lovely_rufus/wrap'
|
4
|
+
|
5
|
+
module LovelyRufus
|
6
|
+
module Layers
|
7
|
+
describe CodeCommentStripper do
|
8
|
+
describe '#call' do
|
9
|
+
it 'strips comments and adjusts width before calling the next layer' do
|
10
|
+
commented = <<-end.dedent
|
11
|
+
# to the extreme I rock a mic like a vandal
|
12
|
+
# light up a stage and wax a chump like a candle
|
13
|
+
end
|
14
|
+
uncommented = <<-end.dedent
|
15
|
+
to the extreme I rock a mic like a vandal
|
16
|
+
light up a stage and wax a chump like a candle
|
17
|
+
end
|
18
|
+
CodeCommentStripper.must_pass_to_next Wrap[commented, width: 72],
|
19
|
+
Wrap[uncommented, width: 70]
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'adds comments back in (and adjusts width) before returning' do
|
23
|
+
text = <<-end.dedent
|
24
|
+
# take heed, ’cause I’m a lyrical poet
|
25
|
+
# Miami’s on the scene just in case you didn’t know it
|
26
|
+
end
|
27
|
+
commented = Wrap[text, width: 72]
|
28
|
+
CodeCommentStripper.new.call(commented).must_equal commented
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'does not touch non-commented texts' do
|
32
|
+
text = <<-end.dedent
|
33
|
+
my town, that created all the bass sound
|
34
|
+
enough to shake and kick holes in the ground
|
35
|
+
end
|
36
|
+
uncommented = Wrap[text, width: 72]
|
37
|
+
CodeCommentStripper.new.call(uncommented).must_equal uncommented
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'does not alter text contents' do
|
41
|
+
wrap = Wrap['# Ice # Ice # Baby']
|
42
|
+
CodeCommentStripper.new.call(wrap).must_equal wrap
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'strips // code comments' do
|
46
|
+
commented = <<-end.dedent
|
47
|
+
// so fast other DJs say ‘damn!’
|
48
|
+
// if my rhyme was a drug I’d sell it by the gram
|
49
|
+
end
|
50
|
+
uncommented = <<-end.dedent
|
51
|
+
so fast other DJs say ‘damn!’
|
52
|
+
if my rhyme was a drug I’d sell it by the gram
|
53
|
+
end
|
54
|
+
CodeCommentStripper.must_pass_to_next Wrap[commented, width: 72],
|
55
|
+
Wrap[uncommented, width: 69]
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'only considers homogenous characters as comments' do
|
59
|
+
commented = <<-end.dedent
|
60
|
+
# /if there was a problem,
|
61
|
+
# yo – I’ll solve it!/
|
62
|
+
end
|
63
|
+
uncommented = <<-end.dedent
|
64
|
+
/if there was a problem,
|
65
|
+
yo – I’ll solve it!/
|
66
|
+
end
|
67
|
+
CodeCommentStripper.must_pass_to_next Wrap[commented, width: 72],
|
68
|
+
Wrap[uncommented, width: 70]
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'strips initial space indentation' do
|
72
|
+
indented = Wrap[' // check out the hook', width: 72]
|
73
|
+
passed = Wrap['check out the hook', width: 67]
|
74
|
+
CodeCommentStripper.must_pass_to_next indented, passed
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'strips initial tab indentation' do
|
78
|
+
indented = Wrap["\t# while my DJ revolves it", width: 72]
|
79
|
+
stripped = Wrap['while my DJ revolves it', width: 69]
|
80
|
+
CodeCommentStripper.must_pass_to_next indented, stripped
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'pays proper homage to K&R' do
|
84
|
+
not_commented = Wrap['#define ASSERT(msg, cond) // TODO']
|
85
|
+
CodeCommentStripper.must_pass_to_next not_commented, not_commented
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/lovely_rufus/layers/email_quote_stripper'
|
3
|
+
require_relative '../../../lib/lovely_rufus/wrap'
|
4
|
+
|
5
|
+
module LovelyRufus
|
6
|
+
module Layers
|
7
|
+
describe EmailQuoteStripper do
|
8
|
+
describe '#call' do
|
9
|
+
it 'strips quotes and adjusts width before calling the next layer' do
|
10
|
+
quoted = <<-end.dedent
|
11
|
+
> to the extreme I rock a mic like a vandal
|
12
|
+
> light up a stage and wax a chump like a candle
|
13
|
+
end
|
14
|
+
unquoted = <<-end.dedent
|
15
|
+
to the extreme I rock a mic like a vandal
|
16
|
+
light up a stage and wax a chump like a candle
|
17
|
+
end
|
18
|
+
EmailQuoteStripper.must_pass_to_next Wrap[quoted, width: 72],
|
19
|
+
Wrap[unquoted, width: 70]
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'adds quotes back in (and adjusts width) before returning' do
|
23
|
+
quoted = <<-end.dedent
|
24
|
+
> take heed, ’cause I’m a lyrical poet
|
25
|
+
> Miami’s on the scene just in case you didn’t know it
|
26
|
+
end
|
27
|
+
wrap = Wrap[quoted, width: 72]
|
28
|
+
EmailQuoteStripper.new.call(wrap).must_equal wrap
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'does not touch non-quoted texts' do
|
32
|
+
plain = <<-end.dedent
|
33
|
+
my town, that created all the bass sound
|
34
|
+
enough to shake and kick holes in the ground
|
35
|
+
end
|
36
|
+
wrap = Wrap[plain, width: 72]
|
37
|
+
EmailQuoteStripper.new.call(wrap).must_equal wrap
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'does not alter text contents' do
|
41
|
+
wrap = Wrap['> Ice > Ice > Baby']
|
42
|
+
EmailQuoteStripper.new.call(wrap).must_equal wrap
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'strips multilevel quotes' do
|
46
|
+
quoted = <<-end.dedent
|
47
|
+
>> ’cause my style’s like a chemical spill
|
48
|
+
>> feasible rhymes that you can vision and feel
|
49
|
+
end
|
50
|
+
unquoted = <<-end.dedent
|
51
|
+
’cause my style’s like a chemical spill
|
52
|
+
feasible rhymes that you can vision and feel
|
53
|
+
end
|
54
|
+
EmailQuoteStripper.must_pass_to_next Wrap[quoted, width: 72],
|
55
|
+
Wrap[unquoted, width: 69]
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'strips broken quotes properly' do
|
59
|
+
quoted = <<-end.dedent
|
60
|
+
> > >conducted and formed this is a hell of a concept
|
61
|
+
> > >we make it hype and you want to step with this
|
62
|
+
end
|
63
|
+
unquoted = <<-end.dedent
|
64
|
+
conducted and formed this is a hell of a concept
|
65
|
+
we make it hype and you want to step with this
|
66
|
+
end
|
67
|
+
EmailQuoteStripper.must_pass_to_next Wrap[quoted, width: 72],
|
68
|
+
Wrap[unquoted, width: 68]
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'fixes broken quotes when adding them back in' do
|
72
|
+
quoted = <<-end.dedent
|
73
|
+
> > >Shay plays on the fade,
|
74
|
+
> > >slice like a ninja
|
75
|
+
> > >cut like a razor blade
|
76
|
+
end
|
77
|
+
fixed = <<-end.dedent
|
78
|
+
>>> Shay plays on the fade,
|
79
|
+
>>> slice like a ninja
|
80
|
+
>>> cut like a razor blade
|
81
|
+
end
|
82
|
+
wrap = Wrap[quoted, width: 72]
|
83
|
+
EmailQuoteStripper.new.call(wrap).must_equal Wrap[fixed, width: 72]
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'only considers homogenous characters as comments' do
|
87
|
+
quoted = <<-end.dedent
|
88
|
+
> /if there was a problem,
|
89
|
+
> yo – I’ll solve it!/
|
90
|
+
end
|
91
|
+
unquoted = <<-end.dedent
|
92
|
+
/if there was a problem,
|
93
|
+
yo – I’ll solve it!/
|
94
|
+
end
|
95
|
+
EmailQuoteStripper.must_pass_to_next Wrap[quoted, width: 72],
|
96
|
+
Wrap[unquoted, width: 70]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/lovely_rufus/layers/hangout_wrapper'
|
3
|
+
require_relative '../../../lib/lovely_rufus/wrap'
|
4
|
+
|
5
|
+
module LovelyRufus
|
6
|
+
module Layers
|
7
|
+
describe HangoutWrapper do
|
8
|
+
describe '#call' do
|
9
|
+
it 'removes hangouts from the text' do
|
10
|
+
text = <<-end.dedent
|
11
|
+
I go crazy when I hear a cymbal and
|
12
|
+
a hi-hat with a souped-up tempo
|
13
|
+
end
|
14
|
+
wrap = <<-end.dedent
|
15
|
+
I go crazy when I hear a cymbal
|
16
|
+
and a hi-hat with a souped-up tempo
|
17
|
+
end
|
18
|
+
hw = HangoutWrapper.new
|
19
|
+
hw.call(Wrap[text, width: 35]).must_equal Wrap[wrap, width: 35]
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'passes the fixed text to the next layer and returns its outcome' do
|
23
|
+
final = fake(:wrap)
|
24
|
+
layer = fake(:layer)
|
25
|
+
mock(layer).call(any(Wrap)) { final }
|
26
|
+
wrapped = HangoutWrapper.new(layer).call(Wrap["I O\nU", width: 4])
|
27
|
+
wrapped.must_equal final
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'doesn’t let the last line to hang out' do
|
31
|
+
text = <<-end.dedent
|
32
|
+
Just found out the Finnish term for grammar Nazi is pilkunnussija.
|
33
|
+
Direct translation: comma fucker. You’re welcome.
|
34
|
+
end
|
35
|
+
HangoutWrapper.new.call(Wrap[text, width: 76]).text.must_equal text
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/lovely_rufus/layers/one_letter_gluer'
|
3
|
+
require_relative '../../../lib/lovely_rufus/wrap'
|
4
|
+
|
5
|
+
module LovelyRufus
|
6
|
+
module Layers
|
7
|
+
describe OneLetterGluer do
|
8
|
+
describe '#call' do
|
9
|
+
it 'replaces spaces after one-letter words with non-break spaces' do
|
10
|
+
text = 'I go crazy when I hear a cymbal and a hi-hat'
|
11
|
+
glue = 'I go crazy when I hear a cymbal and a hi-hat'
|
12
|
+
olg = OneLetterGluer.new
|
13
|
+
olg.call(Wrap[text, width: 42]).must_equal Wrap[glue, width: 42]
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'glues subsequent one-letter words' do
|
17
|
+
text = 'one-letter words in English: a, I & o'
|
18
|
+
glue = 'one-letter words in English: a, I & o'
|
19
|
+
olg = OneLetterGluer.new
|
20
|
+
olg.call(Wrap[text, width: 42]).must_equal Wrap[glue, width: 42]
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'passes the fixed text to the next layer and returns its outcome' do
|
24
|
+
final = fake(:wrap)
|
25
|
+
layer = fake(:layer)
|
26
|
+
mock(layer).call(Wrap['I O U', width: 69]) { final }
|
27
|
+
glued = OneLetterGluer.new(layer).call(Wrap['I O U', width: 69])
|
28
|
+
glued.must_equal final
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require_relative '../
|
2
|
+
require_relative '../test_helper'
|
3
3
|
require_relative '../../lib/lovely_rufus/text_wrapper'
|
4
4
|
|
5
5
|
module LovelyRufus
|
@@ -41,7 +41,7 @@ module LovelyRufus
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'supports all the example use-cases' do
|
44
|
-
path = File.expand_path('
|
44
|
+
path = File.expand_path('text_wrapper_test.yml', __dir__)
|
45
45
|
YAML.load_file(path).each do |spec|
|
46
46
|
width = spec.fetch('width') { 72 }
|
47
47
|
wrap = "#{spec['output']}\n"
|
File without changes
|
@@ -1,16 +1,16 @@
|
|
1
|
-
require_relative '../
|
1
|
+
require_relative '../test_helper'
|
2
2
|
require_relative '../../lib/lovely_rufus/wrap'
|
3
3
|
|
4
4
|
module LovelyRufus
|
5
5
|
describe Wrap do
|
6
6
|
describe '.[]' do
|
7
7
|
it 'creates a Wrap with the given text and target width' do
|
8
|
-
Wrap['Ice Ice Baby', width: 7].text.must_equal
|
8
|
+
Wrap['Ice Ice Baby', width: 7].text.must_equal 'Ice Ice Baby'
|
9
9
|
Wrap['Ice Ice Baby', width: 7].width.must_equal 7
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'defaults to empty text and width of 72' do
|
13
|
-
Wrap[].text.must_equal
|
13
|
+
Wrap[].text.must_equal ''
|
14
14
|
Wrap[].width.must_equal 72
|
15
15
|
end
|
16
16
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'minitest/focus'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'bogus/minitest/spec'
|
6
|
+
require 'lovely_rufus'
|
7
|
+
require_relative '../lib/lovely_rufus/layers/layer'
|
8
|
+
require_relative '../lib/lovely_rufus/wrap'
|
9
|
+
|
10
|
+
Bogus.configure do |config|
|
11
|
+
config.search_modules << LovelyRufus
|
12
|
+
config.search_modules << LovelyRufus::Layers
|
13
|
+
end
|
14
|
+
|
15
|
+
class String
|
16
|
+
def dedent
|
17
|
+
gsub(/^#{scan(/^ +/).min}/, '')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module CustomAssertions
|
22
|
+
def assert_passes_to_next(subject, called_with, to_be_passed)
|
23
|
+
next_layer = fake(:layer, call: LovelyRufus::Wrap.new)
|
24
|
+
subject.new(next_layer).call called_with
|
25
|
+
assert_received next_layer, :call, [to_be_passed]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Minitest::Test.include CustomAssertions
|
30
|
+
|
31
|
+
module Minitest
|
32
|
+
module Expectations
|
33
|
+
class << LovelyRufus::Layers::Layer
|
34
|
+
infect_an_assertion :assert_passes_to_next, :must_pass_to_next, true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|