Module: Mixin::Shell

Includes:
Guess
Defined in:
lib/fox/interface/thor/mixin/shell.rb

Instance Method Summary collapse

Methods included from Guess

#guess_version

Instance Method Details

#execute(command) ⇒ String

Returns result of command

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
# File 'lib/fox/interface/thor/mixin/shell.rb', line 70

def execute command

  exists  = which( command )
  raise ArgumentError, "Command not found" unless( exists )
  result  = `#{command}`

  return result
end

#initialize(*args) ⇒ Object



27
28
29
# File 'lib/fox/interface/thor/mixin/shell.rb', line 27

def initialize *args
  super
end

#run(command, regexp = nil) ⇒ String



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/fox/interface/thor/mixin/shell.rb', line 41

def run command, regexp = nil

  result      = ''

  begin
    if( regexp.nil? )
      result  = execute( command ).strip
    else
      raise ArgumentError, 'Regular Expression input needs to be of type Regexp' unless( regexp.is_a?( Regexp ) )

      result  = execute( command ).andand.send( :match, regexp ).andand.send( :to_s ).strip
    end

  rescue Exception => e
    say '(EE) ' + e.message, :red
    result    = ''
  end

  return result
end

#version(command) ⇒ String



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/fox/interface/thor/mixin/shell.rb', line 113

def version command

  result      = ""

  begin

    # Sanity
    raise ArgumentError, "Command not found" unless( which( command ) )

    # Get usage help screen for command
    help      = usage( command )

    # Get version flag from help screen
    flag      = version_flag( help )

    return result if( flag.empty? ) # some stupid commands don't follow standard rules, e.g. bundle

    # Get actual version string
    banner    = run( command + " " + flag )

    # Guess way to extract and extract semver
    result    = guess_version( banner.to_s )

  rescue Exception => e
    say "(EE) " + e.message, :red
    result    = ""
  end

  return result
end

#which(command) ⇒ Boolean Also known as: exists?



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fox/interface/thor/mixin/shell.rb', line 90

def which command
  result      = false

  begin
    partial   = command.to_s
    partial   = partial.split(' ').first.to_s if( partial =~ %r{ }i )
    path      = File.which( partial )

    result    = true unless( path.nil? )
  rescue Exception => e
    say "(EE) " + e.message, :red
    result    = false
  end

  return result
end