omnitest-psychic 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +5 -0
  5. data/.rubocop_todo.yml +36 -0
  6. data/.travis.yml +10 -0
  7. data/CONTRIBUTING.md +61 -0
  8. data/Gemfile +23 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +234 -0
  11. data/Rakefile +12 -0
  12. data/appveyor.yml +9 -0
  13. data/bin/psychic +4 -0
  14. data/docs/code_samples.md +92 -0
  15. data/docs/index.md +128 -0
  16. data/lib/omnitest/output_helper.rb +84 -0
  17. data/lib/omnitest/psychic.rb +191 -0
  18. data/lib/omnitest/psychic/cli.rb +171 -0
  19. data/lib/omnitest/psychic/code2doc.rb +75 -0
  20. data/lib/omnitest/psychic/code2doc/code_helper.rb +122 -0
  21. data/lib/omnitest/psychic/code2doc/code_segmenter.rb +170 -0
  22. data/lib/omnitest/psychic/code2doc/comment_styles.rb +92 -0
  23. data/lib/omnitest/psychic/command_template.rb +35 -0
  24. data/lib/omnitest/psychic/error.rb +15 -0
  25. data/lib/omnitest/psychic/execution/default_strategy.rb +82 -0
  26. data/lib/omnitest/psychic/execution/env_strategy.rb +12 -0
  27. data/lib/omnitest/psychic/execution/flag_strategy.rb +14 -0
  28. data/lib/omnitest/psychic/execution/token_strategy.rb +68 -0
  29. data/lib/omnitest/psychic/factories/go_factories.rb +14 -0
  30. data/lib/omnitest/psychic/factories/hot_read_task_factory.rb +54 -0
  31. data/lib/omnitest/psychic/factories/java_factories.rb +81 -0
  32. data/lib/omnitest/psychic/factories/powershell_factories.rb +53 -0
  33. data/lib/omnitest/psychic/factories/ruby_factories.rb +56 -0
  34. data/lib/omnitest/psychic/factories/shell_factories.rb +89 -0
  35. data/lib/omnitest/psychic/factories/travis_factories.rb +33 -0
  36. data/lib/omnitest/psychic/factory_manager.rb +46 -0
  37. data/lib/omnitest/psychic/file_finder.rb +69 -0
  38. data/lib/omnitest/psychic/hints.rb +21 -0
  39. data/lib/omnitest/psychic/magic_task_factory.rb +98 -0
  40. data/lib/omnitest/psychic/script.rb +146 -0
  41. data/lib/omnitest/psychic/script_factory.rb +66 -0
  42. data/lib/omnitest/psychic/script_factory_manager.rb +24 -0
  43. data/lib/omnitest/psychic/script_runner.rb +45 -0
  44. data/lib/omnitest/psychic/task.rb +6 -0
  45. data/lib/omnitest/psychic/task_factory_manager.rb +19 -0
  46. data/lib/omnitest/psychic/task_runner.rb +30 -0
  47. data/lib/omnitest/psychic/tokens.rb +51 -0
  48. data/lib/omnitest/psychic/version.rb +5 -0
  49. data/lib/omnitest/psychic/workflow.rb +27 -0
  50. data/lib/omnitest/shell.rb +27 -0
  51. data/lib/omnitest/shell/buff_shellout_executor.rb +41 -0
  52. data/lib/omnitest/shell/execution_result.rb +61 -0
  53. data/lib/omnitest/shell/mixlib_shellout_executor.rb +66 -0
  54. data/mkdocs.yml +6 -0
  55. data/omnitest-psychic.gemspec +36 -0
  56. data/spec/fabricators/shell_fabricator.rb +9 -0
  57. data/spec/omnitest/psychic/code2doc/code_helper_spec.rb +123 -0
  58. data/spec/omnitest/psychic/execution/default_strategy_spec.rb +17 -0
  59. data/spec/omnitest/psychic/execution/env_strategy_spec.rb +17 -0
  60. data/spec/omnitest/psychic/execution/flag_strategy_spec.rb +26 -0
  61. data/spec/omnitest/psychic/execution/token_strategy_spec.rb +26 -0
  62. data/spec/omnitest/psychic/factories/java_factories_spec.rb +35 -0
  63. data/spec/omnitest/psychic/factories/powershell_factories_spec.rb +59 -0
  64. data/spec/omnitest/psychic/factories/ruby_factories_spec.rb +91 -0
  65. data/spec/omnitest/psychic/factories/shell_factories_spec.rb +79 -0
  66. data/spec/omnitest/psychic/factories/travis_factories_spec.rb +78 -0
  67. data/spec/omnitest/psychic/hot_read_task_factory_spec.rb +51 -0
  68. data/spec/omnitest/psychic/script_factory_manager_spec.rb +57 -0
  69. data/spec/omnitest/psychic/script_spec.rb +55 -0
  70. data/spec/omnitest/psychic/shell_spec.rb +68 -0
  71. data/spec/omnitest/psychic/workflow_spec.rb +46 -0
  72. data/spec/omnitest/psychic_spec.rb +170 -0
  73. data/spec/spec_helper.rb +52 -0
  74. metadata +352 -0
