mysh 0.6.11 → 0.6.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -3
  3. data/lib/mysh.rb +15 -6
  4. data/lib/mysh/{internal/action.rb → action.rb} +8 -8
  5. data/lib/mysh/{internal/action_pool.rb → action_pool.rb} +8 -8
  6. data/lib/mysh/{internal/actions/command_line.rb → command_line.rb} +10 -10
  7. data/lib/mysh/{internal/actions/command_line → command_line}/debug.rb +9 -11
  8. data/lib/mysh/command_line/history.rb +61 -0
  9. data/lib/mysh/{internal/actions/command_line → command_line}/init.rb +8 -8
  10. data/lib/mysh/{internal/actions/command_line → command_line}/load.rb +5 -5
  11. data/lib/mysh/{internal/actions/command_line → command_line}/pause.rb +6 -8
  12. data/lib/mysh/{internal/actions/command_line → command_line}/post_prompt.rb +10 -12
  13. data/lib/mysh/{internal/actions/command_line → command_line}/pre_prompt.rb +10 -12
  14. data/lib/mysh/{internal/actions/command_line → command_line}/prompt.rb +9 -10
  15. data/lib/mysh/command_line/quit.rb +19 -0
  16. data/lib/mysh/{internal/actions/command_line → command_line}/usage.rb +4 -4
  17. data/lib/mysh/external.rb +3 -4
  18. data/lib/mysh/globalize.rb +5 -14
  19. data/lib/mysh/handlebars.rb +1 -3
  20. data/lib/mysh/handlebars/{string.rb → eval_handlebars.rb} +5 -3
  21. data/lib/mysh/{internal/actions/help → help}/env.txt +0 -0
  22. data/lib/mysh/{internal/actions/help → help}/expr.txt +0 -0
  23. data/lib/mysh/{internal/actions/help → help}/gem.txt +0 -0
  24. data/lib/mysh/{internal/actions/help → help}/gls.txt +0 -0
  25. data/lib/mysh/{internal/actions/help → help}/h_o_h.txt +1 -1
  26. data/lib/mysh/{internal/actions/help → help}/hbar.txt +0 -0
  27. data/lib/mysh/{internal/actions/help → help}/help.txt +0 -0
  28. data/lib/mysh/{internal/actions/help → help}/history.txt +7 -0
  29. data/lib/mysh/{internal/actions/help → help}/init.txt +0 -0
  30. data/lib/mysh/{internal/actions/help → help}/kbd.txt +0 -0
  31. data/lib/mysh/{internal/actions/help → help}/math.txt +0 -0
  32. data/lib/mysh/{internal/actions/help → help}/mls.txt +0 -0
  33. data/lib/mysh/{internal/actions/help → help}/quick.txt +0 -0
  34. data/lib/mysh/{internal/actions/help → help}/ruby.txt +0 -0
  35. data/lib/mysh/{internal/actions/help → help}/show.txt +0 -0
  36. data/lib/mysh/{internal/actions/help → help}/term.txt +0 -0
  37. data/lib/mysh/{internal/actions/help → help}/timed.txt +0 -0
  38. data/lib/mysh/help/type.txt +28 -0
  39. data/lib/mysh/{internal/actions/help → help}/types.txt +0 -0
  40. data/lib/mysh/{internal/actions/help → help}/usage.txt +0 -0
  41. data/lib/mysh/{internal/actions/help → help}/vars.txt +4 -4
  42. data/lib/mysh/input_wrapper.rb +13 -13
  43. data/lib/mysh/internal.rb +20 -8
  44. data/lib/mysh/internal/{actions/cancel.rb → cancel.rb} +0 -0
  45. data/lib/mysh/internal/{actions/cd.rb → cd.rb} +2 -2
  46. data/lib/mysh/internal/{actions/comment.rb → comment.rb} +2 -2
  47. data/lib/mysh/internal/{actions/elapsed.rb → elapsed.rb} +2 -2
  48. data/lib/mysh/internal/{actions/exit.rb → exit.rb} +0 -0
  49. data/lib/mysh/internal/{actions/gls.rb → gls.rb} +6 -7
  50. data/lib/mysh/internal/{actions/help.rb → help.rb} +7 -9
  51. data/lib/mysh/internal/{actions/history.rb → history.rb} +10 -9
  52. data/lib/mysh/internal/load.rb +45 -0
  53. data/lib/mysh/internal/{actions/mls.rb → mls.rb} +2 -2
  54. data/lib/mysh/internal/{actions/pwd.rb → pwd.rb} +1 -1
  55. data/lib/mysh/internal/{actions/say.rb → say.rb} +1 -1
  56. data/lib/mysh/internal/{actions/show.rb → show.rb} +7 -6
  57. data/lib/mysh/internal/{actions/help → support}/sub_help.rb +9 -7
  58. data/lib/mysh/internal/type.rb +38 -0
  59. data/lib/mysh/internal/{actions/vars.rb → vars.rb} +8 -8
  60. data/lib/mysh/{init.rb → load_init_file.rb} +3 -3
  61. data/lib/mysh/process.rb +7 -7
  62. data/lib/mysh/quick.rb +3 -3
  63. data/lib/mysh/shell_variables.rb +9 -4
  64. data/lib/mysh/shell_variables/evaluate.rb +2 -11
  65. data/lib/mysh/shell_variables/shell_variable_keeper.rb +6 -7
  66. data/lib/mysh/shell_variables/shell_variable_store.rb +13 -14
  67. data/lib/mysh/{internal/actions/show → show}/env.rb +1 -1
  68. data/lib/mysh/{internal/actions/show → show}/gem.rb +0 -0
  69. data/lib/mysh/{internal/actions/show → show}/ruby.rb +0 -0
  70. data/lib/mysh/{internal/actions/show → show}/term.rb +0 -0
  71. data/lib/mysh/sources/console.rb +11 -7
  72. data/lib/mysh/sources/parse.rb +7 -10
  73. data/lib/mysh/sources/smart_auto_complete.rb +5 -5
  74. data/lib/mysh/sources/string.rb +6 -6
  75. data/lib/mysh/string_helpers.rb +37 -0
  76. data/lib/mysh/system.rb +2 -2
  77. data/lib/mysh/user_input.rb +5 -9
  78. data/lib/mysh/version.rb +4 -4
  79. data/mysh.gemspec +5 -4
  80. data/tests/my_shell_tests.rb +13 -0
  81. metadata +81 -68
  82. data/lib/mysh/internal/actions/actions_path.rb +0 -15
  83. data/lib/mysh/internal/actions/command_line/quit.rb +0 -19
  84. data/lib/mysh/internal/actions/load.rb +0 -36
  85. data/lib/mysh/internal/actions/type.rb +0 -22
  86. data/lib/mysh/internal/manage.rb +0 -20
  87. data/lib/mysh/internal/to_file_spec.rb +0 -26
  88. data/lib/mysh/pre_processor.rb +0 -11
