nucleon 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fd07e548011fc3f3fbb033c7ff585caf7260f00
4
- data.tar.gz: a2cb9ff231bd2a0f8d80e54734ba6fafa399d286
3
+ metadata.gz: 4f37db6374efb2285de5bd242cce45eb5817e2d5
4
+ data.tar.gz: d5fd9959abf368f329756ea44c24d844a0dc5ea3
5
5
  SHA512:
6
- metadata.gz: 6ec818f5a9bc9e3b366136c4c6436d259c8f85032d942a2019aa35a581b89a602f0f42e2ad2ccf2546aed5fb1fa37b6fb626832e8fb59f0cef198981a4d5682b
7
- data.tar.gz: c58c888e3e05b6201a5bdd986e74290d6abdc689c0975036cb33792e4fb6b706e2906166060096bceba00f4143f4eee18f14cd98f64d6d0aef22ec33c58abfe4
6
+ metadata.gz: eb017436c867b27eb087ef11e1de3cde238f65777a49fb3eaa0120e0dac595ccee944c60a67ec1de90a98b33edf8ef7bad02d98d36fa95de283413846a9aa7e4
7
+ data.tar.gz: 23db6461c2f61e51d6497ff6329d6588c66e01c34edece43a1356cd4e138a724f0f85b471c5ac5ba51883bcbbfce8e34c5ef55cd30d4d9c336a2705244507f03
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.2.9
@@ -239,7 +239,7 @@ class Config
239
239
  @properties = {}
240
240
 
241
241
  if defaults.is_a?(Hash) && ! defaults.empty?
242
- defaults = symbol_map(defaults.clone)
242
+ defaults = symbol_map(Util::Data.clone(defaults))
243
243
  end
244
244
 
245
245
  case data
@@ -248,7 +248,7 @@ class Config
248
248
  when Hash
249
249
  @properties = {}
250
250
  if data.is_a?(Hash)
251
- @properties = Util::Data.merge([ defaults, symbol_map(data.clone) ], force, basic_merge)
251
+ @properties = Util::Data.merge([ defaults, symbol_map(Util::Data.clone(data)) ], force, basic_merge)
252
252
  end
253
253
  else
254
254
  @properties = defaults if defaults.is_a?(Hash)
@@ -339,7 +339,7 @@ class Config
339
339
  end
340
340
 
341
341
  keys = keys.flatten.compact
342
- key = keys.shift.to_sym
342
+ key = keys.shift
343
343
 
344
344
  if data.has_key?(key)
345
345
  value = data[key]
@@ -388,7 +388,7 @@ class Config
388
388
  end
389
389
 
390
390
  keys = keys.flatten.compact
391
- key = keys.shift.to_sym
391
+ key = keys.shift
392
392
  has_key = data.has_key?(key)
