vop 0.3.1 → 0.3.4
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/.gitignore +2 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +34 -33
- data/README.md +184 -2
- data/bin/console +17 -0
- data/bin/setup +8 -0
- data/bin/vop.sh +6 -2
- data/exe/vop +3 -25
- data/lib/boot.rb +3 -0
- data/lib/core/meta/commands/new_command.rb +1 -0
- data/lib/core/meta/commands/new_plugin.rb +47 -0
- data/lib/core/meta/commands/search_gems_for_plugins.rb +38 -0
- data/lib/core/meta/commands/search_path.rb +6 -0
- data/lib/core/meta/commands/set.rb +12 -0
- data/lib/core/meta/commands/show.rb +6 -0
- data/lib/core/meta/commands/show_config.rb +9 -0
- data/lib/core/meta/commands/who_provides.rb +6 -0
- data/lib/core/meta/meta.plugin +1 -0
- data/lib/core/shell/commands/change_loglevel.rb +6 -0
- data/lib/{vop/plugins/core → core/shell}/commands/clear_context.rb +0 -0
- data/lib/core/shell/commands/edit.rb +12 -0
- data/lib/core/shell/commands/help.rb +49 -0
- data/lib/core/shell/commands/reset.rb +4 -0
- data/lib/{vop/plugins/core → core/shell}/commands/show_context.rb +0 -0
- data/lib/core/shell/commands/source.rb +21 -0
- data/lib/{vop/plugins/core/helpers/plugin_loader/plugin_syntax.rb → core/shell/shell.plugin} +0 -0
- data/lib/core/structure/commands/collect_contributions.rb +46 -0
- data/lib/core/structure/commands/disable_contributor.rb +16 -0
- data/lib/core/structure/commands/generate_entity_commands.rb +52 -0
- data/lib/core/structure/commands/generate_invalidation_commands.rb +26 -0
- data/lib/core/structure/commands/list_commands.rb +11 -0
- data/lib/core/structure/commands/list_contributors.rb +10 -0
- data/lib/core/structure/commands/list_entities.rb +3 -0
- data/lib/core/structure/commands/list_plugins.rb +3 -0
- data/lib/core/structure/commands/register_contributor.rb +14 -0
- data/lib/core/structure/structure.plugin +4 -0
- data/lib/vop/objects/chain.rb +25 -0
- data/lib/vop/objects/command.rb +86 -0
- data/lib/vop/objects/command_param.rb +39 -0
- data/lib/vop/objects/entities.rb +21 -0
- data/lib/vop/objects/entity.rb +75 -0
- data/lib/vop/objects/entity_definition.rb +33 -0
- data/lib/vop/objects/filter.rb +48 -0
- data/lib/vop/objects/plugin.rb +208 -0
- data/lib/vop/objects/request.rb +73 -0
- data/lib/vop/objects/response.rb +17 -0
- data/lib/vop/objects/thing_with_params.rb +17 -0
- data/lib/vop/{command_loader.rb → parts/command_loader.rb} +8 -12
- data/lib/vop/parts/dependency_resolver.rb +56 -0
- data/lib/vop/parts/entity_loader.rb +46 -0
- data/lib/vop/parts/executor.rb +155 -0
- data/lib/vop/parts/filter_loader.rb +41 -0
- data/lib/vop/parts/plugin_finder.rb +46 -0
- data/lib/vop/parts/plugin_loader.rb +72 -0
- data/lib/vop/shell/shell.rb +221 -0
- data/lib/vop/shell/shell_formatter.rb +110 -0
- data/lib/vop/shell/shell_input.rb +14 -0
- data/lib/vop/shell/shell_input_readline.rb +20 -0
- data/lib/vop/shell/shell_input_testable.rb +27 -0
- data/lib/vop/syntax/command_syntax.rb +90 -0
- data/lib/vop/syntax/entity_syntax.rb +35 -0
- data/lib/vop/syntax/filter_syntax.rb +11 -0
- data/lib/vop/syntax/plugin_syntax.rb +55 -0
- data/lib/vop/util/errors.rb +45 -0
- data/lib/vop/util/pluralizer.rb +26 -0
- data/lib/vop/util/worker.rb +24 -0
- data/lib/vop/version.rb +1 -1
- data/lib/vop/vop.rb +216 -0
- data/lib/vop.rb +16 -229
- data/vop.gemspec +18 -15
- metadata +95 -63
- data/bin/vop.rb +0 -28
- data/lib/vop/command.rb +0 -168
- data/lib/vop/entity.rb +0 -61
- data/lib/vop/loader.rb +0 -35
- data/lib/vop/plugin.rb +0 -141
- data/lib/vop/plugin_loader.rb +0 -88
- data/lib/vop/plugins/core/commands/collect_contributions.rb +0 -31
- data/lib/vop/plugins/core/commands/edit.rb +0 -12
- data/lib/vop/plugins/core/commands/help.rb +0 -38
- data/lib/vop/plugins/core/commands/identity.rb +0 -4
- data/lib/vop/plugins/core/commands/list_contributors.rb +0 -8
- data/lib/vop/plugins/core/commands/list_entities.rb +0 -3
- data/lib/vop/plugins/core/commands/pry.rb +0 -9
- data/lib/vop/plugins/core/commands/reset.rb +0 -5
- data/lib/vop/plugins/core/commands/source.rb +0 -5
- data/lib/vop/plugins/core/commands/system_call.rb +0 -5
- data/lib/vop/plugins/core/core.plugin +0 -4
- data/lib/vop/plugins/core/helpers/command_loader/command_syntax.rb +0 -45
- data/lib/vop/plugins/core/helpers/command_loader/contributions.rb +0 -28
- data/lib/vop/plugins/core/helpers/command_loader/entities.rb +0 -57
- data/lib/vop/plugins/core/helpers/helper.rb +0 -3
- data/lib/vop/plugins/meta/commands/add_search_path.rb +0 -6
- data/lib/vop/plugins/meta/commands/delete_plugin.rb +0 -13
- data/lib/vop/plugins/meta/commands/list_commands.rb +0 -17
- data/lib/vop/plugins/meta/commands/list_plugins.rb +0 -8
- data/lib/vop/plugins/meta/commands/new_command.rb +0 -14
- data/lib/vop/plugins/meta/commands/new_plugin.rb +0 -25
- data/lib/vop/plugins/meta/commands/show_search_path.rb +0 -3
- data/lib/vop/plugins/meta/commands/who_provides.rb +0 -5
- data/lib/vop/plugins/meta/meta.plugin +0 -1
- data/lib/vop/plugins/ssh/commands/scp.rb +0 -11
- data/lib/vop/plugins/ssh/commands/ssh.rb +0 -19
- data/lib/vop/plugins/ssh/ssh.plugin +0 -1
- data/lib/vop/shell/backend.rb +0 -28
- data/lib/vop/shell/base_shell.rb +0 -112
- data/lib/vop/shell/formatter.rb +0 -46
- data/lib/vop/shell/vop_shell_backend.rb +0 -257
- data/lib/vop/shell.rb +0 -52
metadata
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vop
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philipp T.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-03-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: net-ssh
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
@@ -25,7 +25,7 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: net-
|
|
28
|
+
name: net-scp
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: redis
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
@@ -53,7 +53,7 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: sidekiq
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - ">="
|
|
@@ -67,7 +67,7 @@ dependencies:
|
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: terminal-table
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - ">="
|
|
@@ -81,7 +81,7 @@ dependencies:
|
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: xml-simple
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - ">="
|
|
@@ -100,30 +100,44 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '1.
|
|
103
|
+
version: '1.15'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '1.
|
|
110
|
+
version: '1.15'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rake
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - "
|
|
115
|
+
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0'
|
|
117
|
+
version: '10.0'
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - "
|
|
122
|
+
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0'
|
|
124
|
+
version: '10.0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: rspec
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '3.0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '3.0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: simplecov
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
143
|
- - ">="
|
|
@@ -136,11 +150,10 @@ dependencies:
|
|
|
136
150
|
- - ">="
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
152
|
version: '0'
|
|
139
|
-
description:
|
|
140
|
-
|
|
141
|
-
xkcd #1629)'
|
|
153
|
+
description: Automation framework with a plugin/command architecture, entities, contributions,
|
|
154
|
+
filters and asynchronous workers. Shell included, web interface in a separate project.
|
|
142
155
|
email:
|
|
143
|
-
- philipp@
|
|
156
|
+
- philipp@hitchhackers.net
|
|
144
157
|
executables:
|
|
145
158
|
- vop
|
|
146
159
|
extensions: []
|
|
@@ -151,54 +164,73 @@ files:
|
|
|
151
164
|
- Gemfile.lock
|
|
152
165
|
- README.md
|
|
153
166
|
- Rakefile
|
|
154
|
-
- bin/
|
|
167
|
+
- bin/console
|
|
168
|
+
- bin/setup
|
|
155
169
|
- bin/vop.sh
|
|
156
170
|
- exe/vop
|
|
171
|
+
- lib/boot.rb
|
|
172
|
+
- lib/core/meta/commands/new_command.rb
|
|
173
|
+
- lib/core/meta/commands/new_plugin.rb
|
|
174
|
+
- lib/core/meta/commands/search_gems_for_plugins.rb
|
|
175
|
+
- lib/core/meta/commands/search_path.rb
|
|
176
|
+
- lib/core/meta/commands/set.rb
|
|
177
|
+
- lib/core/meta/commands/show.rb
|
|
178
|
+
- lib/core/meta/commands/show_config.rb
|
|
179
|
+
- lib/core/meta/commands/who_provides.rb
|
|
180
|
+
- lib/core/meta/meta.plugin
|
|
181
|
+
- lib/core/shell/commands/change_loglevel.rb
|
|
182
|
+
- lib/core/shell/commands/clear_context.rb
|
|
183
|
+
- lib/core/shell/commands/edit.rb
|
|
184
|
+
- lib/core/shell/commands/help.rb
|
|
185
|
+
- lib/core/shell/commands/reset.rb
|
|
186
|
+
- lib/core/shell/commands/show_context.rb
|
|
187
|
+
- lib/core/shell/commands/source.rb
|
|
188
|
+
- lib/core/shell/shell.plugin
|
|
189
|
+
- lib/core/structure/commands/collect_contributions.rb
|
|
190
|
+
- lib/core/structure/commands/disable_contributor.rb
|
|
191
|
+
- lib/core/structure/commands/generate_entity_commands.rb
|
|
192
|
+
- lib/core/structure/commands/generate_invalidation_commands.rb
|
|
193
|
+
- lib/core/structure/commands/list_commands.rb
|
|
194
|
+
- lib/core/structure/commands/list_contributors.rb
|
|
195
|
+
- lib/core/structure/commands/list_entities.rb
|
|
196
|
+
- lib/core/structure/commands/list_plugins.rb
|
|
197
|
+
- lib/core/structure/commands/register_contributor.rb
|
|
198
|
+
- lib/core/structure/structure.plugin
|
|
157
199
|
- lib/vop.rb
|
|
158
|
-
- lib/vop/
|
|
159
|
-
- lib/vop/
|
|
160
|
-
- lib/vop/
|
|
161
|
-
- lib/vop/
|
|
162
|
-
- lib/vop/
|
|
163
|
-
- lib/vop/
|
|
164
|
-
- lib/vop/
|
|
165
|
-
- lib/vop/
|
|
166
|
-
- lib/vop/
|
|
167
|
-
- lib/vop/
|
|
168
|
-
- lib/vop/
|
|
169
|
-
- lib/vop/
|
|
170
|
-
- lib/vop/
|
|
171
|
-
- lib/vop/
|
|
172
|
-
- lib/vop/
|
|
173
|
-
- lib/vop/
|
|
174
|
-
- lib/vop/
|
|
175
|
-
- lib/vop/
|
|
176
|
-
- lib/vop/
|
|
177
|
-
- lib/vop/
|
|
178
|
-
- lib/vop/
|
|
179
|
-
- lib/vop/
|
|
180
|
-
- lib/vop/
|
|
181
|
-
- lib/vop/
|
|
182
|
-
- lib/vop/
|
|
183
|
-
- lib/vop/
|
|
184
|
-
- lib/vop/
|
|
185
|
-
- lib/vop/
|
|
186
|
-
- lib/vop/
|
|
187
|
-
- lib/vop/
|
|
188
|
-
- lib/vop/plugins/meta/commands/show_search_path.rb
|
|
189
|
-
- lib/vop/plugins/meta/commands/who_provides.rb
|
|
190
|
-
- lib/vop/plugins/meta/meta.plugin
|
|
191
|
-
- lib/vop/plugins/ssh/commands/scp.rb
|
|
192
|
-
- lib/vop/plugins/ssh/commands/ssh.rb
|
|
193
|
-
- lib/vop/plugins/ssh/ssh.plugin
|
|
194
|
-
- lib/vop/shell.rb
|
|
195
|
-
- lib/vop/shell/backend.rb
|
|
196
|
-
- lib/vop/shell/base_shell.rb
|
|
197
|
-
- lib/vop/shell/formatter.rb
|
|
198
|
-
- lib/vop/shell/vop_shell_backend.rb
|
|
200
|
+
- lib/vop/objects/chain.rb
|
|
201
|
+
- lib/vop/objects/command.rb
|
|
202
|
+
- lib/vop/objects/command_param.rb
|
|
203
|
+
- lib/vop/objects/entities.rb
|
|
204
|
+
- lib/vop/objects/entity.rb
|
|
205
|
+
- lib/vop/objects/entity_definition.rb
|
|
206
|
+
- lib/vop/objects/filter.rb
|
|
207
|
+
- lib/vop/objects/plugin.rb
|
|
208
|
+
- lib/vop/objects/request.rb
|
|
209
|
+
- lib/vop/objects/response.rb
|
|
210
|
+
- lib/vop/objects/thing_with_params.rb
|
|
211
|
+
- lib/vop/parts/command_loader.rb
|
|
212
|
+
- lib/vop/parts/dependency_resolver.rb
|
|
213
|
+
- lib/vop/parts/entity_loader.rb
|
|
214
|
+
- lib/vop/parts/executor.rb
|
|
215
|
+
- lib/vop/parts/filter_loader.rb
|
|
216
|
+
- lib/vop/parts/plugin_finder.rb
|
|
217
|
+
- lib/vop/parts/plugin_loader.rb
|
|
218
|
+
- lib/vop/shell/shell.rb
|
|
219
|
+
- lib/vop/shell/shell_formatter.rb
|
|
220
|
+
- lib/vop/shell/shell_input.rb
|
|
221
|
+
- lib/vop/shell/shell_input_readline.rb
|
|
222
|
+
- lib/vop/shell/shell_input_testable.rb
|
|
223
|
+
- lib/vop/syntax/command_syntax.rb
|
|
224
|
+
- lib/vop/syntax/entity_syntax.rb
|
|
225
|
+
- lib/vop/syntax/filter_syntax.rb
|
|
226
|
+
- lib/vop/syntax/plugin_syntax.rb
|
|
227
|
+
- lib/vop/util/errors.rb
|
|
228
|
+
- lib/vop/util/pluralizer.rb
|
|
229
|
+
- lib/vop/util/worker.rb
|
|
199
230
|
- lib/vop/version.rb
|
|
231
|
+
- lib/vop/vop.rb
|
|
200
232
|
- vop.gemspec
|
|
201
|
-
homepage: http://
|
|
233
|
+
homepage: http://virtualop.org
|
|
202
234
|
licenses: []
|
|
203
235
|
metadata: {}
|
|
204
236
|
post_install_message:
|
|
@@ -217,8 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
217
249
|
version: '0'
|
|
218
250
|
requirements: []
|
|
219
251
|
rubyforge_project:
|
|
220
|
-
rubygems_version: 2.5.1
|
|
252
|
+
rubygems_version: 2.5.2.1
|
|
221
253
|
signing_key:
|
|
222
254
|
specification_version: 4
|
|
223
|
-
summary: The
|
|
255
|
+
summary: The vop is a scripting framework.
|
|
224
256
|
test_files: []
|
data/bin/vop.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'pathname'
|
|
4
|
-
|
|
5
|
-
$: << File.join(Pathname.new(File.join(File.dirname(__FILE__), '..')).realpath, 'lib')
|
|
6
|
-
|
|
7
|
-
require 'vop/shell'
|
|
8
|
-
require 'docopt'
|
|
9
|
-
require 'pp'
|
|
10
|
-
|
|
11
|
-
begin
|
|
12
|
-
shell = Vop::Shell::setup()
|
|
13
|
-
if shell.options["--execute"]
|
|
14
|
-
last_response = shell.execute(shell.options["--execute"])
|
|
15
|
-
else
|
|
16
|
-
last_response = shell.run_cli
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# TODO exit_status = last_response && last_response.status == Vop.Status::OK ? 0 : 1
|
|
20
|
-
exit 0
|
|
21
|
-
rescue => detail
|
|
22
|
-
if detail.is_a? Docopt::Exit
|
|
23
|
-
puts detail.message
|
|
24
|
-
else
|
|
25
|
-
$stderr.puts "error : #{detail.message}\n#{detail.backtrace[0..9].join("\n")}"
|
|
26
|
-
exit 42
|
|
27
|
-
end
|
|
28
|
-
end
|
data/lib/vop/command.rb
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
module Vop
|
|
2
|
-
|
|
3
|
-
class Command
|
|
4
|
-
|
|
5
|
-
attr_reader :name
|
|
6
|
-
attr_reader :plugin
|
|
7
|
-
|
|
8
|
-
attr_accessor :block
|
|
9
|
-
attr_accessor :description
|
|
10
|
-
attr_accessor :show_options
|
|
11
|
-
|
|
12
|
-
attr_reader :params
|
|
13
|
-
|
|
14
|
-
def initialize(plugin, name)
|
|
15
|
-
@plugin = plugin
|
|
16
|
-
@name = name
|
|
17
|
-
@block = lambda { |params| $logger.warn "#{name} not yet implemented!" }
|
|
18
|
-
@params = []
|
|
19
|
-
@show_options = {}
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def inspect
|
|
23
|
-
"Vop::Command #{@name}"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def source
|
|
27
|
-
@plugin.command_source(name)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def short_name
|
|
31
|
-
name.split(".").last
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def param(name)
|
|
35
|
-
params.select { |param| param[:name] == name }.first || nil
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# the default param is the one used when a command is called with a single "scalar" param only, like
|
|
39
|
-
# @op.foo("zaphod")
|
|
40
|
-
# if a parameter is marked as default, it will be assigned the value "zaphod" in this case.
|
|
41
|
-
# if there's only a single param, it's the default param by default (ha!)
|
|
42
|
-
def default_param
|
|
43
|
-
if params.size == 1
|
|
44
|
-
params.first
|
|
45
|
-
else
|
|
46
|
-
params.select { |param| param[:default_param] == true }.first || nil
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def mandatory_params
|
|
51
|
-
params.select do |p|
|
|
52
|
-
p[:mandatory]
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def lookup(param_name, params)
|
|
57
|
-
p = param(param_name)
|
|
58
|
-
raise "no such param : #{param_name} in command #{name}" unless p
|
|
59
|
-
|
|
60
|
-
if p.has_key? :lookup
|
|
61
|
-
p[:lookup].call(params)
|
|
62
|
-
else
|
|
63
|
-
$logger.debug "no lookups for #{param_name}"
|
|
64
|
-
[]
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# accepts arguments as handed in by :define_method and prepares them
|
|
69
|
-
# into the +params+ structure expected by command blocks
|
|
70
|
-
def prepare_params(ruby_args, extra = {})
|
|
71
|
-
result = {}
|
|
72
|
-
if ruby_args
|
|
73
|
-
if ruby_args.is_a? Hash
|
|
74
|
-
result = ruby_args
|
|
75
|
-
ruby_args.each do |k,v|
|
|
76
|
-
p = param(k)
|
|
77
|
-
if p
|
|
78
|
-
# values are auto-boxed into an array if the param expects multiple values
|
|
79
|
-
if p[:multi] && ! v.is_a?(Array) then
|
|
80
|
-
$logger.debug("autoboxing for #{p[:name]}")
|
|
81
|
-
v = [ v ]
|
|
82
|
-
# array values are auto-unboxed if the param doesn't want multi
|
|
83
|
-
elsif ! p[:multi] && v.is_a?(Array) && v.length == 1
|
|
84
|
-
$logger.debug("autounboxing for #{p[:name]}")
|
|
85
|
-
v = v.first
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
result[k] = v
|
|
89
|
-
end
|
|
90
|
-
else
|
|
91
|
-
# if there's a default param, it can be passed as "scalar" param
|
|
92
|
-
# (as opposed to the usual hash) to execute, but will be converted
|
|
93
|
-
# into a "normal" named param
|
|
94
|
-
dp = default_param
|
|
95
|
-
if dp
|
|
96
|
-
result = {dp[:name] => ruby_args}
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
if extra.keys.size > 0
|
|
102
|
-
result.merge! extra
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# add in defaults (for all params that have not been specified)
|
|
106
|
-
params.each do |p|
|
|
107
|
-
unless result.has_key? p[:name]
|
|
108
|
-
if p[:default]
|
|
109
|
-
result[p[:name]] = p[:default]
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
result
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def execute(param_values, extra = {})
|
|
118
|
-
prepared = prepare_params(param_values, extra)
|
|
119
|
-
|
|
120
|
-
block_param_names = self.block.parameters.map { |x| x.last }
|
|
121
|
-
|
|
122
|
-
#puts "executing #{self.name} : prepared : #{prepared.inspect}"
|
|
123
|
-
|
|
124
|
-
payload = []
|
|
125
|
-
context = {} # TODO should this be initialized?
|
|
126
|
-
|
|
127
|
-
block_param_names.each do |name|
|
|
128
|
-
param = nil
|
|
129
|
-
|
|
130
|
-
case name.to_s
|
|
131
|
-
when 'params'
|
|
132
|
-
param = prepared
|
|
133
|
-
when 'plugin'
|
|
134
|
-
param = self.plugin
|
|
135
|
-
when 'context'
|
|
136
|
-
param = context
|
|
137
|
-
when 'shell'
|
|
138
|
-
raise "shell not supported" unless extra.has_key? 'shell'
|
|
139
|
-
param = extra['shell']
|
|
140
|
-
else
|
|
141
|
-
if prepared.has_key? name.to_s
|
|
142
|
-
param = prepared[name.to_s]
|
|
143
|
-
elsif prepared.has_key? name
|
|
144
|
-
param = prepared[name]
|
|
145
|
-
else
|
|
146
|
-
raise "unknown block param name : >>#{name}<<"
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# from the black magick department: block parameters with the
|
|
151
|
-
# same name as an entity get auto-inflated
|
|
152
|
-
if param
|
|
153
|
-
entity_names = @plugin.op.core.state[:entities].map { |entity| entity[:name] }
|
|
154
|
-
if entity_names.include? name.to_s
|
|
155
|
-
resolved = @plugin.op.send(name, param)
|
|
156
|
-
param = resolved
|
|
157
|
-
end
|
|
158
|
-
payload << param
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
result = self.block.call(*payload)
|
|
163
|
-
[result, context]
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
end
|
data/lib/vop/entity.rb
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
module Vop
|
|
2
|
-
|
|
3
|
-
# An entity is something that is identifiable through a key, e.g. a name.
|
|
4
|
-
# Also, it groups commands that accept the same parameter: When a command
|
|
5
|
-
# is called on an entity, the parameter with the same name is filled, so
|
|
6
|
-
# @op.machine("localhost").processes()
|
|
7
|
-
# is equivalent to
|
|
8
|
-
# @op.processes(machine: "localhost")
|
|
9
|
-
class Entity
|
|
10
|
-
|
|
11
|
-
def initialize(op, name, key, hash)
|
|
12
|
-
@op = op
|
|
13
|
-
@name = name
|
|
14
|
-
@key = key
|
|
15
|
-
@data = {}
|
|
16
|
-
hash.each do |k,v|
|
|
17
|
-
@data[k.to_s] = v
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
make_methods_for_hash_keys
|
|
21
|
-
make_methods_for_commands
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def inspect
|
|
25
|
-
"Vop::Entity #{@name} (#{@command_count} commands)"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def make_methods_for_hash_keys
|
|
29
|
-
@data.keys.each do |key|
|
|
30
|
-
#next if ['name', 'key'].include? key.to_s
|
|
31
|
-
next if ['key'].include? key.to_s
|
|
32
|
-
self.class.send(:define_method, key) do |*args|
|
|
33
|
-
ruby_args = args.length > 0 ? args[0] : {}
|
|
34
|
-
@data[key]
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def entity_commands
|
|
40
|
-
result = @op.commands.values.select do |command|
|
|
41
|
-
command.params.select do |param|
|
|
42
|
-
param[:name] == @name
|
|
43
|
-
end.count > 0
|
|
44
|
-
end
|
|
45
|
-
@command_count = result.count
|
|
46
|
-
result
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def make_methods_for_commands
|
|
50
|
-
entity_commands.each do |command|
|
|
51
|
-
value = @data[@key]
|
|
52
|
-
self.class.send(:define_method, command.short_name) do |*args|
|
|
53
|
-
ruby_args = args.length > 0 ? args[0] : {}
|
|
54
|
-
@op.execute(command.short_name, ruby_args, { @name => value })
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
data/lib/vop/loader.rb
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
class Loader
|
|
2
|
-
|
|
3
|
-
attr_reader :loaded
|
|
4
|
-
|
|
5
|
-
def initialize(op, plugin)
|
|
6
|
-
@op = op
|
|
7
|
-
@plugin = plugin
|
|
8
|
-
@loaded = []
|
|
9
|
-
|
|
10
|
-
# TODO plugin.load_helper_classes(self) unless plugin == nil
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def from_scratch(name)
|
|
14
|
-
fresh = { "name" => name }
|
|
15
|
-
@loaded << fresh
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.read(op, plugin, name, source, file_name = nil)
|
|
19
|
-
loader = new(op, plugin)
|
|
20
|
-
|
|
21
|
-
loader.from_scratch(name)
|
|
22
|
-
begin
|
|
23
|
-
if file_name
|
|
24
|
-
loader.instance_eval source, file_name
|
|
25
|
-
else
|
|
26
|
-
loader.instance_eval source
|
|
27
|
-
end
|
|
28
|
-
rescue => detail
|
|
29
|
-
raise "could not read '#{name}' : #{detail.message}\n#{detail.backtrace[0..9].join("\n")}"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
loader
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
data/lib/vop/plugin.rb
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
require 'vop/command_loader'
|
|
2
|
-
|
|
3
|
-
module Vop
|
|
4
|
-
|
|
5
|
-
class Plugin
|
|
6
|
-
|
|
7
|
-
attr_reader :op
|
|
8
|
-
attr_reader :name
|
|
9
|
-
attr_reader :path
|
|
10
|
-
|
|
11
|
-
attr_reader :commands
|
|
12
|
-
attr_reader :config
|
|
13
|
-
attr_reader :dependencies
|
|
14
|
-
|
|
15
|
-
attr_reader :state
|
|
16
|
-
|
|
17
|
-
def initialize(op, plugin_name, plugin_path)
|
|
18
|
-
@op = op
|
|
19
|
-
@name = plugin_name
|
|
20
|
-
@path = plugin_path
|
|
21
|
-
@config = {}
|
|
22
|
-
@dependencies = []
|
|
23
|
-
|
|
24
|
-
# all plugins depend on 'core' (unless they are core or some murky dummy)
|
|
25
|
-
independents = %w|core __root__|
|
|
26
|
-
@dependencies << 'core' unless independents.include? plugin_name
|
|
27
|
-
|
|
28
|
-
@state = {}
|
|
29
|
-
@hooks = {}
|
|
30
|
-
|
|
31
|
-
@sources = Hash.new { |h, k| h[k] = {} }
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def inspect
|
|
35
|
-
"Vop::Plugin #{@name}"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def hook(name, &block)
|
|
39
|
-
@hooks[name.to_sym] = block
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def call_hook(name, *args)
|
|
43
|
-
if @hooks.has_key? name
|
|
44
|
-
$logger.debug "plugin #{self.name} calling hook #{name}"
|
|
45
|
-
@hooks[name].call(self, *args)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def init
|
|
50
|
-
$logger.debug "plugin init #{@name}"
|
|
51
|
-
call_hook :preload
|
|
52
|
-
load_helpers
|
|
53
|
-
load_config
|
|
54
|
-
# TODO we might want to activate/register only plugins with enough config
|
|
55
|
-
call_hook :init
|
|
56
|
-
load_commands
|
|
57
|
-
call_hook :activate
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def plugin_dir(name)
|
|
61
|
-
@path + '/' + name.to_s
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def load_code_from_dir(type_name)
|
|
65
|
-
dir = plugin_dir type_name
|
|
66
|
-
if File.exists?(dir)
|
|
67
|
-
Dir.glob(File.join(dir, '*.rb')).each do |file_name|
|
|
68
|
-
name_from_file = /#{dir}\/(.+).rb$/.match(file_name).captures.first
|
|
69
|
-
full_name = @name + '.' + name_from_file
|
|
70
|
-
$logger.debug(" #{type_name} << #{full_name}")
|
|
71
|
-
|
|
72
|
-
code = File.read(file_name)
|
|
73
|
-
@sources[type_name][full_name] = {
|
|
74
|
-
:file_name => file_name,
|
|
75
|
-
:code => code
|
|
76
|
-
}
|
|
77
|
-
end
|
|
78
|
-
else
|
|
79
|
-
#$logger.debug "no #{type_name} dir found - checked for #{dir}"
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def load_helpers
|
|
84
|
-
load_code_from_dir 'helpers'
|
|
85
|
-
load_code_from_dir 'helpers/command_loader'
|
|
86
|
-
load_code_from_dir 'helpers/plugin_loader'
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def helper_sources(type_name = 'helpers')
|
|
90
|
-
@sources[type_name].map do |name, source|
|
|
91
|
-
source[:code]
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def command_source(command_name)
|
|
96
|
-
@sources[:commands][command_name]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def inject_helpers(target, sub_type_name = nil)
|
|
100
|
-
type_name = 'helpers'
|
|
101
|
-
if sub_type_name
|
|
102
|
-
type_name += '/' + sub_type_name
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
plugins_to_load_helpers_from = [ self ]
|
|
106
|
-
|
|
107
|
-
self.dependencies.each do |name|
|
|
108
|
-
other = @op.plugins[name]
|
|
109
|
-
raise "can not resolve plugin dependency #{name}" unless other
|
|
110
|
-
plugins_to_load_helpers_from << other
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
plugins_to_load_helpers_from.each do |other_plugin|
|
|
114
|
-
next if other_plugin.helper_sources(type_name).size == 0
|
|
115
|
-
#$logger.debug "loading helper from #{other_plugin.name} into #{target} : #{other_plugin.helper_sources.size}"
|
|
116
|
-
|
|
117
|
-
helper_module = Module.new()
|
|
118
|
-
other_plugin.helper_sources(type_name).each do |source|
|
|
119
|
-
helper_module.class_eval source
|
|
120
|
-
end
|
|
121
|
-
target.extend helper_module
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def load_commands
|
|
126
|
-
load_code_from_dir :commands
|
|
127
|
-
|
|
128
|
-
loader = CommandLoader.new(self)
|
|
129
|
-
@commands = loader.read_sources @sources[:commands]
|
|
130
|
-
@commands.each do |name, command|
|
|
131
|
-
# TODO might want to warn/debug about overrides here
|
|
132
|
-
@op.eat(command)
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def load_config
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|