@@ -1,62 +1,62 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/input_wrapper.rb -- An action compatible wrapper for a input.
3
+ # An action compatible wrapper for a input.
4
4
  module Mysh
5
5
 
6
- #* mysh/internal/input_wrapper.rb -- An action compatible wrapper for a input.
6
+ # An action compatible wrapper for a input.
7
7
  class InputWrapper
8
8
 
9
- #Build an input wrapper.
9
+ # Build an input wrapper.
10
10
  def initialize(raw)
11
11
  @raw = raw.chomp
12
12
  @raw_command = @raw_body = nil
13
13
  end
14
14
 
15
- #Access the raw text.
15
+ # Access the raw text.
16
16
  attr_reader :raw
17
17
 
18
- #Get the first raw character.
18
+ # Get the first raw character.
19
19
  def quick_command
20
20
  @raw[0] || ""
21
21
  end
22
22
 
23
- #Get the balance of the raw string.
23
+ # Get the balance of the raw string.
24
24
  def quick_body
25
25
  @raw[1..-1] || ""
26
26
  end
27
27
 
28
- #Get the command word if it exists.
28
+ # Get the command word if it exists.
29
29
  def raw_command
30
30
  @raw_command ||= @raw.split[0] || ""
31
31
  end
32
32
 
33
- #Get the parameter text.
33
+ # Get the parameter text.
34
34
  def raw_body
35
35
  @raw_body ||= @raw[(raw_command.length + 1)..-1] || ""
36
36
  end
37
37
 
38
- #Get the preprocessed argument text.
38
+ # Get the preprocessed argument text.
39
39
  def cooked_body
40
40
  raw_body.preprocess
41
41
  end
42
42
 
43
- #Access the massaged text.
43
+ # Access the massaged text.
44
44
  def cooked
45
45
  body = cooked_body
46
46
  raw_command + (body.empty? ? "" : " " + body)
47
47
  end
48
48
 
49
- #Get the parsed arguments
49
+ # Get the parsed arguments
50
50
  def args
51
51
  Mysh.parse_args(cooked_body)
52
52
  end
53
53
 
54
- #Get the parsed command line.
54
+ # Get the parsed command line.
55
55
  def parsed
56
56
  [raw_command] + args
