X-Git-Url: https://git.hcoop.net/clinton/lisp-on-lines.git/blobdiff_plain/d6201bf5f8ddcf3f3b18ff8963b48e5e031ed67d..d1bb68e0d5a36d6fd290ff82fd16d2663f207e4e:/lisp-on-lines.lyx diff --git a/lisp-on-lines.lyx b/lisp-on-lines.lyx index 134b930..dcbe7b4 100644 --- a/lisp-on-lines.lyx +++ b/lisp-on-lines.lyx @@ -83,9 +83,10 @@ Conventions The conventions used in this manual are: \layout Itemize -Lisp code is shown as a monospace font. - It is assumed that the user is working in an interactive environment and - what the user should type appears as bold, for example: +Dode is shown as a monospace font. + When it is expected that the user is working in an interactive environment + what the user should type appears as bold, while the computer result appears + non-bold, for example: \begin_deeper \layout LyX-Code @@ -276,7 +277,16 @@ or the types with: ((USERID INTEGER) (USERNAME STRING) (PASSWORD STRING)) \layout Standard -We can run: +To see the default attributes of a class +\begin_inset Marginal +collapsed true + +\layout Standard + +Is this correct ? Drew, please, check. +\end_inset + + we run. \layout LyX-Code > @@ -293,12 +303,12 @@ We can run: (PASSWORD STRING :LABEL "PASSWORD" :SLOT-NAME PASSWORD)) \layout Standard -What does this do ? +To set the attributes of a class to the default values we use: \layout LyX-Code > \series bold -(set-default-attributes user) +(lisp-on-lines::set-default-attributes user) \layout LyX-Code ((USERID INTEGER :LABEL "USERID" :SLOT-NAME USERID) @@ -310,6 +320,11 @@ What does this do ? (PASSWORD STRING :LABEL "PASSWORD" :SLOT-NAME PASSWORD)) \layout Standard +which takes an object of the class we are working with. + This is going to be change so we can do this action directly on the class. + It is on the TODO file. +\layout Standard + Class attributes? \layout LyX-Code @@ -513,12 +528,17 @@ Isn't this too imperative (in contrast to functional, lispy). \series bold - '(mewa-object-presentation :attributes (userid username password) + '(lisp-on-lines::mewa-object-presentation +\layout LyX-Code + + +\series bold + :attributes (userid username password) \layout LyX-Code \series bold - :global-properties (:editablep nil))) + :global-properties (:editablep nil))) \layout LyX-Code (:VIEWER MEWA-OBJECT-PRESENTATION @@ -540,7 +560,7 @@ Isn't this too imperative (in contrast to functional, lispy). \series bold (setf (lisp-on-lines::find-attribute 'user 'userid) \begin_inset Marginal -collapsed false +collapsed true \layout Standard @@ -562,7 +582,7 @@ Are this setfs to 'userid, 'username and 'password needed ? I (Pupeno) inspected > \series bold -(setf (find-attribute 'user 'username) +(setf (lisp-on-lines::find-attribute 'user 'username) \layout LyX-Code @@ -575,7 +595,7 @@ Are this setfs to 'userid, 'username and 'password needed ? I (Pupeno) inspected > \series bold -(setf (find-attribute 'user 'password) +(setf (lisp-on-lines::find-attribute 'user 'password) \layout LyX-Code @@ -588,7 +608,7 @@ Are this setfs to 'userid, 'username and 'password needed ? I (Pupeno) inspected > \series bold -(find-class-attributes 'user) +(lisp-on-lines::find-class-attributes 'user) \layout LyX-Code (USER @@ -621,28 +641,54 @@ Are this setfs to 'userid, 'username and 'password needed ? I (Pupeno) inspected NIL) \layout Standard -this is all turned into a UCW presentation at runtime using MAKE-PRESENTATION - : -\layout Standard +this is all turned into a +\noun on +UnCommon Web +\noun default + presentation at runtime using MAKE-PRESENTATION, for example, the following + code should be enough to show what's built so far attached to the examples + application: +\layout LyX-Code -(defmethod render-on ((res response) (e presentations-index)) -\layout Standard +> +\series bold +(defcomponent lol-example (window-component) +\layout LyX-Code -" -\layout Standard -As you'll see, nothing is exported from the LISP-ON-LINES package. - -\layout Standard +\series bold + ()) +\layout LyX-Code -if you wish to use LOL in your own package (or in UCW-USER or whatever), -\layout Standard +> +\series bold +(defmethod render-on ((res response) (lol-example lol-example)) +\layout LyX-Code -you simply need to use the MEWA and META-MODEL packages" + +\series bold + (<:h1 "User") +\layout LyX-Code + + +\series bold + ( +\series bold +(defentry-point "lol.ucw" (:application *example-application*) () +\layout LyX-Code + + +\series bold + (call 'products-presentation)) \layout Standard -( +\series bold +(clsql:connect '("localhost" "geo" "geo" "geogeo")) +\layout Standard + +which connect us to the server on +\family typewriter +localhost +\family default +, to the database +\family typewriter +geo +\family default + as user +\begin_inset Quotes eld +\end_inset + +geo +\begin_inset Quotes erd +\end_inset + + with password +\begin_inset Quotes eld +\end_inset + +geogeo +\begin_inset Quotes erd +\end_inset + + (this is not a smart way to generate password, don't do this). + To have a nice SQL environment, we also want: +\layout LyX-Code + +> +\series bold +(clsql:locally-enable-sql-reader-syntax) +\layout LyX-Code + +> +\series bold +(setf clsql:*default-caching* nil) +\layout Standard + +Actually, it is more than a nice environmnet, without those lines the rest + of the code won't work. +\layout Standard + +On the +\family typewriter +geo +\family default + database, there's a table called +\family typewriter +product +\family default + which has the following structure: +\layout LyX-Code + + +\series bold +CREATE TABLE product ( +\layout LyX-Code + + +\series bold + id serial NOT NULL, +\layout LyX-Code + + +\series bold + name text NOT NULL, +\layout LyX-Code + + +\series bold + details text, +\layout LyX-Code + + +\series bold + description text, +\layout LyX-Code + + +\series bold + cost double precision, +\layout LyX-Code + + +\series bold + CONSTRAINT product_cost_check CHECK ((cost > (0)::double precision)) +\layout LyX-Code + + +\series bold +); +\layout LyX-Code + + +\series bold +ALTER TABLE ONLY product ADD CONSTRAINT product_name_key UNIQUE (name); +\layout LyX-Code + + +\series bold +ALTER TABLE ONLY product ADD CONSTRAINT product_pkey PRIMARY KEY (id); +\layout Standard + + +\color red +ToDo: express the table structure in a better way. +\layout Standard + +Now we'll create the class that represents a product, mirroring the database + structure: +\layout LyX-Code + +> +\series bold +(lisp-on-lines::def-view-class/table "product") +\layout Standard + +and then we generate the default attributes (from +\family typewriter +product +\family default +'s slots) and assign it to +\family typewriter +product +\family default +: +\layout LyX-Code + +> +\series bold +(lisp-on-lines::set-default-attributes (make-instance 'product)) +\begin_inset Marginal +collapsed true + +\layout Standard + +set-default-attributes is marked to be renamed to set-generated-attributes. +\end_inset + + +\layout Standard + +As you can see, we instantiate +\family typewriter +product +\family default + to pass it to +\family typewriter +set-default-attributes +\family default +, because it expects an object instead of a class. + We don't need the object anymore, so we don't save any reference to it. + In the future we might have a +\family typewriter +set-default-attributes +\family default + that can use a class directly. + Now we set a the attribute +\family typewriter +:viewer +\family default + to contain the +\family typewriter +mewa-object-presentation +\family default + exposing the attributes we like the user to work with: +\layout LyX-Code + +> +\series bold +(setf (lisp-on-lines::find-attribute (make-instance 'product) :viewer) +\layout LyX-Code + + +\series bold + '(lisp-on-lines::mewa-object-presentation +\layout LyX-Code + + +\series bold + :attributes (name details description cost) +\layout LyX-Code + + +\series bold + :global-properties (:editablep nil))) +\layout Standard + +The last parameter shows that it is not editable, which makes sense for + a viewer. \the_end