clintegracon 0.5.3 → 0.6.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/Gemfile.lock +7 -1
- data/clintegracon.gemspec +1 -0
- data/lib/CLIntegracon/subject.rb +98 -22
- data/lib/CLIntegracon/version.rb +1 -1
- data/spec/unit/spec_helper.rb +1 -0
- data/spec/unit/subject_spec.rb +47 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da046b97927be25951f614f5a1d4fa20feab0520
|
4
|
+
data.tar.gz: 5f499a259ddc350ba287541be417d440e69db5c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d65d4fa9ae1a25a3dfd934dd5e5bd20ffe654c9ca773684f3f111a414b6d99381b9c1c5d25e037f8f7c7b25f3a8dc2e0059e8a60e742d26febc0a5b8ca68f3b1
|
7
|
+
data.tar.gz: 4faacee342cdfbbb01b4b43ae83fd79cda250c250294d28ca7c1d1e2fd11c4e3a2a62eb3e67243c9082aa18744aa0807d75cb98a0a83707a5fbe134da03f677c
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
clintegracon (0.
|
4
|
+
clintegracon (0.6.0)
|
5
5
|
colored (~> 1.2)
|
6
6
|
diffy
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
+
activesupport (3.2.20)
|
12
|
+
i18n (~> 0.6, >= 0.6.4)
|
13
|
+
multi_json (~> 1.0)
|
11
14
|
bacon (1.2.0)
|
12
15
|
claide (0.7.0)
|
13
16
|
coderay (1.1.0)
|
14
17
|
colored (1.2)
|
15
18
|
diffy (3.0.6)
|
19
|
+
i18n (0.6.11)
|
16
20
|
inch (0.5.0)
|
17
21
|
pry
|
18
22
|
sparkr (>= 0.2.0)
|
@@ -24,6 +28,7 @@ GEM
|
|
24
28
|
metaclass (~> 0.0.1)
|
25
29
|
mocha-on-bacon (0.2.2)
|
26
30
|
mocha (>= 0.13.0)
|
31
|
+
multi_json (1.10.1)
|
27
32
|
pry (0.10.1)
|
28
33
|
coderay (~> 1.1.0)
|
29
34
|
method_source (~> 0.8.1)
|
@@ -40,6 +45,7 @@ PLATFORMS
|
|
40
45
|
ruby
|
41
46
|
|
42
47
|
DEPENDENCIES
|
48
|
+
activesupport (>= 3.1)
|
43
49
|
bacon
|
44
50
|
bundler (~> 1.3)
|
45
51
|
claide
|
data/clintegracon.gemspec
CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency "mocha-on-bacon"
|
30
30
|
spec.add_development_dependency "claide" # Example CLI
|
31
31
|
spec.add_development_dependency "inch"
|
32
|
+
spec.add_development_dependency 'activesupport', '>= 3.1'
|
32
33
|
|
33
34
|
spec.add_runtime_dependency 'colored', '~> 1.2'
|
34
35
|
spec.add_runtime_dependency 'diffy'
|
data/lib/CLIntegracon/subject.rb
CHANGED
@@ -24,12 +24,12 @@ module CLIntegracon
|
|
24
24
|
# Those are added behind the arguments given on +launch+.
|
25
25
|
attr_accessor :default_args
|
26
26
|
|
27
|
-
# @return [Hash<String,String>]
|
28
|
-
# The replace
|
29
|
-
# which
|
30
|
-
#
|
31
|
-
#
|
32
|
-
attr_accessor :
|
27
|
+
# @return [Hash<String|Regexp,String>]
|
28
|
+
# The replace patterns, whose keys are expected to occur in the output,
|
29
|
+
# which should be redacted, when the subject will be executed. These are
|
30
|
+
# e.g. paths were side-effects occur, like manipulation of user configurations
|
31
|
+
# in dot files or caching-specific directories or just dates and times.
|
32
|
+
attr_accessor :replace_patterns
|
33
33
|
|
34
34
|
# @return [String]
|
35
35
|
# The path where the output of the executable will be written to.
|
@@ -53,7 +53,7 @@ module CLIntegracon
|
|
53
53
|
self.executable = executable || name
|
54
54
|
self.environment_vars = {}
|
55
55
|
self.default_args = []
|
56
|
-
self.
|
56
|
+
self.replace_patterns = {}
|
57
57
|
self.output_path = 'execution_output.txt'
|
58
58
|
end
|
59
59
|
|
@@ -62,7 +62,20 @@ module CLIntegracon
|
|
62
62
|
|
63
63
|
# @!group DSL-like Setter
|
64
64
|
|
65
|
-
# Define a
|
65
|
+
# Define a pattern, whose occurrences in the output should be replaced by a
|
66
|
+
# given placeholder.
|
67
|
+
#
|
68
|
+
# @param [Regexp|String] pattern
|
69
|
+
# The pattern
|
70
|
+
#
|
71
|
+
# @param [String] replacement
|
72
|
+
# The replacement
|
73
|
+
#
|
74
|
+
def replace_pattern(pattern, replacement)
|
75
|
+
self.replace_patterns[replacement] = pattern
|
76
|
+
end
|
77
|
+
|
78
|
+
# Define a path, whose occurrences in the output should be replaced by
|
66
79
|
# either its basename or a given placeholder.
|
67
80
|
#
|
68
81
|
# @param [String] path
|
@@ -73,19 +86,20 @@ module CLIntegracon
|
|
73
86
|
#
|
74
87
|
def replace_path(path, name=nil)
|
75
88
|
name ||= File.basename path
|
76
|
-
self.
|
89
|
+
self.replace_pattern path, name
|
77
90
|
end
|
78
91
|
|
79
92
|
# Define a path in the user directory, whose occurrences in the output
|
80
|
-
# should
|
93
|
+
# should be replaced by either its basename or a given placeholder.
|
81
94
|
#
|
82
95
|
# @param [String] path
|
83
96
|
# The path
|
84
97
|
#
|
85
98
|
# @param [String] name
|
86
|
-
# The name of the path, or the
|
99
|
+
# The name of the path, or the given path
|
87
100
|
#
|
88
101
|
def replace_user_path(path, name=nil)
|
102
|
+
name ||= "$HOME/#{path}"
|
89
103
|
self.replace_path %r[/Users/.*/#{path.to_s}], name
|
90
104
|
end
|
91
105
|
|
@@ -107,24 +121,86 @@ module CLIntegracon
|
|
107
121
|
# The output, which is emitted while execution.
|
108
122
|
#
|
109
123
|
def launch(head_arguments='', tail_arguments='')
|
110
|
-
|
124
|
+
command = command_line(head_arguments, tail_arguments)
|
125
|
+
output = apply_replacements(run(command))
|
126
|
+
write_output(command, output)
|
127
|
+
output
|
128
|
+
end
|
129
|
+
|
130
|
+
#-----------------------------------------------------------------------------#
|
131
|
+
|
132
|
+
# @!group Helpers
|
133
|
+
|
134
|
+
protected
|
135
|
+
|
136
|
+
# Serializes configured environment variables
|
137
|
+
#
|
138
|
+
# @return [String]
|
139
|
+
# Serialized assignment of configured environment variables.
|
140
|
+
#
|
141
|
+
def environment_var_assignments
|
142
|
+
environment_vars.map { |key,value| "#{key}=#{value}" }.join ' '
|
143
|
+
end
|
144
|
+
|
145
|
+
# Run the command.
|
146
|
+
#
|
147
|
+
# @param [String] command_line
|
148
|
+
# THe command line to execute
|
149
|
+
#
|
150
|
+
# @return [String]
|
151
|
+
# The output, which is emitted while execution.
|
152
|
+
#
|
153
|
+
def run(command_line)
|
154
|
+
`#{environment_var_assignments} #{command_line} 2>&1`
|
155
|
+
end
|
156
|
+
|
157
|
+
# Merges the given with the configured arguments and returns the command
|
158
|
+
# line to execute.
|
159
|
+
#
|
160
|
+
# @param [String] head_arguments
|
161
|
+
# The arguments to pass to the executable before the default arguments.
|
162
|
+
#
|
163
|
+
# @param [String] tail_arguments
|
164
|
+
# The arguments to pass to the executable after the default arguments.
|
165
|
+
#
|
166
|
+
# @return [String]
|
167
|
+
# The command line to execute.
|
168
|
+
#
|
169
|
+
def command_line(head_arguments='', tail_arguments='')
|
111
170
|
args = [head_arguments, default_args, tail_arguments].flatten.compact.select { |s| s.length > 0 }.join ' '
|
112
|
-
|
171
|
+
"#{executable} #{args}"
|
172
|
+
end
|
113
173
|
|
114
|
-
|
174
|
+
# Apply the configured replacements to the output.
|
175
|
+
#
|
176
|
+
# @param [String] output
|
177
|
+
# The output, which was emitted while execution.
|
178
|
+
#
|
179
|
+
# @return [String]
|
180
|
+
# The redacted output.
|
181
|
+
#
|
182
|
+
def apply_replacements(output)
|
183
|
+
replace_patterns.each do |key, path|
|
184
|
+
output = output.gsub(path, key)
|
185
|
+
end
|
186
|
+
output
|
187
|
+
end
|
115
188
|
|
189
|
+
# Saves the output in a file called #output_path, relative to current dir.
|
190
|
+
#
|
191
|
+
# @param [String] command
|
192
|
+
# The executed command line.
|
193
|
+
#
|
194
|
+
# @param [String] output
|
195
|
+
# The output, which was emitted while execution.
|
196
|
+
#
|
197
|
+
def write_output(command, output)
|
116
198
|
File.open(output_path, 'w') do |file|
|
117
|
-
|
199
|
+
printable_command = "#{environment_var_assignments} #{command} 2>&1"
|
200
|
+
file.write printable_command.sub(executable, name)
|
118
201
|
file.write "\n"
|
119
|
-
|
120
|
-
replace_paths.each do |key, path|
|
121
|
-
output.gsub!(path, key)
|
122
|
-
end
|
123
|
-
|
124
202
|
file.write output
|
125
203
|
end
|
126
|
-
|
127
|
-
output
|
128
204
|
end
|
129
205
|
|
130
206
|
end
|
data/lib/CLIntegracon/version.rb
CHANGED
data/spec/unit/spec_helper.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe CLIntegracon::Subject do
|
4
|
+
|
5
|
+
def subject
|
6
|
+
CLIntegracon::Subject
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
@subject = subject.new('cat')
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#launch' do
|
14
|
+
it 'should redact paths from output' do
|
15
|
+
output = <<-eos.strip_heredoc
|
16
|
+
/Users/marius/.im/chat.log
|
17
|
+
/tmp/im/chat.log
|
18
|
+
eos
|
19
|
+
@subject.expects(:`).returns(output)
|
20
|
+
@subject.stubs(:write_output)
|
21
|
+
@subject.replace_user_path '.im/chat.log'
|
22
|
+
@subject.replace_path '/tmp', '$TMP'
|
23
|
+
@subject.launch.should.be == <<-eos.strip_heredoc
|
24
|
+
$HOME/.im/chat.log
|
25
|
+
$TMP/im/chat.log
|
26
|
+
eos
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should redact patterns from output' do
|
30
|
+
output = <<-eos.strip_heredoc
|
31
|
+
Fri Nov 14 22:46:37 - @samuel > ¡Hola!
|
32
|
+
Fri Nov 14 22:46:54 - @olivier > Hi
|
33
|
+
Fri Nov 14 22:47:13 - @marius > hey
|
34
|
+
eos
|
35
|
+
@subject.expects(:`).returns(output)
|
36
|
+
@subject.stubs(:write_output)
|
37
|
+
@subject.replace_pattern /\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2}/, '<#DATE#>'
|
38
|
+
@subject.replace_pattern /@\w+/, '<REDACTED>'
|
39
|
+
@subject.launch.should.be == <<-eos.strip_heredoc
|
40
|
+
<#DATE#> - <REDACTED> > ¡Hola!
|
41
|
+
<#DATE#> - <REDACTED> > Hi
|
42
|
+
<#DATE#> - <REDACTED> > hey
|
43
|
+
eos
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clintegracon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.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: 2014-
|
11
|
+
date: 2014-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: activesupport
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.1'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.1'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: colored
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,6 +197,7 @@ files:
|
|
183
197
|
- spec/unit/configuration_spec.rb
|
184
198
|
- spec/unit/formatter_spec.rb
|
185
199
|
- spec/unit/spec_helper.rb
|
200
|
+
- spec/unit/subject_spec.rb
|
186
201
|
homepage: https://github.com/mrackwitz/CLIntegracon
|
187
202
|
licenses:
|
188
203
|
- MIT
|
@@ -229,4 +244,5 @@ test_files:
|
|
229
244
|
- spec/unit/configuration_spec.rb
|
230
245
|
- spec/unit/formatter_spec.rb
|
231
246
|
- spec/unit/spec_helper.rb
|
247
|
+
- spec/unit/subject_spec.rb
|
232
248
|
has_rdoc:
|