[Gd-chatter] r10832 - trunk/libraries/web-framework

turbo24prg at gwydiondylan.org turbo24prg at gwydiondylan.org
Wed Jul 26 01:44:02 CEST 2006


Author: turbo24prg
Date: Wed Jul 26 01:44:00 2006
New Revision: 10832

Modified:
   trunk/libraries/web-framework/changes.dylan
   trunk/libraries/web-framework/library.dylan
   trunk/libraries/web-framework/users.dylan
   trunk/libraries/web-framework/web-framework.lid
Log:
Job: minor
* some ugly improvements


Modified: trunk/libraries/web-framework/changes.dylan
==============================================================================
--- trunk/libraries/web-framework/changes.dylan	(original)
+++ trunk/libraries/web-framework/changes.dylan	Wed Jul 26 01:44:00 2006
@@ -3,36 +3,69 @@
 
 define class <feed> (<object>)
   /* slot CommonAttributes */
-  slot author :: <list>, init-keyword: author:;
-  slot category :: <list> = #(), init-keyword: category:;
-  slot contributor :: <list> = #(), init-keyword: contributor:;
-  slot generator :: false-or(<generator>) = #f, init-keyword: generator:;
-  slot icon :: false-or(<uri>) = #f, init-keyword: icon:;
-  slot identifier :: <uri>, init-keyword: identifier:;
-  slot link :: <list> = #(), init-keyword: link:;
-  slot logo :: false-or(<uri>) = #f, init-keyword: logo:;
-  slot rights :: false-or(<text>) = #f, init-keyword: rights:;
-  slot subtitle :: false-or(<text>) = #f, init-keyword: subtitle:;
-  slot title :: <text>, init-keyword: title:;
-  slot updated :: <date>, init-keyword: updated:;
+  slot authors :: <list>,
+    init-keyword: authors:;
+  slot categories :: <list> = #(),
+    init-keyword: categories:;
+  slot contributors :: <list> = #(),
+    init-keyword: contributors:;
+  slot generator :: false-or(<generator>) = #f,
+    init-keyword: generator:;
+  slot icon :: false-or(<uri>) = #f,
+    init-keyword: icon:;
+  slot identifier :: <uri>,
+    init-keyword: identifier:;
+  slot links :: <list> = #(),
+    init-keyword: links:;
+  slot logo :: false-or(<uri>) = #f,
+    init-keyword: logo:;
+  slot rights :: false-or(<text>) = #f,
+    init-keyword: rights:;
+  slot subtitle :: false-or(<text>) = #f,
+    init-keyword: subtitle:;
+  slot title :: <text>,
+    init-keyword: title:;
+  slot updated :: <date>,
+    init-keyword: updated:;
   /* repeated slot extensionElement */
-  slot entry :: <list> = #(), init-keyword: entry:;
+  slot entries :: <list> = #(),
+    init-keyword: entries:;
+  slot language :: <text>,
+    init-keyword: language:;
+  slot description :: <text>,
+    init-keyword: description:;
+  slot published :: <date>,
+    init-keyword: published:;
 end;
 
-define class <entry> (<object>)
+define open class <entry> (<object>)
   /* slot CommonAttributes */
-  slot author :: <list> = #(), init-keyword: author:;
-  slot category :: <list> = #(), init-keyword: category:;
-  slot content :: false-or(<content>) = #f, init-keyword: content:;
-  slot contributor :: <list> = #(), init-keyword: contributor:;
-  slot identifier :: <uri>, init-keyword: identifier:;
-  slot link :: <list> = #(), init-keyword: link:;
-  slot published :: false-or(<date>) = #f, init-keyword: published:;
-  slot rights :: false-or(<text>) = #f, init-keyword: rights:;
-  slot source :: false-or(<source>) = #f, init-keyword: source:;
-  slot summary :: false-or(<text>) = #f, init-keyword: summary:;
-  slot title :: <text>, init-keyword: title:;
-  slot updated :: <date>, init-keyword: updated:;
+  slot authors :: <list> = #(),
+    init-keyword: authors:;
+  slot categories :: <list> = #(),
+    init-keyword: categories:;
+  slot content :: false-or(<content>) = #f,
+    init-keyword: content:;
+  slot contributors :: <list> = #(),
+    init-keyword: contributors:;
+  slot identifier :: <uri>,
+    init-keyword: identifier:;
+  slot links :: <list> = #(),
+    init-keyword: links:;
+  slot published :: <date>,
+    init-keyword: published:;
+  slot rights :: false-or(<text>) = #f,
+    init-keyword: rights:;
+  slot source :: false-or(<source>) = #f,
+    init-keyword: source:;
+  slot summary :: false-or(<text>) = #f,
+    init-keyword: summary:;
+  slot title :: <text>,
+    init-keyword: title:;
+  slot updated :: false-or(<date>) = #f,
+    init-keyword: updated:;
+  slot comments :: <list> = #(),
+    init-keyword: comments:;
   /* repeated slot extensionElement */
 end;
 
