mysh 0.6.11 → 0.6.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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' ]