nucleon 0.1.1 → 0.1.2

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.
@@ -11,7 +11,7 @@ GEM
11
11
  faraday (0.9.0)
12
12
  multipart-post (>= 1.2, < 3)
13
13
  git (1.2.6)
14
- github_api (0.11.2)
14
+ github_api (0.11.3)
15
15
  addressable (~> 2.3)
16
16
  descendants_tracker (~> 0.0.1)
17
17
  faraday (~> 0.8, < 0.10)
@@ -68,7 +68,7 @@ GEM
68
68
  rspec-core (2.14.7)
69
69
  rspec-expectations (2.14.5)
70
70
  diff-lcs (>= 1.1.3, < 2.0)
71
- rspec-mocks (2.14.5)
71
+ rspec-mocks (2.14.6)
72
72
  sawyer (0.5.3)
73
73
  addressable (~> 2.3.5)
74
74
  faraday (~> 0.8, < 0.10)
data/Rakefile CHANGED
@@ -66,7 +66,7 @@ task :default => :spec
66
66
  #-------------------------------------------------------------------------------
67
67
  # Documentation
68
68
 
69
- version = Nucleon::VERSION
69
+ version = Nucleon.VERSION
70
70
  doc_title = "nucleon #{version}"
71
71
 
72
72
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,55 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
-
3
- Signal.trap("INT") { exit 1 }
4
-
5
- #---
6
-
7
2
  require 'nucleon'
8
-
9
- logger = Nucleon.logger
10
- logger.info("`nucleon` invoked: #{ARGV.inspect}")
11
-
12
- #---
13
-
14
- $stdout.sync = true
15
- $stderr.sync = true
16
-
17
- #---
18
-
19
- begin
20
- logger.debug("Beginning execution run")
21
-
22
- arg_components = Nucleon::Util::CLI::Parser.split(ARGV, 'nucleon <action> [ <arg> ... ]')
23
- main_command = arg_components.shift
24
- sub_command = arg_components.shift
25
- sub_args = arg_components
26
-
27
- if main_command.processed && sub_command
28
- exit_status = Nucleon.action_cli(sub_command, sub_args)
29
- else
30
- puts I18n.t('nucleon.core.exec.help.usage') + ': ' + main_command.help + "\n"
31
- puts I18n.t('nucleon.core.exec.help.header') + ":\n\n"
32
-
33
- Nucleon.loaded_plugins(:action).each do |provider, action|
34
- puts sprintf(" %-10s : %s\n",
35
- "<#{provider}>",
36
- Nucleon.action(provider, { :settings => {}, :quiet => true }).help
37
- )
38
- end
39
-
40
- puts "\n" + I18n.t('nucleon.core.exec.help.footer') + "\n\n"
41
- exit_status = Nucleon.code.help_wanted
42
- end
43
-
44
- rescue Exception => error
45
- logger.error("Nucleon executable experienced an error:")
46
- logger.error(error.inspect)
47
- logger.error(error.message)
48
- logger.error(Nucleon::Util::Data.to_yaml(error.backtrace))
49
-
50
- Nucleon.ui.error(error.message, { :prefix => false }) if error.message
51
-
52
- exit_status = error.status_code if error.respond_to?(:status_code)
53
- end
54
-
55
- exit(exit_status)
3
+ exit(Nucleon.executable(ARGV, :nucleon))
@@ -16,8 +16,8 @@ class Core < Config
16
16
 
17
17
  class_label = self.class.to_s.downcase.gsub(/^nucleon::/, '')
18
18
 
19
- @logger = Util::Logger.new(delete(:logger, class_label))
20
- @ui = Util::Console.new(Config.new(export).defaults({ :resource => class_label }))
19
+ self.logger = delete(:logger, class_label)
20
+ self.ui = Config.new(export).defaults({ :resource => class_label })
21
21
 
22
22
  logger.debug('Initialized instance logger and interface')
23
23
  end
@@ -25,7 +25,7 @@ class Core < Config
25
25
  #-----------------------------------------------------------------------------
26
26
  # Accessor / Modifiers
27
27
 
28
- attr_accessor :logger, :ui
28
+ attr_reader :logger, :ui
29
29
 
30
30
  #---
31
31
 
@@ -33,12 +33,30 @@ class Core < Config
33
33
  return @@logger
34
34
  end
35
35
 
36
+ def logger=logger
37
+ Util::Logger.loggers.delete(self.logger.resource) if self.logger
38
+
39
+ if logger.is_a?(Util::Logger)
40
+ @logger = logger
41
+ else
42
+ @logger = Util::Logger.new(logger)
43
+ end
44
+ end
45
+
36
46
  #---
