should_clean 0.0.2 → 0.0.3
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.
- data/lib/should_clean/cleaner.rb +1 -2
- data/lib/should_clean/converters.rb +1 -2
- data/lib/should_clean/converters/converter.rb +52 -4
- data/lib/should_clean/converters/negative_converter.rb +12 -4
- data/lib/should_clean/converters/positive_converter.rb +22 -0
- data/lib/should_clean/replacer.rb +2 -8
- data/lib/should_clean/simulator.rb +4 -8
- data/lib/should_clean/version.rb +1 -1
- data/spec/should_clean/cleaner_spec.rb +54 -15
- metadata +43 -53
- data/lib/should_clean/converters/adverb_converter.rb +0 -23
- data/lib/should_clean/converters/regular_verb_converter.rb +0 -18
data/lib/should_clean/cleaner.rb
CHANGED
@@ -5,8 +5,7 @@ module ShouldClean
|
|
5
5
|
# order of convertors matter
|
6
6
|
convertors = [
|
7
7
|
Converters::NegativeConverter,
|
8
|
-
Converters::
|
9
|
-
Converters::RegularVerbConverter
|
8
|
+
Converters::PositiveConverter
|
10
9
|
]
|
11
10
|
|
12
11
|
convertor = convertors.detect { |converter| text.match(converter.matcher) }
|
@@ -2,7 +2,6 @@ module ShouldClean
|
|
2
2
|
module Converters
|
3
3
|
autoload :Converter, 'should_clean/converters/converter'
|
4
4
|
autoload :NegativeConverter, 'should_clean/converters/negative_converter'
|
5
|
-
autoload :
|
6
|
-
autoload :AdverbConverter, 'should_clean/converters/adverb_converter'
|
5
|
+
autoload :PositiveConverter, 'should_clean/converters/positive_converter'
|
7
6
|
end
|
8
7
|
end
|
@@ -1,18 +1,66 @@
|
|
1
1
|
module ShouldClean
|
2
2
|
module Converters
|
3
3
|
class Converter
|
4
|
-
|
4
|
+
SUBJECT = /^\s*(it\s*'|it\s*"|it\s*%{)\s*/
|
5
|
+
NEGATIVE_SPEC = /#{SUBJECT}(should not|shouldn't)\s*/
|
6
|
+
POSITIVE_SPEC = /#{SUBJECT}(should)\s*/
|
7
|
+
|
8
|
+
attr_accessor :text, :splitter
|
5
9
|
|
6
10
|
def initialize(text, match_data)
|
7
11
|
@text = text
|
8
|
-
@
|
12
|
+
@splitter = match_data[2]
|
13
|
+
end
|
14
|
+
|
15
|
+
def convert
|
16
|
+
"#{subject}#{active_verb}#{joiner}#{object}"
|
9
17
|
end
|
10
18
|
|
11
19
|
private
|
12
|
-
def
|
13
|
-
|
20
|
+
def verb
|
21
|
+
@verb ||= verb_and_object.first
|
22
|
+
end
|
23
|
+
|
24
|
+
def adverb
|
25
|
+
@adverb = ShouldClean::Adverbs.all.detect do |a|
|
26
|
+
adverb_and_expectation.lstrip.start_with?(a)
|
27
|
+
end
|
14
28
|
end
|
15
29
|
|
30
|
+
def subject
|
31
|
+
@subject = subject_and_expectation.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def object
|
35
|
+
@object ||= verb_and_object.last
|
36
|
+
end
|
37
|
+
|
38
|
+
def joiner
|
39
|
+
expectation.lstrip.split(/\W/, 2) # split limit gives the regexp match $&
|
40
|
+
@joiner = $&
|
41
|
+
end
|
42
|
+
|
43
|
+
def expectation
|
44
|
+
return @expectation if @expectation
|
45
|
+
|
46
|
+
if adverb
|
47
|
+
@expectation = adverb_and_expectation.split(adverb).last
|
48
|
+
else
|
49
|
+
@expectation = adverb_and_expectation
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def adverb_and_expectation
|
54
|
+
@adverb_and_expectation ||= subject_and_expectation.last
|
55
|
+
end
|
56
|
+
|
57
|
+
def verb_and_object
|
58
|
+
@verb_and_object ||= expectation.lstrip.split(/\W/, 2)
|
59
|
+
end
|
60
|
+
|
61
|
+
def subject_and_expectation
|
62
|
+
@subject_and_expectation ||= text.split(splitter, 2)
|
63
|
+
end
|
16
64
|
end
|
17
65
|
end
|
18
66
|
end
|
@@ -3,13 +3,21 @@ module ShouldClean
|
|
3
3
|
class NegativeConverter < Converter
|
4
4
|
|
5
5
|
def self.matcher
|
6
|
-
/
|
6
|
+
/#{NEGATIVE_SPEC}/
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
private
|
10
|
+
def active_verb
|
11
|
+
if verb == 'be'
|
12
|
+
if adverb == 'by default'
|
13
|
+
@active_verb = 'does not default to'
|
14
|
+
else
|
15
|
+
@active_verb = 'is not'
|
16
|
+
end
|
17
|
+
else
|
18
|
+
@active_verb = ['does not', adverb, verb].compact.join(' ')
|
19
|
+
end
|
11
20
|
end
|
12
|
-
|
13
21
|
end
|
14
22
|
end
|
15
23
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ShouldClean
|
2
|
+
module Converters
|
3
|
+
class PositiveConverter < Converter
|
4
|
+
|
5
|
+
def self.matcher
|
6
|
+
/#{POSITIVE_SPEC}/
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
def active_verb
|
11
|
+
return @active_verb if @active_verb
|
12
|
+
|
13
|
+
if adverb == 'by default' && verb == 'be'
|
14
|
+
@active_verb = "defaults to"
|
15
|
+
else
|
16
|
+
active_verb = Conjugator.tpp(verb)
|
17
|
+
@active_verb = [adverb, active_verb].compact.join(' ')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -3,8 +3,6 @@ require 'tempfile'
|
|
3
3
|
|
4
4
|
module ShouldClean
|
5
5
|
class Replacer
|
6
|
-
MATCHER = /^it\s*('|"|%{)/
|
7
|
-
|
8
6
|
attr_accessor :file_path, :content
|
9
7
|
|
10
8
|
def initialize(file_path)
|
@@ -18,12 +16,8 @@ module ShouldClean
|
|
18
16
|
tmp_file = Tempfile.new('tmp.txt')
|
19
17
|
|
20
18
|
content.each_line.each do |line|
|
21
|
-
|
22
|
-
|
23
|
-
tmp_file.puts cleaned || line
|
24
|
-
else
|
25
|
-
tmp_file.puts line
|
26
|
-
end
|
19
|
+
cleaned = Cleaner.clean(line)
|
20
|
+
tmp_file.puts cleaned || line
|
27
21
|
end
|
28
22
|
|
29
23
|
tmp_file.close
|
@@ -3,8 +3,6 @@ require 'tempfile'
|
|
3
3
|
|
4
4
|
module ShouldClean
|
5
5
|
class Simulator
|
6
|
-
MATCHER = /^it\s*('|"|%{)/
|
7
|
-
|
8
6
|
attr_accessor :content, :buffer
|
9
7
|
|
10
8
|
def initialize(file_path, buffer = $stdout)
|
@@ -16,12 +14,10 @@ module ShouldClean
|
|
16
14
|
return unless content.valid_encoding?
|
17
15
|
|
18
16
|
content.each_line.each do |line|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
buffer.puts("+ #{cleaned.strip}")
|
24
|
-
end
|
17
|
+
cleaned = Cleaner.clean(line)
|
18
|
+
if cleaned
|
19
|
+
buffer.puts("- #{line.strip}")
|
20
|
+
buffer.puts("+ #{cleaned.strip}")
|
25
21
|
end
|
26
22
|
end
|
27
23
|
end
|
data/lib/should_clean/version.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ShouldClean::Cleaner do
|
4
4
|
|
5
|
-
describe "
|
5
|
+
describe "regular verb converter" do
|
6
6
|
it "converts spec defined with double quotes" do
|
7
7
|
ShouldClean::Cleaner.clean('it "should action something"').
|
8
8
|
should == 'it "actions something"'
|
@@ -22,26 +22,14 @@ describe ShouldClean::Cleaner do
|
|
22
22
|
ShouldClean::Cleaner.clean('it "should do something"').
|
23
23
|
should == 'it "does something"'
|
24
24
|
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "conversion of should variations" do
|
28
|
-
it "converts 'should not action' to 'does not action'" do
|
29
|
-
ShouldClean::Cleaner.clean('it "should not action"').
|
30
|
-
should == 'it "does not action"'
|
31
|
-
end
|
32
|
-
|
33
|
-
it "converts 'shouldn't action' to 'does not action'" do
|
34
|
-
ShouldClean::Cleaner.clean('it "shouldn\'t action"').
|
35
|
-
should == 'it "does not action"'
|
36
|
-
end
|
37
25
|
|
38
26
|
it "converts 'should be able to action' to 'actions'" do
|
39
27
|
ShouldClean::Cleaner.clean('it "should be able to action"').
|
40
|
-
should == 'it "
|
28
|
+
should == 'it "is able to action"'
|
41
29
|
end
|
42
30
|
end
|
43
31
|
|
44
|
-
describe "
|
32
|
+
describe "positive converter with adverb" do
|
45
33
|
it "converts 'should correctly calculate' to 'correctly calculates'" do
|
46
34
|
ShouldClean::Cleaner.clean('it "should correctly calculate"').
|
47
35
|
should == 'it "correctly calculates"'
|
@@ -66,5 +54,56 @@ describe ShouldClean::Cleaner do
|
|
66
54
|
ShouldClean::Cleaner.clean('it "should by default have"').
|
67
55
|
should == 'it "by default has"'
|
68
56
|
end
|
57
|
+
|
58
|
+
it "converts 'should by default be 1' to 'defaults to 1'" do
|
59
|
+
ShouldClean::Cleaner.clean('it "should by default be 1"').
|
60
|
+
should == 'it "defaults to 1"'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "converts 'should automatically be 1' to 'automatically is 1'" do
|
64
|
+
ShouldClean::Cleaner.clean('it "should automatically be 1"').
|
65
|
+
should == 'it "automatically is 1"'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "negative converter" do
|
70
|
+
it "converts 'should not action' to 'does not action'" do
|
71
|
+
ShouldClean::Cleaner.clean('it "should not action"').
|
72
|
+
should == 'it "does not action"'
|
73
|
+
end
|
74
|
+
|
75
|
+
it "converts 'shouldn't action' to 'does not action'" do
|
76
|
+
ShouldClean::Cleaner.clean('it "shouldn\'t action"').
|
77
|
+
should == 'it "does not action"'
|
78
|
+
end
|
79
|
+
|
80
|
+
it "converts 'should not be foo' to 'is not foo'" do
|
81
|
+
ShouldClean::Cleaner.clean('it "should not be foo"').
|
82
|
+
should == 'it "is not foo"'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "converts 'shouldn't be foo' to 'is not foo'" do
|
86
|
+
ShouldClean::Cleaner.clean('it "shouldn\'t be foo"').
|
87
|
+
should == 'it "is not foo"'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "negative converter with adverb" do
|
92
|
+
it "converts 'should not automatically save' to 'does not automatically save'" do
|
93
|
+
ShouldClean::Cleaner.clean('it "should not automatically save"').
|
94
|
+
should == 'it "does not automatically save"'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "converts 'should not by default be 1' to 'does not default to 1'" do
|
98
|
+
ShouldClean::Cleaner.clean('it "should not by default be 1"').
|
99
|
+
should == 'it "does not default to 1"'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "no change required" do
|
104
|
+
it "constrain changes to beginning of doc string" do
|
105
|
+
ShouldClean::Cleaner.clean('it "asks for a failure_message_for_should when something"').
|
106
|
+
should == nil
|
107
|
+
end
|
69
108
|
end
|
70
109
|
end
|
metadata
CHANGED
@@ -1,46 +1,43 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: should_clean
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Sachin Ranchod
|
13
9
|
- Dalibor Nasevic
|
14
10
|
autorequire:
|
15
11
|
bindir: bin
|
16
12
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-09-10 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: rspec
|
23
|
-
|
24
|
-
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :development
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
description: Utility to remove unneeded shoulds from your RSpec test descriptions
|
32
|
+
- 'it "should do something"' becomes 'it "does something"'
|
33
|
+
email:
|
35
34
|
- sachin.ranchod@gmail.com
|
36
35
|
- dalibor.nasevic@gmail.com
|
37
|
-
executables:
|
36
|
+
executables:
|
38
37
|
- should_clean
|
39
38
|
extensions: []
|
40
|
-
|
41
39
|
extra_rdoc_files: []
|
42
|
-
|
43
|
-
files:
|
40
|
+
files:
|
44
41
|
- .gitignore
|
45
42
|
- .rspec
|
46
43
|
- Gemfile
|
@@ -53,10 +50,9 @@ files:
|
|
53
50
|
- lib/should_clean/cleaner.rb
|
54
51
|
- lib/should_clean/conjugator.rb
|
55
52
|
- lib/should_clean/converters.rb
|
56
|
-
- lib/should_clean/converters/adverb_converter.rb
|
57
53
|
- lib/should_clean/converters/converter.rb
|
58
54
|
- lib/should_clean/converters/negative_converter.rb
|
59
|
-
- lib/should_clean/converters/
|
55
|
+
- lib/should_clean/converters/positive_converter.rb
|
60
56
|
- lib/should_clean/replacer.rb
|
61
57
|
- lib/should_clean/simulator.rb
|
62
58
|
- lib/should_clean/version.rb
|
@@ -72,37 +68,31 @@ files:
|
|
72
68
|
- spec/should_clean/simulator_spec.rb
|
73
69
|
- spec/should_clean_spec.rb
|
74
70
|
- spec/spec_helper.rb
|
75
|
-
|
76
|
-
homepage: ""
|
71
|
+
homepage: ''
|
77
72
|
licenses: []
|
78
|
-
|
79
73
|
post_install_message:
|
80
74
|
rdoc_options: []
|
81
|
-
|
82
|
-
require_paths:
|
75
|
+
require_paths:
|
83
76
|
- lib
|
84
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
requirements:
|
93
|
-
- -
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
|
96
|
-
- 0
|
97
|
-
version: "0"
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
98
89
|
requirements: []
|
99
|
-
|
100
90
|
rubyforge_project:
|
101
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.8.23
|
102
92
|
signing_key:
|
103
93
|
specification_version: 3
|
104
94
|
summary: It changes "it should do" to "it does" in your RSpec files
|
105
|
-
test_files:
|
95
|
+
test_files:
|
106
96
|
- spec/fixtures/broken_spec.txt
|
107
97
|
- spec/fixtures/example_correct_spec.txt
|
108
98
|
- spec/fixtures/example_spec.txt
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module ShouldClean
|
2
|
-
module Converters
|
3
|
-
class AdverbConverter < Converter
|
4
|
-
|
5
|
-
def self.matcher
|
6
|
-
/should (#{ShouldClean::Adverbs.all.join('|')})/
|
7
|
-
end
|
8
|
-
|
9
|
-
def convert
|
10
|
-
prefix, postfix = text.split(splitter, 2)
|
11
|
-
verb, remainder = postfix.lstrip.split(/\W/, 2) # split limit gives the regexp match $&
|
12
|
-
active_verb = Conjugator.tpp(verb)
|
13
|
-
"#{prefix}#{adverb} #{active_verb}#{$&}#{remainder}"
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
def adverb
|
18
|
-
match_data[1]
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module ShouldClean
|
2
|
-
module Converters
|
3
|
-
class RegularVerbConverter < Converter
|
4
|
-
|
5
|
-
def self.matcher
|
6
|
-
/should (be able to)?/
|
7
|
-
end
|
8
|
-
|
9
|
-
def convert
|
10
|
-
method_name, description = text.split(splitter, 2)
|
11
|
-
verb, rest = description.lstrip.split(/\W/, 2) # split limit gives the regexp match $&
|
12
|
-
active_verb = Conjugator.tpp(verb)
|
13
|
-
"#{method_name}#{active_verb}#{$&}#{rest}"
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|