Author: achiumenti
Date: Sun Apr 27 12:15:22 2008
New Revision: 43
Modified:
trunk/main/claw-core/src/lisplet.lisp
trunk/main/claw-core/src/misc.lisp
trunk/main/claw-core/src/packages.lisp
trunk/main/claw-core/src/tags.lisp
trunk/main/claw-core/src/translators.lisp
trunk/main/claw-core/src/validators.lisp
trunk/main/claw-core/tests/test1.lisp
Log:
API cleanup
Modified: trunk/main/claw-core/src/lisplet.lisp
==============================================================================
--- trunk/main/claw-core/src/lisplet.lisp (original)
+++ trunk/main/claw-core/src/lisplet.lisp Sun Apr 27 12:15:22 2008
@@ -86,7 +86,7 @@
(setf *http-error-handler*
;;overrides the default hunchentoot error handling
#'(lambda (error-code)
- (let* ((error-handlers (lisplet-error-hadlers (current-lisplet)))
+ (let* ((error-handlers (lisplet-error-handlers (current-lisplet)))
(handler (gethash error-code error-handlers)))
(if handler
(funcall handler)
@@ -112,7 +112,7 @@
:accessor lisplet-pages
:documentation "A collection of cons where the car is an url location and the cdr is a dispatcher")
(error-handlers :initform (make-hash-table)
- :accessor lisplet-error-hadlers
+ :accessor lisplet-error-handlers
:documentation "An hash table where keys are http error codes and values are functions with no parameters")
(protected-resources :initform nil
:accessor lisplet-protected-resources
@@ -192,9 +192,7 @@
(uri (request-uri))
(welcome-page (lisplet-welcome-page lisplet)))
(progn
- ;;(setf (aux-request-value 'lisplet) lisplet)
(setf (current-lisplet) lisplet)
- ;;(setf (aux-request-value 'realm) (lisplet-realm lisplet))
(setf (current-realm) (lisplet-realm lisplet))
(lisplet-check-authorization lisplet)
(when (= (return-code) +http-ok+)
Modified: trunk/main/claw-core/src/misc.lisp
==============================================================================
--- trunk/main/claw-core/src/misc.lisp (original)
+++ trunk/main/claw-core/src/misc.lisp Sun Apr 27 12:15:22 2008
@@ -74,7 +74,7 @@
(let ((result (remove-by-location (car location-cons) cons-list)))
(setf result (push location-cons result))))
-(defun lisplet-start-session ()
+(defun start-session ()
"Starts a session bound to the current lisplet base path"
(start-session (format nil "~@[~a~]~a/" *clawserver-base-path* (lisplet-base-path (current-lisplet)))))
@@ -119,7 +119,7 @@
(defun (setf current-principal) (principal &optional (session *session*))
"Setf the principal(user) that logged into the application"
(unless session
- (setf session (lisplet-start-session)))
+ (setf session (start-session)))
(setf (session-value 'principal session) principal))
(defun user-in-role-p (roles &optional (session *session*))
@@ -191,7 +191,7 @@
,default-val)))))
(defun do-message (key &optional (default "") locale)
- "This function call the lambda function returned by the WITH-MESSAGE macro."
+ "This function calls the lambda function returned by the WITH-MESSAGE macro."
(funcall (with-message key default locale)))
(defun user-locale (&optional (request *request*) (session *session*))
@@ -211,7 +211,7 @@
"This function forces the locale for the current user, binding it to the user session,
that is created if no session exists."
(unless session
- (setf session (lisplet-start-session)))
+ (setf session (start-session)))
(setf (session-value 'locale session) locale))
(defun validation-errors (&optional (request *request*))
Modified: trunk/main/claw-core/src/packages.lisp
==============================================================================
--- trunk/main/claw-core/src/packages.lisp (original)
+++ trunk/main/claw-core/src/packages.lisp Sun Apr 27 12:15:22 2008
@@ -34,7 +34,7 @@
(defpackage :claw
(:use :cl :closer-mop :hunchentoot :alexandria :cl-ppcre :cl-fad :local-time)
- (:shadow :flatten)
+ (:shadow :flatten :start-session)
(:documentation "A comprehensive web application framework and server for the Common Lisp programming language")
(:export :*html-4.01-strict*
:*html-4.01-transitional*
@@ -52,46 +52,29 @@
:strings-to-jsarray
:empty-string-p
:build-tagf
- :parse-htcomponent-function
- :page ;page classes hadle the whole rendering cycle
- :message-dispatch
- :page-writer
- :page-can-print
- :page-url
+ :page
+ :message-dispatch
:page-lisplet
:page-current-form
- :page-req-parameter
- :page-json-id-list
- :page-format
- :page-format-raw
+ :page-req-parameter
:page-script-files
:page-stylesheet-files
:page-class-initscripts
:page-instance-initscripts
- :page-indent
- :page-xmloutput
- :page-doc-type
- :page-current-component
- :page-content-type
- :htclass-body
+ :page-current-component
:htcomponent
:htcomponent-page
:htcomponent-body
-; :setf-htcomponent-page
- :htcomponent-attributes
- :htcomponent-can-print
:htcomponent-empty
:htcomponent-client-id
:htcomponent-script-files
:htcomponent-stylesheet-files
:htcomponent-class-initscripts
:htcomponent-instance-initscript
- :tag ;class for tags that accept body
+ :tag
:tag-name
- :tag-render-starttag
- :tag-render-endtag
+ :tag-attributes
:htbody
- :page-body-init-scripts
:htscript
:htlink
:hthead
@@ -193,32 +176,23 @@
:var>
;; class modifiers
:page-content
- :page-render
:generate-id
:metacomponent
:wcomponent
- :wcomponent-parameters
:wcomponent-informal-parameters
:wcomponent-allow-informal-parametersp
:wcomponent-template
- :wcomponent-parameter-value
:wcomponent-before-rewind
:wcomponent-after-rewind
:wcomponent-before-prerender
:wcomponent-after-prerender
:wcomponent-before-render
:wcomponent-after-render
- :make-component
:cform
:cform>
:action-link
:action-link>
- :base-cinput
:cinput
- :cinput-reader
- :cinput-writer
- :cinput-accessor
- :cinput-visit-object
:cinput>
:cselect
:cselect>
@@ -227,18 +201,12 @@
:submit-link
:submit-link>
:lisplet
- :lisplet-realm
:lisplet-pages
- :lisplet-base-path
- :lisplet-dispatch-method
:lisplet-register-page-location
:lisplet-register-function-location
:lisplet-register-resource-location
- :lisplet-protect
- :lisplet-authentication-type
- :lisplet-start-session
- :lisplet-error-handlers
- :lisplet-redirect-protected-resources-p
+ :lisplet-protect
+ :start-session
;; clawserver
:clawserver
:clawserver-register-lisplet
@@ -255,8 +223,7 @@
:clawserver-input-chunking-p
:clawserver-read-timeout
:clawserver-write-timeout
- :clawserver-login-config
- :login
+ :clawserver-login-config
#+(and :unix (not :win32)) :clawserver-setuid
#+(and :unix (not :win32)) :clawserver-setgid
#-:hunchentoot-no-ssl :clawserver-ssl-certificate-file
@@ -266,8 +233,7 @@
:*id-and-static-id-description*
:describe-component-behaviour
:describe-html-attributes-from-class-slot-initargs
- :clawserver-register-configuration
- :claw-require-authorization
+ :clawserver-register-configuration
:configuration
:configuration-login
:principal
Modified: trunk/main/claw-core/src/tags.lisp
==============================================================================
--- trunk/main/claw-core/src/tags.lisp (original)
+++ trunk/main/claw-core/src/tags.lisp Sun Apr 27 12:15:22 2008
@@ -161,6 +161,9 @@
- TAG is the tag instance
- PAGE the page instance"))
+(defgeneric tag-attributes (tag)
+ (:documentation "Returns an alist of tag attributes"))
+
(defgeneric (setf htcomponent-page) (page htcomponent)
(:documentation "Internal method to set the component owner page and to assign
an unique id attribute when provided.
@@ -170,20 +173,6 @@
(defgeneric (setf slot-initialization) (value wcomponent slot-initarg)
(:documentation "Sets a slot by its :INITARG. It's used just after instance creation"))
-(defgeneric wcomponent-parameter-value (wcomponent key)
- (:documentation "Returns the value of a parameter passed to the wcomponent initialization
-function (the one generated with DEFCOMPONENT) or :UNDEFINED if not passed.
- - WCOMPONENT is the wcomponent instance
- - KEY the parameter key to query"))
-
-(defgeneric wcomponent-check-parameters(wcomponent)
- (:documentation "This internal method check if all :REQUIRED parameters are provided
- - WCOMPONENT is the wcomponent instance"))
-
-(defgeneric wcomponent-parameters(wcomponent)
- (:documentation "This method returns class formal parameters as an alist (formal parameters are the ones expected by the component)
- - WCOMPONENT is the wcomponent instance"))
-
(defgeneric wcomponent-informal-parameters(wcomponent)
(:documentation "This method returns class informal parameters as an alist (informal parameters are the ones not expected by the component,
usually rendered as tag attributes withot any kind of evaluation)
@@ -528,7 +517,6 @@
(member tag-name *empty-tags* :test #'string-equal))
;;;--------------------METHODS implementation----------------------------------------------
-
(defmethod (setf htcomponent-page) ((page page) (htcomponent htcomponent))
(let ((id (getf (htcomponent-attributes htcomponent) :id))
(static-id (getf (htcomponent-attributes htcomponent) :static-id))
@@ -779,6 +767,9 @@
(htcomponent-json-print-end-component htcomponent))))
;;;========= TAG =====================================
+(defmethod tag-attributes ((tag tag))
+ (htcomponent-attributes tag))
+
(defmethod tag-render-attributes ((tag tag) (page page))
(when (htcomponent-attributes tag)
(loop for (k v) on (htcomponent-attributes tag) by #'cddr
@@ -992,11 +983,7 @@
;;;========= WCOMPONENT ===================================
(defclass wcomponent (htcomponent)
- ((parameters :initarg :parameters
- :accessor wcomponent-parameters
- :type cons
- :documentation "must be a plist or nil")
- (reserved-parameters :initarg :reserved-parameters
+ ((reserved-parameters :initarg :reserved-parameters
:accessor wcomponent-reserved-parameters
:type cons
:documentation "Parameters that may not be used in the constructor function")
@@ -1036,8 +1023,6 @@
finally (return result))))
(setf (slot-value instance 'informal-parameters) informal-parameters)))
-(defmethod wcomponent-check-parameters((comp wcomponent)))
-
(defmethod (setf slot-initialization) (value (wcomponent wcomponent) slot-initarg)
(let* ((initarg (if (or (eq slot-initarg :static-id) (eq slot-initarg :id)) :client-id slot-initarg))
(new-value (if (eq slot-initarg :id) (generate-id value) value))
@@ -1065,7 +1050,6 @@
(remf parameters :id))
(loop for (initarg value) on parameters by #'cddr
do (setf (slot-initialization instance initarg) value))
- (wcomponent-check-parameters instance)
(setf (htcomponent-body instance) content)
instance))
@@ -1076,13 +1060,6 @@
(let ((fbody (parse-htcomponent-function (flatten rest))))
(make-component component-name (first fbody) (second fbody))))
-
-(defmethod wcomponent-parameter-value ((c wcomponent) key)
- (let ((result (getf (htcomponent-attributes c) key :undefined)))
- (if (eq result :undefined)
- (getf (wcomponent-parameters c) key)
- result)))
-
(defmethod htcomponent-rewind ((wcomponent wcomponent) (page page))
(let ((template (wcomponent-template wcomponent)))
(wcomponent-before-rewind wcomponent page)
Modified: trunk/main/claw-core/src/translators.lisp
==============================================================================
--- trunk/main/claw-core/src/translators.lisp (original)
+++ trunk/main/claw-core/src/translators.lisp Sun Apr 27 12:15:22 2008
@@ -280,7 +280,7 @@
(and (> day 0) (<= day (days-in-month month year))))
:component wcomponent
:message (format nil (do-message "VALIDATOR-DATE" "Field ~a is not a valid date or wrong format: ~a")
- (wcomponent-parameter-value wcomponent :label)
+ (label wcomponent)
old-value))
(if (component-validation-errors wcomponent)
old-value
Modified: trunk/main/claw-core/src/validators.lisp
==============================================================================
--- trunk/main/claw-core/src/validators.lisp (original)
+++ trunk/main/claw-core/src/validators.lisp Sun Apr 27 12:15:22 2008
@@ -73,7 +73,7 @@
(when (stringp value)
(validate (and value (string-not-equal value ""))
:component component
- :message (format nil (do-message "VALIDATOR-REQUIRED" "Field ~a may not be null.") (wcomponent-parameter-value component :label)))))
+ :message (format nil (do-message "VALIDATOR-REQUIRED" "Field ~a may not be null.") (label component)))))
(defun validator-size (component value &key min-size max-size)
"Checks if the input field VALUE legth is less then or greater then rispectively of the form keywords :MIN-SIZE and :MAX-SIZE.
@@ -90,13 +90,13 @@
(validate (>= value-len min-size)
:component component
:message (format nil (do-message "VALIDATOR-SIZE-MIN" "Size of ~a may not be less then ~a chars." )
- (wcomponent-parameter-value component :label)
+ (label component)
min-size)))
(when max-size
(validate (<= value-len max-size)
:component component
:message (format nil (do-message "VALIDATOR-SIZE-MAX" "Size of ~a may not be more then ~a chars." )
- (wcomponent-parameter-value component :label)
+ (label component)
max-size)))))))
(defun validator-range (component value &key min max)
@@ -110,7 +110,7 @@
(validate (>= value min)
:component component
:message (format nil (do-message "VALIDATOR-RANGE-MIN" "Field ~a is not greater then or equal to ~d")
- (wcomponent-parameter-value component :label)
+ (label component)
(if (typep min 'ratio)
(coerce min 'float)
min))))
@@ -118,7 +118,7 @@
(validate (<= value max)
:component component
:message (format nil (do-message "VALIDATOR-RANGE-MAX" "Field ~a is not less then or equal to ~d")
- (wcomponent-parameter-value component :label)
+ (label component)
(if (typep max 'ratio)
(coerce max 'float)
max)))))))
@@ -131,7 +131,7 @@
(let ((test (numberp value)))
(and (validate test
:component component
- :message (format nil (do-message "VALIDATOR-NUMBER" "Field ~a is not a valid number.") (wcomponent-parameter-value component :label)))
+ :message (format nil (do-message "VALIDATOR-NUMBER" "Field ~a is not a valid number.") (label component)))
(validator-range component value :min min :max max)))))
(defun validator-integer (component value &key min max)
@@ -142,7 +142,7 @@
(let ((test (integerp value)))
(and (validate test
:component component
- :message (format nil (do-message "VALIDATOR-INTEGER" "Field ~a is not a valid integer.") (wcomponent-parameter-value component :label)))
+ :message (format nil (do-message "VALIDATOR-INTEGER" "Field ~a is not a valid integer.") (label component)))
(validator-range component value :min min :max max)))))
@@ -156,7 +156,7 @@
If value is greater then the date passed to :MAX, a localizable message \"Field ~a is greater then ~a.\" is sent with key \"VALIDATOR-DATE-RANGE-MAX\".
The argument for the message will be the :label attribute of the COMPONENT and the value passed to :MAX parsed with the :LOCAL-TIME-FORMAT keyword."
(unless (component-validation-errors component)
- (let ((local-time-format '(:date "-" :month "-" :year));(translator-local-time-format (wcomponent-parameter-value component :translator)))
+ (let ((local-time-format '(:date "-" :month "-" :year))
(new-value (make-instance 'local-time
:nsec (nsec-of value)
:sec (sec-of value)
@@ -181,13 +181,13 @@
(validate (local-time> new-value min)
:component component
:message (format nil (do-message "VALIDATOR-DATE-RANGE-MIN" "Field ~a is less then ~a.")
- (wcomponent-parameter-value component :label)
+ (label component)
(local-time-to-string min local-time-format))))
(when max
(validate (local-time< new-value max)
:component component
:message (format nil (do-message "VALIDATOR-DATE-RANGE-MAX" "Field ~a is greater then ~a.")
- (wcomponent-parameter-value component :label)
+ (label component)
(local-time-to-string max local-time-format))))))))
@@ -207,10 +207,6 @@
(describe-html-attributes-from-class-slot-initargs class)
(describe-component-behaviour class))))
-(defmethod wcomponent-parameters ((exception-monitor exception-monitor))
- (declare (ignore exception-monitor))
- (list :class nil))
-
(defmethod wcomponent-template ((exception-monitor exception-monitor))
(let ((client-id (htcomponent-client-id exception-monitor))
(validation-errors (aux-request-value :validation-errors)))
Modified: trunk/main/claw-core/tests/test1.lisp
==============================================================================
--- trunk/main/claw-core/tests/test1.lisp (original)
+++ trunk/main/claw-core/tests/test1.lisp Sun Apr 27 12:15:22 2008
@@ -73,12 +73,8 @@
(defun test-configuration-do-login (request user password)
(let ((session *session*))
(when (and (string-equal user "kiuma")
- (string-equal password "password"))
- (progn
- ;;(unless session
- ;; (setf session (lisplet-start-session)))
- ;;(setf (session-value 'principal session) (make-instance 'principal :name user :roles '("user")))))))
- (setf (current-principal session) (make-instance 'principal :name user :roles '("user")))))))
+ (string-equal password "password"))
+ (setf (current-principal session) (make-instance 'principal :name user :roles '("user"))))))
@@ -216,7 +212,7 @@
(defmethod page-content ((o realm-page))
(when (null *session*)
- (lisplet-start-session))
+ (start-session))
(unless (session-value 'RND-NUMBER)
(setf (session-value 'RND-NUMBER) (random 1000)))
(site-template> :title "Realm test page"