195 lines
6.9 KiB
RPMSpec
195 lines
6.9 KiB
RPMSpec
#
|
|
# spec file for package perl-Catalyst-Controller-FormBuilder
|
|
#
|
|
# Copyright (c) 2024 SUSE LLC
|
|
#
|
|
# All modifications and additions to the file contributed by third parties
|
|
# remain the property of their copyright owners, unless otherwise agreed
|
|
# upon. The license for this file, and modifications and additions to the
|
|
# file, is the same license as for the pristine package itself (unless the
|
|
# license for the pristine package is not an Open Source License, in which
|
|
# case the license is the MIT License). An "Open Source License" is a
|
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|
# published by the Open Source Initiative.
|
|
|
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
|
#
|
|
|
|
|
|
%define cpan_name Catalyst-Controller-FormBuilder
|
|
Name: perl-Catalyst-Controller-FormBuilder
|
|
Version: 0.60.0
|
|
Release: 0
|
|
# 0.06 -> normalize -> 0.60.0
|
|
%define cpan_version 0.06
|
|
License: CHECK(Artistic-1.0 or GPL-1.0-or-later)
|
|
Summary: Catalyst FormBuilder Base Controller
|
|
URL: https://metacpan.org/release/%{cpan_name}
|
|
Source0: https://cpan.metacpan.org/authors/id/M/MS/MSTROUT/%{cpan_name}-%{cpan_version}.tar.gz
|
|
Source100: README.md
|
|
BuildArch: noarch
|
|
BuildRequires: perl
|
|
BuildRequires: perl-macros
|
|
BuildRequires: perl(CGI::FormBuilder) >= 3.02
|
|
BuildRequires: perl(Catalyst::Runtime) >= 5.700.0
|
|
BuildRequires: perl(Class::Data::Inheritable) >= 0.04
|
|
BuildRequires: perl(Class::Inspector) >= 1.13
|
|
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.42
|
|
BuildRequires: perl(MRO::Compat) >= 0.09
|
|
BuildRequires: perl(Scalar::Util) >= 1.19
|
|
BuildRequires: perl(Test::WWW::Mechanize::Catalyst) >= 0.370.0
|
|
BuildRequires: perl(Tie::IxHash) >= 1.21
|
|
Requires: perl(CGI::FormBuilder) >= 3.02
|
|
Requires: perl(Catalyst::Runtime) >= 5.700.0
|
|
Requires: perl(Class::Data::Inheritable) >= 0.04
|
|
Requires: perl(Class::Inspector) >= 1.13
|
|
Requires: perl(MRO::Compat) >= 0.09
|
|
Requires: perl(Scalar::Util) >= 1.19
|
|
Requires: perl(Test::WWW::Mechanize::Catalyst) >= 0.370.0
|
|
Requires: perl(Tie::IxHash) >= 1.21
|
|
Provides: perl(Catalyst::Controller::FormBuilder) = %{version}
|
|
Provides: perl(Catalyst::Controller::FormBuilder::Action)
|
|
Provides: perl(Catalyst::Controller::FormBuilder::Action::HTML::Template)
|
|
Provides: perl(Catalyst::Controller::FormBuilder::Action::Mason)
|
|
Provides: perl(Catalyst::Controller::FormBuilder::Action::TT)
|
|
%undefine __perllib_provides
|
|
Recommends: perl(Catalyst::View::TT) >= 0.230.0
|
|
%{perl_requires}
|
|
|
|
%description
|
|
This base controller merges the functionality of *CGI::FormBuilder* with
|
|
Catalyst and the following templating systems: Template Toolkit, Mason and
|
|
HTML::Template. This gives you access to all of FormBuilder's niceties,
|
|
such as controllablefield stickiness, multilingual support, and Javascript
|
|
generation. For more details, see CGI::FormBuilder or the website at:
|
|
|
|
http://www.formbuilder.org
|
|
|
|
FormBuilder usage within Catalyst is straightforward. Since Catalyst
|
|
handles page rendering, you don't call FormBuilder's 'render()' method, as
|
|
you would normally. Instead, you simply add a ':Form' attribute to each
|
|
method that you want to associate with a form. This will give you access to
|
|
a FormBuilder '$self->formbuilder' object within that controller method:
|
|
|
|
# An editing screen for books
|
|
sub edit : Local Form {
|
|
my ( $self, $c ) = @_;
|
|
$self->formbuilder->method('post'); # set form method
|
|
}
|
|
|
|
The out-of-the-box setup is to look for a form configuration file that
|
|
follows the CGI::FormBuilder::Source::File format (essentially YAML), named
|
|
for the current action url. So, if you were serving '/books/edit', this
|
|
plugin would look for:
|
|
|
|
root/forms/books/edit.fb
|
|
|
|
(The path is configurable.) If no source file is found, then it is assumed
|
|
you'll be setting up your fields manually. In your controller, you will
|
|
have to use the '$self->formbuilder' object to create your fields,
|
|
validation, and so on.
|
|
|
|
Here is an example 'edit.fb' file:
|
|
|
|
# Form config file root/forms/books/edit.fb
|
|
name: books_edit
|
|
method: post
|
|
fields:
|
|
title:
|
|
label: Book Title
|
|
type: text
|
|
size: 40
|
|
required: 1
|
|
author:
|
|
label: Author's Name
|
|
type: text
|
|
size: 80
|
|
validate: NAME
|
|
required: 1
|
|
isbn:
|
|
label: ISBN#
|
|
type: text
|
|
size: 20
|
|
validate: /^(\d{10}|\d{13})$/
|
|
required: 1
|
|
desc:
|
|
label: Description
|
|
type: textarea
|
|
cols: 80
|
|
rows: 5
|
|
|
|
submit: Save New Book
|
|
|
|
This will automatically create a complete form for you, using the specified
|
|
fields. Note that the 'root/forms' path is configurable; this path is used
|
|
by default to integrate with the 'TTSite' helper.
|
|
|
|
Within your controller, you can call any method that you would on a normal
|
|
'CGI::FormBuilder' object on the '$self->formbuilder' object. To manipulate
|
|
the field named 'desc', simply call the 'field()' method:
|
|
|
|
# Change our desc field dynamically
|
|
$self->formbuilder->field(
|
|
name => 'desc',
|
|
label => 'Book Description',
|
|
required => 1
|
|
);
|
|
|
|
To populate field options for 'country', you might use something like this
|
|
to iterate through the database:
|
|
|
|
$self->formbuilder->field(
|
|
name => 'country',
|
|
options =>
|
|
[ map { [ $_->id, $_->name ] } $c->model('MyApp::Country')->all ],
|
|
other => 1, # create "Other:" box
|
|
);
|
|
|
|
This would create a select list with the last element as "Other:" to allow
|
|
the addition of more countries. See CGI::FormBuilder for methods available
|
|
to the form object.
|
|
|
|
The FormBuilder methodolody is to handle both rendering and validation of
|
|
the form. As such, the form will "loop back" onto the same controller
|
|
method. Within your controller, you would then use the standard FormBuilder
|
|
submit/validate check:
|
|
|
|
if ( $self->formbuilder->submitted && $self->formbuilder->validate ) {
|
|
$c->forward('/books/save');
|
|
}
|
|
|
|
This would forward to '/books/save' if the form was submitted and passed
|
|
field validation. Otherwise, it would automatically re-render the form with
|
|
invalid fields highlighted, leaving the database unchanged.
|
|
|
|
To render the form in your tt2 template for example, you can use 'render'
|
|
to get a default table-based form:
|
|
|
|
<!-- root/src/books/edit.tt -->
|
|
[% FormBuilder.render %]
|
|
|
|
You can also get fine-tuned control over your form layout from within your
|
|
template.
|
|
|
|
%prep
|
|
%autosetup -n %{cpan_name}-%{cpan_version}
|
|
|
|
find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path "*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 644
|
|
|
|
%build
|
|
PERL_USE_UNSAFE_INC=1 perl Makefile.PL INSTALLDIRS=vendor
|
|
%make_build
|
|
|
|
%check
|
|
make test
|
|
|
|
%install
|
|
%perl_make_install
|
|
%perl_process_packlist
|
|
%perl_gen_filelist
|
|
|
|
%files -f %{name}.files
|
|
%doc Changes
|
|
|
|
%changelog
|