vop 0.3.5 → 0.3.6

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.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +39 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile.lock +34 -47
  5. data/README.md +118 -16
  6. data/bin/sidekiq.sh +10 -0
  7. data/exe/vop +2 -2
  8. data/lib/core/cache/cache.plugin +0 -0
  9. data/lib/core/cache/commands/invalidate_cache.rb +9 -0
  10. data/lib/core/{structure → meta}/commands/list_commands.rb +2 -1
  11. data/lib/core/meta/commands/list_filters.rb +3 -0
  12. data/lib/core/meta/commands/list_plugins.rb +3 -0
  13. data/lib/core/meta/commands/new_plugin.rb +3 -7
  14. data/lib/core/shell/commands/detail.rb +21 -0
  15. data/lib/core/shell/commands/edit.rb +5 -2
  16. data/lib/core/shell/commands/help.rb +1 -1
  17. data/lib/core/shell/commands/source.rb +10 -4
  18. data/lib/core/structure/commands/collect_contributions.rb +8 -2
  19. data/lib/core/structure/commands/generate_entity_commands.rb +19 -10
  20. data/lib/core/structure/commands/generate_invalidation_commands.rb +19 -9
  21. data/lib/core/structure/commands/list_contribution_targets.rb +9 -0
  22. data/lib/core/structure/commands/list_contributors.rb +1 -1
  23. data/lib/core/structure/structure.plugin +1 -1
  24. data/lib/vop/objects/chain.rb +6 -3
  25. data/lib/vop/objects/command.rb +14 -5
  26. data/lib/vop/objects/command_param.rb +22 -0
  27. data/lib/vop/objects/entities.rb +8 -8
  28. data/lib/vop/objects/entity.rb +57 -16
  29. data/lib/vop/objects/entity_definition.rb +22 -0
  30. data/lib/vop/objects/plugin.rb +46 -4
  31. data/lib/vop/objects/request.rb +9 -5
  32. data/lib/vop/parts/dependency_resolver.rb +0 -4
  33. data/lib/vop/parts/entity_loader.rb +0 -3
  34. data/lib/vop/parts/executor.rb +33 -8
  35. data/lib/vop/parts/plugin_finder.rb +6 -16
  36. data/lib/vop/search_path.rb +12 -0
  37. data/lib/vop/shell/shell.rb +134 -87
  38. data/lib/vop/shell/shell_formatter.rb +32 -17
  39. data/lib/vop/shell/shell_input_readline.rb +3 -0
  40. data/lib/vop/shell/shell_input_testable.rb +9 -3
  41. data/lib/vop/syntax/command_syntax.rb +22 -17
  42. data/lib/vop/syntax/entity_syntax.rb +21 -6
  43. data/lib/vop/syntax/plugin_syntax.rb +6 -0
  44. data/lib/vop/util/pluralizer.rb +9 -1
  45. data/lib/vop/version.rb +1 -1
  46. data/lib/vop/vop.rb +70 -44
  47. data/lib/vop.rb +11 -1
  48. data/vop.gemspec +8 -6
  49. metadata +103 -28
  50. data/lib/core/meta/commands/search_gems_for_plugins.rb +0 -38
  51. data/lib/core/meta/commands/search_path.rb +0 -6
  52. data/lib/core/structure/commands/list_plugins.rb +0 -3
  53. data/lib/vop/util/worker.rb +0 -24
data/lib/vop/vop.rb CHANGED
@@ -10,7 +10,6 @@ require_relative "objects/entity"
10
10
  require_relative "objects/entities"
11
11
  require_relative "util/errors"
12
12
  require_relative "util/pluralizer"
13
- require_relative "util/worker"
14
13
 
15
14
  module Vop
16
15
 
@@ -26,11 +25,16 @@ module Vop
26
25
  attr_reader :filter_chain
27
26
 
28
27
  attr_reader :finder, :loader, :sorter
28
+ attr_reader :search_path
29
+ attr_reader :load_status
30
+
31
+ @search_path = []
29
32
 
30
33
  def initialize(options = {})