37
47
 
38
48
  def self.ui
39
49
  return @@ui
40
50
  end
41
51
 
52
+ def ui=ui
53
+ if ui.is_a?(Util::Console)
54
+ @ui = ui
55
+ else
56
+ @ui = Util::Console.new(ui)
57
+ end
58
+ end
59
+
42
60
  #-----------------------------------------------------------------------------
43
61
  # General utilities
44
62
 
@@ -1,35 +1,32 @@
1
1
 
2
2
  module Nucleon
3
+ module Facade
3
4
 
4
- VERSION = File.read(File.join(File.dirname(__FILE__), '..', '..', 'VERSION'))
5
-
6
- #-----------------------------------------------------------------------------
7
-
8
- def self.ui
5
+ def ui
9
6
  Core.ui
10
7
  end
11
8
 
12
- def self.quiet=quiet
9
+ def quiet=quiet
13
10
  Util::Console.quiet = quiet
14
11
  end
15
12
 
16
13
  #---
17
14
 
18
- def self.logger
15
+ def logger
19
16
  Core.logger
20
17
  end
21
18
 
22
- def self.log_level
19
+ def log_level
23
20
  Util::Logger.level
24
21
  end
25
22
 
26
- def self.log_level=log_level
23
+ def log_level=log_level
27
24
  Util::Logger.level = log_level
28
25
  end
29
26
 
30
27
  #-----------------------------------------------------------------------------
31
28
 
32
- def self.admin?
29
+ def admin?
33
30
  is_admin = ( ENV['USER'] == 'root' )
34
31
  ext_admin = exec(:check_admin) do |op, results|
35
32
  if op == :reduce
@@ -46,191 +43,219 @@ module Nucleon
46
43
 
47
44
  @@codes = Codes.new
48
45
 
49
- def self.code
46
+ def code
50
47
  @@codes
51
48
  end
52
49
 
53
- def self.codes(*codes)
50
+ def codes(*codes)
54
51
  Codes.codes(*codes)
55
52
  end
56
-
53
+
57
54
  #-----------------------------------------------------------------------------
58
55
  # Core plugin interface
59
56
 
60
- def self.reload
61
- Manager.connection.reload
57
+ def reload(core = false, &code)
58
+ Manager.connection.reload(core, &code)
62
59
  end
63
60
 
64
61
  #---
65
62
 
66
- def self.types
63
+ def namespaces
64
+ Manager.connection.namespaces
65
+ end
66
+
67
+ def define_namespace(*namespaces)
68
+ Manager.connection.namespace(*namespaces)
69
+ end
70
+
71
+ #---
72
+
73
+ def types
67
74
  Manager.connection.types
68
75
  end
69
76
 
70
- def self.define_type(type_info)
77
+ def define_type(type_info)
71
78
  Manager.connection.define_type(type_info)
72
79
  end
73
80
 
74
- def self.type_default(type)
81
+ def type_default(type)
75
82
  Manager.connection.type_default(type)
76
83
  end
77
84
 
78
85
  #---
79
86
 
80
- def self.register(base_path, &code)
87
+ def register(base_path, &code)
81
88
  Manager.connection.register(base_path, &code)
82
89
  Manager.connection.autoload
83
90
  end
84
91
 
85
- def self.loaded_plugins(type = nil, provider = nil)
92
+ def loaded_plugins(type = nil, provider = nil)
86
93
  Manager.connection.loaded_plugins(type, provider)
87
94
  end
88
95
 
89
96
  #---
90
97
 
91
- def self.active_plugins(type = nil, provider = nil)
98
+ def active_plugins(type = nil, provider = nil)
92
99
  Manager.connection.plugins(type, provider)
93
100
  end
94
101
 
95
102
  #---
96
103
 
97
- def self.plugin(type, provider, options = {})
104
+ def plugin(type, provider, options = {})
98
105
  Manager.connection.load(type, provider, options)
99
106
  end
100
107
 
101
108
  #---
102
109
 
103
- def self.plugins(type, data, build_hash = false, keep_array = false)
110
+ def plugins(type, data, build_hash = false, keep_array = false)
104
111
  Manager.connection.load_multiple(type, data, build_hash, keep_array)
105
112
  end
106
113
 
107
114
  #---
108
115
 
109
- def self.get_plugin(type, name)
116
+ def create_plugin(type, provider, options = {})
117
+ Manager.connection.create(type, provider, options)
118
+ end
119
+
120
+ #---
121
+
122
+ def get_plugin(type, name)
110
123
  Manager.connection.get(type, name)
