dtk-client 0.5.14 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
data/lib/dtk_logger.rb CHANGED
@@ -25,7 +25,7 @@ class DtkLogger
25
25
  file = File.open(file_path(), "a")
26
26
  file.sync = true
27
27
  @logger = Logger.new(file, LOG_NUMBER_OF_OLD_FILES, LOG_MB_SIZE * 1024000)
28
-
28
+
29
29
  @logger.formatter = proc do |severity, datetime, progname, msg|
30
30
  "[#{datetime}] #{severity} -- : #{msg}\n"
31
31
  end
@@ -63,14 +63,14 @@ class DtkLogger
63
63
 
64
64
  def error_pp(message, backtrace, sttdout_out = true)
65
65
  error(message, sttdout_out)
66
- # we do not print this to STDOUT (will be overriden with DEVELOPMENT_MODE)
67
- error(PP.pp(backtrace, ""), false) if backtrace
66
+ # we do not print this to STDOUT (will be overriden with DEVELOPMENT_MODE)s
67
+ error("#{message}\n" + PP.pp(backtrace, ""), false) if backtrace
68
68
  end
69
69
 
70
70
  def fatal_pp(message, backtrace, sttdout_out = true)
71
71
  fatal(message, sttdout_out)
72
72
  # we do not print this to STDOUT (will be overriden with DEVELOPMENT_MODE)
73
- fatal(PP.pp(backtrace, ""), false) if backtrace
73
+ fatal("#{message}\n" + PP.pp(backtrace, ""), false) if backtrace
74
74
  end
75
75
 
76
76
 
data/lib/shell/context.rb CHANGED
@@ -7,7 +7,7 @@ module DTK
7
7
 
8
8
  class Context
9
9
  include DTK::Client::Auxiliary
10
-
10
+
11
11
  # client commands
12
12
  CLIENT_COMMANDS = ['cc','exit','clear','pushc','popc','dirs','help']
13
13
  # CLIENT_COMMANDS = ['cc','exit','clear','help']
@@ -80,7 +80,7 @@ module DTK
80
80
  end
81
81
  end
82
82
  end
83
-
83
+
84
84
  entries
85
85
  end
86
86
 
@@ -96,7 +96,7 @@ module DTK
96
96
  init_context = context_list.first.name
97
97
  command_clazz = Context.get_command_class(init_context)
98
98
  invisible_context = command_clazz.respond_to?(:invisible_context) ? command_clazz.invisible_context() : {}
99
-
99
+
100
100
  invisible_context.each do |ic|
