clintegracon 0.8.1 → 0.9.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 +5 -5
- data/.travis.yml +1 -3
- data/Gemfile.lock +9 -6
- data/Rakefile +1 -1
- data/clintegracon.gemspec +6 -5
- data/lib/CLIntegracon/adapter/bacon.rb +2 -3
- data/lib/CLIntegracon/diff.rb +1 -1
- data/lib/CLIntegracon/formatter.rb +2 -2
- data/lib/CLIntegracon/subject.rb +22 -13
- data/lib/CLIntegracon/version.rb +1 -1
- data/spec/fixtures/bin/coffeemaker.rb +1 -1
- data/spec/unit/formatter_spec.rb +14 -0
- data/spec/unit/spec_helper.rb +1 -0
- data/spec/unit/subject_spec.rb +21 -4
- metadata +41 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c109a85017b07bd104daa1df36db468a32c8aa8c3100fbb333cf8f9f3c8db6cc
|
4
|
+
data.tar.gz: 7db0ebd75c0065fc879602ebc290b5a9fb12133b4af83f6052298941f34c4249
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1781e7d5690b30f839e8a15d261db1da46589b1b4b383f0fe24f8d256ec65db0c30b600348a243cc37b169605154a5640aed9473cb050470ecb39590ce1ba05a
|
7
|
+
data.tar.gz: 58c3fcc06f756d7d1eddc64320072a468b8852328a077981aed3b7f261e21040ceb8db7cae48299dcc6f01a8204a3b385c7a08128aa6b0919adec088b1520c64
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
clintegracon (0.
|
5
|
-
|
4
|
+
clintegracon (0.9.0)
|
5
|
+
colored2 (~> 3.1)
|
6
6
|
diffy
|
7
7
|
|
8
8
|
GEM
|
@@ -17,15 +17,15 @@ GEM
|
|
17
17
|
bacon (1.2.0)
|
18
18
|
claide (0.8.1)
|
19
19
|
coderay (1.1.0)
|
20
|
-
|
21
|
-
diffy (3.
|
20
|
+
colored2 (3.1.2)
|
21
|
+
diffy (3.2.1)
|
22
22
|
i18n (0.7.0)
|
23
23
|
inch (0.6.1)
|
24
24
|
pry
|
25
25
|
sparkr (>= 0.2.0)
|
26
26
|
term-ansicolor
|
27
27
|
yard (~> 0.8.7.5)
|
28
|
-
json (1.8.
|
28
|
+
json (1.8.6)
|
29
29
|
metaclass (0.0.4)
|
30
30
|
method_source (0.8.2)
|
31
31
|
minitest (5.6.1)
|
@@ -33,6 +33,8 @@ GEM
|
|
33
33
|
metaclass (~> 0.0.1)
|
34
34
|
mocha-on-bacon (0.2.2)
|
35
35
|
mocha (>= 0.13.0)
|
36
|
+
prettybacon (0.0.2)
|
37
|
+
bacon (~> 1.2)
|
36
38
|
pry (0.10.1)
|
37
39
|
coderay (~> 1.1.0)
|
38
40
|
method_source (~> 0.8.1)
|
@@ -59,7 +61,8 @@ DEPENDENCIES
|
|
59
61
|
clintegracon!
|
60
62
|
inch
|
61
63
|
mocha-on-bacon
|
64
|
+
prettybacon
|
62
65
|
rake
|
63
66
|
|
64
67
|
BUNDLED WITH
|
65
|
-
1.
|
68
|
+
1.16.6
|
data/Rakefile
CHANGED
data/clintegracon.gemspec
CHANGED
@@ -22,14 +22,15 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency 'activesupport', '>= 3.1'
|
27
26
|
spec.add_development_dependency "bacon"
|
28
|
-
spec.add_development_dependency "
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
29
28
|
spec.add_development_dependency "claide", "~> 0.8" # Example CLI
|
30
29
|
spec.add_development_dependency "inch"
|
31
|
-
spec.add_development_dependency
|
30
|
+
spec.add_development_dependency "mocha-on-bacon"
|
31
|
+
spec.add_development_dependency "prettybacon"
|
32
|
+
spec.add_development_dependency "rake"
|
32
33
|
|
33
|
-
spec.add_runtime_dependency '
|
34
|
+
spec.add_runtime_dependency 'colored2', '~> 3.1'
|
34
35
|
spec.add_runtime_dependency 'diffy'
|
35
36
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'colored2'
|
2
2
|
|
3
3
|
# Layout structure
|
4
4
|
module CLIntegracon
|
@@ -85,8 +85,7 @@ module CLIntegracon::Adapter::Bacon
|
|
85
85
|
#
|
86
86
|
def cli_spec(spec_dir, head_args=nil, tail_args=nil, based_on: nil)
|
87
87
|
file_spec(spec_dir, based_on: based_on) do
|
88
|
-
output = subject.launch(head_args, tail_args)
|
89
|
-
status = $?
|
88
|
+
output, status = subject.launch(head_args, tail_args)
|
90
89
|
|
91
90
|
args = [head_args, tail_args].compact
|
92
91
|
it "$ #{subject.name} #{args.join(' ')}" do
|
data/lib/CLIntegracon/diff.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'colored2'
|
2
2
|
|
3
3
|
module CLIntegracon
|
4
4
|
|
@@ -151,7 +151,7 @@ module CLIntegracon
|
|
151
151
|
when /^\+/ then line.green
|
152
152
|
when /^-/ then line.red
|
153
153
|
else line
|
154
|
-
end.gsub("\n",'')
|
154
|
+
end.gsub("\n",'').gsub("\r", '\r')
|
155
155
|
end
|
156
156
|
description << "--- END ".ljust(max_width, '-')
|
157
157
|
description << ''
|
data/lib/CLIntegracon/subject.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
module CLIntegracon
|
2
2
|
class Subject
|
3
3
|
|
4
|
+
ReplacementPattern = Struct.new(:pattern, :replacement) do
|
5
|
+
# Applies the replacement pattern to the given output, returning
|
6
|
+
# a new string with the replacement applied
|
7
|
+
def replace(output)
|
8
|
+
output.gsub(pattern, replacement)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
4
12
|
#-----------------------------------------------------------------------------#
|
5
13
|
|
6
14
|
# @!group Attributes
|
@@ -24,9 +32,8 @@ module CLIntegracon
|
|
24
32
|
# Those are added behind the arguments given on +launch+.
|
25
33
|
attr_accessor :default_args
|
26
34
|
|
27
|
-
# @return [
|
28
|
-
# The replace patterns
|
29
|
-
# which should be redacted, when the subject will be executed. These are
|
35
|
+
# @return [Array<ReplacementPattern>]
|
36
|
+
# The replace patterns that are redacted when the subject is executed. These are
|
30
37
|
# e.g. paths were side-effects occur, like manipulation of user configurations
|
31
38
|
# in dot files or caching-specific directories or just dates and times.
|
32
39
|
attr_accessor :replace_patterns
|
@@ -53,7 +60,7 @@ module CLIntegracon
|
|
53
60
|
self.executable = executable || name
|
54
61
|
self.environment_vars = {}
|
55
62
|
self.default_args = []
|
56
|
-
self.replace_patterns =
|
63
|
+
self.replace_patterns = []
|
57
64
|
self.output_path = 'execution_output.txt'
|
58
65
|
end
|
59
66
|
|
@@ -72,7 +79,7 @@ module CLIntegracon
|
|
72
79
|
# The replacement
|
73
80
|
#
|
74
81
|
def replace_pattern(pattern, replacement)
|
75
|
-
self.replace_patterns
|
82
|
+
self.replace_patterns << ReplacementPattern.new(pattern, replacement)
|
76
83
|
end
|
77
84
|
|
78
85
|
# Define a path, whose occurrences in the output should be replaced by
|
@@ -122,9 +129,10 @@ module CLIntegracon
|
|
122
129
|
#
|
123
130
|
def launch(head_arguments='', tail_arguments='')
|
124
131
|
command = command_line(head_arguments, tail_arguments)
|
125
|
-
output =
|
132
|
+
output, status = run(command)
|
133
|
+
output = apply_replacements(output)
|
126
134
|
write_output(command, output)
|
127
|
-
output
|
135
|
+
[output, status]
|
128
136
|
end
|
129
137
|
|
130
138
|
#-----------------------------------------------------------------------------#
|
@@ -147,11 +155,13 @@ module CLIntegracon
|
|
147
155
|
# @param [String] command_line
|
148
156
|
# THe command line to execute
|
149
157
|
#
|
150
|
-
# @return [String]
|
151
|
-
# The output, which is emitted
|
158
|
+
# @return [[String, Process::Status]]
|
159
|
+
# The output, which is emitted during execution, and the exit status.
|
152
160
|
#
|
153
161
|
def run(command_line)
|
154
|
-
|
162
|
+
require 'open3'
|
163
|
+
env = Hash[environment_vars.map { |k, v| [k.to_s, v.to_s] }]
|
164
|
+
Open3.capture2e(env, command_line.to_s)
|
155
165
|
end
|
156
166
|
|
157
167
|
# Merges the given with the configured arguments and returns the command
|
@@ -180,10 +190,9 @@ module CLIntegracon
|
|
180
190
|
# The redacted output.
|
181
191
|
#
|
182
192
|
def apply_replacements(output)
|
183
|
-
replace_patterns.
|
184
|
-
|
193
|
+
replace_patterns.reduce(output) do |output, replacement_pattern|
|
194
|
+
replacement_pattern.replace(output)
|
185
195
|
end
|
186
|
-
output
|
187
196
|
end
|
188
197
|
|
189
198
|
# Saves the output in a file called #output_path, relative to current dir.
|
data/lib/CLIntegracon/version.rb
CHANGED
data/spec/unit/formatter_spec.rb
CHANGED
@@ -63,6 +63,20 @@ $before
|
|
63
63
|
\e[31m- $removed\e[0m
|
64
64
|
$after
|
65
65
|
--- END ------------
|
66
|
+
EOS
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should show carriage returns' do
|
70
|
+
diff = ['$before', "+ $blah\radd", "- $blah\rremoved", '$after']
|
71
|
+
diff.stubs(:relative_path => '$relative_path')
|
72
|
+
@formatter.describe_file_diff(diff, 20).to_s.should.be.eql? <<-EOS
|
73
|
+
File comparison error `$relative_path` for $spec_folder:
|
74
|
+
--- DIFF -----------
|
75
|
+
$before
|
76
|
+
\e[32m+ $blah\\radd\e[0m
|
77
|
+
\e[31m- $blah\\rremoved\e[0m
|
78
|
+
$after
|
79
|
+
--- END ------------
|
66
80
|
EOS
|
67
81
|
end
|
68
82
|
end
|
data/spec/unit/spec_helper.rb
CHANGED
data/spec/unit/subject_spec.rb
CHANGED
@@ -16,11 +16,11 @@ describe CLIntegracon::Subject do
|
|
16
16
|
/Users/marius/.im/chat.log
|
17
17
|
/tmp/im/chat.log
|
18
18
|
eos
|
19
|
-
|
19
|
+
Open3.expects(:capture2e).returns([output, mock()])
|
20
20
|
@subject.stubs(:write_output)
|
21
21
|
@subject.replace_user_path '.im/chat.log'
|
22
22
|
@subject.replace_path '/tmp', '$TMP'
|
23
|
-
@subject.launch.should.be == <<-eos.strip_heredoc
|
23
|
+
@subject.launch.first.should.be == <<-eos.strip_heredoc
|
24
24
|
$HOME/.im/chat.log
|
25
25
|
$TMP/im/chat.log
|
26
26
|
eos
|
@@ -32,16 +32,33 @@ describe CLIntegracon::Subject do
|
|
32
32
|
Fri Nov 14 22:46:54 - @olivier > Hi
|
33
33
|
Fri Nov 14 22:47:13 - @marius > hey
|
34
34
|
eos
|
35
|
-
|
35
|
+
Open3.expects(:capture2e).returns([output, mock()])
|
36
36
|
@subject.stubs(:write_output)
|
37
37
|
@subject.replace_pattern /\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2}/, '<#DATE#>'
|
38
38
|
@subject.replace_pattern /@\w+/, '<REDACTED>'
|
39
|
-
@subject.launch.should.be == <<-eos.strip_heredoc
|
39
|
+
@subject.launch.first.should.be == <<-eos.strip_heredoc
|
40
40
|
<#DATE#> - <REDACTED> > ¡Hola!
|
41
41
|
<#DATE#> - <REDACTED> > Hi
|
42
42
|
<#DATE#> - <REDACTED> > hey
|
43
43
|
eos
|
44
44
|
end
|
45
|
+
|
46
|
+
it 'should replace multiple patterns with the same replacement string' do
|
47
|
+
output = <<-eos.strip_heredoc
|
48
|
+
abc
|
49
|
+
cde
|
50
|
+
efg
|
51
|
+
eos
|
52
|
+
Open3.expects(:capture2e).returns([output, mock()])
|
53
|
+
@subject.stubs(:write_output)
|
54
|
+
@subject.replace_pattern /b/, ''
|
55
|
+
@subject.replace_pattern /f/, ''
|
56
|
+
@subject.launch.first.should == <<-eos.strip_heredoc
|
57
|
+
ac
|
58
|
+
cde
|
59
|
+
eg
|
60
|
+
eos
|
61
|
+
end
|
45
62
|
end
|
46
63
|
|
47
64
|
end
|
metadata
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clintegracon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marius Rackwitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '3.1'
|
20
20
|
type: :development
|
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: '1
|
26
|
+
version: '3.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bacon
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,21 +39,35 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: claide
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: inch
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,21 +81,21 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: mocha-on-bacon
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: prettybacon
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -95,33 +109,33 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: colored2
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '1
|
131
|
+
version: '3.1'
|
118
132
|
type: :runtime
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: '1
|
138
|
+
version: '3.1'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: diffy
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
230
|
version: '0'
|
217
231
|
requirements: []
|
218
232
|
rubyforge_project:
|
219
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.7.7
|
220
234
|
signing_key:
|
221
235
|
specification_version: 4
|
222
236
|
summary: Integration specs for your CLI
|
@@ -255,4 +269,3 @@ test_files:
|
|
255
269
|
- spec/unit/formatter_spec.rb
|
256
270
|
- spec/unit/spec_helper.rb
|
257
271
|
- spec/unit/subject_spec.rb
|
258
|
-
has_rdoc:
|