31
34
  @options = {
32
35
  config_path: "/etc/vop",
33
- log_level: Logger::INFO
36
+ log_level: Logger::INFO,
37
+ no_init: false,
34
38
  }.merge(options)
35
39
  $logger.level = @options[:log_level]
36
40
 
@@ -42,6 +46,7 @@ module Vop
42
46
  end
43
47
 
44
48
  def clear
49
+ @load_status = {}
45
50
  @plugins = []
46
51
  @commands = {}
47
52
  @entities = {}
@@ -53,6 +58,7 @@ module Vop
53
58
  def _reset
54
59
  clear
55
60
  load
61
+ init unless @options[:no_init]
56
62
  end
57
63
 
58
64
  def to_s
@@ -79,30 +85,6 @@ module Vop
79
85
  File.join(lib_path, "core")
80
86
  end
81
87
 
82
- def plugin_locations
83
- result = []
84
-
85
- # during development, we might find checkouts for "plugins" and "services"
86
- # next to the core
87
- vop_dir = Pathname.new(File.join(lib_path, "..", "..")).realpath
88
- unless vop_dir.to_s.start_with? "/usr"
89
- %w|plugins services|.each do |thing|
90
- sibling_dir = File.join(vop_dir, thing)
91
- result << sibling_dir
92
- end
93
- end
94
-
95
- # for distribution packages (?)
96
- result << "/usr/lib/vop-plugins"
97
-
98
- # an extra path might have been passed in the options
99
- if @options.has_key? :plugin_path
100
- result << @options[:plugin_path]
101
- end
102
-
103
- result
104
- end
105
-
106
88
  def config_path
107
89
  @options[:config_path]
108
90
  end
@@ -111,17 +93,56 @@ module Vop
111
93
  @plugin_config_path ||= File.join(config_path, "plugins.d")
112
94
  end
113
95
 
96
+ def search_path_config_dir
97
+ @search_path_config_dir ||= File.join(config_path, "search_path.d")
98
+ end
99
+
114
100
  def executor
115
101
  @executor ||= Executor.new(self)
116
102
  end
117
103
 
104
+ def search_path
105
+ unless @assembled_search_path
106
+ @assembled_search_path = self.class.search_path
107
+ unless ENV["VOP_IGNORE_PLUGINS"]
108
+ @assembled_search_path += Dir.glob("#{search_path_config_dir}/*").map { |x| File.readlink(x) }
109
+ end
110
+ end
111
+ @assembled_search_path
112
+ end
113
+
114
+ def unloaded
115
+ search_path.reject { |path| @load_status.key? path }
116
+ end
117
+
118
+ def load
119
+ load_from(core_location, { core: true })
120
+ load_from(@options[:plugin_path]) if @options.has_key?(:plugin_path)
121
+
122
+ while unloaded.any? do
123
+ unloaded.each do |path|
124
+ $logger.debug "loading from #{path}..."
125
+ load_from path
126
+ @load_status[path] = true
127
+ rescue => e
128
+ @load_status[path] = false
129
+ $logger.error "could not load plugins from #{path} : #{e.message}"
130
+ raise
131
+ end
132
+ end
133
+
134
+ # TODO: do we need this?
135
+ # call_global_hook :loading_finished
136
+ $logger.debug "loaded : #{@plugins.size} plugins, #{@commands.size} commands"
137
+ end
138
+
118
139
  def load_from(locations, load_options = {})
119
140
  found = finder.find(locations)
120
141
  plugins = loader.load(found, load_options)
121
142
  new_plugins = sorter.sort(plugins.loaded)
122
143
 
123
144
  new_plugins.each do |plugin|
124
- plugin.init
145
+ plugin.load
125
146
  self << plugin
126
147
  end
127
148
 
@@ -129,14 +150,9 @@ module Vop
129
150
  $logger.debug plugins.loaded.map(&:name)
130
151
  end
131
152
 
132
- def load
133
- load_from(core_location, { core: true })
134
- load_from(plugin_locations)
135
- load_from(search_path)
136
-
137
- call_global_hook :loading_finished
138
-
139
- $logger.info "init complete : #{@plugins.size} plugins, #{@commands.size} commands"
153
+ def init
154
+ @plugins.select(&:auto_load?).each(&:init)
155
+ call_global_hook :init_complete
140
156
  end
