riffdiff 1.0.0 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +16 -0
- data/.travis.yml +4 -0
- data/README.md +5 -3
- data/Rakefile +8 -1
- data/lib/diff_string.rb +1 -0
- data/lib/options.rb +9 -3
- data/lib/refiner.rb +50 -8
- data/lib/riff.rb +4 -2
- data/riffdiff.gemspec +6 -4
- data/spec/refiner_spec.rb +57 -24
- metadata +35 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab9270780987e9731750adac81951e66b7e0cf74
|
4
|
+
data.tar.gz: ae9e29dd801bf4502dcb651581ce99573946410b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eee0b5d29449d2fe3bb8201a6c8b68f8ee96b835518b8b18e6659b8657403387ae04dbe3ae767c1951dd42acaf68c2b31cb154e49e151a3700d77cb74690633b
|
7
|
+
data.tar.gz: 827c93ab1f9ea4217083d43823815390fb01397280370571e14fbd6e0f7a97daae94c9b8fb2b6f52c376b714617906c739088d80662d8f6f0ed6455991caaaa4
|
data/.rubocop.yml
CHANGED
@@ -24,3 +24,19 @@ Style/RedundantReturn:
|
|
24
24
|
# Johan thinks these are OK as long as there aren't too many of them
|
25
25
|
Style/PerlBackrefs:
|
26
26
|
Enabled: false
|
27
|
+
|
28
|
+
# Johan thinks "unless" is hard to read
|
29
|
+
Style/NegatedIf:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
# Johan finds the default method length limit of 10 silly
|
33
|
+
Metrics/MethodLength:
|
34
|
+
Max: 20
|
35
|
+
|
36
|
+
# Johan looked at some methods and concluded 21 is fine
|
37
|
+
Metrics/AbcSize:
|
38
|
+
Max: 21
|
39
|
+
|
40
|
+
# Johan looked at some methods and concluded 7 is fine
|
41
|
+
Metrics/CyclomaticComplexity:
|
42
|
+
Max: 7
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -23,9 +23,6 @@ Optionally followed by...
|
|
23
23
|
... to make git show refined diffs by default.
|
24
24
|
|
25
25
|
# TODO
|
26
|
-
* When highlighting an added comma at the end of a line, followed by some added
|
27
|
-
lines, remove the leading + from the first line and don't color it. We should
|
28
|
-
still show the comma in reverse video though.
|
29
26
|
* Think about highlighting whitespace errors like Git does
|
30
27
|
* Think about how to visualize an added line break together with some
|
31
28
|
indentation on the following line.
|
@@ -120,3 +117,8 @@ globally on the system.
|
|
120
117
|
* test dirty sources
|
121
118
|
* not package dirty sources
|
122
119
|
* package clean sources, dependencies not verified
|
120
|
+
* When highlighting an added comma at the end of a line, followed by some added
|
121
|
+
lines, remove the leading + from the first line and don't color it. We should
|
122
|
+
still show the comma in reverse video though. Do this when:
|
123
|
+
* One line is replaced by many
|
124
|
+
* The diff contains only additions
|
data/Rakefile
CHANGED
@@ -7,11 +7,18 @@ include Version
|
|
7
7
|
|
8
8
|
task default: :spec
|
9
9
|
desc 'Run the unit tests (default)'
|
10
|
-
task spec: [:deps]
|
10
|
+
task spec: [:deps, :lint]
|
11
11
|
RSpec::Core::RakeTask.new do |t|
|
12
12
|
t.pattern = FileList['spec/**/*_spec.rb']
|
13
13
|
end
|
14
14
|
|
15
|
+
desc 'Lint the source code'
|
16
|
+
task :lint do
|
17
|
+
# Everything except bin/benchmark; it's not used in production and is unlikely
|
18
|
+
# to change anyway
|
19
|
+
sh 'rubocop lib spec bin/riff Rakefile riffdiff.gemspec'
|
20
|
+
end
|
21
|
+
|
15
22
|
desc 'Create a .gem package'
|
16
23
|
task package: [:spec] do
|
17
24
|
fail 'Cannot package when there are uncommitted sources' if dirty?
|
data/lib/diff_string.rb
CHANGED
data/lib/options.rb
CHANGED
@@ -5,9 +5,7 @@ require 'version'
|
|
5
5
|
module Options
|
6
6
|
include Version
|
7
7
|
|
8
|
-
|
9
|
-
opts = Slop::Options.new do |o|
|
10
|
-
o.banner = <<-EOS
|
8
|
+
BANNER = <<-EOS
|
11
9
|
Usage: diff ... | riff
|
12
10
|
Colors diff and highlights what parts of changed lines have changed.
|
13
11
|
|
@@ -15,6 +13,10 @@ Git integration:
|
|
15
13
|
git config --global pager.diff riff
|
16
14
|
git config --global pager.show riff
|
17
15
|
EOS
|
16
|
+
|
17
|
+
def create_opts
|
18
|
+
return Slop::Options.new do |o|
|
19
|
+
o.banner = BANNER
|
18
20
|
o.separator 'Options:'
|
19
21
|
o.on '--version', 'Print version information and exit' do
|
20
22
|
puts "riff #{version}"
|
@@ -31,6 +33,10 @@ EOS
|
|
31
33
|
exit
|
32
34
|
end
|
33
35
|
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def handle_options
|
39
|
+
opts = create_opts()
|
34
40
|
|
35
41
|
begin
|
36
42
|
opts.parse(ARGV)
|
data/lib/refiner.rb
CHANGED
@@ -95,20 +95,62 @@ class Refiner
|
|
95
95
|
return try_highlight(old, new)
|
96
96
|
end
|
97
97
|
|
98
|
+
def render_refinement(prefix, color, string, highlights, base_index = 0)
|
99
|
+
return_me = DiffString.new(prefix, color)
|
100
|
+
string.each_char.with_index do |char, index|
|
101
|
+
return_me.add(char, highlights.include?(index + base_index))
|
102
|
+
end
|
103
|
+
return return_me.to_s
|
104
|
+
end
|
105
|
+
|
106
|
+
# After returning from this method, both @refined_old and @refined_new must
|
107
|
+
# have been set to reasonable values.
|
108
|
+
def create_refinements(old, new, old_highlights, new_highlights)
|
109
|
+
@refined_old = render_refinement('-', RED, old, old_highlights)
|
110
|
+
@refined_new = render_refinement('+', GREEN, new, new_highlights)
|
111
|
+
end
|
112
|
+
|
113
|
+
# After returning from this method, both @refined_old and @refined_new must
|
114
|
+
# have been set to reasonable values.
|
115
|
+
#
|
116
|
+
# Returns false if the preconditions for using this method aren't fulfilled
|
117
|
+
def create_one_to_many_refinements(old, new, old_highlights, new_highlights)
|
118
|
+
if old_highlights.count > 0
|
119
|
+
return false
|
120
|
+
end
|
121
|
+
if old.lines.count != 1
|
122
|
+
return false
|
123
|
+
end
|
124
|
+
lines = new.lines
|
125
|
+
if lines.count < 2
|
126
|
+
return false
|
127
|
+
end
|
128
|
+
|
129
|
+
@refined_old = ''
|
130
|
+
|
131
|
+
refined_line_1 = render_refinement(' ', '', lines[0], new_highlights)
|
132
|
+
|
133
|
+
line_2_index_0 = lines[0].length
|
134
|
+
refined_remaining_lines = render_refinement('+', GREEN,
|
135
|
+
lines[1..-1].join,
|
136
|
+
new_highlights,
|
137
|
+
line_2_index_0)
|
138
|
+
|
139
|
+
@refined_new = refined_line_1 + refined_remaining_lines
|
140
|
+
|
141
|
+
return true
|
142
|
+
end
|
143
|
+
|
98
144
|
def initialize(old, new)
|
99
145
|
old_highlights, new_highlights = try_highlight(old, new)
|
100
146
|
if old_highlights.size == 0 && new_highlights.size == 0
|
101
147
|
old_highlights, new_highlights = try_highlight_initial_lines(old, new)
|
102
148
|
end
|
103
149
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
@refined_new = DiffString.new('+', GREEN)
|
110
|
-
new.each_char.with_index do |char, index|
|
111
|
-
@refined_new.add(char, new_highlights.include?(index))
|
150
|
+
if !create_one_to_many_refinements(old, new,
|
151
|
+
old_highlights,
|
152
|
+
new_highlights)
|
153
|
+
create_refinements(old, new, old_highlights, new_highlights)
|
112
154
|
end
|
113
155
|
end
|
114
156
|
end
|
data/lib/riff.rb
CHANGED
@@ -4,6 +4,8 @@ require 'diff_string'
|
|
4
4
|
|
5
5
|
# Call do_stream() with the output of some diff-like tool (diff,
|
6
6
|
# diff3, git diff, ...) and it will highlight that output for you.
|
7
|
+
#
|
8
|
+
# rubocop:disable Metrics/ClassLength
|
7
9
|
class Riff
|
8
10
|
DIFF_HEADER = /^diff /
|
9
11
|
DIFF_HUNK_HEADER = /^@@ /
|
@@ -107,8 +109,8 @@ class Riff
|
|
107
109
|
return '' if @replace_old.empty? && @replace_new.empty?
|
108
110
|
|
109
111
|
refiner = Refiner.new(@replace_old, @replace_new)
|
110
|
-
return_me = refiner.refined_old
|
111
|
-
return_me += refiner.refined_new
|
112
|
+
return_me = refiner.refined_old
|
113
|
+
return_me += refiner.refined_new
|
112
114
|
|
113
115
|
@replace_old = ''
|
114
116
|
@replace_new = ''
|
data/riffdiff.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = 'riffdiff'
|
8
8
|
s.version = semantic_version
|
9
9
|
s.summary = 'A diff highlighter showing what parts of lines have changed'
|
10
|
-
s.description = %
|
10
|
+
s.description = %(== Riff
|
11
11
|
Riff is a wrapper around diff that highlights not only which lines have changed,
|
12
12
|
but also which parts of the lines that have changed.
|
13
13
|
|
@@ -23,7 +23,7 @@ $ git config --global pager.show riff
|
|
23
23
|
|
24
24
|
... then all future 'git diff's and 'git show's will be
|
25
25
|
refined.
|
26
|
-
|
26
|
+
)
|
27
27
|
s.authors = ['Johan Walles']
|
28
28
|
s.email = 'johan.walles@gmail.com'
|
29
29
|
s.homepage = 'http://github.com/walles/riff'
|
@@ -39,7 +39,9 @@ refined.
|
|
39
39
|
s.required_ruby_version = '~> 2.0'
|
40
40
|
|
41
41
|
s.add_development_dependency 'rspec', '~> 3.0'
|
42
|
+
s.add_development_dependency 'rubocop', '~> 0.29.1'
|
43
|
+
s.add_development_dependency 'rake', '~> 0.9'
|
42
44
|
|
43
|
-
s.add_runtime_dependency 'diff-lcs', '~> 1.2
|
44
|
-
s.add_runtime_dependency 'slop', '~> 4.1
|
45
|
+
s.add_runtime_dependency 'diff-lcs', '~> 1.2'
|
46
|
+
s.add_runtime_dependency 'slop', '~> 4.1'
|
45
47
|
end
|
data/spec/refiner_spec.rb
CHANGED
@@ -9,9 +9,9 @@ RSpec.describe Refiner, '#new' do
|
|
9
9
|
refiner = Refiner.new(%('quoted'\n), %("quoted"\n))
|
10
10
|
|
11
11
|
it 'highlights the quotes and nothing else' do
|
12
|
-
expect(refiner.refined_old
|
12
|
+
expect(refiner.refined_old).to eq(
|
13
13
|
%(#{RED}-#{reversed("'")}quoted#{reversed("'")}#{RESET}\n))
|
14
|
-
expect(refiner.refined_new
|
14
|
+
expect(refiner.refined_new).to eq(
|
15
15
|
%(#{GREEN}+#{reversed('"')}quoted#{reversed('"')}#{RESET}\n))
|
16
16
|
end
|
17
17
|
end
|
@@ -20,11 +20,11 @@ RSpec.describe Refiner, '#new' do
|
|
20
20
|
refiner = Refiner.new('', "something\n")
|
21
21
|
|
22
22
|
it 'refines old to the empty string' do
|
23
|
-
expect(refiner.refined_old
|
23
|
+
expect(refiner.refined_old).to eq('')
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'does not highlight anything in new' do
|
27
|
-
expect(refiner.refined_new
|
27
|
+
expect(refiner.refined_new).to eq(
|
28
28
|
%(#{GREEN}+something#{RESET}\n))
|
29
29
|
end
|
30
30
|
end
|
@@ -33,12 +33,12 @@ RSpec.describe Refiner, '#new' do
|
|
33
33
|
refiner = Refiner.new("something\n", '')
|
34
34
|
|
35
35
|
it 'does not highlight anything in old' do
|
36
|
-
expect(refiner.refined_old
|
36
|
+
expect(refiner.refined_old).to eq(
|
37
37
|
%(#{RED}-something#{RESET}\n))
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'refines new to the empty string' do
|
41
|
-
expect(refiner.refined_new
|
41
|
+
expect(refiner.refined_new).to eq('')
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -46,9 +46,9 @@ RSpec.describe Refiner, '#new' do
|
|
46
46
|
refiner = Refiner.new(%(x "hej"\n), %(x 'hej'\n))
|
47
47
|
|
48
48
|
it 'highlights the quotes and nothing else' do
|
49
|
-
expect(refiner.refined_old
|
49
|
+
expect(refiner.refined_old).to eq(
|
50
50
|
%(#{RED}-x #{reversed('"')}hej#{reversed('"')}#{RESET}\n))
|
51
|
-
expect(refiner.refined_new
|
51
|
+
expect(refiner.refined_new).to eq(
|
52
52
|
%(#{GREEN}+x #{reversed("'")}hej#{reversed("'")}#{RESET}\n))
|
53
53
|
end
|
54
54
|
end
|
@@ -58,9 +58,9 @@ RSpec.describe Refiner, '#new' do
|
|
58
58
|
"abcdefghij\n")
|
59
59
|
|
60
60
|
it %(doesn't highlight anything) do
|
61
|
-
expect(refiner.refined_old
|
61
|
+
expect(refiner.refined_old).to eq(
|
62
62
|
%(#{RED}-0123456789#{RESET}\n))
|
63
|
-
expect(refiner.refined_new
|
63
|
+
expect(refiner.refined_new).to eq(
|
64
64
|
%(#{GREEN}+abcdefghij#{RESET}\n))
|
65
65
|
end
|
66
66
|
end
|
@@ -70,15 +70,15 @@ RSpec.describe Refiner, '#new' do
|
|
70
70
|
"abcde\n")
|
71
71
|
|
72
72
|
it %(highlights the newline) do
|
73
|
-
expect(refiner.refined_old
|
73
|
+
expect(refiner.refined_old).to eq(
|
74
74
|
%(#{RED}-abcde#{RESET}\n))
|
75
|
-
expect(refiner.refined_new
|
75
|
+
expect(refiner.refined_new).to eq(
|
76
76
|
%(#{GREEN}+abcde#{reversed('↵')}#{RESET}\n))
|
77
77
|
end
|
78
78
|
|
79
79
|
it %(ends in a newline) do
|
80
|
-
expect(refiner.refined_old
|
81
|
-
expect(refiner.refined_new
|
80
|
+
expect(refiner.refined_old).to end_with("\n")
|
81
|
+
expect(refiner.refined_new).to end_with("\n")
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
@@ -87,15 +87,15 @@ RSpec.describe Refiner, '#new' do
|
|
87
87
|
'abcde')
|
88
88
|
|
89
89
|
it %(highlights the newline) do
|
90
|
-
expect(refiner.refined_old
|
90
|
+
expect(refiner.refined_old).to eq(
|
91
91
|
%(#{RED}-abcde#{reversed('↵')}#{RESET}\n))
|
92
|
-
expect(refiner.refined_new
|
92
|
+
expect(refiner.refined_new).to eq(
|
93
93
|
%(#{GREEN}+abcde#{RESET}\n))
|
94
94
|
end
|
95
95
|
|
96
96
|
it %(ends in a newline) do
|
97
|
-
expect(refiner.refined_old
|
98
|
-
expect(refiner.refined_new
|
97
|
+
expect(refiner.refined_old).to end_with("\n")
|
98
|
+
expect(refiner.refined_new).to end_with("\n")
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -105,11 +105,44 @@ RSpec.describe Refiner, '#new' do
|
|
105
105
|
"fffff,\n" \
|
106
106
|
"ggggg\n")
|
107
107
|
|
108
|
-
it %(
|
109
|
-
expect(refiner.refined_old
|
110
|
-
|
111
|
-
|
108
|
+
it %(pretends first line is unchanged, but highlights comma) do
|
109
|
+
expect(refiner.refined_old).to eq('')
|
110
|
+
expect(refiner.refined_new).to eq(
|
111
|
+
%( abcde#{reversed(',')}\n) +
|
112
|
+
%(#{GREEN}+fffff,\n) +
|
113
|
+
%(#{GREEN}+ggggg#{RESET}\n))
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context %(with two lines turning into many) do
|
118
|
+
refiner = Refiner.new("abcde\n" \
|
119
|
+
"fffff\n",
|
120
|
+
"abcde,\n" \
|
121
|
+
"fffff,\n" \
|
122
|
+
"ggggg\n")
|
123
|
+
|
124
|
+
it %(highlights the comma on the first two lines, but not the extra line) do
|
125
|
+
expect(refiner.refined_old).to eq(
|
126
|
+
%(#{RED}-abcde\n) +
|
127
|
+
%(#{RED}-fffff#{RESET}\n))
|
128
|
+
expect(refiner.refined_new).to eq(
|
112
129
|
%(#{GREEN}+abcde#{reversed(',')}\n) +
|
130
|
+
%(#{GREEN}+fffff#{reversed(',')}\n) +
|
131
|
+
%(#{GREEN}+ggggg#{RESET}\n))
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context %(with one line being replaced with many) do
|
136
|
+
refiner = Refiner.new("abcdx\n",
|
137
|
+
"abcde,\n" \
|
138
|
+
"fffff,\n" \
|
139
|
+
"ggggg\n")
|
140
|
+
|
141
|
+
it %(highlights both adds and removes on the first line) do
|
142
|
+
expect(refiner.refined_old).to eq(
|
143
|
+
%(#{RED}-abcd#{reversed('x')}#{RESET}\n))
|
144
|
+
expect(refiner.refined_new).to eq(
|
145
|
+
%(#{GREEN}+abcd#{reversed('e,')}\n) +
|
113
146
|
%(#{GREEN}+fffff,\n) +
|
114
147
|
%(#{GREEN}+ggggg#{RESET}\n))
|
115
148
|
end
|
@@ -122,11 +155,11 @@ RSpec.describe Refiner, '#new' do
|
|
122
155
|
"abcde\n")
|
123
156
|
|
124
157
|
it %(highlights the first removed comma, but not the two removed lines) do
|
125
|
-
expect(refiner.refined_old
|
158
|
+
expect(refiner.refined_old).to eq(
|
126
159
|
%(#{RED}-abcde#{reversed(',')}\n) +
|
127
160
|
%(#{RED}-fffff,\n) +
|
128
161
|
%(#{RED}-ggggg#{RESET}\n))
|
129
|
-
expect(refiner.refined_new
|
162
|
+
expect(refiner.refined_new).to eq(
|
130
163
|
%(#{GREEN}+abcde#{RESET}\n))
|
131
164
|
end
|
132
165
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riffdiff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johan Walles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -24,34 +24,62 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.29.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.29.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: diff-lcs
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
30
58
|
requirements:
|
31
59
|
- - "~>"
|
32
60
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.2
|
61
|
+
version: '1.2'
|
34
62
|
type: :runtime
|
35
63
|
prerelease: false
|
36
64
|
version_requirements: !ruby/object:Gem::Requirement
|
37
65
|
requirements:
|
38
66
|
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.2
|
68
|
+
version: '1.2'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: slop
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
73
|
- - "~>"
|
46
74
|
- !ruby/object:Gem::Version
|
47
|
-
version: 4.1
|
75
|
+
version: '4.1'
|
48
76
|
type: :runtime
|
49
77
|
prerelease: false
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
51
79
|
requirements:
|
52
80
|
- - "~>"
|
53
81
|
- !ruby/object:Gem::Version
|
54
|
-
version: 4.1
|
82
|
+
version: '4.1'
|
55
83
|
description: |
|
56
84
|
== Riff
|
57
85
|
Riff is a wrapper around diff that highlights not only which lines have changed,
|
@@ -77,6 +105,7 @@ extra_rdoc_files: []
|
|
77
105
|
files:
|
78
106
|
- ".gitignore"
|
79
107
|
- ".rubocop.yml"
|
108
|
+
- ".travis.yml"
|
80
109
|
- Gemfile
|
81
110
|
- LICENSE
|
82
111
|
- README.md
|