393
393
  existing = {
394
394
  :key => key,
@@ -435,7 +435,7 @@ class Config
435
435
  # - #array
436
436
  #
437
437
  def get(keys, default = nil, format = false)
438
- return fetch(@properties, array(keys).flatten, default, format)
438
+ return fetch(@properties, symbol_array(array(keys).flatten), default, format)
439
439
  end
440
440
 
441
441
  # Fetch value for key path in the configuration object.
@@ -548,7 +548,7 @@ class Config
548
548
  # - #array
549
549
  #
550
550
  def set(keys, value, delete_nil = false, &code) # :yields: key, value, existing
551
- modify(@properties, array(keys).flatten, value, delete_nil, &code)
551
+ modify(@properties, symbol_array(array(keys).flatten), value, delete_nil, &code)
552
552
  return self
553
553
  end
554
554
 
@@ -570,7 +570,7 @@ class Config
570
570
  # - #array
571
571
  #
572
572
  def append(keys, value)
573
- modify(@properties, array(keys).flatten, value, false) do |key, processed_value, existing|
573
+ modify(@properties, symbol_array(array(keys).flatten), value, false) do |key, processed_value, existing|
574
574
  if existing.is_a?(Array)
575
575
  [ existing, processed_value ].flatten
576
576
  else
@@ -599,7 +599,7 @@ class Config
599
599
  # - #array
600
600
  #
601
601
  def prepend(keys, value, reverse = false)
602
- modify(@properties, array(keys).flatten, value, false) do |key, processed_value, existing|
602
+ modify(@properties, symbol_array(array(keys).flatten), value, false) do |key, processed_value, existing|
603
603
  processed_value = processed_value.reverse if reverse && processed_value.is_a?(Array)
604
604
 
605
605
  if existing.is_a?(Array)
@@ -650,7 +650,7 @@ class Config
650
650
  # - #array
651
651
  #
652
652
  def delete(keys, default = nil)
653
- existing = modify(@properties, array(keys).flatten, nil, true)
653
+ existing = modify(@properties, symbol_array(array(keys).flatten), nil, true)
654
654
  return existing[:value] unless existing[:value].nil?
655
655
  return default
656
656
  end
@@ -708,7 +708,7 @@ class Config
708
708
 
709
709
  case properties
710
710
  when Hash
711
- data = [ @properties, symbol_map(properties.clone) ]
711
+ data = [ @properties, symbol_map(Util::Data.clone(properties)) ]
712
712
  data = data.reverse if import_type != :override
713
713
 
714
714
  @properties = Util::Data.merge(data, config)
@@ -724,7 +724,7 @@ class Config
724
724
  end
725
725
 
726
726
  when Array
727
- properties.clone.each do |item|
727
+ Util::Data.clone(properties).each do |item|
728
728
  import_base(item, config)
729
729
  end
730
730
  end
@@ -792,7 +792,7 @@ class Config
792
792
  # * *Errors*
793
793
  #
794
794
  def export
795
- return @properties.clone
795
+ return Util::Data.clone(@properties)
796
796
  end
797
797
 
798
798
  #*****************************************************************************
@@ -822,6 +822,24 @@ class Config
822
822
  return self.class.symbol_map(data)
823
823
  end
824
824
 
825
+ # Return a symbolized array
826
+ #
827
+ # * *Parameters*
828
+ # - [Array<String, Symbol>] *array* Array of strings or symbols
829
+ #
830
+ # * *Returns*
831
+ # - [Array<Symbol>] Returns array of symbols
832
+ #
833
+ # * *Errors*
834
+ #
835
+ def symbol_array(array)
836
+ result = []
837
+ array.each do |item|
838
+ result << item.to_sym unless item.nil?
839
+ end
840
+ result
841
+ end
842
+
825
843
  # Return hash as a string map.
826
844
  #
827
845
  # This method converts all hash keys to strings. Nested hashes are
@@ -170,12 +170,14 @@ module Facade
170
170
  #-----------------------------------------------------------------------------
171
171
 
172
172
  def admin?
173
- is_admin = ( ENV['USER'] == 'root' )
174
- ext_admin = exec(:check_admin) do |op, results|
175
- if op == :reduce
176
- results.values.include?(true)
177
- else
178
- results ? true : false
173
+ is_admin = ( ENV['USER'] == 'root' )
174
+ unless is_admin
175
+ ext_admin = exec(:check_admin) do |op, results|
176
+ if op == :reduce
177
+ results.values.include?(true)
178
+ else
179
+ results ? true : false
180
+ end
179
181
  end
180
182
  end
181
183
  is_admin || ext_admin ? true : false
@@ -215,7 +217,7 @@ module Facade
215
217
  updated_time = Time.parse(@@ip_cache['updated'])
216
218
  cache_duration = (Time.new - updated_time) / 60 # Seconds to minutes
217
219
 
218
- if cache_duration >= value(:external_address_lifetime, 60)
220
+ if cache_duration >= value(:external_address_lifetime, 360)
219
221
  external_ip = fetch_ip.call
220
222
  end
221
223
  end
@@ -262,7 +264,7 @@ module Facade
262
264
 
263
265
  #---
264
266
 
265
- def load_plugins(base_dir = nil)
267
+ def load_plugins(base_dir = nil, search_parents = true)
266
268
  base_dir = base_dir.nil? ? Dir.pwd : base_dir
267
269
 
268
270
  search_plugins = lambda do |search_dir|
@@ -273,8 +275,10 @@ module Facade
273
275
  register(lib_dir)
274
276
  end
275
277
 
276
- parent_search_dir = search_dir.sub(/#{File::SEPARATOR}[^#{File::SEPARATOR}]+$/, '')
277
- search_plugins.call(parent_search_dir) unless parent_search_dir.split(File::SEPARATOR).empty?
278
+ if search_parents
279
+ parent_search_dir = search_dir.sub(/#{File::SEPARATOR}[^#{File::SEPARATOR}]+$/, '')
280
+ search_plugins.call(parent_search_dir) unless parent_search_dir.split(File::SEPARATOR).empty?
281
+ end
278
282
  end
279
283
 
280
284
  search_plugins.call(base_dir)
@@ -516,7 +520,7 @@ module Facade
516
520
  end
517
521
 
518
522
  def executable(args, name = 'nucleon') #ARGV
519
- logger.info("`#{name}` invoked: #{args.inspect}")
523
+ $0 = name.to_s # Set process name
520
524
 
521
525
  $stdout.sync = true
522
526
  $stderr.sync = true
@@ -529,12 +533,15 @@ module Facade
529
533
  args = args - [ "--no-color", "--color" ]
530
534
 
531
535
  begin
532
- logger.debug("Beginning execution run")
536
+ arg_components = Util::CLI::Parser.split(args, cyan(name) + yellow(" <action components> [<arg> ...]"))
537
+ main_command = arg_components.shift
538
+
539
+ logger.info("Beginning #{name} execution run with arguments: #{args.inspect}")
533
540
 
541
+ exec(:executable_load)
534
542
  load_plugins
535
543
 
536
- arg_components = Util::CLI::Parser.split(args, cyan(name) + yellow(" <action components> [<arg> ...]"))
537
- main_command = arg_components.shift
544
+ exec(:executable_init, { :name => name, :args => args })
538
545
 
539
546
  action, action_components, args = search_actions(args)
540
547
 
@@ -567,6 +574,7 @@ module Facade
567
574
 
568
575
  ui.error(action_error.message, { :prefix => false }) if action_error.message
569
576
  end
577
+ exec(:executable_exit, { :status => exit_status })
570
578
  exit_status
571
579
  end
572
580
 
@@ -660,13 +660,13 @@ class Manager
660
660
 
661
661
  logger.info("Executing extension hook #{Nucleon.blue(method)} at #{Nucleon.green(Time.now.to_s)}")
662
662
 
663
- extensions = active_plugins(:nucleon, :extension)
663
+ extensions = Util::Data.clone(active_plugins(:nucleon, :extension))
664
664
 
665
665
  extensions.each do |name, plugin|
666
666
  provider = plugin.plugin_provider
667
667
  result = nil
668
668
 
669
- logger.debug("Checking extension #{provider}")
669
+ logger.info("Checking extension #{provider}")
670
670
 
671
671
  if plugin.respond_to?(method)
672
672
  results = {} if results.nil?
@@ -698,7 +698,7 @@ class Manager
698
698
  def config(type, options = {})
699
699
  config = Config.ensure(options)
700
700
 
701
- logger.debug("Generating #{type} extended configuration")
701
+ logger.info("Generating #{type} extended configuration")
702
702
 
703
703
  exec("#{type}_config", Config.new(config.export, {}, true, false)) do |op, data|
704
704
  if op == :reduce
@@ -717,7 +717,7 @@ class Manager
717
717
  def check(method, options = {})
718
718
  config = Config.ensure(options)
719
719
 
720
- logger.debug("Checking extension #{method}")
720
+ logger.info("Checking extension #{method}")
721
721
 
722
722
  success = exec(method, config.import({ :extension_type => :check })) do |op, data|
723
723
  if op == :reduce
@@ -736,7 +736,7 @@ class Manager
736
736
  def value(method, value, options = {})
737
737
  config = Config.ensure(options)
738
738
 
739
- logger.debug("Setting extension #{method} value")
739
+ logger.info("Setting extension #{method} value")
740
740
 
741
741
  exec(method, config.import({ :value => value, :extension_type => :value })) do |op, data|
742
742
  if op == :process
@@ -752,7 +752,7 @@ class Manager
752
752
  config = Config.ensure(options)
753
753
  values = []
754
754
 
755
- logger.debug("Collecting extension #{method} values")
755
+ logger.info("Collecting extension #{method} values")
756
756
 
757
757
  exec(method, config.import({ :extension_type => :collect })) do |op, data|
758
758
  if op == :process
@@ -3,303 +3,307 @@ module Nucleon
3
3
  module Mixin
4
4
  module Action
5
5
  module Registration
6
-
6
+
7
7
  #-----------------------------------------------------------------------------
8
8
  # Registration definitions
9
-
9
+
10
10
  def register_bool(name, default = false, locale = nil, &code)
11
11
  register(name, :bool, default, locale, &code)
12
12
  end
13
-
13
+
14
14
  #---
15
-
15
+
16
16
  def register_int(name, default = nil, locale = nil, &code)
17
17
  register(name, :int, default, locale, &code)
18
18
  end
19
-
19
+
20
20
  #---
21
-
21
+
22
22
  def register_float(name, default = nil, locale = nil, &code)
23
23
  register(name, :float, default, locale, &code)
24
24
  end
25
-
25
+
26
26
  #---
27
-
27
+
28
28
  def register_str(name, default = '', locale = nil, &code)
29
29
  register(name, :str, default, locale, &code)
30
30
  end
31
-
31
+
32
32
  #---
33
-
33
+
34
34
  def register_array(name, default = [], locale = nil, &code)
35
35
  register(name, :array, default, locale, &code)
36
36
  end
37
-
37
+
38
38
  #---
39
-
39
+
40
40
  def register_file(name, default = nil, locale = nil, &code)
41
41
  name = name.to_sym
42
-
43
- register_str(name, default, locale) do |value|
44
- success = validate_file(value)
42
+
43
+ option_locale, validation_locale = split_locales(locale)
44
+
45
+ register_str(name, default, option_locale) do |value|
46
+ success = validate_file(value, validation_locale)
45
47
  success = code.call(value, success) if code
46
48
  success
47
49
  end
48
50
  end
49
-
51
+
50
52
  #---
51
-
53
+
52
54
  def register_files(name, default = nil, locale = nil, &code)
53
55
  name = name.to_sym
54
-
56
+
55
57
  option_locale, validation_locale = split_locales(locale)
56
-
58
+
57
59
  register_array(name, default, option_locale) do |values|
58
60
  success = validate_files(values, validation_locale)
59
61
  success = code.call(values, success) if code
60
62
  success
61
- end
63
+ end
62
64
  end
63
-
65
+
64
66
  #---
65
-
67
+
66
68
  def register_directory(name, default = nil, locale = nil, &code)
67
69
  name = name.to_sym
68
-
69
- register_str(name, default, locale) do |value|
70
- success = validate_directory(value)
70
+
71
+ option_locale, validation_locale = split_locales(locale)
72
+
73
+ register_str(name, default, option_locale) do |value|
74
+ success = validate_directory(value, validation_locale)
71
75
  success = code.call(value, success) if code
72
76
  success
73
77
  end
74
78
  end
75
-
79
+
76
80
  #---
77
-
81
+
78
82
  def register_directories(name, default = nil, locale = nil, &code)
79
83
  name = name.to_sym
80
-
84
+
81
85
  option_locale, validation_locale = split_locales(locale)
82
-
86
+
83
87
  register_array(name, default, option_locale) do |values|
84
88
  success = validate_directories(values, validation_locale)
85
89
  success = code.call(values, success) if code
86
90
  success
87
- end
91
+ end
88
92
  end
89
-
93
+
90
94
  #---
91
-
95
+
92
96
  def register_plugin_type(namespace, name, default = nil, locale = nil, &code)
93
97
  name = name.to_sym
94
-
98
+
95
99
  option_locale, validation_locale = split_locales(locale)
96
-
100
+
97
101
  register_str(name, default, option_locale) do |value|
98
102
  success = validate_plugin_types(namespace, name, value, validation_locale)
99
103
  success = code.call(value, success) if code
100
104
  success
101
- end
105
+ end
102
106
  end
103
-
107
+
104
108
  #---
105
-
109
+
106
110
  def register_plugin_types(namespace, name, default = nil, locale = nil, &code)
107
111
  name = name.to_sym
108
-
112
+
109
113
  option_locale, validation_locale = split_locales(locale)
110
-
114
+
111
115
  register_array(name, default, option_locale) do |values|
112
116
  success = validate_plugin_types(namespace, name, values, validation_locale)
113
117
  success = code.call(values, success) if code
114
118
  success
115
- end
119
+ end
116
120
  end
117
-
121
+
118
122
  #---
119
-
123
+
120
124
  def register_plugin_provider(namespace, type, name, default = nil, locale = nil, &code)
121
- name = name.to_sym
122
-
125
+ name = name.to_sym
126
+
123
127
  option_locale, validation_locale = split_locales(locale)
124
-
128
+
125
129
  register_str(name, default, option_locale) do |value|
126
130
  success = validate_plugin_providers(namespace, type, name, value, validation_locale)
127
131
  success = code.call(value, success) if code
128
132
  success
129
- end
133
+ end
130
134
  end
131
-
135
+
132
136
  #---
133
-
137
+
134
138
  def register_plugin_providers(namespace, type, name, default = nil, locale = nil, &code)
135
139
  name = name.to_sym
136
-
140
+
137
141
  option_locale, validation_locale = split_locales(locale)
138
-
142
+
139
143
  register_array(name, default, option_locale) do |values|
140
144
  success = validate_plugin_providers(namespace, type, name, values, validation_locale)
141
145
  success = code.call(values, success) if code
142
146
  success
143
- end
147
+ end
144
148
  end
145
-
149
+
146
150
  #---
147
-
151
+
148
152
  def register_plugin(namespace, type, name, default = nil, locale = nil, &code)
149
153
  name = name.to_sym
150
-
154
+
151
155
  option_locale, validation_locale = split_locales(locale)
152
-
156
+
153
157
  register_str(name, default, option_locale) do |value|
154
158
  success = validate_plugins(namespace, type, name, value, validation_locale)
155
159
  success = code.call(value, success) if code
156
160
  success
157
- end
161
+ end
158
162
  end
159
-
163
+
160
164
  #---
161
-
165
+
162
166
  def register_plugins(namespace, type, name, default = nil, locale = nil, &code)
163
167
  name = name.to_sym
164
-
168
+
165
169
  option_locale, validation_locale = split_locales(locale)
166
-
170
+
167
171
  register_array(name, default, option_locale) do |values|
168
172
  success = validate_plugins(namespace, type, name, values, validation_locale)
169
173
  success = code.call(values, success) if code
170
174
  success
171
- end
175
+ end
172
176
  end
173
-
177
+
174
178
  #---
175
-
179
+
176
180
  def register_project_provider(name, default = nil, locale = nil, &code)
177
181
  register_plugin_provider(:nucleon, :project, name.to_sym, default, locale, &code)
178
182
  end
179
-
183
+
180
184
  #---
181
-
185
+
182
186
  def register_project_providers(name, default = nil, locale = nil, &code)
183
187
  register_plugin_providers(:nucleon, :project, name.to_sym, default, locale, &code)
184
188
  end
185
-
189
+
186
190
  #---
187
-
191
+
188
192
  def register_project(name, default = nil, locale = nil, &code)
189
193
  register_plugin(:nucleon, :project, name.to_sym, default, locale, &code)
190
194
  end
191
-
195
+
192
196
  #---
193
-
197
+
194
198
  def register_projects(name, default = nil, locale = nil, &code)
195
- register_plugins(:nucleon, :project, name.to_sym, default, locale, &code)
199
+ register_plugins(:nucleon, :project, name.to_sym, default, locale, &code)
196
200
  end
197
-
201
+
198
202
  #---
199
-
203
+
200
204
  def register_translator_provider(name, default = nil, locale = nil, &code)
201
205
  register_plugin_provider(:nucleon, :translator, name.to_sym, default, locale, &code)
202
206
  end
203
-
207
+
204
208
  #---
205
-
209
+
206
210
  def register_translator_providers(name, default = nil, locale = nil, &code)
207
211
  register_plugin_providers(:nucleon, :translator, name.to_sym, default, locale, &code)
208
212
  end
209
-
213
+
210
214
  #---
211
-
215
+
212
216
  def register_translator(name, default = nil, locale = nil, &code)
213
217
  register_plugin(:nucleon, :translator, name.to_sym, default, locale, &code)
214
218
  end
215
-
219
+
216
220
  #---
217
-
221
+
218
222
  def register_translators(name, default = nil, locale = nil, &code)
219
- register_plugins(:nucleon, :translators, name.to_sym, default, locale, &code)
223
+ register_plugins(:nucleon, :translators, name.to_sym, default, locale, &code)
220
224
  end
221
-
225
+
222
226
  #-----------------------------------------------------------------------------
223
227
  # Validators
224
-
228
+
225
229
  def validate_file(file_name, locale = nil)
226
230
  success = file_name.nil? || File.exists?(file_name)
227
231
  warn(locale, { :file => file_name }) unless success
228
- success
232
+ success
229
233
  end
230
-
234
+
231
235
  #---
232
-
236
+
233
237
  def validate_files(file_names, locale = nil)
234
238
  success = true
235
-
239
+
236
240
  array(file_names).each do |file_name|
237
241
  test = validate_file(file_name, locale)
238
242
  success = false unless test
239
243
  end
240
- success
244
+ success
241
245
  end
242
-
246
+
243
247
  #---
244
-
248
+
245
249
  def validate_directory(dir_name, locale = nil)
246
250
  success = dir_name.nil? || File.directory?(dir_name)
247
251
  warn(locale, { :directory => dir_name }) unless success
248
- success
252
+ success
249
253
  end
250
-
254
+
251
255
  #---
252
-
256
+
253
257
  def validate_directories(dir_names, locale = nil)
254
258
  success = true
255
-
259
+
256
260
  array(dir_names).each do |dir_name|
257
261
  test = validate_directory(dir_name, locale)
258
262
  success = false unless test
259
263
  end
260
- success
264
+ success
261
265
  end
262
-
266
+
263
267
  #---
264
-
268
+
265
269
  def validate_plugin_types(namespace, name, values, locale = nil)
266
270
  loaded_plugin_types = Nucleon.loaded_plugins(namespace).keys
267
271
  success = true
268
272
  locale = "validation.#{name}" unless locale
269
-
273
+
270
274
  array(values).each do |value|
271
275
  if ! loaded_plugin_types.include?(value.to_sym)
272
276
  warn(locale, { :value => value, :choices => loaded_plugin_types.join(", ") })
273
277
  success = false
274
278
  end
275
- end
276
- success
279
+ end
280
+ success
277
281
  end
278
-
282
+
279
283
  #---
280
-
284
+
281
285
  def validate_plugin_providers(namespace, type, name, values, locale = nil)
282
286
  loaded_plugin_providers = Nucleon.loaded_plugins(namespace, type).keys
283
287
  success = true
284
288
  locale = "validation.#{name}" unless locale
285
-
289
+
286
290
  array(values).each do |value|
287
291
  if ! loaded_plugin_providers.include?(value.to_sym)
288
292
  warn(locale, { :value => value, :choices => loaded_plugin_providers.join(", ") })
289
293
  success = false
290
294
  end
291
- end
292
- success
295
+ end
296
+ success
293
297
  end
294
-
298
+
295
299
  #---
296
-
300
+
297
301
  def validate_plugins(namespace, type, name, values, locale = nil)
298
302
  plugin_class = Nucleon.plugin_class(namespace, type)
299
303
  loaded_plugins = Nucleon.loaded_plugins(namespace, type)
300
- success = true
304
+ success = true
301
305
  locale = "validation.#{name}" unless locale
302
-
306
+
303
307
  array(values).each do |value|
304
308
  if info = plugin_class.translate_reference(value)
305
309
  if ! loaded_plugins.keys.include?(info[:provider].to_sym)
@@ -307,17 +311,17 @@ module Registration
307
311
  success = false
308
312
  end
309
313
  end
310
- end
314
+ end
311
315
  success
312
316
  end
313
-
317
+
314
318
  #-----------------------------------------------------------------------------
315
319
  # Utilities
316
-
320
+
317
321
  def split_locales(locale)
318
322
  option_locale = nil
319
323
  validation_locale = nil
320
-
324
+
321
325
  if locale.is_a?(Array)
322
326
  option_locale = locale[0]
323
327
  validation_locale = locale[1] if locale.size > 1
@@ -32,7 +32,7 @@ module SubConfig
32
32
  #-----------------------------------------------------------------------------
33
33
 
34
34
  def _get(keys, default = nil, format = false)
35
- return fetch(@properties, array(keys).flatten, default, format)
35
+ return fetch(@properties, symbol_array(array(keys).flatten), default, format)
36
36
  end
37
37
  protected :_get
38
38
 
@@ -53,7 +53,7 @@ module SubConfig
53
53
  #---
54
54
 
55
55
  def _set(keys, value = '', delete_nil = false)
56
- modify(@properties, array(keys).flatten, value, delete_nil)
56
+ modify(@properties, symbol_array(array(keys).flatten), value, delete_nil)
57
57
  end
58
58
  protected :_set
59
59
 
@@ -67,7 +67,7 @@ module SubConfig
67
67
  #---
68
68
 
69
69
  def _delete(keys, default = nil)
70
- existing = modify(@properties, array(keys).flatten, nil, true)
70
+ existing = modify(@properties, symbol_array(array(keys).flatten), nil, true)
71
71
  return existing[:value] if existing[:value]
72
72
  return default
73
73
  end
@@ -58,20 +58,39 @@ module CLI
58
58
  #---
59
59
 
60
60
  def self.split(args, banner, separator = '')
61
+ check_args = []
61
62
  main_args = nil
62
63
  sub_command = nil
63
64
  sub_args = []
64
65
 
65
- args.each_index do |index|
66
- if !args[index].start_with?('-')
67
- main_args = args[0, index]
68
- sub_command = args[index]
69
- sub_args = args[index + 1, args.length - index + 1]
66
+ # Log level gets processed in main args so we can log executable init
67
+ parse_log_value = false
68
+
69
+ args.each do |arg|
70
+ if arg =~ /^\-\-log_level(?=\=(.*))?/
71
+ if $1
72
+ Nucleon.log_level = $1
73
+ else
74
+ parse_log_value = true
75
+ end
76
+ elsif parse_log_value
77
+ Nucleon.log_level = arg
78
+ parse_log_value = false
79
+ else
80
+ check_args << arg
81
+ end
82
+ end
83
+
84
+ check_args.each_index do |index|
85
+ if !check_args[index].start_with?('-')
86
+ main_args = check_args[0, index]
87
+ sub_command = check_args[index]
88
+ sub_args = check_args[index + 1, check_args.length - index + 1]
70
89
  break
71
90
  end
72
91
  end
73
92
 
74
- main_args = args.dup if main_args.nil?
93
+ main_args = check_args.dup if main_args.nil?
75
94
  results = [ Parser.new(main_args, banner, separator, true) ]
76
95
 
77
96
  if sub_command
@@ -121,14 +140,18 @@ module CLI
121
140
  '--version',
122
141
  'nucleon.core.util.cli.options.version'
123
142
  )
124
- option_bool(:color, true,
125
- '--[no]-color',
143
+ option_bool(:color, Util::Console.use_colors,
144
+ '--[no-]color',
126
145
  'nucleon.core.util.cli.options.color'
127
146
  )
128
147
  option_str(:log_level, nil,
129
148
  '--log_level STR',
130
149
  'nucleon.core.util.cli.options.log_level'
131
150
  )
151
+ option_str(:exec_dir, nil,
152
+ '--exec_dir STR',
153
+ 'nucleon.core.util.cli.options.exec_dir'
154
+ )
132
155
  option_str(:encoded_params, false,
133
156
  '--encoded STR',
134
157
  'nucleon.core.util.cli.options.encoded'
@@ -162,12 +185,14 @@ module CLI
162
185
  exit 0
163
186
  end
164
187
 
188
+ if options[:exec_dir]
189
+ Dir.chdir(options[:exec_dir])
190
+ end
191
+
165
192
  return if options[:help]
166
193
 
167
194
  parse_encoded
168
195
 
169
- Nucleon.log_level = options[:log_level] if options[:log_level]
170
-
171
196
  self.extra = normalize_extra_options(extra_args) unless extra_args.empty?
172
197
 
173
198
  remaining_args = args.dup
@@ -255,13 +255,13 @@ class SSH < Core
255
255
  end
256
256
 
257
257
  channel.on_data do |ch, data|
258
+ data = yield(:output, command, data) if block_given?
258
259
  result.append_output(data)
259
- yield(:output, command, data) if block_given?
260
260
  end
261
261
 
262
262
  channel.on_extended_data do |ch, type, data|
263
+ data = yield(:error, command, data) if block_given?
263
264
  result.append_errors(data)
264
- yield(:error, command, data) if block_given?
265
265
  end
266
266
 
267
267
  channel.on_request('exit-status') do |ch, data|
@@ -80,7 +80,9 @@ class Github < Git
80
80
  # Utilities
81
81
 
82
82
  def self.expand_url(path, editable = false)
83
- if path =~ /^[a-zA-Z0-9_\-\/]+$/
83
+ if path =~ /^[a-zA-Z0-9_\-\/]+(.git)?$/
84
+ path = path.gsub('.git', '')
85
+
84
86
  if editable
85
87
  protocol = 'git@'
86
88
  separator = ':'
@@ -17,7 +17,7 @@ en:
17
17
  For help on any individual action run `%{command}`
18
18
  errors:
19
19
  missing_argument: |-
20
- Argument <%{name}> must be specified
20
+ Argument <%{name}> must be specified
21
21
  util:
22
22
  cli:
23
23
  options:
@@ -31,6 +31,8 @@ en:
31
31
  Display a more extended breakdown of available options for this commands available actions
32
32
  log_level: |-
33
33
  Set the logging level for this execution run
34
+ exec_dir: |-
35
+ Change to a specified directory before this execution run
34
36
  encoded: |-
35
37
  Optional encoded parameter set that contains default action settings (machine use only)
36
38
  parse:
@@ -69,11 +71,26 @@ en:
69
71
  propogate_push: |-
70
72
  Propogate pushes to the remote throughout the project tree (default %{default_value})
71
73
  action:
72
- unknown:
74
+ unknown:
73
75
  description: |-
74
76
  This Nucleon action has no description available
75
77
  help: |-
76
78
  There is no extended help information available for this Nucleon action.
79
+ extract:
80
+ description: |-
81
+ Extract an encoded package into a directory
82
+ help: |-
83
+ Extract an encoded package into a directory
84
+ options:
85
+ path: |-
86
+ Base path in which to extract the encoded data
87
+ encoded: |-
88
+ Encoded data to be extracted into the base path
89
+ errors:
90
+ path: |-
91
+ "Base path for extracted files must be an existing directory"
92
+ encoded: |-
93
+ "Data is either not properly encoded or is empty %{value}"
77
94
  project:
78
95
  create:
79
96
  description: |-
@@ -100,7 +117,7 @@ en:
100
117
  files: |-
101
118
  Optional space separated list of files to save
102
119
  start: |-
103
- Saving project changes with provider %{project_provider} (ref: %{project_reference} rev: %{project_revision})
120
+ Saving project changes with provider %{project_provider} (ref: %{project_reference} rev: %{project_revision})
104
121
  add:
105
122
  description: |-
106
123
  Add a new sub-project to this project
@@ -123,17 +140,3 @@ en:
123
140
  Subproject path
124
141
  start: |-
125
142
  Removing existing subproject at %{sub_path}
126
- extract:
127
- description: |-
128
- Extract an encoded package into a directory
129
- options:
130
- path: |-
131
- Base path in which to extract the encoded data
132
- encoded: |-
133
- Encoded data to be extracted into the base path
134
- errors:
135
- path: |-
136
- "Base path for extracted files must be an existing directory"
137
- encoded: |-
138
- "Data is either not properly encoded or is empty %{value}"
139
-
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: nucleon 0.2.8 ruby lib
5
+ # stub: nucleon 0.2.9 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "nucleon"
9
- s.version = "0.2.8"
9
+ s.version = "0.2.9"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Adrian Webb"]
14
- s.date = "2015-02-03"
14
+ s.date = "2015-02-19"
15
15
  s.description = "\nA framework that provides a simple foundation for building Ruby applications that are:\n\n* Highly configurable (with both distributed and persistent configurations)\n* Extremely pluggable and extendable\n* Easily parallel\n\nNote: This framework is still very early in development!\n"
16
16
  s.email = "adrian.webb@coralnexus.com"
17
17
  s.executables = ["nucleon"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nucleon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Webb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-03 00:00:00.000000000 Z
11
+ date: 2015-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: log4r