111
124
  end
112
125
 
113
126
  #---
114
127
 
115
- def self.remove_plugin(plugin)
128
+ def remove_plugin(plugin)
116
129
  Manager.connection.remove(plugin)
117
130
  end
131
+
132
+ #---
133
+
134
+ def plugin_class(type)
135
+ Manager.connection.plugin_class(type)
136
+ end
137
+
138
+ #---
139
+
140
+ def provider_class(namespace, type, provider)
141
+ Manager.connection.provider_class(namespace, type, provider)
142
+ end
118
143
 
119
144
  #-----------------------------------------------------------------------------
120
145
  # Core plugin type facade
121
146
 
122
- def self.extension(provider)
147
+ def extension(provider)
123
148
  plugin(:extension, provider, {})
124
149
  end
125
150
 
126
151
  #---
127
152
 
128
- def self.action(provider, options)
153
+ def action(provider, options)
129
154
  plugin(:action, provider, options)
130
155
  end
131
156
 
132
- def self.actions(data, build_hash = false, keep_array = false)
157
+ def actions(data, build_hash = false, keep_array = false)
133
158
  plugins(:action, data, build_hash, keep_array)
134
159
  end
135
160
 
136
- def self.action_config(provider)
161
+ def action_config(provider)
137
162
  action(provider, { :settings => {}, :quiet => true }).configure
138
163
  end
139
164
 
140
- def self.action_run(provider, options = {}, quiet = true)
165
+ def action_run(provider, options = {}, quiet = true)
141
166
  Plugin::Action.exec(provider, options, quiet)
142
167
  end
143
168
 
144
- def self.action_cli(provider, args = [], quiet = false)
145
- Plugin::Action.exec_cli(provider, args, quiet)
169
+ def action_cli(provider, args = [], quiet = false, name = :nucleon)
170
+ Plugin::Action.exec_cli(provider, args, quiet, name)
146
171
  end
147
172
 
148
173
  #---
149
174
 
150
- def self.project(options, provider = nil)
175
+ def project(options, provider = nil)
151
176
  plugin(:project, provider, options)
152
177
  end
153
178
 
154
- def self.projects(data, build_hash = false, keep_array = false)
179
+ def projects(data, build_hash = false, keep_array = false)
155
180
  plugins(:project, data, build_hash, keep_array)
156
181
  end
157
182
 
158
183
  #-----------------------------------------------------------------------------
159
184
  # Utility plugin type facade
160
185
 
161
- def self.command(options, provider = nil)
186
+ def command(options, provider = nil)
162
187
  plugin(:command, provider, options)
163
188
  end
164
189
 
165
- def self.commands(data, build_hash = false, keep_array = false)
190
+ def commands(data, build_hash = false, keep_array = false)
166
191
  plugins(:command, data, build_hash, keep_array)
167
192
  end
168
193
 
169
194
  #---
170
195
 
171
- def self.event(options, provider = nil)
196
+ def event(options, provider = nil)
172
197
  plugin(:event, provider, options)
173
198
  end
174
199
 
175
- def self.events(data, build_hash = false, keep_array = false)
200
+ def events(data, build_hash = false, keep_array = false)
176
201
  plugins(:event, data, build_hash, keep_array)
177
202
  end
178
203
 
179
204
  #---
180
205
 
181
- def self.template(options, provider = nil)
206
+ def template(options, provider = nil)
182
207
  plugin(:template, provider, options)
183
208
  end
184
209
 
185
- def self.templates(data, build_hash = false, keep_array = false)
210
+ def templates(data, build_hash = false, keep_array = false)
186
211
  plugins(:template, data, build_hash, keep_array)
187
212
  end
188
213
 
189
214
  #---
190
215
 
191
- def self.translator(options, provider = nil)
216
+ def translator(options, provider = nil)
192
217
  plugin(:translator, provider, options)
193
218
  end
194
219
 
195
- def self.translators(data, build_hash = false, keep_array = false)
220
+ def translators(data, build_hash = false, keep_array = false)
196
221
  plugins(:translator, data, build_hash, keep_array)
197
222
  end
198
223
 
199
224
  #-----------------------------------------------------------------------------
200
225
  # Plugin extensions
201
226
 
202
- def self.exec(method, options = {}, &code)
227
+ def exec(method, options = {}, &code)
203
228
  Manager.connection.exec(method, options, &code)
204
229
  end
205
230
 
206
231
  #---
207
232
 
208
- def self.config(type, options = {})
209
- Manager.connection.config(method, options)
233
+ def config(type, options = {})
234
+ Manager.connection.config(type, options)
210
235
  end