141
157
 
142
158
  def <<(stuff)
@@ -149,13 +165,14 @@ module Vop
149
165
  @plugins << stuff
150
166
  elsif stuff.is_a? EntityDefinition
151
167
  entity = stuff
168
+ # TODO : auto-merge entities with the same name from multiple plugins?
152
169
  @entities[entity.short_name] = stuff
153
170
  elsif stuff.is_a? Command
154
171
  command = stuff
155
172
  unless command.dont_register
156
173
  $logger.debug "registering #{command.name}"
157
174
  if @commands.keys.include? command.short_name
158
- $logger.warn "overriding previous declaration of #{command.short_name}"
175
+ $logger.debug "overriding previous declaration of #{command.short_name}"
159
176
  end
160
177
  @commands[command.short_name] = stuff
161
178
 
@@ -186,6 +203,19 @@ module Vop
186
203
  @hooks[hook_sym].each do |h|
187
204
  h.call(payload)
188
205
  end
206
+
207
+ @plugins.each do |plugin|
208
+ if plugin.has_hook? hook_sym
209
+ plugin.call_hook(hook_sym, payload)
210
+ end
211
+ end
212
+ end
213
+
214
+ def prepare_request(command_name, param_values = {}, extra = {}, origin_suffix = nil)
215
+ request = Request.new(self, command_name, param_values, extra)
216
+ request.origin = "#{@options[:origin]}"
217
+ request.origin += ":#{origin_suffix}" unless origin_suffix.nil?
218
+ request
189
219
  end
190
220
 
191
221
  def execute_request(request)
@@ -193,28 +223,24 @@ module Vop
193
223
  begin
194
224
  response = request.execute()
195
225
  rescue => e
196
- response = ::Vop::Response.new(nil, {})
226
+ response = Response.new(nil, {})
197
227
  response.status = "error"
198
228
  raise e
199
229
  ensure
200
230
  call_global_hook(:after_execute, { request: request, response: response })
201
231
  end
202
232
 
203
- #$logger.debug "executed : #{request.command.name}, response : #{response.pretty_inspect}"
204
233
  response
205
234
  end
206
235
 
207
236
  def execute(command_name, param_values = {}, extra = {})
208
- request = Request.new(self, command_name, param_values, extra)
237
+ request = prepare_request(command_name, param_values, extra)
209
238
  response = execute_request(request)
210
-
211
239
  response.result
212
240
  end
213
241
 
214
- def execute_async(request)
215
- AsyncExecutorWorker.perform_async(request.to_json)
242
+ def self.search_path
243
+ @search_path
216
244
  end
217
-
218
245
  end
219
-
220
246
  end
data/lib/vop.rb CHANGED
@@ -4,6 +4,13 @@ require_relative "vop/version"
4
4
  require_relative "vop/shell/shell"
5
5
  require_relative "vop/vop"
6
6
 
7
+ begin
8
+ require "vop-plugins"
9
+ rescue Exception => e
10
+ $stderr.puts "could not load plugins from gem : #{e.message}"
11
+ #raise
12
+ end
13
+
7
14
  module Vop
8
15
 
9
16
  def self.setup(options = {})
@@ -14,11 +21,14 @@ module Vop
14
21
  if ENV["VOP_DEV_MODE"]
15
22
  sibling_lib_dir = Pathname.new(File.join(File.dirname(__FILE__), "..", "lib")).realpath
16
23
  if File.exists? sibling_lib_dir
17
- #puts "adding local lib path #{sibling_lib_dir}"
18
24
  $: << sibling_lib_dir
19
25
  end
20
26
  end
21
27
 
28
+ if ENV["VOP_ORIGIN"]
29
+ options[:origin] = "#{ENV["VOP_ORIGIN"]}:#{Process.pid}@#{`hostname`.strip}"
30
+ end
31
+
22
32
  ::Vop.setup(options)
23
33
  end
24
34
 
data/vop.gemspec CHANGED
@@ -2,6 +2,7 @@
2
2
  lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require "vop/version"
