r9617 - in /branches/upstream/libcgi-formbuilder-source-yaml-perl: ./ current/ current/lib/ current/lib/CGI/ current/lib/CGI/FormBuilder/ current/lib/CGI/FormBuilder/Source/ current/t/

emhn-guest at users.alioth.debian.org emhn-guest at users.alioth.debian.org
Tue Nov 20 00:15:24 UTC 2007


Author: emhn-guest
Date: Tue Nov 20 00:15:24 2007
New Revision: 9617

URL: http://svn.debian.org/wsvn/?sc=1&rev=9617
Log:
[svn-inject] Installing original source of libcgi-formbuilder-source-yaml-perl

Added:
    branches/upstream/libcgi-formbuilder-source-yaml-perl/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Build.PL
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Changes
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/MANIFEST
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/META.yml
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/README
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/YAML.pm
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.fb
    branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t   (with props)

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Build.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Build.PL?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Build.PL (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Build.PL Tue Nov 20 00:15:24 2007
@@ -1,0 +1,15 @@
+shift(@ARGV) if $ARGV[0] eq 'Build'; # accomodate with CPAN autoinstall
+use Module::Build;
+
+Module::Build->new(
+    dist_author         => 'Mark Hedges <hedges at ucsd.edu>',
+	module_name         => 'CGI::FormBuilder::Source::YAML',
+	license             => 'perl',
+	requires => {
+        'CGI::FormBuilder'      => 3.02,
+        'YAML::Syck'            => 0,
+        'Test::More'            => 0,
+        'FindBin'               => 0,
+	},
+)->create_build_script;
+

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Changes?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Changes (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/Changes Tue Nov 20 00:15:24 2007
@@ -1,0 +1,46 @@
+1.0.8 2007-11-17
+
+    Fix version in META.yml... I guess deleting file doesn't work.
+
+1.0.7 2007-11-17
+
+    Fix [rt.cpan.org #30559]
+    - no longer uses Test::Exception.
+
+    [bugfix]
+    - no longer tests specific html content
+        since this does not work with all versions of FB.
+        Will develop an html parser to verify elements.
+
+1.0.6 2006-11-?  
+
+    [released]
+    - umm
+
+1.0.5 2006-11-8
+
+    [bugfix]
+    - oops, the pattern was not quite right for ref assignments
+    
+    [feature]
+    - added support for eval { } as a value
+
+1.0.4 2006-11-7
+
+    [bugfix]
+    - oops, forgot the ref type for direct package ref assignments
+
+1.0.3 2006-11-2
+
+    [bugfix]
+    - scope for LoadPerl flag needed to be in parse subroutine
+
+1.0.2 2006-11-2
+
+    [feature]
+    - added support for references ala CGI::FormBuilder::Source::File
+
+0.01 Wed Nov  1 12:48:32 PST 2006
+    
+    [INITIAL RELEASE]
+    - First release

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/MANIFEST?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/MANIFEST (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/MANIFEST Tue Nov 20 00:15:24 2007
@@ -1,0 +1,8 @@
+lib/CGI/FormBuilder/Source/YAML.pm
+t/test.t
+t/test.fb
+Build.PL
+MANIFEST
+README
+Changes
+META.yml

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/META.yml?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/META.yml (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/META.yml Tue Nov 20 00:15:24 2007
@@ -1,0 +1,22 @@
+---
+name: CGI-FormBuilder-Source-YAML
+version: 1.0008
+author:
+  - 'Mark Hedges <hedges at ucsd.edu>'
+abstract: Initialize FormBuilder from YAML file
+license: perl
+resources:
+  license: http://dev.perl.org/licenses/
+requires:
+  CGI::FormBuilder: 3.02
+  FindBin: 0
+  Test::More: 0
+  YAML::Syck: 0
+provides:
+  CGI::FormBuilder::Source::YAML:
+    file: lib/CGI/FormBuilder/Source/YAML.pm
+    version: 1.0008
+generated_by: Module::Build version 0.2805
+meta-spec:
+  url: http://module-build.sourceforge.net/META-spec-v1.2.html
+  version: 1.2

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/README?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/README (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/README Tue Nov 20 00:15:24 2007
@@ -1,0 +1,156 @@
+
+
+NAME
+       CGI::FormBuilder::Source::YAML - Initialize FormBuilder from YAML file
+
+SYNOPSIS
+        use CGI::FormBuilder;
+
+        my $form = CGI::FormBuilder->new(
+           source  => {
+               source  => 'form.fb',
+               type    => 'YAML',
+           },
+        );
+
+        my $lname = $form->field('lname');  # like normal
+
+DESCRIPTION
+       This reads a YAML (YAML::Syck) file that contains FormBuilder config
+       options and returns a hash to be fed to CGI::FormBuilder->new().
+
+       Instead of the syntax read by CGI::FormBuilder::Source::File, it uses
+       YAML syntax as read by YAML::Syck.  That means you fully specify the
+       entire data structure.
+
+       LoadCode is enabled, so you can use YAML syntax for defining subrou-
+       tines.  This is convenient if you have a function that generates vali-
+       dation subrefs, for example, I have one that can check profanity using
+       Regexp::Common.
+
+        validate:
+           myfield:
+               javascript: /^[\s\S]{2,50}$/
+               perl: !!perl/code: >-
+                   {   My::Funk::fb_perl_validate({
+                           min         => 2,
+                           max         => 50,
+                           profanity   => 'check'
+                       })->(shift);
+                   }
+
+POST PROCESSING
+       There are two exceptions to "pure YAML syntax" where this module does
+       some post-processing of the result.
+
+       REFERENCES (ala CGI::FormBuilder::Source::File)
+
+       You can specify references as string values that start with \&, \$, \@,
+       or \% in the same way you can with CGI::FormBuilder::Source::File.  If
+       you have a full direct package reference, it will look there, otherwise
+       it will traverse up the caller stack and take the first it finds.
+
+       For example, say your code serves multiple sites, and a menu gets dif-
+       ferent options depending on the server name requested:
+
+        # in My::Funk:
+        our $food_options = {
+            www.meats.com   => [qw( beef    chicken horta   fish    )],
+            www.veggies.com => [qw( carrot  apple   quorn   radish  )],
+        };
+
+        # in source file:
+        options: \@{ $My::Funk::food_options->{ $ENV{SERVER_NAME} } }
+
+       EVAL STRINGS
+
+       You can specify an eval statement.  You could achieve the same example
+       a different way:
+
+        options: eval { $My::Funk::food_options->{ $ENV{SERVER_NAME} }; }
+
+       The cost either way is about the same -- the string is eval'd.
+
+EXAMPLE
+        method:     GET
+        header:     0
+        title:      test
+        name:       test
+        action:     /test
+        submit:     test it
+        linebreaks: 1
+
+        required:
+           - test1
+           - test2
+
+        fields:
+           - test1
+           - test2
+           - test3
+           - test4
+
+        fieldopts:
+           test1:
+               type:       text
+               size:       10
+               maxlength:  32
+
+           test2:
+               type:       text
+               size:       10
+               maxlength:  32
+
+           test3:
+               type:       radio
+               options:
+                   -
+                       - 1
+                       - Yes
+                   -
+                       - 0
+                       - No
+
+           test4:
+               options:    \@test4opts
+               sort:       \&Someother::Package::sortopts
+
+        validate:
+           test1:      /^\w{3,10}$/
+           test2:
+               javascript: EMAIL
+               perl:       eq 'test at test.foo'
+           test3:
+               - 0
+               - 1
+           test4:  \@test4opts
+
+       You get the idea.  A bit more whitespace, but it works in a standard-
+       ized way.
+
+METHODS
+       new()
+
+       Normally not used directly; it is called from CGI::FormBuilder.  Cre-
+       ates the "CGI::FormBuilder::Source::YAML" object.  Arguments from the
+       'source' hash passed to CGI::FormBuilder->new() will become defaults,
+       unless specified in the file.
+
+       parse($source)
+
+       Normally not used directly; it is called from CGI::FormBuilder.  Parses
+       the specified source file.  No fancy params -- just a single filename
+       is accepted.  If the file isn't acceptable to YAML::Syck, I suppose it
+       will die.
+
+SEE ALSO
+       CGI::FormBuilder, CGI::FormBuilder::Source
+
+AUTHOR
+       Copyright (c) 2006 Mark Hedges <hedges at ucsd.edu>. All rights reserved.
+
+LICENSE
+       This module is free software; you may copy it under terms of the Perl
+       license (GNU General Public License or Artistic License.)
+       http://www.opensource.org/licenses/index.html
+

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/YAML.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/YAML.pm?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/YAML.pm (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/lib/CGI/FormBuilder/Source/YAML.pm Tue Nov 20 00:15:24 2007
@@ -1,0 +1,279 @@
+package CGI::FormBuilder::Source::YAML;
+
+use strict;
+use warnings;
+
+use YAML::Syck;
+
+use CGI::FormBuilder::Util;
+
+our $VERSION = '1.0008';
+
+sub new {
+    my $self  = shift;
+    my $class = ref($self) || $self;
+    my %opt   = @_;
+    return bless \%opt, $class;
+}
+
+sub parse {
+    my $self = shift;
+    my $file = shift || $self->{source};
+
+    local $YAML::Syck::LoadCode = 1;
+    local $YAML::Syck::UseCode = 1;
+    local $YAML::Syck::DumpCode = 1;
+
+    $CGI::FormBuilder::Util::DEBUG ||= $self->{debug} if ref $self;
+
+    puke("file must be only one scalar file name") if ref $file;
+
+    my $formopt = LoadFile($file);
+    puke("loaded file '$file' is not hashref") if ref $formopt ne 'HASH';
+
+    debug 1, "processing YAML::Syck file '$file' as input source";
+
+    # add in top-level options:
+    map { $formopt->{$_} = $self->{$_} if !exists $formopt->{$_} } keys %{$self};
+
+    # whork in the function refs:
+    $self->_assign_references($formopt, 1) if ref $self;
+
+    my %lame = ( %{$formopt} );
+    debug 1, "YAML form definition is:", Dump(\%lame);
+
+    return wantarray ? %{$formopt} : $formopt;
+}
+
+sub _assign_references {
+    my ($self, $hashref, $stacklevel) = @_;
+    $stacklevel++;
+
+    NODE:
+    foreach my $node (values %{$hashref}) {
+        my $ref = ref $node;
+
+        if ($ref eq 'HASH') {
+            $self->_assign_references($node, $stacklevel);
+        }
+        elsif (!$ref) {
+
+            debug 1, "node is '$node'\n";
+
+            if ( $node =~ m{ \A \\ ([&\$%@]) (.*) \z }xms ) {
+
+                my ($reftype, $refstr) = ($1, $2);
+           
+                if ($refstr =~ m{ :: }xms) {
+                    # already know where it is.  assign it.
+                    my $subref = undef;
+                    debug 1, "assigning direct pkg ref for '$reftype$refstr'";
+                    eval "\$subref = \\$reftype$refstr";
+                    my $err = $@;
+                    debug 1, "eval error '$err'" if $err;
+                    debug 1, "subref is '$subref'";
+                    $node = $subref;
+                }
+                else {
+    
+                    my $l = $stacklevel;
+                    my $subref = undef;
+                    LEVELUP:
+                    while (my $pkg = caller($l++)) {
+                        debug 1, "looking up at lev $l for ref '$refstr' in '$pkg'";
+                        my $evalstr = "\$subref = \\$reftype$pkg\::$refstr";
+                        debug 1, "eval '$evalstr'";
+                        eval $evalstr;
+                        if (!$@) {
+                            $node = $subref;
+                            last LEVELUP;
+                        }
+                    }
+                }
+                debug 1, "assgnd ref '$node' for '$reftype$refstr'";
+            }
+            elsif ( $node =~ m/ \A eval \s* { (.*) } \s* \z /xms ) {
+                my $evalstr = $1;
+                debug 1, "eval '$evalstr'";
+                my $result = eval $evalstr;
+                my $err = $@;
+                if ($err) {
+                    debug 1, "eval error '$err'";
+                }
+                else {
+                    debug 1, "assgnd ref '$node' for eval";
+                    $node = $result;
+                }
+            }
+
+        }
+    }
+    return;
+}
+
+1;
+
+=head1 NAME
+
+CGI::FormBuilder::Source::YAML - Initialize FormBuilder from YAML file
+
+=head1 SYNOPSIS
+
+ use CGI::FormBuilder;
+
+ my $form = CGI::FormBuilder->new(
+    source  => {
+        source  => 'form.fb',
+        type    => 'YAML',
+    },
+ );
+
+ my $lname = $form->field('lname');  # like normal
+
+=head1 DESCRIPTION
+
+This reads a YAML (YAML::Syck) file that contains B<FormBuilder>
+config options and returns a hash to be fed to CGI::FormBuilder->new().
+
+Instead of the syntax read by CGI::FormBuilder::Source::File,
+it uses YAML syntax as read by YAML::Syck.  That means you
+fully specify the entire data structure.
+
+LoadCode is enabled, so you can use YAML syntax for defining subroutines.
+This is convenient if you have a function that generates validation
+subrefs, for example, I have one that can check profanity using Regexp::Common.
+
+ validate:
+    myfield:    
+        javascript: /^[\s\S]{2,50}$/
+        perl: !!perl/code: >-
+            {   My::Funk::fb_perl_validate({ 
+                    min         => 2, 
+                    max         => 50, 
+                    profanity   => 'check' 
+                })->(shift);
+            }
+
+=head1 POST PROCESSING
+
+There are two exceptions to "pure YAML syntax" where this module
+does some post-processing of the result.
+
+=head2 REFERENCES (ala CGI::FormBuilder::Source::File)
+
+You can specify references as string values that start with 
+\&, \$, \@, or \% in the
+same way you can with CGI::FormBuilder::Source::File.  If you have
+a full direct package reference, it will look there, otherwise
+it will traverse up the caller stack and take the first it finds.
+
+For example, say your code serves multiple sites, and a menu 
+gets different options depending on the server name requested:
+
+ # in My::Funk:
+ our $food_options = {
+     www.meats.com   => [qw( beef    chicken horta   fish    )],
+     www.veggies.com => [qw( carrot  apple   quorn   radish  )],
+ };
+
+ # in source file:
+ options: \@{ $My::Funk::food_options->{ $ENV{SERVER_NAME} } }
+
+=head2 EVAL STRINGS
+
+You can specify an eval statement.  You could achieve the same
+example a different way:
+
+ options: eval { $My::Funk::food_options->{ $ENV{SERVER_NAME} }; }
+
+The cost either way is about the same -- the string is eval'd.
+
+=head1 EXAMPLE
+
+ method:     GET
+ header:     0
+ title:      test
+ name:       test
+ action:     /test
+ submit:     test it
+ linebreaks: 1
+
+ required:   
+    - test1
+    - test2
+
+ fields:
+    - test1
+    - test2
+    - test3
+    - test4
+
+ fieldopts:
+    test1:
+        type:       text
+        size:       10
+        maxlength:  32
+
+    test2:
+        type:       text
+        size:       10
+        maxlength:  32
+
+    test3:
+        type:       radio
+        options:
+            -
+                - 1
+                - Yes
+            -
+                - 0
+                - No
+
+    test4:
+        options:    \@test4opts
+        sort:       \&Someother::Package::sortopts
+
+ validate:
+    test1:      /^\w{3,10}$/
+    test2:
+        javascript: EMAIL
+        perl:       eq 'test at test.foo'
+    test3:
+        - 0
+        - 1
+    test4:  \@test4opts
+
+You get the idea.  A bit more whitespace, but it works in a 
+standardized way.
+
+=head1 METHODS
+
+=head2 new()
+
+Normally not used directly; it is called from CGI::FormBuilder.
+Creates the C<CGI::FormBuilder::Source::YAML> object.  Arguments
+from the 'source' hash passed to CGI::FormBuilder->new() will 
+become defaults, unless specified in the file.
+
+=head2 parse($source)
+
+Normally not used directly; it is called from CGI::FormBuilder.
+Parses the specified source file.  No fancy params -- 
+just a single filename is accepted.  If the file isn't
+acceptable to YAML::Syck, I suppose it will die.
+
+=head1 SEE ALSO
+
+L<CGI::FormBuilder>, L<CGI::FormBuilder::Source>
+
+=head1 AUTHOR
+
+Copyright (c) 2006 Mark Hedges <hedges at ucsd.edu>. All rights reserved.
+
+=head1 LICENSE
+
+This module is free software; you may copy it under terms of
+the Perl license (GNU General Public License or Artistic License.)
+http://www.opensource.org/licenses/index.html
+
+=cut

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.fb
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.fb?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.fb (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.fb Tue Nov 20 00:15:24 2007
@@ -1,0 +1,51 @@
+
+method:     GET
+header:     0
+title:      test
+name:       test
+action:     /test
+submit:     test it
+linebreaks: 1
+
+required:   
+    - test1
+    - test2
+
+fields:
+    - test1
+    - test2
+    - test3
+    - test4
+
+fieldopts:
+    test1:
+        type:       text
+        size:       10
+        maxlength:  32
+
+    test2:
+        type:       text
+        size:       10
+        maxlength:  32
+
+    test3:
+        type:       radio
+        options:
+            -
+                - 1
+                - Yes
+            -
+                - 0
+                - No
+    
+    test4:
+        options:    \&test4opts
+
+validate:
+    test1:      /^\w{3,10}$/
+    test2:
+        javascript: EMAIL
+        perl:       eq 'test at test.foo'
+    test3:
+        - 0
+        - 1

Added: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t
URL: http://svn.debian.org/wsvn/branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t?rev=9617&op=file
==============================================================================
--- branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t (added)
+++ branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t Tue Nov 20 00:15:24 2007
@@ -1,0 +1,63 @@
+#!/usr/bin/perl 
+
+# Copyright (c) 2006 Mark Hedges <hedges at ucsd.edu>
+
+use strict;
+use English '-no_match_vars';
+
+use blib;
+
+use Test::More tests => 6;
+
+use FindBin;
+
+# use a BEGIN block so we print our plan before CGI::FormBuilder is loaded
+BEGIN {
+    use_ok('CGI::FormBuilder');
+}
+require_ok('CGI::FormBuilder');
+
+# Need to fake a request or else we stall... or not?  hrmm.
+$ENV{REQUEST_METHOD} = 'GET';
+my $testqs = {
+    test1   => 'testing',
+    test2   => 'test at test.foo',
+    test3   => 0,
+    _submitted_test => 1,
+};
+$ENV{QUERY_STRING} = join('&', map "$_=$testqs->{$_}", keys %{$testqs});
+
+sub test4opts {
+    return [
+        [ beef => "Where's the beef?"   ],
+        [ chicken => "Cross the road!"  ],
+        [ horta => "They're eggs, Jim!" ],
+    ];
+}
+
+my $form = undef;
+
+my $sourcefile = "$FindBin::Bin/test.fb";
+
+eval {
+    $form = CGI::FormBuilder->new(
+        source  => {
+            type    => 'YAML',
+            source  => $sourcefile,
+            debug   => 0,
+        },
+    );
+};
+ok !$EVAL_ERROR, 'create form';
+
+my $ren = undef;
+
+eval {
+    $ren = $form->render;
+};
+ok !$EVAL_ERROR, 'render form';
+
+ok( $form->submitted, 'form submitted' );
+
+ok( $form->validate, 'form validate' );
+

Propchange: branches/upstream/libcgi-formbuilder-source-yaml-perl/current/t/test.t
------------------------------------------------------------------------------
    svn:executable = 




More information about the Pkg-perl-cvs-commits mailing list