Class: Hubeye::Server::Strategy
- Inherits:
-
Object
- Object
- Hubeye::Server::Strategy
- Defined in:
- lib/server/hubeye_server.rb
Defined Under Namespace
Classes: AddHook, AddRepo, Exit, ListHooks, ListTracking, LoadHook, LoadRepo, Next, RmRepo, SaveHook, SaveRepo, Shutdown
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{\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{\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{^pwd} => lambda {|m, s| AddRepo.new(m, s, :pwd => true)}, %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
-
#input ⇒ Object
readonly
Returns the value of attribute input.
-
#server ⇒ Object
readonly
Returns the value of attribute server.
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(server, options = {}) ⇒ Strategy
constructor
A new instance of Strategy.
Constructor Details
#initialize(server, options = {}) ⇒ Strategy
Returns a new instance of Strategy.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/server/hubeye_server.rb', line 110 def initialize(server, ={}) @server = server opts = {:internal_input => nil}.merge if !opts[:internal_input] @input = server.socket.gets # check if the client pressed ^C or ^D if @input.nil? @server.remote_connection = false throw(:invalid_input) end @input.chop! else @input = opts[:internal_input] end unless @input Logger.log "Client on #{@server.socket.peeraddr[2]} disconnected." @server.sockets.delete(socket) @server.socket.close return end @input = @input.strip.downcase @input.gsub! /diiv/, '/' end |
Instance Attribute Details
#input ⇒ Object (readonly)
Returns the value of attribute input.
108 109 110 |
# File 'lib/server/hubeye_server.rb', line 108 def input @input end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
108 109 110 |
# File 'lib/server/hubeye_server.rb', line 108 def server @server end |
Instance Method Details
#call ⇒ Object
468 469 470 471 472 473 474 475 476 477 478 479 480 481 |
# File 'lib/server/hubeye_server.rb', line 468 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 |