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