Class: Cmd

Inherits:
Object
  • Object
show all
Defined in:
lib/mfe.rb

Overview

Represents an individual command

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, cmd) ⇒ Cmd

Creates a new command.



220
221
222
223
# File 'lib/mfe.rb', line 220

def initialize(name, cmd)
  @name = name
  @cmd = cmd
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



203
204
205
# File 'lib/mfe.rb', line 203

def name
  @name
end

Class Method Details

.load(filename) ⇒ Object

Turns a filename into a command! Amazing! Pass the full path.



206
207
208
209
210
# File 'lib/mfe.rb', line 206

def self.load(filename)
  obj = JSON.parse(File.read(filename))

  new(File.basename(filename), obj['cmd'])
end

Instance Method Details

#expand(argv) ⇒ Object

Turns the command into a line of shell, fit to be exec()‘d or “’d.



235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/mfe.rb', line 235

def expand(argv)
  argv = argv.map(&:shell_escape)
  @cmd.map { |this_arg|
    a = this_arg.dup
    a.gsub!(/\bARGS\b/, argv.join(' '))
    a.gsub!(/\bARGEVAL\[(.*)\]/) { |m|
      argeval = $1
      argv.map! { |frozen_arg|
        arg = frozen_arg.dup
        eval(argeval, binding).to_s
      }
      ''
    }
    a.gsub!(/\bEVAL\[(.*)\]/) { |m|
      eval($1, binding).to_s
    }
    a
  }.join(' ')
end

#run(argv) ⇒ Object

run runs the command, returning the output.



256
257
258
# File 'lib/mfe.rb', line 256

def run(argv)
  `#{expand argv}`
end

#save(dirname) ⇒ Object

save, saves the command to a file.



213
214
215
216
217
# File 'lib/mfe.rb', line 213

def save(dirname)
  File.open(File.join(dirname, @name), 'w') { |f|
    f.puts JSON.pretty_unparse(to_hash)
  }
end

#to_hashObject



230
231
232
# File 'lib/mfe.rb', line 230

def to_hash
  {name: @name, cmd: @cmd}
end

#to_sObject

to_s simply returns the command string.



226
227
228
# File 'lib/mfe.rb', line 226

def to_s
  @cmd.join(' ')
end