101
101
  path = path.gsub(/\/#{ic}\//,'/')
102
102
  end
@@ -104,7 +104,7 @@ module DTK
104
104
 
105
105
  path
106
106
  end
107
-
107
+
108
108
  # Validates and changes context
109
109
  def change_context(args, cmd=[])
110
110
  begin
@@ -123,7 +123,7 @@ module DTK
123
123
 
124
124
  # jump to root
125
125
  reset if args.join('').match(/^\//)
126
-
126
+
127
127
  # begin
128
128
  # hack: used just to avoid entering assembly/id/node or workspace/node context (remove when include this contexts again)
129
129
  first_c, warning_message = nil, nil
@@ -163,34 +163,52 @@ module DTK
163
163
  active_context_copy.clear if goes_from_root
164
164
  # Invalid context is user leftover to be matched; i.e. 'cc /assembly/te' - 'te' is leftover
165
165
  invalid_context = ""
166
-
166
+
167
167
  # Validate and change context; skip step if user's input is empty or it is equal to '/'
168
168
  active_context_copy, error_message, invalid_context = prepare_context_change([readline_input], active_context_copy, nil, line_buffer) unless (readline_input.empty? || readline_input == "/")
169
-
169
+
170
170
  # using extended_context when we want to use autocomplete from other context
171
- # e.g. we are in assembly/apache context and want to create-component we will use extended context to add
171
+ # e.g. we are in assembly/apache context and want to create-component we will use extended context to add
172
172
  # component-templates to autocomplete
173
- extended_candidates, new_context = {}, nil
173
+ extended_candidates, new_context, line_buffer_first = {}, nil, nil
174
174
  command_clazz = Context.get_command_class(active_context_copy.last_command_name)
175
-
175
+ # require 'debugger'
176
+ # Debugger.start
177
+ # debugger
178
+ # unless (line_buffer.empty? || line_buffer.strip().empty?)
179
+ # line_buffer_last = line_buffer.split(' ').last
180
+ # line_buffer = line_buffer.split(' ').first
181
+ # line_buffer.gsub!('-','_') unless (line_buffer.nil? || line_buffer.empty?)
182
+ # end
183
+
176
184
  unless (line_buffer.empty? || line_buffer.strip().empty?)
177
- line_buffer = line_buffer.split(' ').first
178
- line_buffer.gsub!('-','_') unless (line_buffer.nil? || line_buffer.empty?)
185
+ line_buffer = line_buffer.split(' ')
186
+ line_buffer_last = line_buffer.last
187
+ line_buffer_first = line_buffer.first
188
+ line_buffer_first.gsub!('-','_') unless (line_buffer_first.nil? || line_buffer_first.empty?)
179
189
  end
180
190
 
181
191
  unless command_clazz.nil?
182
192
  extended_context = command_clazz.respond_to?(:extended_context) ? command_clazz.extended_context() : {}
183
-
193
+
184
194
  unless extended_context.empty?
185
195
  extended_context = extended_context[:context]
186
- extended_context.reject!{|k,v| k.to_s!=line_buffer}
187
-
188
- new_context = extended_context[line_buffer.to_sym] unless line_buffer.nil? || line_buffer.empty?
196
+ # extended_context.reject!{|k,v| k.to_s!=line_buffer}
197
+ # extended_context.select!{|k,v| k.to_s.eql?(line_buffer_first) || k.to_s.eql?(line_buffer_last)}
198
+ extended_context.select!{|k,v| line_buffer.include?(k.to_s)} if extended_context.respond_to?(:select!)
199
+
200
+ if (extended_context[line_buffer_last] && !line_buffer_first.eql?(line_buffer_last))
201
+ new_context = extended_context[line_buffer_last]
202
+ elsif (extended_context[line_buffer[line_buffer.size-2]] && !line_buffer_first.eql?(extended_context[line_buffer[line_buffer.size-2]]))
203
+ new_context = extended_context[line_buffer[line_buffer.size-2]]
204
+ else
205
+ new_context = extended_context[line_buffer_first.to_sym] unless line_buffer_first.nil? || line_buffer_first.empty?
206
+ end
189
207
  active_context_copy.push_new_context(new_context, new_context) unless new_context.nil?
190
208
  end
191
209
  end
192
-
193
- return get_ac_candidates(active_context_copy, readline_input, invalid_context, goes_from_root, line_buffer)
210
+
211
+ return get_ac_candidates(active_context_copy, readline_input, invalid_context, goes_from_root, line_buffer_first||{})
194
212
  end
195
213
 
196
214
  # TODO: this is hack used this to hide 'node' context and use just node_identifier
@@ -210,7 +228,7 @@ module DTK
210
228
  command_from_args = goes_from_root ? args.first.split('/')[1] : args.first.split('/').first
211
229
  clazz_from_args = DTK::Shell::Context.get_command_class(command_from_args) if command_from_args
212
230
  end
213
-
231
+
214
232
  if (command.eql?('cd') || command.eql?('cc') || command.eql?('popc') || command.eql?('pushc'))
215
233
  if is_root
216
234
  if entries.size >= 3
@@ -224,7 +242,7 @@ module DTK
224
242
  end
225
243
  else
226
244
  double_dots_count = DTK::Shell::ContextAux.count_double_dots(entries)
227
-
245
+
228
246
  unless double_dots_count > 0
229
247
  if clazz.respond_to?(:invisible_context)
230
248
  if current_context.is_command?
@@ -251,7 +269,7 @@ module DTK
251
269
  end
252
270
 
253
271
  end
254
-
272
+
255
273
  entries
256
274
  end
257
275
 
@@ -270,9 +288,9 @@ module DTK
270
288
  current_context_clazz, error_message, current_index = nil, nil, 0
271
289
  double_dots_count = DTK::Shell::ContextAux.count_double_dots(entries)
272
290
 
273
- # we remove '..' from our entries
291
+ # we remove '..' from our entries
274
292
  entries = entries.select { |e| !(e.empty? || DTK::Shell::ContextAux.is_double_dot?(e)) }
275
-
293
+
276
294
  # we go back in context based on '..'
277
295
  active_context_copy.pop_context(double_dots_count)
278
296
 
@@ -287,23 +305,23 @@ module DTK
287
305
  count_workspaces = active_context_copy.name_list.inject(Hash.new(0)) {|h,i| h[i] += 1; h }
288
306
  active_context_copy.pop_context(1) if count_workspaces['workspace']==1
289
307
  end
290
-
308
+
291
309
  # we add active commands array to begining, using dup to avoid change by ref.
292
310
  context_name_list = active_context_copy.name_list
293
311
  entries = context_name_list + entries
294
312
 
295
313
  # we check the size of active commands
296
314
  ac_size = context_name_list.size
297
-
315
+
298
316
  invalid_context = ""
299
317
  # check each par for command / value
300
318
  (0..(entries.size-1)).step(2) do |i|
301
319
  command = entries[i]
302
320
  value = entries[i+1]
303
-
321
+
304
322
  clazz = DTK::Shell::Context.get_command_class(command)
305
323
  error_message, invalid_context = validate_command(clazz, current_context_clazz, command, active_context_copy)
306
-
324
+
307
325
  break if error_message
308
326
  # if we are dealing with new entries add them to active_context
309
327
  active_context_copy.push_new_context(command, command) if (i >= ac_size)
@@ -319,7 +337,7 @@ module DTK
319
337
  end
320
338
  break
321
339
  end
322
-
340
+
323
341
  active_context_copy.push_new_context(context_hash_data[:name], command, context_hash_data[:identifier]) if ((i+1) >= ac_size)
324
342
  end
325
343
  end
@@ -336,7 +354,7 @@ module DTK
336
354
  error_message = "Context for '#{command}' could not be loaded.";
337
355
  invalid_context = command
338
356
  end
339
-
357
+
340
358
  # check if previous context support this one as a child
341
359
  unless current_context_clazz.nil?
342
360
  # valid child method is necessery to define parent-child relet.
@@ -346,10 +364,10 @@ module DTK
346
364
 
347
365
  valid_all_children = (root_clazz != current_context_clazz) ? all_children.include?(command.to_sym) : true
348
366
  unless (current_context_clazz.valid_child?(command) && valid_all_children)
349
-
367
+
350
368
  error_message = "'#{command}' context is not valid."
351
369
  invalid_context = command
352
-
370
+
353
371
  if current_context_clazz.respond_to?(:invisible_context)
354
372
  ic = current_context_clazz.invisible_context()
355
373
  ic.each do |c|
@@ -374,7 +392,7 @@ module DTK
374
392
  entries = args.first.split(/\//)
375
393
  invalid_context = ["workspace/node", "service/node"]
376
394
  double_dots_count = DTK::Shell::ContextAux.count_double_dots(entries)
377
- only_double_dots = entries.select{|e| e.to_s!=".."}||[]
395
+ only_double_dots = entries.select{|e| !e.to_s.include?('..')}||[]
378
396
  back_flag = false
379
397
 
380
398
  last_from_current, message = nil, nil
@@ -384,7 +402,7 @@ module DTK
384
402
  last_from_current = test_c.last_context_name
385
403
  back_flag = true
386
404
  end
387
-
405
+
388
406
  unless args.empty?
389
407
  first_c ||= entries.first
390
408
  last_c = last_from_current||entries.last
@@ -400,14 +418,14 @@ module DTK
400
418
  end
401
419
  message = "'#{last_c}' context is not valid."
402
420
  is_valid_id = check_for_id(first_c, last_c, tmp_active_context, args)
403
-
421
+
404
422
  # if ../ to node context, add one more .. to go to previous context (assembly/id or workspace)
405
423
  if back_flag
406
424
  message = nil
407
425
  entries << ".." if is_valid_id==false
408
426
  else
409
427
  if is_valid_id==false
410
- entries.pop
428
+ entries.pop
411
429
  else
412
430
  message = nil
413
431
  end
@@ -424,7 +442,7 @@ module DTK
424
442
  end
425
443
  end
426
444
  end
427
-
445
+
428
446
  return {:args => args, :message => message}
429
447
  end
430
448
 
@@ -432,26 +450,26 @@ module DTK
432
450
  command_clazz = Context.get_command_class(context)
433
451
  invisible_context = command_clazz.respond_to?(:invisible_context) ? command_clazz.invisible_context.map { |e| e.to_s } : []
434
452
  entries = args.first.split(/\//)
435
-
453
+
436
454
  entries = Context.check_for_sym_link(entries) if root?
437
455
  unless invisible_context.empty?
438
456
  if root?
439
457
  tmp_active_context.push_new_context(entries[0], entries[0])
440
458
  context_hash_data, error_message, invalid_context = validate_value(entries[0], entries[1], tmp_active_context)
441
-
459
+
442
460
  return if error_message
443
461
  tmp_active_context.push_new_context(context_hash_data[:name], entries[0], context_hash_data[:identifier])
444
462
  context_hash_data, error_message, invalid_context = validate_value(command, command, tmp_active_context)
445
-
463
+
446
464
  return if error_message
447
465
  tmp_active_context.push_new_context(context_hash_data[:name], command, context_hash_data[:identifier])
448
466
  end
449
467
 
450
-
468
+
451
469
  node_ids = get_command_identifiers(invisible_context.first.to_s, tmp_active_context)
452
470
  node_names = node_ids ? node_ids.collect { |e| e[:name] } : []
453
471
  end
454
-
472
+
455
473
  return node_names.include?(command)
456
474
  end
457
475
 
@@ -480,10 +498,10 @@ module DTK
480
498
  # e.g. cc library/public, we are caching context under library_1, library_2
481
499
  # so getting context for 'public' will not work and we use than library
482
500
  command_name = root? ? 'dtk' : @active_context.last_command_name
483
-
501
+
484
502
  # if there is no new context (current) we use old one
485
503
  @current = current_context_task_names() || @current
486
-
504
+
487
505
  client_commands = CLIENT_COMMANDS
488
506
  client_commands.concat(DEV_COMMANDS) if DTK::Configuration.get(:development_mode)
489
507
 
@@ -495,7 +513,7 @@ module DTK
495
513
 
496
514
  # we load thor command class identifiers for autocomplete context list
497
515
  command_context = get_command_identifiers(command_name)
498
-
516
+
499
517
  command_name_list = command_context ? command_context.collect { |e| e[:name] } : []
500
518
  @context_commands.concat(command_name_list) if current_command?
501
519
 
@@ -538,7 +556,7 @@ module DTK
538
556
  def root?
539
557
  return @active_context.empty?
540
558
  end
541
-
559
+
542
560
  def current_command?
543
561
  return @active_context.current_command?
544
562
  end
@@ -557,7 +575,7 @@ module DTK
557
575
  end
558
576
 
559
577
  # checks if method name is valid in current context
560
- def method_valid?(method_name)
578
+ def method_valid?(method_name)
561
579
  # validate method, see if we support given method in current tasks
562
580
  (current_context_task_names() + ['help']).include?(method_name)
563
581
  end
@@ -575,15 +593,15 @@ module DTK
575
593
 
576
594
  # calls 'valid_id?' method in Thor class to validate ID/NAME
577
595
  def valid_id?(thor_command_name,value, override_context_params=nil, active_context_copy=nil)
578
-
596
+
579
597
  command_clazz = Context.get_command_class(thor_command_name)
580
- if command_clazz.list_method_supported?
598
+ if command_clazz.list_method_supported?
581
599
  if override_context_params
582
600
  context_params = override_context_params
583
601
  else
584
602
  context_params = get_command_parameters(thor_command_name, [], active_context_copy)[2]
585
603
  end
586
-
604
+
587
605
  tmp = command_clazz.valid_id?(value, @conn, context_params)
588
606
  return tmp
589
607
  end
@@ -597,13 +615,13 @@ module DTK
597
615
  # input string segment used to filter results candidates
598
616
  results_filter = (readline_input.match(/\/$/) && invalid_context.empty?) ? "" : readline_input.split("/").last
599
617
  results_filter ||= ""
600
-
618
+
601
619
  command_clazz = Context.get_command_class(active_context_copy.last_command_name)
602
620
  extended_context_commands = nil
603
621
 
604
622
  unless command_clazz.nil?
605
623
  extended_context = command_clazz.respond_to?(:extended_context) ? command_clazz.extended_context() : {}
606
-
624
+
607
625
  unless extended_context.empty?
608
626
  extended_context = extended_context[:command]
609
627
  extended_context.reject!{|k,v| k.to_s!=line_buffer} if extended_context
@@ -625,18 +643,18 @@ module DTK
625
643
  context_candidates = get_ac_candidates_for_context(active_context_copy.last_context(), active_context_copy)
626
644
  end
627
645
  end
628
-
646
+
629
647
  # checking if results will contain context candidates based on input string segment
630
648
  context_candidates = context_candidates.grep( /^#{Regexp.escape(results_filter)}/ )
631
-
632
- # Show all context tasks if active context orignal and it's copy are on same context, and are not on root,
649
+
650
+ # Show all context tasks if active context orignal and it's copy are on same context, and are not on root,
633
651
  # and if readline has one split result indicating user is not going trough n-level, but possibly executing a task
634
652
  task_candidates = []
635
653
 
636
654
  #task_candidates = @context_commands if (active_context_copy.last_context_name() == @active_context.last_context_name() && !active_context_copy.empty?)
637
655
  task_candidates = @context_commands if (active_context_copy.last_context_name() == @active_context.last_context_name() && !active_context_copy.empty? && readline_input.split("/").size <= 1)
638
-
639
- # create results object filtered by user input segment (results_filter)
656
+
657
+ # create results object filtered by user input segment (results_filter)
640
658
  task_candidates = task_candidates.grep( /^#{Regexp.escape(results_filter)}/ )
641
659
 
642
660
  # autocomplete candidates are both context and task candidates; remove duplicates in results
@@ -653,7 +671,7 @@ module DTK
653
671
  # remove duplicate context or task candidates
654
672
  results.uniq!
655
673
 
656
- # Send system beep if there are no candidates
674
+ # Send system beep if there are no candidates
657
675
  if results.empty?
658
676
  print "\a"
659
677
  return []
@@ -662,7 +680,7 @@ module DTK
662
680
  # default value of input user string
663
681
  input_context_path = readline_input
664
682
 
665
- # cut off last context if it is leftover (invalid_context),
683
+ # cut off last context if it is leftover (invalid_context),
666
684
  # or if last context is not finished with '/' and it can have more than option for current context
667
685
  # i.e. dtk> cc assembly - have 2 candidates: 'assembly' and 'assembly-template'
668
686
  if !invalid_context.empty? || cutoff_forcely
@@ -681,7 +699,7 @@ module DTK
681
699
 
682
700
  end
683
701
 
684
- def get_ac_candidates_for_context(context, active_context_copy)
702
+ def get_ac_candidates_for_context(context, active_context_copy)
685
703
  # If last context is command, load all identifiers, otherwise, load next possible context command; if no contexts, load root tasks
686
704
  if context
687
705
  if context.is_command?
@@ -695,11 +713,11 @@ module DTK
695
713
 
696
714
  n_level_ac_candidates.select {|v| valid_all_children.include?(v.to_sym)} unless valid_all_children.empty?
697
715
  invisible_context = command_clazz.respond_to?(:invisible_context) ? command_clazz.invisible_context.map { |e| e.to_s } : []
698
-
716
+
699
717
  unless invisible_context.empty?
700
718
  node_ids = get_command_identifiers(invisible_context.first.to_s, active_context_copy)
701
719
  node_names = node_ids ? node_ids.collect { |e| e[:name] } : []
702
-
720
+
703
721
  n_level_ac_candidates.concat(node_names)
704
722
  end
705
723
 
@@ -714,13 +732,14 @@ module DTK
714
732
  def get_command_identifiers(thor_command_name, active_context_copy=nil)
715
733
  begin
716
734
  command_clazz = Context.get_command_class(thor_command_name)
717
- if command_clazz.list_method_supported?
735
+
736
+ if command_clazz && command_clazz.list_method_supported?
718
737
  # take just hashed arguemnts from multi return method
719
738
  hashed_args = get_command_parameters(thor_command_name, [], active_context_copy)[2]
720
739
  return command_clazz.get_identifiers(@conn, hashed_args)
721
740
  end
722
741
  rescue DTK::Client::DtkValidationError => e
723
- # TODO Check if handling needed. Error should happen only when autocomplete ID search illigal
742
+ # TODO Check if handling needed. Error should happen only when autocomplete ID search illigal
724
743
  end
725
744
 
726
745
  return []
@@ -734,7 +753,7 @@ module DTK
734
753
  endpoint = extended_context_commands[:endpoint]
735
754
  url = extended_context_commands[:url]
736
755
  opts = extended_context_commands[:opts]||{}
737
-
756
+
738
757
  id_label = "#{endpoint}_id".to_sym
739
758
  id = entity_name.identifier
740
759
  opts[id_label] = id
@@ -750,7 +769,7 @@ module DTK
750
769
  candidates
751
770
  end
752
771
 
753
- # changes command and argument if argument is plural of one of
772
+ # changes command and argument if argument is plural of one of
754
773
  # the possible commands on tier1 e.g. libraries, assemblies
755
774
  # return 2 values cmd, args
756
775
  def reverse_commands(cmd, args)
@@ -786,8 +805,8 @@ module DTK
786
805
  # if no method specified use help
787
806
  method_name ||= 'help'
788
807
 
789
- context_params.add_context_to_params(entity_name, entity_name)
790
-
808
+ context_params.add_context_to_params(entity_name, entity_name)
809
+
791
810
  if entity_name_id
792
811
  identifier_response = valid_id?(entity_name, entity_name_id, context_params)
793
812
  if identifier_response
@@ -824,7 +843,7 @@ module DTK
824
843
  entity_name, method_name, option_types = nil, nil, nil
825
844
 
826
845
  context_params = ContextParams.new
827
-
846
+
828
847
  if root? && !args.empty?
829
848
  # this means that somebody is calling command with assembly/.. method_name
830
849
  entity_name = cmd
@@ -842,11 +861,11 @@ module DTK
842
861
 
843
862
  if ((current_context_command != entity_name) && !current_context_command.eql?("utils"))
844
863
  current_context_clazz = Context.get_command_class(current_context_command)
845
- options = Context.get_thor_options(current_context_clazz, cmd) unless current_context_command.nil?
864
+ options = Context.get_thor_options(current_context_clazz, cmd) if current_context_clazz
846
865
  else
847
- options = Context.get_thor_options(clazz, cmd) unless clazz.nil?
866
+ options = Context.get_thor_options(clazz, cmd) if clazz
848
867
  end
849
-
868
+
850
869
  # set rest of arguments as method options
851
870
  args, thor_options, invalid_options = Context.parse_thor_options(args, options)
852
871
  context_params.method_arguments = args
@@ -861,7 +880,7 @@ module DTK
861
880
  #
862
881
  def self.parse_thor_options(args, options=nil)
863
882
  type, invalid_options = nil, []
864
-
883
+
865
884
  # options to handle thor options -m MESSAGE and --list
866
885
  options_param_args = []
867
886
  args.each_with_index do |e,i|
@@ -889,13 +908,13 @@ module DTK
889
908
  command = command.gsub('-','_')
890
909
  options = nil
891
910
  options = clazz.all_tasks[command].options.collect{|k,v|{:alias=>v.aliases,:name=>v.name,:type=>v.type,:switch=>v.switch_name}} unless clazz.all_tasks[command].nil?
892
-
911
+
893
912
  return options
894
913
  end
895
914
 
896
- def self.get_option_type(options, option)
915
+ def self.get_option_type(options, option)
897
916
  @ret = nil
898
-
917
+
899
918
  options.each do |opt|
900
919
  @ret = opt[:type] if(opt[:alias].first == option || opt[:switch] == option)
901
920
  end
@@ -925,7 +944,7 @@ module DTK
925
944
  puts "[INFO] History file is missing, shell history will be disabled. To enable it create file: '#{HISTORY_LOCATION}'"
926
945
  return []
927
946
  end
928
-
947
+
929
948
  content = File.open(HISTORY_LOCATION,'r').read
930
949
  return (content.empty? ? [] : JSON.parse(content))
931
950
  end
@@ -937,7 +956,7 @@ module DTK
937
956
  array_of_commands.each_with_index do |a,i|
938
957
  filtered_commands << a if (a != array_of_commands[i+1] && is_allowed_command?(a))
939
958
  end
940
-
959
+
941
960
  # make sure we only save up to 'COMMAND_HISTORY_LIMIT' commands
942
961
  if filtered_commands.size > COMMAND_HISTORY_LIMIT
943
962
  filtered_commands = filtered_commands[-COMMAND_HISTORY_LIMIT,COMMAND_HISTORY_LIMIT+1]
@@ -80,10 +80,10 @@ class Thor
80
80
  # alternative providers
81
81
  alt_identifiers = get_alternative_identifiers(command)
82
82
 
83
-
83
+
84
84
  filtered_list = []
85
85
 
86
- # case when we are not on first level and it is not identifier we skip help
86
+ # case when we are not on first level and it is not identifier we skip help
87
87
  # since it needs to be empty
88
88
  # e.g. assembly/bootstrap1/node> ... HELP IS EMPTY FOR THIS
89
89
 
@@ -106,14 +106,14 @@ class Thor
106
106
 
107
107
  list.each do |help_item|
108
108
  help_item.first.gsub!("^^", '') if help_item.first.include?("^^")
109
-
110
- # this will match entity_name (command) and alternative identifiers
109
+
110
+ # this will match entity_name (command) and alternative identifiers
111
111
  identifers = [command] + alt_identifiers
112
112
 
113
113
  # matches identifiers for ID/NAME
114
114
  matched_data = help_item.first.match(/^\s\[?(#{identifers.join('|')}).?(NAME\/ID|ID\/NAME)\]?\s/)
115
115
  alt_matched_data = help_item.first.match(/^\s\[?(#{alt_identifiers.join('|')}).?(NAME\/ID|ID\/NAME)\]?\s/)
116
-
116
+
117
117
  if matched_data.nil?
118
118
  # not found and tier 1 we add it to help list
119
119
  filtered_list << overriden_help(override_tasks_obj, help_item, true) if @@shell_context.current_command?
@@ -156,17 +156,19 @@ class Thor
156
156
  # we do not need first one, since above code takes care of that one
157
157
  filtered_list = filtered_list.select do |filtered_help_item|
158
158
  #next unless filtered_help_item
159
- commands_that_have_identifiers[1..-1].each_with_index do |entity,i|
160
- matched = match_help_item_changes(filtered_help_item, entity)
161
- filtered_help_item = replace_if_matched!(filtered_help_item, matched)
162
-
163
- # if it is last command, and there were changes
164
- if (i == (commands_that_have_identifiers.size - 2) && matched)
165
- n_filter_list << filtered_help_item
159
+ unless commands_that_have_identifiers.empty?
160
+ commands_that_have_identifiers[1..-1].each_with_index do |entity,i|
161
+ matched = match_help_item_changes(filtered_help_item, entity)
162
+ filtered_help_item = replace_if_matched!(filtered_help_item, matched)
163
+
164
+ # if it is last command, and there were changes
165
+ if (i == (commands_that_have_identifiers.size - 2) && matched)
166
+ n_filter_list << filtered_help_item
167
+ end
166
168
  end
167
169
  end
168
170
  end
169
-
171
+
170
172
  if override_tasks_obj && is_n_level_context
171
173
  last_entity_name = active_context.last_context_entity_name.to_sym
172
174
 
@@ -184,7 +186,7 @@ class Thor
184
186
  end
185
187
  end
186
188
 
187
- # we have just filtered those methods that have attribute for given entity
189
+ # we have just filtered those methods that have attribute for given entity
188
190
  # and also are last in the list
189
191
  filtered_list = n_filter_list
190
192
  end
@@ -198,7 +200,7 @@ class Thor
198
200
 
199
201
  #
200
202
  # e.g.
201
- # dtk assembly_template info
203
+ # dtk assembly_template info
202
204
  # dtk assembly-template info
203
205
  #
204
206
  item[0] = item[0].gsub(/^dtk ([a-zA-Z]+)_([a-zA-Z]+) /,'dtk \1-\2 ')
@@ -208,7 +210,7 @@ class Thor
208
210
 
209
211
  if list.empty?
210
212
  shell.say ""
211
- shell.say "No tasks for current context '#{@@shell_context.active_context.full_path}'."
213
+ shell.say "No tasks for current context '#{@@shell_context.active_context.full_path}'."
212
214
  end
213
215
 
214
216
  # remove helper 3. element in help item list
@@ -237,7 +239,7 @@ class Thor
237
239
  end
238
240
 
239
241
  unless sub_children.empty?
240
- shell.say(" Change context (cc) to: #{sub_children.join(', ')}", :BOLD)
242
+ shell.say(" Change context (cc) to: #{sub_children.join(', ')}", :BOLD)
241
243
  shell.say
242
244
  end
243
245
  end