5
+ require "vop/search_path"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = "vop"
@@ -20,15 +21,16 @@ Gem::Specification.new do |spec|
20
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
22
  spec.require_paths = ["lib"]
22
23
 
23
- spec.add_dependency "net-ssh"
24
- spec.add_dependency "net-scp"
25
- spec.add_dependency "redis"
26
- spec.add_dependency "sidekiq"
24
+ Vop.gem_dependencies.each do |dep|
25
+ spec.add_dependency dep
26
+ end unless ENV["VOP_IGNORE_PLUGINS"]
27
+
28
+ spec.add_dependency "json", "~> 2.3"
27
29
  spec.add_dependency "terminal-table"
28
30
  spec.add_dependency "xml-simple"
31
+ spec.add_dependency "byebug"
29
32
 
30
- spec.add_development_dependency "bundler", "~> 1.15"
31
- spec.add_development_dependency "rake", "~> 10.0"
32
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_development_dependency "rake"
33
35
  spec.add_development_dependency "simplecov"
34
36
  end
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.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philipp T.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2024-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: net-ssh
14
+ name: redis
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-scp
28
+ name: passgen
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: redis
42
+ name: sidekiq
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: sidekiq
56
+ name: net-ssh
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: terminal-table
70
+ name: net-scp
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: xml-simple
84
+ name: ed25519
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,33 +95,89 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: bundler
98
+ name: bcrypt_pbkdf
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '1.15'
104
- type: :development
103
+ version: '0'
104
+ type: :runtime
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.15'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rake
112
+ name: vault
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
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: json
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '10.0'
118
- type: :development
131
+ version: '2.3'
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: '10.0'
138
+ version: '2.3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: terminal-table
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: xml-simple
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: byebug
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
125
181
  - !ruby/object:Gem::Dependency
126
182
  name: rspec
127
183
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +192,20 @@ dependencies:
136
192
  - - "~>"
137
193
  - !ruby/object:Gem::Version
138
194
  version: '3.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rake
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
139
209
  - !ruby/object:Gem::Dependency
140
210
  name: simplecov
141
211
  requirement: !ruby/object:Gem::Requirement
@@ -159,20 +229,26 @@ executables:
159
229
  extensions: []
160
230
  extra_rdoc_files: []
161
231
  files:
232
+ - ".github/workflows/ci.yml"
162
233
  - ".gitignore"
234
+ - ".ruby-version"
163
235
  - Gemfile
164
236
  - Gemfile.lock
165
237
  - README.md
166
238
  - Rakefile
167
239
  - bin/console
168
240
  - bin/setup
241
+ - bin/sidekiq.sh
169
242
  - bin/vop.sh
170
243
  - exe/vop
171
244
  - lib/boot.rb
245
+ - lib/core/cache/cache.plugin
246
+ - lib/core/cache/commands/invalidate_cache.rb
247
+ - lib/core/meta/commands/list_commands.rb
248
+ - lib/core/meta/commands/list_filters.rb
249
+ - lib/core/meta/commands/list_plugins.rb
172
250
  - lib/core/meta/commands/new_command.rb
173
251
  - 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
252
  - lib/core/meta/commands/set.rb
177
253
  - lib/core/meta/commands/show.rb
178
254
  - lib/core/meta/commands/show_config.rb
@@ -180,6 +256,7 @@ files:
180
256
  - lib/core/meta/meta.plugin
181
257
  - lib/core/shell/commands/change_loglevel.rb
182
258
  - lib/core/shell/commands/clear_context.rb
259
+ - lib/core/shell/commands/detail.rb
183
260
  - lib/core/shell/commands/edit.rb
184
261
  - lib/core/shell/commands/help.rb
185
262
  - lib/core/shell/commands/reset.rb
@@ -190,10 +267,9 @@ files:
190
267
  - lib/core/structure/commands/disable_contributor.rb
191
268
  - lib/core/structure/commands/generate_entity_commands.rb
192
269
  - lib/core/structure/commands/generate_invalidation_commands.rb
193
- - lib/core/structure/commands/list_commands.rb
270
+ - lib/core/structure/commands/list_contribution_targets.rb
194
271
  - lib/core/structure/commands/list_contributors.rb