57
57
  end
58
58
 
59
- #Set up input for a quick style command.
59
+ # Set up input for a quick style command.
60
60
  def quick
61
61
  @raw_command = quick_command
62
62
  @raw_body = quick_body
@@ -1,10 +1,22 @@
1
1
  # coding: utf-8
2
2
 
3
- require_relative 'internal/actions/actions_path'
4
- require_relative 'internal/action'
5
- require_relative 'internal/action_pool'
6
- require_relative 'internal/manage'
7
- require_relative 'internal/to_file_spec'
8
-
9
- #Load up the internal actions!
10
- Dir[Mysh::Action::ACTIONS_PATH + '*.rb'].each {|file| require file }
3
+ module Mysh
4
+
5
+ # Set up the command action pool.
6
+ COMMANDS = ActionPool.new("COMMANDS")
7
+
8
+ # Try to execute the string as an internal action.
9
+ def self.try_execute_internal(input)
10
+ unless input.quick_command == ' '
11
+ if (action = COMMANDS[input.raw_command])
12
+ action.process_command(input)
13
+ :internal
14
+ end
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ # Load up the internal actions!
21
+ load_spec = MYSH_LIB + "mysh/internal/*.rb"
22
+ Dir[load_spec].each {|file| require file }
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/cd.rb -- The mysh internal cd command.
3
+ # The mysh internal cd command.
4
4
  module Mysh
5
5
 
6
- #Add the cd command to the library.
6
+ # Add the cd command to the library.
7
7
  desc = 'Change directory to the optional <dir> parameter ' +
8
8
  'or display the current working directory.'
9
9
 
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/comment.rb -- A mysh internal comment.
3
+ # A mysh internal comment.
4
4
  module Mysh
5
5
 
6
- #Add comments to the library.
6
+ # Add comments to the library.
7
7
  desc = 'A mysh comment. No action taken'
8
8
  action = lambda {|_input| :internal}
9
9
 
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/elapsed.rb -- The mysh internal elapsed command.
3
+ # The mysh internal elapsed command.
4
4
  module Mysh
5
5
 
6
- #Add the elapsed commands to the library.
6
+ # Add the elapsed commands to the library.
7
7
  desc = 'Execute a command and then display the elapsed time. See ?% for more.'
8
8
 
9
9
  action = lambda do |input|
@@ -1,18 +1,18 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/gls.rb -- The mysh gls (gem ls) command.
3
+ # The mysh gls (gem ls) command.
4
4
  module Mysh
5
5
 
6
- #* mysh/internal/actions/gls.rb -- The mysh gls (gem ls) command.
6
+ # The mysh gls (gem ls) command.
7
7
  class GlsCommand < Action
8
8
 
9
- #Set up this command.
9
+ # Set up this command.
10
10
  def initialize(*args)
11
11
  super
12
12
  @report = @mask = @specs = nil
13
13
  end
14
14
 
15
- #Execute the gls command.
15
+ # Execute the gls command.
16
16
  def process_command(input)
17
17
  process_args(input.args)
18
18
  gather_gems
@@ -57,9 +57,8 @@ module Mysh
57
57
  report.puts_format_output_bullets
58
58
  end
59
59
 
60
- #Get detailed information on a gem specification.
61
- #<br>Endemic Code Smells
62
- #* :reek:UtilityFunction
60
+ # Get detailed information on a gem specification.
61
+ # Endemic Code Smells :reek:UtilityFunction
63
62
  def info(spec)
