Module: Rib::Runner

Defined in:
lib/rib/runner.rb

Class Method Summary collapse

Class Method Details

.command_descriptionsObject



48
49
50
51
52
53
54
55
# File 'lib/rib/runner.rb', line 48

def command_descriptions
  @command_descriptions ||=
  {'all'    => 'Load all recommended plugins'                ,
   'min'    => 'Run the minimum essence'                     ,
   'auto'   => 'Run as Rails or Ramaze console (auto-detect)',
   'rails'  => 'Run as Rails console'                        ,
   'ramaze' => 'Run as Ramaze console'                       }
end

.command_namesObject



38
39
40
41
42
43
44
45
46
# File 'lib/rib/runner.rb', line 38

def command_names
  @command_names ||=
  Gem.path.map{ |path|
    Dir["#{path}/bin/*"].map{ |f|
      (File.executable?(f) && File.basename(f) =~ /^rib\-(\w+)$/ && $1) ||
       nil    # a trick to make false to be nil and then
    }.compact # this compact could eliminate them
  }.flatten
end

.commandsObject



33
34
35
36
# File 'lib/rib/runner.rb', line 33

def commands
   @commands ||=
    command_names.map{ |n| [n, command_descriptions[n] || ' '] }
end

.helpObject



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rib/runner.rb', line 118

def help
  maxn = options.transpose.first.map(&:size).max
  maxd = options.transpose.last .map(&:size).max
  "Usage: #{Rib.config[:name]}"                    \
  " [ruby OPTIONS] [rib OPTIONS] [rib COMMANDS]\n" +
  options.map{ |(name, desc)|
    if desc.empty?
      name
    else
      sprintf("  %-*s  %-*s", maxn, name, maxd, desc)
    end
  }.join("\n")
end

.load_command(command) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/rib/runner.rb', line 132

def load_command command
  bin  = "rib-#{command}"
  path = `which #{bin}`.strip
  if path == ''
    Rib.warn(
      "Can't find #{bin} in $PATH. Please make sure it is installed,",
      "or is there any typo? You can try this to install it:\n"         ,
      "    gem install #{bin}")
  else
    Rib.config[:name] = bin
    load(path)
  end
end

.optionsObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rib/runner.rb', line 6

def options
  @options ||=
  [['ruby options:'    , ''                                        ],
   ['-e, --eval LINE'                                               ,
    'Evaluate a LINE of code'                                      ],

   ['-d, --debug'                                                   ,
    'Set debugging flags (set $DEBUG to true)'                     ],

   ['-w, --warn'                                                    ,
     'Turn warnings on for your script (set $-w to true)'          ],

   ['-I, --include PATH'                                            ,
     'Specify $LOAD_PATH (may be used more than once)'             ],

   ['-r, --require LIBRARY'                                         ,
     'Require the library, before executing your script'           ],

   ['rib options:'     , ''                                        ],
   ['-c, --config FILE', 'Load config from FILE'                   ],
   ['-n, --no-config'  , 'Suppress loading ~/.config/rib/config.rb'],
   ['-h, --help'       , 'Print this message'                      ],
   ['-v, --version'    , 'Print the version'                       ]] +

  [['rib commands:'    , '']] + commands
end

.parse(argv) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/rib/runner.rb', line 70

def parse argv
  unused = []
  until argv.empty?
    case arg = argv.shift
    when /-e=?(.+)?/, /--eval=?(.+)?/
      eval($1 || argv.shift, binding, __FILE__, __LINE__)

    when /-d/, '--debug'
      $DEBUG = true
      argv.unshift("-#{arg[2..-1]}") if arg.size > 2

    when /-w/, '--warn'
      $-w, $VERBOSE = true, true
      argv.unshift("-#{arg[2..-1]}") if arg.size > 2

    when /-I=?(.+)?/, /--include=?(.+)?/
      paths = ($1 || argv.shift).split(':')
      $LOAD_PATH.unshift(*paths)

    when /-r=?(.+)?/, /--require=?(.+)?/
      require($1 || argv.shift)

    when /-c=?(.+)?/, /--config=?(.+)?/
      Rib.config[:config] = $1 || argv.shift

    when /-n/, '--no-config'
      Rib.config.delete(:config)
      argv.unshift("-#{arg[2..-1]}") if arg.size > 2

    when /-h/, '--help'
      puts(help)
      exit

    when /-v/, '--version'
      require 'rib/version'
      puts(Rib::VERSION)
      exit

    when /^[^-]/
      load_command(arg)

    else
      unused << arg
    end
  end
  unused
end

.run(argv = ARGV) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rib/runner.rb', line 57

def run argv=ARGV
  (@running_commands ||= []) << Rib.config[:name]
  unused = parse(argv)
  # if it's running a Rib command, the loop would be inside Rib itself
  # so here we only parse args for the command
  return if @running_commands.pop != 'rib'
  # by comming to this line, it means now we're running Rib main loop,
  # not any other Rib command
  Rib.warn("Unused arguments: #{unused.inspect}") unless unused.empty?
  require 'rib/core' if Rib.config.delete(:mimic_irb)
  Rib.shell.loop
end