211
236
 
212
237
  #---
213
238
 
214
- def self.check(method, options = {})
239
+ def check(method, options = {})
215
240
  Manager.connection.check(method, options)
216
241
  end
217
242
 
218
243
  #---
219
244
 
220
- def self.value(method, value, options = {})
245
+ def value(method, value, options = {})
221
246
  Manager.connection.value(method, value, options)
222
247
  end
223
248
 
224
249
  #---
225
250
 
226
- def self.collect(method, options = {})
251
+ def collect(method, options = {})
227
252
  Manager.connection.collect(method, options)
228
253
  end
229
254
 
230
255
  #-----------------------------------------------------------------------------
231
256
  # External execution
232
257
 
233
- def self.run
258
+ def run
234
259
  begin
235
260
  logger.debug("Running contained process at #{Time.now}")
236
261
  yield
@@ -248,7 +273,7 @@ module Nucleon
248
273
 
249
274
  #---
250
275
 
251
- def self.cli_run(command, options = {}, &code)
276
+ def cli_run(command, options = {}, &code)
252
277
  command = command.join(' ') if command.is_a?(Array)
253
278
  config = Config.ensure(options)
254
279
 
@@ -262,22 +287,90 @@ module Nucleon
262
287
  result
263
288
  end
264
289
 
290
+ #---
291
+
292
+ def executable(args, name = 'nucleon') #ARGV
293
+ Signal.trap("INT") { exit 1 }
294
+
295
+ logger.info("`#{name}` invoked: #{args.inspect}")
296
+
297
+ $stdout.sync = true
298
+ $stderr.sync = true
299
+
300
+ exit_status = nil
301
+
302
+ begin
303
+ logger.debug("Beginning execution run")
304
+
305
+ arg_components = Util::CLI::Parser.split(args, "#{name} <action> [ <arg> ... ]")
306
+ main_command = arg_components.shift
307
+ sub_command = arg_components.shift
308
+ sub_args = arg_components
309
+
310
+ if main_command.processed && sub_command
311
+ exit_status = action_cli(sub_command, sub_args, false, name)
312
+ else
313
+ puts I18n.t('nucleon.core.exec.help.usage') + ': ' + main_command.help + "\n"
314
+ puts I18n.t('nucleon.core.exec.help.header') + ":\n\n"
315
+
316
+ help_data = {}
317
+ extended_help = main_command.options[:extended_help]
318
+
319
+ loaded_plugins(:action).each do |provider, data|
320
+ namespace = data[:namespace]
321
+
322
+ help_data[namespace] = {} unless help_data.has_key?(namespace)
323
+ help_data[namespace][provider] = data
324
+ end
325
+
326
+ help_data.each do |namespace, actions|
327
+ actions.each do |provider, data|
328
+ if extended_help
329
+ help_text = action(provider, { :args => [ '-h' ], :quiet => true }).help
330
+ else
331
+ help_text = action(provider, { :settings => {}, :quiet => true }).help
332
+ end
333
+ puts sprintf(" %-15s : %s\n", namespace, help_text)
334
+ end
335
+ puts "\n"
336
+ end
337
+
338
+ puts "\n" + I18n.t('nucleon.core.exec.help.footer') + "\n\n"
339
+ exit_status = code.help_wanted
340
+ end
341
+
342
+ rescue Exception => error
343
+ logger.error("Nucleon executable experienced an error:")
344
+ logger.error(error.inspect)
345
+ logger.error(error.message)
346
+ logger.error(Util::Data.to_yaml(error.backtrace))
347
+
348
+ ui.error(error.message, { :prefix => false }) if error.message
349
+
350
+ exit_status = error.status_code if error.respond_to?(:status_code)
351
+ exit_status = code.unknown_status if exit_status.nil?
352
+ end
353
+ exit_status
354
+ end
355
+
265
356
  #-----------------------------------------------------------------------------
266
357
  # Utilities
267
358
 
268
- def self.class_name(name, separator = '::', want_array = false)
359
+ def class_name(name, separator = '::', want_array = false)
269
360
  Manager.connection.class_name(name, separator, want_array)
270
361
  end
271
362
 
272
363
  #---
273
364
 
274
- def self.class_const(name, separator = '::')
365
+ def class_const(name, separator = '::')
275
366
  Manager.connection.class_const(name, separator)
276
367
  end
277
368
 
278
369
  #---
279
370
 
280
- def self.sha1(data)
371
+ def sha1(data)
281
372
  Digest::SHA1.hexdigest(Util::Data.to_json(data, false))
282
373
  end
283
374
  end
375
+ end
376
+