64
63
  [["name", spec.name],
65
64
  ["version", spec.version],
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/help.rb -- The mysh internal help command.
3
+ # The mysh internal help command.
4
4
  module Mysh
5
5
 
6
6
  # Help action pool of topics.
@@ -21,12 +21,11 @@ module Mysh
21
21
 
22
22
  HELP = ActionPool.new("HELP", default)
23
23
 
24
- #* mysh/internal/actions/help.rb -- The mysh internal help command.
24
+ # The mysh internal help command.
25
25
  class HelpCommand < Action
26
26
 
27
- #Execute a help command by routing it to a sub-command.
28
- #<br>Endemic Code Smells
29
- #* :reek:UtilityFunction
27
+ # Execute a help command by routing it to a sub-command.
28
+ # Endemic Code Smells :reek:UtilityFunction
30
29
  def process_command(input)
31
30
  args = input.args
32
31
  HELP[args[0] || ""].process_command(args)
@@ -37,12 +36,11 @@ module Mysh
37
36
  # The base help command.
38
37
  desc = 'Display help information for mysh with an optional topic. See ?? for more.'
39
38
  COMMANDS.add_action(HelpCommand.new('help <topic>', desc))
39
+
40
40
  #The help command action object.
41
41
  HELP_COMMAND = HelpCommand.new('?<topic>', desc)
42
42
  COMMANDS.add_action(HELP_COMMAND)
43
43
  end
44
44
 
45
- require_relative 'help/sub_help'
46
-
47
- #Load up the extra help actions!
48
- Dir[Mysh::Action::ACTIONS_PATH + 'help/*.rb'].each {|file| require file }
45
+ # Load in support for help sub-topics
46
+ require_relative 'support/sub_help'
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/history.rb -- The mysh internal history command.
3
+ # The mysh internal history command.
4
4
  module Mysh
5
5
 
6
- #* mysh/internal/actions/history.rb -- The mysh internal history command.
6
+ # The mysh internal history command.
7
7
  class HistoryCommand < Action
8
8
 
9
9
  #Set up this command.
@@ -12,11 +12,11 @@ module Mysh
12
12
  @args = @history = nil
13
13
  end
14
14
 
15
- #Execute the history command.
15
+ # Execute the history command.
16
16
  def process_command(input)
17
17
  @args, @history = input.args, Mysh.input.history
18
18
 
19
- #The history command should not be part of the history.
19
+ # The history command should not be part of the history.
20
20
  @history.pop
21
21
 
22
22
  pull_index || clear_history || show_history
@@ -24,7 +24,7 @@ module Mysh
24
24
 
25
25
  private
26
26
 
27
- #Deal with history index arguments
27
+ # Deal with history index arguments
28
28
  def pull_index
29
29
  index = @args[0].to_i
30
30
 
@@ -35,7 +35,7 @@ module Mysh
35
35
  end
36
36
  end
37
37
 
38
- #Clear the history buffer.
38
+ # Clear the history buffer.
39
39
  def clear_history
40
40
  if @args[0] == 'clear'
41
41
  @history.clear
@@ -44,7 +44,7 @@ module Mysh
44
44
  end
45
45
  end
46
46
 
47
- #Just show the history.
47
+ # Just show the history.
48
48
  def show_history
49
49
  pattern = Regexp.new(@args[0] || /./)
50
50
 
@@ -55,10 +55,11 @@ module Mysh
55
55
 
56
56
  end
57
57
 
58
- #Add the history commands to the library.
58
+ # Add the history commands to the library.
59
59
  desc = 'Display the mysh command history. See ?! for more.'
60
60
  COMMANDS.add_action(HistoryCommand.new('history <arg>', desc))
61
- #The history command action object.
61
+
62
+ # The history command action object.
62
63
  HISTORY_COMMAND = HistoryCommand.new('!<arg>', desc)
63
64
  COMMANDS.add_action(HISTORY_COMMAND)
64
65
  end
@@ -0,0 +1,45 @@
1
+ # coding: utf-8
2
+
3
+ # The mysh load command.
4
+ module Mysh
5
+
6
+ # Add the load command to the library.
7
+ desc = "Load ruby programs, mysh scripts, " +
8
+ "or text files into the mysh environment."
9
+
10
+ action = lambda do |input|
11
+ count = 0
12
+ args = input.args
13
+
14
+ args.each do |file_name|
15
+ puts file_name if args.length > 1
16
+ Mysh.load_a_file(file_name)
17
+ count += 1
18
+ end
19
+
20
+ if count > 0
21
+ :internal
22
+ else
23
+ fail "Error: A load file must be specified."
24
+ end
25
+ end
26
+
27
+ # Load a single file.
28
+ def self.load_a_file(file_name)
29
+ case File.extname(file_name)
30
+ when '.mysh'
31
+ Mysh.process_file(file_name)
32
+ :internal
33
+ when '.txt'
34
+ show_handlebar_file(file_name, binding)
35
+ :internal
36
+ when '.rb'
37
+ load file_name
38
+ :internal
39
+ else
40
+ fail "Error: Unknown file type: #{file_name.inspect}"
41
+ end
42
+ end
43
+
44
+ COMMANDS.add_action(Action.new('load <files>', desc, &action))
45
+ end
@@ -2,10 +2,10 @@
2
2
 
3
3
  require 'vls'
4
4
 
5
- #* mysh/internal/actions/mls.rb -- The mysh module ls command.
5
+ # The mysh module ls command.
6
6
  module Mysh
7
7
 
8
- #Add the mls command to the library.
8
+ # Add the mls command to the library.
9
9
  desc = 'Display modules with version info. See ?mls for more.'
10
10
 
11
11
  action = lambda do |input|
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/pwd.rb -- The mysh internal pwd command.
3
+ # The mysh internal pwd command.
4
4
  module Mysh
5
5
 
6
6
  desc = 'Display the current working directory.'
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/say.rb -- A mysh internal say command.
3
+ # The mysh internal say command.
4
4
  module Mysh
5
5
 
6
6
  #Add says to the library.
@@ -1,19 +1,19 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/show.rb -- The mysh internal show command.
3
+ # The mysh internal show command.
4
4
  module Mysh
5
5
 
6
6
  # The working message for long duration processing.
7
7
  WORKING = "Working...\r"
8
8
 
9
- #Show items.
9
+ # Show items.
10
10
  default = Action.new do |input|
11
11
  puts "No show data found for #{input.raw.inspect}. See ?@ for more."
12
12
  end
13
13
 
14
14
  SHOW = ActionPool.new("SHOW", default)
15
15
 
16
- #The shared description.
16
+ # The shared description.
17
17
  desc = "Display information about a part of mysh. See ?@ for more."
18
18
 
19
19
  action = lambda do |input|
@@ -26,11 +26,12 @@ module Mysh
26
26
  end
27
27
  end
28
28
 
29
- #The show command action object.
29
+ # The show command action object.
30
30
  COMMANDS.add_action(Action.new('show <item>', desc, &action))
31
31
  SHOW_COMMAND = Action.new('@<item>', desc, &action)
32
32
  COMMANDS.add_action(SHOW_COMMAND)
33
33
  end
34
34
 
35
- #Load up the extra help actions!
36
- Dir[Mysh::Action::ACTIONS_PATH + 'show/*.rb'].each {|file| require file }
35
+ # Load up the various show actions!
36
+ path = MYSH_LIB + "mysh/show/*.rb"
37
+ Dir[path].each {|file| require file }
@@ -1,12 +1,12 @@
1
1
  # coding: utf-8
2
2
 
3
- #* mysh/internal/actions/help/sub_help.rb -- The mysh internal help sub commands.
3
+ # The mysh internal help sub commands.
4
4
  module Mysh
5
5
 
6
- #* mysh/internal/actions/help/sub_help.rb -- The mysh internal help sub commands.
6
+ # The mysh internal help sub commands.
7
7
  class HelpSubCommand < Action
8
8
 
9
- #Setup a help command.
9
+ # Setup a help command.
10
10
  def initialize(name, description, file_name)
11
11
  super(name, description)
12
12
  @file_name = file_name
@@ -14,12 +14,13 @@ module Mysh
14
14
 
15
15
  #Execute a help command.
16
16
  def process_command(_args)
17
- mysh "load #{(ACTIONS_PATH + 'help/' + @file_name).to_host_spec}"
17
+ path = MYSH_LIB + "mysh/help/" + @file_name
18
+ mysh "load #{path.to_host_spec}"
18
19
  end
19
20
 
20
21
  end
21
22
 
22
- #Add help topics here. Don't sweat the order; they get sorted by name.
23
+ # Add help topics here. Don't sweat the order; they get sorted by name.
23
24
  # Name Description Help File
24
25
  help = [['', 'General help on mysh.', 'help.txt' ],
25
26
  ['set', 'Help on mysh variables.', 'vars.txt' ],
@@ -34,13 +35,14 @@ module Mysh
34
35
  ['usage', 'Help on mysh usage.', 'usage.txt' ],
35
36
  ['=', 'Help on ruby expressions.', 'expr.txt' ],
36
37
  ['quick', 'Help on quick commands.', 'quick.txt' ],
37
- ['gls', 'Help on gls internal mysh command.', 'gls.txt' ],
38
- ['mls', 'Help on mls internal mysh command.', 'mls.txt' ],
38
+ ['gls', 'Help on the gls command.', 'gls.txt' ],
39
+ ['mls', 'Help on the mls command.', 'mls.txt' ],
39
40
  ['!', 'Help on the history command.', 'history.txt'],
40
41
  ['history', 'Help on the history command.', 'history.txt'],
41
42
  ['kbd', 'Help on mysh keyboard mapping.', 'kbd.txt' ],
42
43
  ['{{', 'Help on mysh handlebars.', 'hbar.txt' ],
43
44
  ['init', 'Help on mysh initialization.', 'init.txt' ],
45
+ ['type', 'Help on the type command.', 'type.txt' ],
44
46
  ['types', 'Help on mysh file types.', 'types.txt' ],
45
47
  ['help', 'This help on the help command.', 'h_o_h.txt' ],
46
48
  ['?', 'This help on the help command.', 'h_o_h.txt' ]