@@ -0,0 +1,68 @@
1
+ module Omnitest
2
+ RSpec.describe Shell do
3
+ subject { Psychic.new(cwd: current_dir).shell }
4
+
5
+ let(:is_windows?) do
6
+ RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
7
+ end
8
+
9
+ let(:pwd_cmd) { is_windows? ? 'echo %cd%' : 'pwd' }
10
+
11
+ describe '#shell' do
12
+ it 'returns an appropriate shell for the platform' do
13
+ if RUBY_PLATFORM == 'java'
14
+ expect(subject).to be_an_instance_of Shell::BuffShellOutExecutor
15
+ else
16
+ expect(subject).to be_an_instance_of Shell::MixlibShellOutExecutor
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#execute' do
22
+ it 'returns a successful ExecutionResult if it executes successfully' do
23
+ execution_result = subject.execute('echo hi', {})
24
+ expect(execution_result).to be_an_instance_of Shell::ExecutionResult
25
+ expect(execution_result.command).to eq('echo hi')
26
+ expect(execution_result.stdout.strip).to eq('hi')
27
+ expect(execution_result.exitstatus).to eq(0)
28
+ expect(execution_result).to be_successful
29
+ expect { execution_result.error! }.to_not raise_error
30
+ end
31
+
32
+ it 'raises an ExecutionError if the command was not found' do
33
+ execution_error = begin
34
+ subject.execute('missing', {})
35
+ # Raised immediately by MixLib on Linux, but not by Buff or on Windows
36
+ execution_result.error!
37
+ rescue => e
38
+ e
39
+ end
40
+
41
+ expect(execution_error).to be_an_instance_of Shell::ExecutionError
42
+ execution_result = execution_error.execution_result
43
+ expect(execution_result).to_not be_successful
44
+ expect(execution_result.exitstatus).to_not eq(0)
45
+ expect { execution_result.error! }.to raise_error(Shell::ExecutionError)
46
+ end
47
+
48
+ it 'returns an unsuccesful ExecutionResult if the command returns exits with a non-zero code' do
49
+ execution_result = subject.execute("ruby -e 'exit 5'", {})
50
+ expect(execution_result).to_not be_successful
51
+ expect(execution_result.exitstatus).to eq(5)
52
+ expect { execution_result.error! }.to raise_error(Shell::ExecutionError)
53
+ end
54
+
55
+ context 'with cwd' do
56
+ it 'executes the command in the specified directory' do
57
+ current_ruby_dir = Pathname(Dir.pwd).expand_path
58
+ current_aruba_dir = Pathname(current_dir).expand_path
59
+ expect(current_ruby_dir).to_not eq(current_aruba_dir)
60
+ execution_result_without_cwd = subject.execute(pwd_cmd, {})
61
+ execution_result_with_cwd = subject.execute(pwd_cmd, cwd: current_aruba_dir)
62
+ expect(Pathname(execution_result_without_cwd.stdout.strip)).to eq(Pathname(current_ruby_dir))
63
+ expect(Pathname(execution_result_with_cwd.stdout.strip)).to eq(Pathname(current_aruba_dir))
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ module Omnitest
4
+ class Psychic
5
+ RSpec.describe Workflow do
6
+ let(:psychic) { Psychic.new(cwd: current_dir) }
7
+
8
+ before(:each) do
9
+ write_file 'scripts/bootstrap.sh', ''
10
+ write_file 'scripts/test.sh', ''
11
+ end
12
+
13
+ context 'with a block' do
14
+ subject do
15
+ described_class.new(psychic) do
16
+ task :bootstrap
17
+ task :test
18
+ end
19
+ end
20
+
21
+ describe '#initialize' do
22
+ it 'add commands by evaluating the block' do
23
+ expect(subject.commands.size).to eq(2)
24
+ expect(subject.commands).to all(be_an_instance_of Task)
25
+ end
26
+ end
27
+
28
+ describe 'command' do
29
+ it 'creates a combined script that runs each command' do
30
+ expect(subject.command).to eq("./scripts/bootstrap.sh\n./scripts/test.sh\n")
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'without a block' do
36
+ describe '#initialize' do
37
+ subject { described_class.new(psychic) }
38
+
39
+ it 'creates a Workflow with no commands' do
40
+ expect(subject.commands).to be_empty
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ module Omnitest
4
+ RSpec.describe Psychic do
5
+ subject { described_class.new(cwd: current_dir) }
6
+ context 'when psychic.yml exists' do
7
+ let(:hints) do
8
+ {
9
+ 'tasks' =>
10
+ {
11
+ 'bootstrap' => 'foo',
12
+ 'compile' => 'bar',
13
+ 'execute' => 'baz'
14
+ }
15
+ }
16
+ end
17
+
18
+ before(:each) do
19
+ write_file 'psychic.yml', YAML.dump(hints)
20
+ end
21
+
22
+ describe 'initialize' do
23
+ it 'should create a HotReadTaskFactory for the specified directory' do
24
+ hot_task_factory = subject.task_factory_manager.active? Psychic::Factories::HotReadTaskFactory
25
+ expect(hot_task_factory).to_not be nil
26
+ expect(hot_task_factory.cwd).to eq(current_dir)
27
+ end
28
+ end
29
+
30
+ describe '#execute' do
31
+ it 'can accept additional arguments' do
32
+ if subject.os_family == :windows
33
+ cmd = 'Write-Host'
34
+ else
35
+ cmd = 'echo'
36
+ end
37
+ execution_result = subject.execute(cmd, 'hi', 'max')
38
+ expect(execution_result.stdout.strip).to eq('hi max')
39
+ end
40
+
41
+ it 'can accept a hash of shell opts' do
42
+ if subject.os_family == :windows
43
+ cmd = 'Write-Host $env:FOO'
44
+ else
45
+ cmd = 'echo $FOO'
46
+ end
47
+
48
+ execution_result = subject.execute(cmd, env: { 'FOO' => 'BAR' })
49
+ expect(execution_result.stdout.strip).to eq('BAR')
50
+ end
51
+
52
+ it 'can accept a hash of shell opts and extra args' do
53
+ if subject.os_family == :windows
54
+ cmd = 'Write-Host $env:FOO'
55
+ else
56
+ cmd = 'echo $FOO'
57
+ end
58
+
59
+ execution_result = subject.execute(cmd, { env: { 'FOO' => 'BAR' } }, 'baz')
60
+ expect(execution_result.stdout.strip).to eq('BAR baz')
61
+ end
62
+ end
63
+ end
64
+
65
+ context 'when scripts/* exist' do
66
+ before(:each) do
67
+ write_file 'scripts/bootstrap.sh', ''
68
+ write_file 'scripts/foo.sh', 'echo "hi"'
69
+ filesystem_permissions '0744', 'scripts/foo.sh'
70
+ write_file 'scripts/foo.ps1', 'Write-Host "hi"'
71
+ end
72
+
73
+ describe 'initialize' do
74
+ it 'should create a ShellTaskFactory' do
75
+ shell_task_factory = subject.task_factory_manager.active? Psychic::Factories::ShellTaskFactory
76
+ expect(shell_task_factory).to_not be nil
77
+ expect(shell_task_factory.cwd).to eq(current_dir)
78
+ end
79
+ end
80
+
81
+ describe '#task' do
82
+ it 'returns a Task' do
83
+ expect(subject.task('foo')).to be_an_instance_of Psychic::Task
84
+ end
85
+
86
+ it 'has a fluent #execute method' do
87
+ execution_result = subject.task('foo').execute
88
+ expect(execution_result.stdout).to include('hi')
89
+ end
90
+ end
91
+ end
92
+
93
+ context 'finding scripts' do
94
+ context 'without hints' do
95
+ describe '#known_scripts' do
96
+ it 'returns an empty list' do
97
+ expect(subject.known_scripts).to be_empty
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'with hints' do
103
+ let(:hints) do
104
+ {
105
+ scripts: {
106
+ 'foo' => '/path/to/foo.c',
107
+ 'bar' => '/path/to/bar.rb'
108
+ }
109
+ }
110
+ end
111
+ subject { described_class.new(cwd: Dir.pwd, hints: hints) }
112
+
113
+ it 'returns the scripts from the hints' do
114
+ scripts = subject.known_scripts
115
+ expect(scripts.size).to eq(2)
116
+ expect(scripts[0].name).to eq('foo')
117
+ expect(scripts[0].source_file.to_s).to eq('/path/to/foo.c')
118
+ expect(scripts[1].name).to eq('bar')
119
+ expect(scripts[1].source_file.to_s).to eq('/path/to/bar.rb')
120
+ end
121
+ end
122
+
123
+ describe '#script' do
124
+ before(:each) do
125
+ write_file 'samples/hi.rb', 'puts "hi"'
126
+ end
127
+
128
+ shared_examples 'executes' do
129
+ it 'has a fluent #execute method' do
130
+ execution_result = subject.script(script).execute
131
+ expect(execution_result.stdout).to include('hi')
132
+ end
133
+
134
+ it 'returns a Script' do
135
+ expect(subject.script('hi')).to be_an_instance_of Psychic::Script
136
+ end
137
+
138
+ it 'assigns source' do
139
+ script = subject.script('hi')
140
+ expect(script.source_file).to eq(Pathname('samples/hi.rb'))
141
+ expect(script.source).to eq('puts "hi"')
142
+ end
143
+ end
144
+
145
+ context 'by path' do
146
+ let(:script) { 'samples/hi.rb' }
147
+ include_examples 'executes'
148
+ end
149
+
150
+ context 'by alias' do
151
+ let(:script) { 'hi' }
152
+ include_examples 'executes'
153
+ end
154
+
155
+ context 'by hint' do
156
+ let(:hints) do
157
+ ''"
158
+ scripts:
159
+ custom: samples/hi.rb
160
+ "''
161
+ end
162
+ before(:each) { write_file 'psychic.yaml', hints }
163
+
164
+ let(:script) { 'custom' }
165
+ include_examples 'executes'
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,52 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'rspec'
5
+ require 'omnitest/psychic'
6
+ require 'aruba'
7
+ require 'aruba/api'
8
+ require 'fabrication'
9
+
10
+ # Includes shared examples
11
+ require 'omnitest/psychic/execution/default_strategy_spec'
12
+
13
+ # Config required for project
14
+ RSpec.configure do | config |
15
+ config.include Aruba::Api
16
+
17
+ config.before(:example) do
18
+ @aruba_timeout_seconds = 30
19
+ clean_current_dir
20
+ end
21
+ end
22
+
23
+ # Configs recommended by RSpec
24
+ RSpec.configure do |config|
25
+ # config.warnings = true # Unfortunately this produces too many warnings in third-party code
26
+ config.disable_monkey_patching!
27
+ config.filter_run :focus
28
+ config.run_all_when_everything_filtered = true
29
+
30
+ config.expect_with :rspec do |expectations|
31
+ # This option will default to `true` in RSpec 4.
32
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
33
+ end
34
+
35
+ config.mock_with :rspec do |mocks|
36
+ # Prevents you from mocking or stubbing a method that does not exist on
37
+ # a real object. This is generally recommended, and will default to
38
+ # `true` in RSpec 4.
39
+ mocks.verify_partial_doubles = true
40
+ end
41
+
42
+ if config.files_to_run.one?
43
+ # Use the documentation formatter for detailed output,
44
+ # unless a formatter has already been configured
45
+ # (e.g. via a command-line flag).
46
+ config.default_formatter = 'doc'
47
+ end
48
+
49
+ config.profile_examples = 10
50
+ config.order = :random
51
+ Kernel.srand config.seed
52
+ end
metadata ADDED
@@ -0,0 +1,352 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omnitest-psychic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.9
5
+ platform: ruby
6
+ authors:
7
+ - Max Lincoln
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: omnitest-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mixlib-shellout
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: buff-shell_out
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mustache
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.99'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.99'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rouge
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake-notes
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.18'
160
+ - - "<="
161
+ - !ruby/object:Gem::Version
162
+ version: '0.27'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '0.18'
170
+ - - "<="
171
+ - !ruby/object:Gem::Version
172
+ version: '0.27'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop-rspec
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.2'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '1.2'
187
+ - !ruby/object:Gem::Dependency
188
+ name: aruba
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: fabrication
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: inch
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ description: Provides cross-project aliases for running tasks or similar code samples.
230
+ email:
231
+ - max@devopsy.com
232
+ executables:
233
+ - psychic
234
+ extensions: []
235
+ extra_rdoc_files: []
236
+ files:
237
+ - ".gitignore"
238
+ - ".rspec"
239
+ - ".rubocop.yml"
240
+ - ".rubocop_todo.yml"
241
+ - ".travis.yml"
242
+ - CONTRIBUTING.md
243
+ - Gemfile
244
+ - LICENSE.txt
245
+ - README.md
246
+ - Rakefile
247
+ - appveyor.yml
248
+ - bin/psychic
249
+ - docs/code_samples.md
250
+ - docs/index.md
251
+ - lib/omnitest/output_helper.rb
252
+ - lib/omnitest/psychic.rb
253
+ - lib/omnitest/psychic/cli.rb
254
+ - lib/omnitest/psychic/code2doc.rb
255
+ - lib/omnitest/psychic/code2doc/code_helper.rb
256
+ - lib/omnitest/psychic/code2doc/code_segmenter.rb
257
+ - lib/omnitest/psychic/code2doc/comment_styles.rb
258
+ - lib/omnitest/psychic/command_template.rb
259
+ - lib/omnitest/psychic/error.rb
260
+ - lib/omnitest/psychic/execution/default_strategy.rb
261
+ - lib/omnitest/psychic/execution/env_strategy.rb
262
+ - lib/omnitest/psychic/execution/flag_strategy.rb
263
+ - lib/omnitest/psychic/execution/token_strategy.rb
264
+ - lib/omnitest/psychic/factories/go_factories.rb
265
+ - lib/omnitest/psychic/factories/hot_read_task_factory.rb
266
+ - lib/omnitest/psychic/factories/java_factories.rb
267
+ - lib/omnitest/psychic/factories/powershell_factories.rb
268
+ - lib/omnitest/psychic/factories/ruby_factories.rb
269
+ - lib/omnitest/psychic/factories/shell_factories.rb
270
+ - lib/omnitest/psychic/factories/travis_factories.rb
271
+ - lib/omnitest/psychic/factory_manager.rb
272
+ - lib/omnitest/psychic/file_finder.rb
273
+ - lib/omnitest/psychic/hints.rb
274
+ - lib/omnitest/psychic/magic_task_factory.rb
275
+ - lib/omnitest/psychic/script.rb
276
+ - lib/omnitest/psychic/script_factory.rb
277
+ - lib/omnitest/psychic/script_factory_manager.rb
278
+ - lib/omnitest/psychic/script_runner.rb
279
+ - lib/omnitest/psychic/task.rb
280
+ - lib/omnitest/psychic/task_factory_manager.rb
281
+ - lib/omnitest/psychic/task_runner.rb
282
+ - lib/omnitest/psychic/tokens.rb
283
+ - lib/omnitest/psychic/version.rb
284
+ - lib/omnitest/psychic/workflow.rb
285
+ - lib/omnitest/shell.rb
286
+ - lib/omnitest/shell/buff_shellout_executor.rb
287
+ - lib/omnitest/shell/execution_result.rb
288
+ - lib/omnitest/shell/mixlib_shellout_executor.rb
289
+ - mkdocs.yml
290
+ - omnitest-psychic.gemspec
291
+ - spec/fabricators/shell_fabricator.rb
292
+ - spec/omnitest/psychic/code2doc/code_helper_spec.rb
293
+ - spec/omnitest/psychic/execution/default_strategy_spec.rb
294
+ - spec/omnitest/psychic/execution/env_strategy_spec.rb
295
+ - spec/omnitest/psychic/execution/flag_strategy_spec.rb
296
+ - spec/omnitest/psychic/execution/token_strategy_spec.rb
297
+ - spec/omnitest/psychic/factories/java_factories_spec.rb
298
+ - spec/omnitest/psychic/factories/powershell_factories_spec.rb
299
+ - spec/omnitest/psychic/factories/ruby_factories_spec.rb
300
+ - spec/omnitest/psychic/factories/shell_factories_spec.rb
301
+ - spec/omnitest/psychic/factories/travis_factories_spec.rb
302
+ - spec/omnitest/psychic/hot_read_task_factory_spec.rb
303
+ - spec/omnitest/psychic/script_factory_manager_spec.rb
304
+ - spec/omnitest/psychic/script_spec.rb
305
+ - spec/omnitest/psychic/shell_spec.rb
306
+ - spec/omnitest/psychic/workflow_spec.rb
307
+ - spec/omnitest/psychic_spec.rb
308
+ - spec/spec_helper.rb
309
+ homepage:
310
+ licenses:
311
+ - MIT
312
+ metadata: {}
313
+ post_install_message:
314
+ rdoc_options: []
315
+ require_paths:
316
+ - lib
317
+ required_ruby_version: !ruby/object:Gem::Requirement
318
+ requirements:
319
+ - - ">="
320
+ - !ruby/object:Gem::Version
321
+ version: '0'
322
+ required_rubygems_version: !ruby/object:Gem::Requirement
323
+ requirements:
324
+ - - ">="
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ requirements: []
328
+ rubyforge_project:
329
+ rubygems_version: 2.4.2
330
+ signing_key:
331
+ specification_version: 4
332
+ summary: Psychic runs anything.
333
+ test_files:
334
+ - spec/fabricators/shell_fabricator.rb
335
+ - spec/omnitest/psychic/code2doc/code_helper_spec.rb
336
+ - spec/omnitest/psychic/execution/default_strategy_spec.rb
337
+ - spec/omnitest/psychic/execution/env_strategy_spec.rb
338
+ - spec/omnitest/psychic/execution/flag_strategy_spec.rb
339
+ - spec/omnitest/psychic/execution/token_strategy_spec.rb
340
+ - spec/omnitest/psychic/factories/java_factories_spec.rb
341
+ - spec/omnitest/psychic/factories/powershell_factories_spec.rb
342
+ - spec/omnitest/psychic/factories/ruby_factories_spec.rb
343
+ - spec/omnitest/psychic/factories/shell_factories_spec.rb
344
+ - spec/omnitest/psychic/factories/travis_factories_spec.rb
345
+ - spec/omnitest/psychic/hot_read_task_factory_spec.rb
346
+ - spec/omnitest/psychic/script_factory_manager_spec.rb
347
+ - spec/omnitest/psychic/script_spec.rb
348
+ - spec/omnitest/psychic/shell_spec.rb
349
+ - spec/omnitest/psychic/workflow_spec.rb
350
+ - spec/omnitest/psychic_spec.rb
351
+ - spec/spec_helper.rb
352
+ has_rdoc: