I think too much sugar has leaked into this design.

I propose:

        Alien::Dojo::Dist; # an object that has js sources somewhere and
        can return them or write them to a dir. Encapsulates both
        version and edition
        Alien::Dojo::Dist::FileTree; # really just a bunch of files
        Alien::Dojo::Dist::Archive; # archive::zipp or whatever
        Alien::Dojo::Dist::RAM; # strings in memory

        Alien::Dojo::Fetch; # makes Alien::Dojo::Dist::RAM objects that
        lazily get the needed files from the web, based on a path to
        some dojo release somewhere.

        Alien::Dojo::Fetch::Version; # based on a known scheme fetch a
        version of dojo, probably via a REST api... Virtual versions
        also work (e.g. latest stable, bleading edge, etc as supported
        by this). Should be configurable enough to use mirrors and
        stuff, or local repositories.

        Alien::Dojo; # a sugar layer to create an
        Alien::Dojo::Fetch::Version, get it, and manage the files

I also propose these roles/classes::

        Alien::Dist; # simple introspection api - mostly meta data (version, 
files, etc)
        Alien::Dist::Read; # for loading dists from $whatever
        Alien::Dist::Write; # for storing a dist locally, so that it can be 
read later

        Alien::Dist::Data::Package; # integrate with Adam Kennedy's
        Data::Package

        Alien::Dist::Archive; # a provider for ::Read and ::Write based
        on Archive::Tar, Archive::Zip, etc

        Alien::Dist::FetchUtil; # utility functions/methods wrapping
        LWP::UserAgent, for in memory or in temp dir creation of an
        Alien::Dist

This should enable writing Alien::* pretty easily, helping to
standardize on a sane approach.



On Wed, Jun 14, 2006 at 17:19:58 +0100, Carl Franks wrote:
> message cc'd to Dominique in case you're not still on the cat list.
> 
> Further to the discussion a couple of weeks ago, I suggest deprecating
> HTML-Dojo (of which I'm the author), and merging it's functionality
> into Alien-Dojo, with the following changes.
> 
> Backwards compatabilty shouldn't be an issue, as there's only been 1
> release of Alien-Dojo, and it's broken as it doesn't include all files
> necessary for the dojo JS to work. So I'm pretty sure no-one's using
> it ;)
> 
> Currently, HTML-Dojo comes with the dojo distro bundled. Alien-Dojo
> doesn't include the dojo code at all, it downloads it from the
> internet.
> I suggest Alien-Dojo includes the dojo code, but is capable of
> downloading and installing other versions from the internet.
> Advantages:
>   The Alien-Dojo distro can be updated with each dojo release, meaning
> cpan clients will know of the upgrade.
>   We'll have a permanent archive of dojo versions on cpan.
>   The Alien-Dojo distro number will match the dojo version number,
> meaning the `use Alien::Dojo 0.3` idiom to ensure a minimum working
> version will work.
> 
> Alien-Dojo currently isn't aware of the different dojo "editions"
> (customized builds) available. This capability will have to be added.
> By default, we should use the "ajax" edition, as that's the prefered
> dojo edition.
> 
> Alien-Dojo should include all files from the dojo distrobution, not
> just the src directory.
> 
> Alien-Dojo->new() allows a single argument, interpreted as the minimum
> version of dojo required.
> I suggest it's changed to be a named argument, to allow for expansion.
> Also, with experience of using dojo, I suggest it should instead mean
> the *exact* version you want, rather than minimum. (the dojo library
> changes a lot between releases).
> If you really want a minimum version, you can do `use Alien::Dojo x.x`
> 
> Also, rather than dumping the js library directory into perl/site_lib,
> I'd rather the library is dumped into a single .pm file such as
> HTML-Dojo does.
> Like HTML-Dojo, the intended use is that the module is used by
> something such as Catalyst-Helper-Dojo to dump the library into an
> application directory, and so Alien-Dojo should not be used by general
> programs (such as for serving files live).
> 
> To handle versions not already installed, I'm thinking it should first
> try using CPAN.pm, and if the version/edition isn't available there,
> to try downloading the library from the dojo website, building a .pm
> from it, and then installing it with ExtUtils::Install.
> Does that sound sane?
> 
> Cheers,
> Carl
> 
> _______________________________________________
> List: [email protected]
> Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/[email protected]/
> Dev site: http://dev.catalyst.perl.org/

-- 
  Yuval Kogman <[EMAIL PROTECTED]>
http://nothingmuch.woobling.org  0xEBD27418

Attachment: pgpHMq4Fqfe0R.pgp
Description: PGP signature

_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to