@@ -42,6 +75,11 @@
   slot content :: <text>, init-keyword: content:;
 end;
 
+define class <raw-content> (<content>)
+  inherited slot type :: <string> = "raw";
+end class <raw-content>;
+
+/*
 define class <inline-text-content> (<content>)
   inherited slot content :: <text>, init-keyword: content:;
 end;
@@ -57,20 +95,22 @@
 define class <out-of-line-content> (<content>)
   inherited slot content :: <source>, init-keyword: content:;
 end;
-
+*/
 define class <person> (<object>)
   slot person-name :: <text>, init-keyword: name:;
   slot uri :: false-or(<uri>) = #f, init-keyword: uri:;
   slot email :: false-or(<email>) = #f, init-keyword: email:;
 end;
 
-define class <date> (<object>)
-end; 
-
 define class <category> (<object>)
-  slot term :: <text>, init-keyword: term:;
-  slot scheme :: false-or(<uri>) = #f, init-keyword: scheme:;
-  slot label :: false-or(<text>) = #f, init-keyword: label:;
+  slot term :: <text>,
+    init-keyword: term:;
+  slot scheme :: false-or(<uri>) = #f,
+    init-keyword: scheme:;
+  slot label :: false-or(<text>) = #f,
+    init-keyword: label:;
+  slot description :: false-or(<text>) = #f,
+    init-keyword: description:;
 end;
 
 define constant <text> = <string>;
@@ -84,7 +124,8 @@
 
 define class <generator> (<object>)
   slot uri :: false-or(<uri>) = #f, init-keyword: uri:;
-  slot version :: false-or(<text>) = #f, init-keyword: version:;
+  slot system-version :: false-or(<text>) = #f,
+    init-keyword: version:;
   slot text :: <text>, init-keyword: text:;
 end;
 
@@ -99,12 +140,47 @@
     
 define constant <source> = <feed>;
 
+// RSS
+define generic generate-rss (object :: <object>);
+define method generate-rss (feed :: <feed>)
+  with-xml-builder()
+    rss (version => "2.0") {
+      channel {
+        title(feed.title),
+        link(first(feed.links)),
+        description(feed.description),
+        language(feed.language),
+        copyright(feed.rights),
+        pubDate(as-iso8601-string(feed.published)),
+        image {
+          url(feed.logo),
+          title(feed.title),
+          link(first(feed.links))
+        },
+        do(do(method(entry) collect(generate-rss(entry)) end, feed.entries))
+      }
+    }
+  end;
+end method generate-rss;
+        
+define method generate-rss (entry :: <entry>)
+  with-xml()
+    item {
+      title(entry.title),
+      description(entry.content.content),
+      link(entry.identifier),
+      author("food00d")
+    }
+  end;       
+end method generate-rss;
+
+  
 define method generate-xhtml (feed :: <feed>)
   with-xml()
     div {
       h1(concatenate("Recent changes: ", feed.title)),
       text(feed.subtitle),
-      ul { do(do(method(x) collect(generate-xhtml(x)) end, feed.entry)) }
+      ul { do(do(method(x) collect(generate-xhtml(x)) end, feed.entries)) }
     }
   end;
 end;
@@ -114,8 +190,8 @@
     li {
       do(collect(generate-xhtml(entry.updated))),
       text(entry.title), //link to content
-      do(do(method(x) collect(generate-xhtml(x)) end, entry.author))
-      //link to each author
+//      do(do(method(x) collect(generate-xhtml(x)) end, entry.authors))
+//link to each author
     }
   end;
 end;
@@ -134,10 +210,10 @@
       subtitle(feed.subtitle),
       updated { do(collect(generate-atom(feed.updated))) },
       id(feed.identifier),
-      do(do(method(x) collect(generate-atom(x)) end, feed.link)),
+      do(do(method(x) collect(generate-atom(x)) end, feed.links)),
       rights(feed.rights),
       do(collect(generate-atom(feed.generator))),
-      do(do(method(x) collect(generate-atom(x)) end, feed.entry))
+      do(do(method(x) collect(generate-atom(x)) end, feed.entries))
     } //missing: category, contributor, icon, logo
   end; 
 end;
@@ -160,7 +236,7 @@
 
 define method generate-atom (generator :: <generator>)
   with-xml()
-    generator (uri => generator.uri, version => generator.version)
+    generator (uri => generator.uri, version => generator.system-version)
     {
       text(generator.text)
     }