195
272
  - lib/core/structure/commands/list_entities.rb
196
- - lib/core/structure/commands/list_plugins.rb
197
273
  - lib/core/structure/commands/register_contributor.rb
198
274
  - lib/core/structure/structure.plugin
199
275
  - lib/vop.rb
@@ -215,6 +291,7 @@ files:
215
291
  - lib/vop/parts/filter_loader.rb
216
292
  - lib/vop/parts/plugin_finder.rb
217
293
  - lib/vop/parts/plugin_loader.rb
294
+ - lib/vop/search_path.rb
218
295
  - lib/vop/shell/shell.rb
219
296
  - lib/vop/shell/shell_formatter.rb
220
297
  - lib/vop/shell/shell_input.rb
@@ -226,14 +303,13 @@ files:
226
303
  - lib/vop/syntax/plugin_syntax.rb
227
304
  - lib/vop/util/errors.rb
228
305
  - lib/vop/util/pluralizer.rb
229
- - lib/vop/util/worker.rb
230
306
  - lib/vop/version.rb
231
307
  - lib/vop/vop.rb
232
308
  - vop.gemspec
233
309
  homepage: http://virtualop.org
234
310
  licenses: []
235
311
  metadata: {}
236
- post_install_message:
312
+ post_install_message:
237
313
  rdoc_options: []
238
314
  require_paths:
239
315
  - lib
@@ -248,9 +324,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
324
  - !ruby/object:Gem::Version
249
325
  version: '0'
250
326
  requirements: []
251
- rubyforge_project:
252
- rubygems_version: 2.5.2.1
253
- signing_key:
327
+ rubygems_version: 3.3.7
328
+ signing_key:
254
329
  specification_version: 4
255
330
  summary: The vop is a scripting framework.
256
331
  test_files: []
@@ -1,38 +0,0 @@
1
- require "rubygems"
2
- require "find"
3
- require "digest"
4
-
5
- contribute to: "search_path" do |params|
6
- gem_list = `gem list`.split("\n")
7
- candidates = gem_list.select { |x| x =~ /vop-\w+/ }
8
-
9
- # TODO cache which gems have already been inspected
10
- # checksum = Digest::MD5.new
11
- # candidates.map do |candidate|
12
- # checksum << [ candidate.name, candidate.version ].join(":")
13
- # end
14
- # puts "gemspec md5 : #{checksum.hexdigest}"
15
-
16
- result = []
17
-
18
- candidates.each do |candidate|
19
- $logger.debug "inspecting #{candidate}"
20
-
21
- matched = /(.+?)\s+\([\d\.]+\)/.match(candidate)
22
- unless matched
23
- $logger.warn("unexpected line format : #{candidate}")
24
- next
25
- end
26
-
27
- name = matched.captures.first
28
- version = matched.captures.last
29
-
30
- contents = `gem contents #{name}`.split("\n")
31
-
32
- plugin_files = contents.grep /\.plugin$/
33
- result += plugin_files.map do |file_name|
34
- file_name.split("/")[0..-2].join("/")
35
- end
36
- end
37
- result
38
- end
@@ -1,6 +0,0 @@
1
- run do |params|
2
- @op.collect_contributions(
3
- "command_name" => "search_path",
4
- "raw_params" => params
5
- )
6
- end
@@ -1,3 +0,0 @@
1
- run do |plugin|
2
- @op.plugins.map { |x| x.name }.sort
3
- end
@@ -1,24 +0,0 @@
1
- require "sidekiq"
2
- require "json"
3
-
4
- module Vop
5
-
6
- class AsyncExecutorWorker
7
- include Sidekiq::Worker
8
-
9
- def perform(request_json)
10
- begin
11
- op = ::Vop.boot
12
- request = ::Vop::Request::from_json(op, request_json)
13
- puts "performing #{request.pretty_inspect}"
14
- response = op.execute_request(request)
15
- puts "response : #{response.status}"
16
- puts response.result
17
- rescue => e
18
- puts "[ERROR] #{e.message}\n#{e.backtrace.join("\n")}"
19
- end
20
- end
21
-
22
- end
23
-
24
- end