Bill Atkins wrote:
> What's the philosophy behind Wee?  What are some of its features?

Wee's core is very small (but powerful). Including lots of documentation 
the core is currently just 847 lines. That's where the name originally 
comes from.

Features:

   * You don't have to care about the HTTP protocol, you don't have to
     build URL, add query parameters or name form-fields etc...

   * You can write real components.

   * Backtracking (Make the browsers back-button working fine)

   * It comes with a powerful programmatic HTML renderer. Example:

      # select an object from these items
      items = [1, 2, 3, 4]

      # the labels shown to the user
      labels = items.map {|i| i.to_s}

      # render it... callback is called with the choosen object from the
      # items array
      r.select_list(items).labels(labels).callback {|choosen| p choosen}

      # render a multi-select list, with objects 2 and 4 selected
      r.select_list(items).multi.labels(labels).selected([2,4])

     Note that in the example above, you don't have to encode the items
     as you would probably have to in Rails. The items could be any
     object (Strings, Components... ANY object).

   * You can call other components. This replaces the current component
     until the called component returns. Note that this only affect the
     current component and not it's possible parent components.

   * You can add decorations to components, which is a very powerful
     concept. Useful for rendering header/footer around a component, or
     to prevent unauthorized access to a component etc...

   * Pure Ruby. What I like is that you don't have to switch between
     different files (controller and view). Both are dependent anyway.
     This makes it easier to distribute components, as they are usually
     only one file. That does not mean, that you can't use templates,
     you can!

   * Continuations! This is optional. Might lead to memory problems, but
     the last memory stress-test was quite positive... needs further
     testing.

   * Nemo: rubyforge.org/projects/nemo

You can read more about it's features on that page:
 
http://www.ntecs.de/viewcvs/viewcvs/*checkout*/Wee/trunk/doc/rdoc/index.html

Stay tuned! I'm currently working on setting up a page dedicated to Wee: 
http://ruwee.de (it's empty yet).

If you're interested in Wee, you might be also interested in Seaside2, 
Wee's big brother: www.seaside.st.

Regards,

   Michael

> Bill
> 
> On Thu, 27 Jan 2005 11:34:19 +0900, Michael Neumann <mneumann / ntecs.de> wrote:
> 
>>Hi,
>>
>>Wee 0.5.0 is out. Have fun!
>>
>>Major changes are:
>>
>>   * Support for live-updates (see examples/live-update.rb). Only
>>     client-side is missing (javascript).
>>
>>   * Factored out all continuation-dependent code into wee/continuation.
>>     By default Wee uses no continuations until you require
>>     'wee/continuation'. This has the nice effect, that
>>     non-continuation-based application now run a little bit faster and
>>     uses less memory.
>>
>>   * Added an OgScaffolder class (see examples/og-test.rb). You can
>>     create/update/delete Og domain-objects. This was just a test for
>>     using Wee+Og. It's not a very advanced scaffolder. Nemo[1] can do
>>     better.
>>
>>   * Added an experimental property system, which can make your
>>     components more independent of external resources (e.g.
>>     image-path).
>>
>>   * Changed the status from alpha to beta ;-)
>>     I consider Wee now as pretty stable (run-time wise). Few code will
>>     probably change.
>>
>>For the full list of changes (since I started the ChangeLog) see [2].
>>
>>== The Ultimate Hello World
>>
>>   require 'wee'
>>
>>   class HelloWorld < Wee::Component
>>      def click
>>       @clicks = (@clicks || 0) + 1
>>     end
>>
>>     def render
>>       r.h1.onclick_callback(:click).with("Hello World!")
>>       r.text "#{ @clicks || 'No' } clicks"
>>     end
>>   end
>>
>>   # And start the WEBrick web-server
>>   require 'wee/utils'
>>   require 'wee/adaptors/webrick'
>>
>>   app = Wee::Utils.app_for {
>>     c = HelloWorld.new
>>     c.add_decoration(Wee::PageDecoration.new(title="Hello World"))
>>     c
>>   }
>>   Wee::WEBrickAdaptor.register('/app' => app).start
>>
>>Make sure you run this application with the -rubygems option. Then point
>>your browser to http://localhost:2000/app and click on the h1-header.
>>Every time you click on it, you should see that the number of clicks
>>increases. Have fun!
>>
>>== Future Work
>>
>>I am currently implementing Cookie-support and Page-less sessions (no
>>backtracking). It's already done and works well, but needs some further
>>refactoring. This let's you write dynamic web-sites whose URL looks like
>>"http://blah.net/app" all the time. If you want you can change the URL
>>after /app to whatever you want, but note that it's model is completely
>>different that e.g. Rails. Wee does not has multiple controllers, it has
>>exactly one root-component with as many sub-components and
>>sub-sub-components as you like.
>>
>>A simple tutorial is also on my todo list ;-)
>>
>>== Documentation
>>
>>Look here [3].
>>
>>Regards,
>>
>>   Michael
>>
>>---------------------------------------------------------------------
>>[1] http://rubyforge.org/projects/nemo
>>[2] http://www.ntecs.de/viewcvs/viewcvs/Wee/trunk/ChangeLog?view=auto
>>[3]
>>http://www.ntecs.de/viewcvs/viewcvs/*checkout*/Wee/trunk/doc/rdoc/index.html
>>
>>
> 
> 
>