@@ -172,12 +248,12 @@
     entry
     {
       title(entry.title),
-      do(do(method(x) collect(generate-atom(x)) end, entry.link)),
+      do(do(method(x) collect(generate-atom(x)) end, entry.links)),
       id(entry.identifier),
       updated { do(collect(generate-atom(entry.updated))) },
       published { do(collect(generate-atom(entry.published))) },
-      do(do(method(x) collect(generate-atom(x)) end, entry.author)),
-      do(do(method(x) collect(generate-atom(x)) end, entry.contributor)),
+//      do(do(method(x) collect(generate-atom(x)) end, entry.authors)),
+//      do(do(method(x) collect(generate-atom(x)) end, entry.contributors)),
       do(collect(generate-atom(entry.content))),
     } //missing: category, summary
   end;
@@ -187,4 +263,4 @@
   with-xml()
     text(con.content)
   end;
-end;
\ No newline at end of file
+end;

Modified: trunk/libraries/web-framework/library.dylan
==============================================================================
--- trunk/libraries/web-framework/library.dylan	(original)
+++ trunk/libraries/web-framework/library.dylan	Wed Jul 26 01:44:00 2006
@@ -126,6 +126,58 @@
     redo,
     print-xml;
 
+  //exports
+  export generate-rss;
+  
+  //feed
+  export <feed>,
+    authors, authors-setter,
+    categories, categories-setter,
+    contributors, contributors-setter,
+    generator, generato-setter,
+    icon, icon-setter,
+    identifier, identifier-setter,
+    links, links-setter,
+    logo, logo-setter,
+    rights, rights-setter,
+    subtitle, subtitle-setter,
+    title, title-setter,
+    updated, updated-setter,
+    entries, entries-setter,
+    language, language-setter,
+    description, description-setter,
+    published, published-setter;
+  
+  //entry
+  export <entry>,
+    authors, authors-setter,
+    categories, categories-setter,
+    content, content-setter,
+    contributors, contributors-setter,
+    identifier, identifier-setter,
+    links, links-setter,
+    published, published-setter,
+    rights, rights-setter,
+    source, source-setter,
+    summary, summary-setter,
+    title, title-setter,
+    updated, updated-setter,
+    comments, comments-setter;
+
+  export <category>,
+    term, term-setter,
+    scheme, scheme-setter,
+    label, label-setter,
+    description, description-setter; 
+
+  export <generator>,
+    uri, uri-setter,
+    system-version, system-version,
+    text, text-setter;
+    
+  export <content>,
+    <raw-content>;
+    
   //commands
   export <add-command>,
     <remove-command>,

Modified: trunk/libraries/web-framework/users.dylan
==============================================================================
--- trunk/libraries/web-framework/users.dylan	(original)
+++ trunk/libraries/web-framework/users.dylan	Wed Jul 26 01:44:00 2006
@@ -43,39 +43,35 @@
                 error: "User with same name already exists!"))
   else
     #t;
-  end;
-end;
+  end if;
+end method check;
 
-define method valid-user? (user-name :: <string>, pass :: <string>)
-  let user = element(storage(<user>), user-name, default: #f);
+define method valid-user? (username :: <string>, pass :: <string>)
+  let user = element(storage(<user>), username, default: #f);
   if (user & (user.password = pass))
     #t;
   else
     #f;
-  end;
-end;
+  end if;
+end method valid-user?;
 
-define method login (request :: <request>)
+define method login (request :: <request>, username, password)
  => (username :: false-or(<string>))
-  let user-name = get-query-value("username");
-  let password = get-query-value("password");
-  if (user-name & password)
-    if (valid-user?(user-name, password))
-      let session = ensure-session(request);
-      *user* := storage(<user>)[user-name];
-      set-attribute(session, #"username", user-name);
-      user-name;
-    end;
-  end;
-end;
+  if (username & password & valid-user?(username, password))
+    let session = ensure-session(request);
+    *user* := storage(<user>)[username];
+    set-attribute(session, #"username", username);
+    username;
+  end if;
+end method login;
 
 define method logged-in? (request :: <request>)
  => (username :: false-or(<string>))
   let session = get-session(request);
   if (session)
-    let user-name = get-attribute(session, #"username");
-    *user* := storage(<user>)[user-name];
-    user-name;
+    let username = get-attribute(session, #"username");
+    *user* := storage(<user>)[username];
+    username;
   end;
-end;
+end method logged-in?;
 

Modified: trunk/libraries/web-framework/web-framework.lid
==============================================================================
--- trunk/libraries/web-framework/web-framework.lid	(original)
+++ trunk/libraries/web-framework/web-framework.lid	Wed Jul 26 01:44:00 2006
@@ -7,4 +7,5 @@
        web-macro
        command
        change
-       users
\ No newline at end of file
+       changes
+       users



More information about the chatter mailing list