Class: Hubeye::Server::Strategy

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/hubeye/server/server.rb

Constant Summary collapse

UnknownStrategy =
Class.new(StandardError)
STRATEGY_CLASSES =
[ "Shutdown", "Exit", "SaveHook", "SaveRepo",
"LoadHook", "LoadRepo", "AddHook", "ListHooks", "ListTracking",
"Next", "RmRepo", "AddRepo" ]
STRATEGIES =

STRATEGIES hash

keys: input matches OR lambda {|input| input.something?} => value

values: lambda {|matchdata, basestrategy| SomeStrategy.new(matchdata, basestrategy)}

{
  %r{\Ashutdown\Z} => lambda {|m, s| Shutdown.new(m, s)},
  %r{\Aquit|exit\Z} => lambda {|m, s| Exit.new(m, s)},
  %r{\Atracking\s*\Z} => lambda {|m, s| ListTracking.new(m, s)},
  %r{\Atracking\s*-d\Z} => lambda {|m, s| ListTracking.new(m, s, :details => true)},
  %r{\A\s*save hook(s?) as (.+)\Z} => lambda {|m, s| SaveHook.new(m, s)},
  %r{\A\s*save repo(s?) as (.+)\Z} => lambda {|m, s| SaveRepo.new(m, s)},
  %r{\A\s*load hook(s?) (.+)\Z} => lambda {|m, s| LoadHook.new(m, s)},
  %r{\A\s*load repo(s?) (.+)\Z} => lambda {|m, s| LoadRepo.new(m, s)},
  %r{\A\s*internal load hook(s?) (.+)\Z} => lambda {|m, s| LoadHook.new(m, s, :internal => true)},
  %r{\A\s*internal load repo(s?) (.+)\Z} => lambda {|m, s| LoadRepo.new(m, s, :internal => true)},
  %r{\Ahook add ([-\w]+/[-\w]+) (dir:\s?(.*))?\s*cmd:\s?(.*)\Z} => lambda {|m, s| AddHook.new(m, s)},
  %r{\Ahook list\Z} => lambda {|m, s| ListHooks.new(m, s)},
  %r{^\s*$} => lambda {|m, s| Next.new(m, s)},
  %r{\Arm ([-\w]+/?[-\w]*)\Z} => lambda {|m, s| RmRepo.new(m, s)},
  lambda {|inp| inp.include? '/'} => lambda {|m, s| AddRepo.new(m, s, :fullpath => true)},
  lambda {|inp| not inp.nil?} => lambda {|m, s| AddRepo.new(m, s)}
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server, options = {}) ⇒ Strategy

Returns a new instance of Strategy.



370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/hubeye/server/server.rb', line 370

def initialize(server, options={})
  @server = server
  opts = {:internal_input => nil}.merge options
  invalid_input = lambda {
    @server.remote_connection = false
    throw(:invalid_input)
  }

  if !opts[:internal_input]
    begin
      @input = socket.read_all
    rescue => e
      STDOUT.puts e
      invalid_input.call
    end
    # check if the client pressed ^C or ^D
    if @input.nil?
      invalid_input.call
    end
  else
    @input = opts[:internal_input]
  end
  @input = @input.strip.downcase
  @input.gsub! /diiv/, '/'
end

Instance Attribute Details

#inputObject (readonly)

Returns the value of attribute input.



364
365
366
# File 'lib/hubeye/server/server.rb', line 364

def input
  @input
end

#serverObject (readonly)

Returns the value of attribute server.



364
365
366
# File 'lib/hubeye/server/server.rb', line 364

def server
  @server
end

Instance Method Details

#callObject

Raises:



442
443
444
445
446
447
448
449
450
451
452
453
454
455
# File 'lib/hubeye/server/server.rb', line 442

def call
  STRATEGIES.each do |inp,strat|
    if inp.respond_to? :match
      if m = @input.match(inp)
        return strat.call(m, self)
      end
    elsif inp.respond_to? :call
      if m = inp.call(@input)
        return strat.call(m, self)
      end
    end
  end
  raise UnknownStrategy
end