A
download Context.rb
Language: Ruby
LOC: 114
Project Info
IOWA
Server: RubyForge
Type: cvs
...Forge\i\iowa\iowa\iowa\src\
   Application.rb
   ApplicationStats.rb
   Association.rb
   BindingsParser.rb
   Client.rb
   Component.rb
   ComponentProxy.rb
   config.rb
   Context.rb
   DbPool.rb
   DynamicElements.rb
   Element.rb
   Form.rb
   HTTPServer.rb
   ISAAC.rb
   KeyValueCoding.rb
   LRUCache.rb
   PageStore.rb
   read_multipart.rb
   Request.rb
   SciTE.properties
   Session.rb
   SessionStats.rb
   SessionStore.rb
   Tag.rb
   TemplateParser.rb
   WEBrickServlet.rb

module Iowa

class Context

	attr_accessor :request, :response
	attr_accessor :actionID, :requestID, :sessionID
	attr_accessor :session, :radio_box_id
	
	def initialize(request, out)
		@request = request
		url = @request.uri
		matchURL = Regexp.new('(/*(?:[^/]*/*)*?)(\w+\-\w+\-\w+\.\w+\.[\w\.]+)*$')
		match = matchURL.match url
		@urlRoot = match[1]
		remainder = match[2]? match[2] : ""
		@urlRoot.sub!(/\/$/,'')
		@sessionID, @requestID, @actionID = remainder.split('.',3)
		@headers = request.headers_in
		@response = out
		@radio_box_id = {}
		self.element_attributes = {}
		reset!
	end

	def element_attributes
		@element_attributes
	end
	
	def element_attributes=(attribute)
		@element_attributes = attribute
	end
	
	def baseURL
		"#{@urlRoot}"
	end
	
	def sessionURL
		"#{@urlRoot}/#{@sessionID}"
	end

	def actionURL
		"#{@urlRoot}/#{@sessionID}.#{@requestID}.#{elementID}"
	end

	def reset!
		@elementID = []
		pushElement
		
		@changes = []
        @actionContext = []
        
		@rootStack = []
		
		@action = nil
		
		@state = {}
		@lastBinding = nil
		@lastRoot = nil
	end
	
	def pushElement
		@elementID.push "1"
	end
	
	def popElement
		@elementID.pop
	end
	
	def nextElement!
		@elementID.last.next!
	end
	
	def elementID
		@elementID.join(".")
	end
	
	def elementID=(val)
		@elementID[-1] = val
	end
	
    def setBindingNow(binding, value)
        binding.set(@rootStack.last, value)
		setBinding(binding, value)
    end
    
	def setBinding(binding, value)
		if(@lastBinding == binding && @lastRoot == root)
			@changes.pop
		end
		@changes.push [root, binding, value]
		@lastBinding = binding
		@lastRoot = root
	end
	
	def getBinding(binding)
		binding.get(root) if binding
	end
	
	def commit(changes)
		changes.each do |target, binding, value|
			binding.set(target, value)
		end
	end
	
	def setAction(binding)
		@action = [root, binding.get(root)]
		@actionContext = @changes.dup
	end
	
	def invokeAction
		raise IgnoreRequest unless @action
		
		nextPage = nil
		page, method = @action
    	commit @changes
        commit @actionContext
		page.invokeAction(method) do |newPage|
			nextPage = newPage
		end
		reset!
		
		nextPage
	end
	
	def pushRoot(root)
		@rootStack.push root
	end
	
	def popRoot
		@rootStack.pop
	end
	
	def root
		@rootStack.last
	end
	
	def [](key)
		@state[key]
	end
	
	def []=(key, val)
		@state[key] = val
	end
end

end

About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us