diff -Nru libhtml-formhandler-model-dbic-perl-0.23/Changes libhtml-formhandler-model-dbic-perl-0.28/Changes --- libhtml-formhandler-model-dbic-perl-0.23/Changes 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/Changes 2013-09-22 16:21:14.000000000 +0000 @@ -1,3 +1,19 @@ +0.28 + Remove unnecessary use of Business::ISBN + +0.27 + Bug: dies with multiple pk table with unique field/column + +0.26 Sun Jul 21, 2013 + Enable use of 'messages' hashref for setting unique message + +0.25 Wed Jul 3, 2013 + Fix bug using result source method for select labels + Bump prereq of DBIx::Class::ResultSet::RecursiveUpdate + +0.24 Sun May 5, 2013 + Bump prereq version of DBIC to avoid a regression + 0.23 Mon Oct 15, 2012 Bump pre-req to non-broken HTML::FormHandler diff -Nru libhtml-formhandler-model-dbic-perl-0.23/LICENSE libhtml-formhandler-model-dbic-perl-0.28/LICENSE --- libhtml-formhandler-model-dbic-perl-0.23/LICENSE 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/LICENSE 2013-09-22 16:21:14.000000000 +0000 @@ -1,4 +1,4 @@ -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. @@ -12,7 +12,7 @@ --- The GNU General Public License, Version 1, February 1989 --- -This software is Copyright (c) 2012 by Gerda Shank. +This software is Copyright (c) 2013 by Gerda Shank. This is free software, licensed under: @@ -272,7 +272,7 @@ --- The Artistic License 1.0 --- -This software is Copyright (c) 2012 by Gerda Shank. +This software is Copyright (c) 2013 by Gerda Shank. This is free software, licensed under: diff -Nru libhtml-formhandler-model-dbic-perl-0.23/MANIFEST libhtml-formhandler-model-dbic-perl-0.28/MANIFEST --- libhtml-formhandler-model-dbic-perl-0.23/MANIFEST 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/MANIFEST 2013-09-22 16:21:14.000000000 +0000 @@ -16,9 +16,11 @@ lib/HTML/FormHandler/TraitFor/Model/DBIC.pm script/form_generator.pl t/01app.t +t/active_column.t t/author.t t/bad_item_id.t t/book.t +t/book2pk.t t/datetime.t t/db/book.db t/db/bookdb.sql @@ -35,6 +37,7 @@ t/lib/BookDB/Form/Author.pm t/lib/BookDB/Form/AuthorOld.pm t/lib/BookDB/Form/Book.pm +t/lib/BookDB/Form/Book2PK.pm t/lib/BookDB/Form/BookHTML.pm t/lib/BookDB/Form/BookM2M.pm t/lib/BookDB/Form/BookView.pm @@ -54,6 +57,7 @@ t/lib/BookDB/Schema/Result/AuthorBooks.pm t/lib/BookDB/Schema/Result/AuthorOld.pm t/lib/BookDB/Schema/Result/Book.pm +t/lib/BookDB/Schema/Result/Book2PK.pm t/lib/BookDB/Schema/Result/BooksGenres.pm t/lib/BookDB/Schema/Result/Borrower.pm t/lib/BookDB/Schema/Result/Country.pm diff -Nru libhtml-formhandler-model-dbic-perl-0.23/META.json libhtml-formhandler-model-dbic-perl-0.28/META.json --- libhtml-formhandler-model-dbic-perl-0.23/META.json 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/META.json 2013-09-22 16:21:14.000000000 +0000 @@ -21,7 +21,7 @@ }, "runtime" : { "requires" : { - "DBIx::Class" : "0", + "DBIx::Class" : "0.08250", "DBIx::Class::ResultSet::RecursiveUpdate" : "0.25", "HTML::FormHandler" : "0.40016", "Moose" : "2.0007", @@ -33,6 +33,7 @@ "DateTime::Format::MySQL" : "0", "DateTime::Format::SQLite" : "0", "DateTime::Format::W3CDTF" : "0", + "Test::Exception" : "0", "Test::More" : "0.94" } } @@ -49,6 +50,6 @@ "web" : "http://github.com/gshank/html-formhandler-model-dbic" } }, - "version" : "0.23" + "version" : "0.28" } diff -Nru libhtml-formhandler-model-dbic-perl-0.23/META.yml libhtml-formhandler-model-dbic-perl-0.28/META.yml --- libhtml-formhandler-model-dbic-perl-0.23/META.yml 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/META.yml 2013-09-22 16:21:14.000000000 +0000 @@ -6,6 +6,7 @@ DateTime::Format::MySQL: 0 DateTime::Format::SQLite: 0 DateTime::Format::W3CDTF: 0 + Test::Exception: 0 Test::More: 0.94 configure_requires: ExtUtils::MakeMaker: 6.30 @@ -17,7 +18,7 @@ version: 1.4 name: HTML-FormHandler-Model-DBIC requires: - DBIx::Class: 0 + DBIx::Class: 0.08250 DBIx::Class::ResultSet::RecursiveUpdate: 0.25 HTML::FormHandler: 0.40016 Moose: 2.0007 @@ -25,4 +26,4 @@ resources: bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=HTML-FormHandler-Model-DBIC repository: git://github.com/gshank/html-formhandler-model-dbic.git -version: 0.23 +version: 0.28 diff -Nru libhtml-formhandler-model-dbic-perl-0.23/Makefile.PL libhtml-formhandler-model-dbic-perl-0.28/Makefile.PL --- libhtml-formhandler-model-dbic-perl-0.23/Makefile.PL 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/Makefile.PL 2013-09-22 16:21:14.000000000 +0000 @@ -15,6 +15,7 @@ "DateTime::Format::MySQL" => 0, "DateTime::Format::SQLite" => 0, "DateTime::Format::W3CDTF" => 0, + "Test::Exception" => 0, "Test::More" => "0.94" }, "CONFIGURE_REQUIRES" => { @@ -27,13 +28,13 @@ "LICENSE" => "perl", "NAME" => "HTML::FormHandler::Model::DBIC", "PREREQ_PM" => { - "DBIx::Class" => 0, + "DBIx::Class" => "0.08250", "DBIx::Class::ResultSet::RecursiveUpdate" => "0.25", "HTML::FormHandler" => "0.40016", "Moose" => "2.0007", "namespace::autoclean" => "0.09" }, - "VERSION" => "0.23", + "VERSION" => "0.28", "test" => { "TESTS" => "t/*.t t/xt/*.t" } diff -Nru libhtml-formhandler-model-dbic-perl-0.23/README libhtml-formhandler-model-dbic-perl-0.28/README --- libhtml-formhandler-model-dbic-perl-0.23/README 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/README 2013-09-22 16:21:14.000000000 +0000 @@ -1,11 +1,11 @@ This archive contains the distribution HTML-FormHandler-Model-DBIC, -version 0.23: +version 0.28: base class that holds DBIC model role -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/SIGNATURE libhtml-formhandler-model-dbic-perl-0.28/SIGNATURE --- libhtml-formhandler-model-dbic-perl-0.23/SIGNATURE 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/SIGNATURE 2013-09-22 16:21:14.000000000 +0000 @@ -14,29 +14,31 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 -SHA1 5c2c064bb5a47507ea4327cfcdb4d757b80e5952 Changes +SHA1 061f1d6cd9382d74b0513424ddae2300d98705df Changes SHA1 674ec091357ed31599f8081acb61b17054e1650e INSTALL -SHA1 db5549ef0b451d5723593f2156141e6708484dfd LICENSE -SHA1 3a15c5b2a86847d8371ee29d337771d903772ad9 MANIFEST -SHA1 417face3e5ec818a3c9f22513dd193569d4b14db META.json -SHA1 c7379f92780f66d43e8007528226fc23f3b0e2ec META.yml -SHA1 d63c9a82871fc09a460d055a291935b96d156c2d Makefile.PL -SHA1 6628db20226d4973181ff0ed3b4b3b9603cca3a7 README +SHA1 b666e0455e9fd5ccdcadd7cc9750644700fc8c22 LICENSE +SHA1 ce9b8c00e5f9b8abee54abdd1a3f07f2b8277bba MANIFEST +SHA1 d6217b04aa38cfafd757da532c4061d9bc4b3f40 META.json +SHA1 b1ea5ee8fcb4f7b51401b988c4829b399e3a0a16 META.yml +SHA1 626915e99049870ef5dffd4fb71f7ea528538b16 Makefile.PL +SHA1 5e1226dfa7fb6986e9efeb6193d7a5734dba0140 README SHA1 a8d73c860cf746b8a1a74ff351719f9c53a3f560 TODO -SHA1 9e81eb964edfd3482c9553b98deba4c453af7b28 dist.ini -SHA1 8f5d3105f8edb74957a11149ca54941b967ff27f lib/HTML/FormHandler/Generator/DBIC.pm -SHA1 e8cefafe67fb0d96dfeabdff7bbd57189183ac42 lib/HTML/FormHandler/Model/DBIC.pm -SHA1 2dde143fb9f2d5df801d26be5ad492c2b71bf0a7 lib/HTML/FormHandler/Model/DBIC/TypeMap.pm -SHA1 be27449546c927c769d4012c288029c00bb6fb43 lib/HTML/FormHandler/TraitFor/DBICFields.pm -SHA1 4419de9b7eedf9abf115ec7752968c2782dea342 lib/HTML/FormHandler/TraitFor/Model/DBIC.pm -SHA1 a73995c6a2adfe608e79bc122b6c1ca36910f1a3 script/form_generator.pl +SHA1 9c2c8fb6b1ac164e9789a7e1abc7e8558b47163b dist.ini +SHA1 1bd5200858474e3b039a0ecab4833c0c6dee69de lib/HTML/FormHandler/Generator/DBIC.pm +SHA1 812b244f4fe5d41e7fed9ff310c6bb67302be8bc lib/HTML/FormHandler/Model/DBIC.pm +SHA1 856c765f56d3419c4f1c98f57909fe0e65ff4fda lib/HTML/FormHandler/Model/DBIC/TypeMap.pm +SHA1 91a74ffbfb45215e9b8dceda43a0eea6d95ab3a2 lib/HTML/FormHandler/TraitFor/DBICFields.pm +SHA1 3b58421a40d5c6179ac0cbfb2602f5cd0130e1b9 lib/HTML/FormHandler/TraitFor/Model/DBIC.pm +SHA1 1a59733c25c1df1fc81270e7fccfc957f7a3c081 script/form_generator.pl SHA1 e141c74dbb016fc0b4e2ff548cb113e0e6cbeac9 t/01app.t +SHA1 c910b1623c4b03c14d280a01d42979e28ec8f102 t/active_column.t SHA1 b19a7d514320858a9f58455635c346aa4da663d8 t/author.t SHA1 b03b8d035f37e3b2789fa33657b28fa909bd014c t/bad_item_id.t -SHA1 399dc976c3c4cdc84ed84101363f30c37da127ff t/book.t +SHA1 e05624f03890ccc13b0433864c21af1db0f763c2 t/book.t +SHA1 cd2214898eb4484fd5d515b85a34c060312a9e2a t/book2pk.t SHA1 ffdd1e69a43a80a797d7765146e86dd99f61ae63 t/datetime.t -SHA1 b2dfd77385559ad1472c1baa1f633029363caafb t/db/book.db -SHA1 5cc844898f08f8e4f30a8ca897c41eae01902c0b t/db/bookdb.sql +SHA1 4ab0b326d2fc6d1d55f3d9bdf33bfb5a53ea1659 t/db/book.db +SHA1 dc44fb3bb1b947d18d4d3b2b859ac4cd5ae24439 t/db/bookdb.sql SHA1 553c4d810e9fc902273195f5661386def69a72f4 t/db_fif.t SHA1 2e318f0ec4d69ce9622b31071c73189cbd0d1562 t/db_has_many.t SHA1 653c2c4049390afdad5c773a1399c689adc4b7f4 t/db_has_one.t @@ -44,12 +46,13 @@ SHA1 2f64d47a773825667cf5d86b33edc540c1385d84 t/db_options.t SHA1 3b7450422ca4644db2edfc770654754823c2f304 t/db_validate.t SHA1 f53b0d40db8b918eccd29267d7d0f269890b5bfa t/dbic_accessor.t -SHA1 dd8c16f7e681548f72329080be47fd0f8d464be5 t/fif.t +SHA1 6cb226a1240bec6c188279b0ed041ddc265c59d4 t/fif.t SHA1 6503092531bd4ad63ed835763be21662eaa13c03 t/generator.t SHA1 14989b01195d51bfe165bda524799c5ad84919de t/lib/BookDB.pm SHA1 71ed372b5f2cb0040c98b333e242878e3bc917c4 t/lib/BookDB/Form/Author.pm SHA1 0d2b18d1c28bbdd9611033ec44648333539e1c1d t/lib/BookDB/Form/AuthorOld.pm -SHA1 c85cf1700f43c76e2b4ace50ad022adfef80ef61 t/lib/BookDB/Form/Book.pm +SHA1 57ac298e6e3abc17f2bc5e48220c7c1c462a7bb2 t/lib/BookDB/Form/Book.pm +SHA1 d08154338f45a07137f85d6ae0c7cb54a1ef95ca t/lib/BookDB/Form/Book2PK.pm SHA1 b5ce1b76ee76505069efa62d4f201fae7b2d457c t/lib/BookDB/Form/BookHTML.pm SHA1 d426249c86ae939b3032846bc82d9ec903c57cc5 t/lib/BookDB/Form/BookM2M.pm SHA1 cbe1dd7bcedd279e943e81a4f1bd89e8f6890c7e t/lib/BookDB/Form/BookView.pm @@ -65,12 +68,13 @@ SHA1 6f59b959717ea61499038f05f21999650edb5241 t/lib/BookDB/Form/Widget/Wrapper/Para.pm SHA1 a6ee6f269e6024d675d22c40b0a5bb4aa859ca40 t/lib/BookDB/Schema.pm SHA1 4856e496246686ef913209a49a4dc57904dce5a7 t/lib/BookDB/Schema/Result/Address.pm -SHA1 9e0c5e7d538cd74be568a2eaead6d6c347b11e0f t/lib/BookDB/Schema/Result/Author.pm +SHA1 742e87180a2599893a806f2d03cc57f5f705088e t/lib/BookDB/Schema/Result/Author.pm SHA1 66660fb22bcb833e82609ac33ba4183261be2f66 t/lib/BookDB/Schema/Result/AuthorBooks.pm SHA1 47bc39eb211a3e8be2ec2c7b5281dddc001ca13f t/lib/BookDB/Schema/Result/AuthorOld.pm SHA1 f7e3a768098f9ee0b197e0b2276b90cabfef6c83 t/lib/BookDB/Schema/Result/Book.pm +SHA1 e17c92e2a4cf1c5e7988f75f1161644daf0b263e t/lib/BookDB/Schema/Result/Book2PK.pm SHA1 0b13f30efa9317c7def84e10a007ed8a2e900d0e t/lib/BookDB/Schema/Result/BooksGenres.pm -SHA1 3017b27ee8af6b022ddcb280aaf64cc6baeea3cb t/lib/BookDB/Schema/Result/Borrower.pm +SHA1 8fdeb42fdfc15f2692fdc141ca4853ea3997b276 t/lib/BookDB/Schema/Result/Borrower.pm SHA1 025fa1a06df3677d577311cdf88190fca9c2ec9a t/lib/BookDB/Schema/Result/Country.pm SHA1 85dd3c2065ad98adb46ba52f1d02e1f5305d7dd1 t/lib/BookDB/Schema/Result/Employer.pm SHA1 42f9533e65597837b19389aef03b87096b3060b4 t/lib/BookDB/Schema/Result/Format.pm @@ -80,7 +84,7 @@ SHA1 caea8cb79f441d37d54e192d1bcc16763819a7ed t/lib/BookDB/Schema/Result/User.pm SHA1 c2b07809d8b836565eb70105704867668dfb7011 t/lib/BookDB/Schema/Result/UserEmployer.pm SHA1 60f791ad0cd523be869b9f1994a89e8f3e5d7285 t/model_dbic.t -SHA1 aaf01835ef5a500826c9a6505a6a6d9eb6ca1bf0 t/mult_pk.t +SHA1 6f7b36a0ecf0c47817f460a974c9cb62d004dbbd t/mult_pk.t SHA1 f7bd133652cf896d80d26912a2f96e9ca56a0e31 t/process.t SHA1 82bfaff07150d7a4e45d31bde7146c0622d44217 t/reflect.t SHA1 d994766acb3f7185f996d7c2b2a6a8a1e02e802b t/related.t @@ -89,13 +93,13 @@ SHA1 a1731d1ac9e3a5218db578bc8557a0b0c068ac47 t/reload_options.t SHA1 f6d485d4fc868421b5f76a77cbe18e2b3068f95f t/resultset.t SHA1 8e637403943525aa9fa41ae35e02c52225424220 t/unique-composite.t -SHA1 9bdf0cc7a777a67b024e94c691c1c59523dd5bdf t/unique.t +SHA1 e5186c67e65b7c1658cdf2c362a05b3cea172d87 t/unique.t SHA1 86d255a7c9f065a13049108362c949b3e35a4c24 t/xt/02pod.t SHA1 6c8c9e4255f3a7e58a2508bb779ec013ac48706f t/xt/dump.t -----BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.10 (Darwin) +Version: GnuPG v1.4.13 (Darwin) -iF4EAREIAAYFAlB8cvsACgkQlX0ZOkgCucgaCgD/UjeYQo/H6JZktv+eYwmQY5+j -cMvFxo864WMDnYHO8uUBAID3YmINTC7sn20DOGhMySfJPO84+NUw73JxvnmnEDU/ -=V6zV +iF4EAREIAAYFAlI/GPYACgkQlX0ZOkgCucirvQD+PNsqijr2aSXbTr0R/3EYWHvZ +TrVM/vtdlL7SmQOYe8kA+QH+BlP8zZI4EW/tMsuPQ5cGEREbu9N9fE3NIIqBpoS2 +=zewy -----END PGP SIGNATURE----- diff -Nru libhtml-formhandler-model-dbic-perl-0.23/debian/changelog libhtml-formhandler-model-dbic-perl-0.28/debian/changelog --- libhtml-formhandler-model-dbic-perl-0.23/debian/changelog 2012-10-17 11:41:47.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/debian/changelog 2013-10-13 16:36:28.000000000 +0000 @@ -1,3 +1,20 @@ +libhtml-formhandler-model-dbic-perl (0.28-1) unstable; urgency=low + + [ Salvatore Bonaccorso ] + * Change Vcs-Git to canonical URI (git://anonscm.debian.org) + * Change search.cpan.org based URIs to metacpan.org based URIs + + [ Dominique Dumont ] + * Imported Upstream version 0.28 + * bumped compat to 9 + * control: + * added version dep on libdbix-class-perl + * bump std-version to 3.9.4 + + build-dep in libtest-exception-perl + * copyright: updated years + + -- Dominique Dumont Sun, 13 Oct 2013 18:35:48 +0200 + libhtml-formhandler-model-dbic-perl (0.23-1) unstable; urgency=low * new upstream release diff -Nru libhtml-formhandler-model-dbic-perl-0.23/debian/compat libhtml-formhandler-model-dbic-perl-0.28/debian/compat --- libhtml-formhandler-model-dbic-perl-0.23/debian/compat 2012-10-17 11:41:47.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/debian/compat 2013-10-13 16:36:28.000000000 +0000 @@ -1 +1 @@ -8 +9 diff -Nru libhtml-formhandler-model-dbic-perl-0.23/debian/control libhtml-formhandler-model-dbic-perl-0.28/debian/control --- libhtml-formhandler-model-dbic-perl-0.23/debian/control 2012-10-17 11:41:47.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/debian/control 2013-10-13 16:36:28.000000000 +0000 @@ -3,27 +3,27 @@ Uploaders: Dominique Dumont Section: perl Priority: optional -Build-Depends: debhelper (>= 8) +Build-Depends: debhelper (>= 9) Build-Depends-Indep: libdatetime-format-mysql-perl, libdatetime-format-sqlite-perl, libdatetime-format-w3cdtf-perl, libdbd-sqlite3-perl, - libdbix-class-perl, + libdbix-class-perl (>= 0.08250), libdbix-class-resultset-recursiveupdate-perl, libhtml-formhandler-perl (>= 0.40016), libmoose-perl (>= 2.0007), libnamespace-autoclean-perl, - perl -Standards-Version: 3.9.3 + libtest-exception-perl +Standards-Version: 3.9.4 Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-perl/packages/libhtml-formhandler-model-dbic-perl.git -Vcs-Git: git://git.debian.org/pkg-perl/packages/libhtml-formhandler-model-dbic-perl.git -Homepage: http://search.cpan.org/dist/HTML-FormHandler-Model-DBIC/ +Vcs-Git: git://anonscm.debian.org/pkg-perl/packages/libhtml-formhandler-model-dbic-perl.git +Homepage: https://metacpan.org/release/HTML-FormHandler-Model-DBIC/ Package: libhtml-formhandler-model-dbic-perl Architecture: all Depends: ${misc:Depends}, ${perl:Depends}, - libdbix-class-perl, + libdbix-class-perl (>= 0.08250), libdbix-class-resultset-recursiveupdate-perl, libhtml-formhandler-perl (>= 0.40016), libmoose-perl (>= 2.0007), @@ -36,4 +36,3 @@ . This interface is available as a regular class or as a Moose role. It will save form fields automatically to the database. - diff -Nru libhtml-formhandler-model-dbic-perl-0.23/debian/copyright libhtml-formhandler-model-dbic-perl-0.28/debian/copyright --- libhtml-formhandler-model-dbic-perl-0.23/debian/copyright 2012-10-17 11:41:47.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/debian/copyright 2013-10-13 16:36:28.000000000 +0000 @@ -1,14 +1,14 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: HTML-FormHandler-Model-DBIC Upstream-Contact: Gerda Shank -Source: http://search.cpan.org/dist/HTML-FormHandler-Model-DBIC/ +Source: https://metacpan.org/release/HTML-FormHandler-Model-DBIC/ Files: * -Copyright: 2012, Gerda Shank +Copyright: 2012-2013, Gerda Shank License: Artistic or GPL-1+ Files: debian/* -Copyright: 2012, Dominique Dumont +Copyright: 2012-2013, Dominique Dumont License: Artistic or GPL-1+ License: Artistic @@ -26,4 +26,3 @@ . On Debian systems, the complete text of version 1 of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-1'. - diff -Nru libhtml-formhandler-model-dbic-perl-0.23/debian/watch libhtml-formhandler-model-dbic-perl-0.28/debian/watch --- libhtml-formhandler-model-dbic-perl-0.23/debian/watch 2012-10-17 11:41:47.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/debian/watch 2013-10-13 16:36:28.000000000 +0000 @@ -1,2 +1,2 @@ version=3 -http://search.cpan.org/dist/HTML-FormHandler-Model-DBIC/ .*/HTML-FormHandler-Model-DBIC-v?(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip)$ +https://metacpan.org/release/HTML-FormHandler-Model-DBIC/ .*/HTML-FormHandler-Model-DBIC-v?(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip)$ diff -Nru libhtml-formhandler-model-dbic-perl-0.23/dist.ini libhtml-formhandler-model-dbic-perl-0.28/dist.ini --- libhtml-formhandler-model-dbic-perl-0.23/dist.ini 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/dist.ini 2013-09-22 16:21:14.000000000 +0000 @@ -4,9 +4,9 @@ author = FormHandler Contributors - see HTML::FormHandler license = Perl_5 copyright_holder = Gerda Shank -copyright_year = 2012 +copyright_year = 2013 -version = 0.23 +version = 0.28 [@Git] tag_format = %v @@ -37,12 +37,13 @@ [Prereqs] HTML::FormHandler = 0.40016 Moose = 2.0007 -DBIx::Class = 0 +DBIx::Class = 0.08250 DBIx::Class::ResultSet::RecursiveUpdate = 0.25 namespace::autoclean = 0.09 [Prereqs / TestRequires] Test::More = 0.94 +Test::Exception = 0 DateTime::Format::MySQL = 0 DateTime::Format::W3CDTF = 0 DateTime::Format::SQLite = 0 diff -Nru libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Generator/DBIC.pm libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Generator/DBIC.pm --- libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Generator/DBIC.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Generator/DBIC.pm 2013-09-22 16:21:14.000000000 +0000 @@ -367,7 +367,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 SYNOPSIS @@ -399,7 +399,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Model/DBIC/TypeMap.pm libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Model/DBIC/TypeMap.pm --- libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Model/DBIC/TypeMap.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Model/DBIC/TypeMap.pm 2013-09-22 16:21:14.000000000 +0000 @@ -66,7 +66,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 SYNOPSIS @@ -78,7 +78,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Model/DBIC.pm libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Model/DBIC.pm --- libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/Model/DBIC.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/Model/DBIC.pm 2013-09-22 16:21:14.000000000 +0000 @@ -5,7 +5,7 @@ extends 'HTML::FormHandler'; with 'HTML::FormHandler::TraitFor::Model::DBIC'; -our $VERSION = '0.23'; +our $VERSION = '0.28'; use namespace::autoclean; @@ -20,7 +20,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 SUMMARY @@ -33,7 +33,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/TraitFor/DBICFields.pm libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/TraitFor/DBICFields.pm --- libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/TraitFor/DBICFields.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/TraitFor/DBICFields.pm 2013-09-22 16:21:14.000000000 +0000 @@ -102,7 +102,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 SYNOPSIS @@ -150,7 +150,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/TraitFor/Model/DBIC.pm libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/TraitFor/Model/DBIC.pm --- libhtml-formhandler-model-dbic-perl-0.23/lib/HTML/FormHandler/TraitFor/Model/DBIC.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/lib/HTML/FormHandler/TraitFor/Model/DBIC.pm 2013-09-22 16:21:14.000000000 +0000 @@ -1,4 +1,5 @@ package HTML::FormHandler::TraitFor::Model::DBIC; + # ABSTRACT: model role that interfaces with DBIx::Class use Moose::Role; @@ -8,403 +9,408 @@ use DBIx::Class::ResultSet::RecursiveUpdate; use Scalar::Util ('blessed'); -our $VERSION = '0.14'; +our $VERSION = '0.26'; -has 'schema' => ( - is => 'rw', -); +has 'schema' => ( is => 'rw', ); has 'source_name' => ( - isa => 'Str', - is => 'rw', - lazy => 1, - builder => 'build_source_name' + isa => 'Str', + is => 'rw', + lazy => 1, + builder => 'build_source_name' ); has unique_constraints => ( - is => 'ro', - isa => 'ArrayRef', - lazy_build => 1, + is => 'ro', + isa => 'ArrayRef', + lazy_build => 1, ); + sub _build_unique_constraints { - my $self = shift; - return [grep { $_ ne 'primary' } $self->resultset->result_source->unique_constraint_names]; + my $self = shift; + return [ grep { $_ ne 'primary' } + $self->resultset->result_source->unique_constraint_names ]; } has unique_messages => ( - is => 'ro', - isa => 'HashRef', - default => sub { +{} }, + is => 'ro', + isa => 'HashRef', + default => sub { +{} }, ); has 'ru_flags' => ( - is => 'rw', - isa => 'HashRef', - traits => ['Hash'], - builder => '_build_ru_flags', - handles => { - set_ru_flag => 'set', - } + is => 'rw', + isa => 'HashRef', + traits => ['Hash'], + builder => '_build_ru_flags', + handles => { set_ru_flag => 'set', } ); + sub _build_ru_flags { - { unknown_params_ok => 1 } + { unknown_params_ok => 1 }; } -sub validate_model -{ - my ($self) = @_; - return unless $self->validate_unique; - return 1; +sub validate_model { + my ($self) = @_; + return unless $self->validate_unique; + return 1; } -sub clear_model -{ - my $self = shift; - $self->item(undef); - $self->item_id(undef); +sub clear_model { + my $self = shift; + $self->item(undef); + $self->item_id(undef); } -sub update_model -{ - my $self = shift; +sub update_model { + my $self = shift; my $item = $self->item; my $source = $self->source; warn "HFH: update_model for ", $self->name, "\n" if $self->verbose; + #warn "fif: " . Dumper ( $self->fif ); use Data::Dumper; my %update_params = ( resultset => $self->resultset, - updates => $self->values, - %{$self->ru_flags}, + updates => $self->values, + %{ $self->ru_flags }, ); - $update_params{ object } = $self->item if $self->item; + $update_params{object} = $self->item if $self->item; my $new_item; + # perform update in a transaction, since RecursiveUpdate may do multiple # updates if there are compound or multiple fields - $self->schema->txn_do( sub { - $new_item = DBIx::Class::ResultSet::RecursiveUpdate::Functions::recursive_update( %update_params ); - $new_item->discard_changes; - }); + $self->schema->txn_do( + sub { + $new_item = DBIx::Class::ResultSet::RecursiveUpdate::Functions::recursive_update( + %update_params); + $new_item->discard_changes; + } + ); $self->item($new_item) if $new_item; return $self->item; } # undocumented because this is going to be replaced # by a better method -sub guess_field_type -{ - my ( $self, $column ) = @_; - my $source = $self->source; - my @return; - - # TODO: Should be able to use $source->column_info - - # Is it a direct has_a relationship? - if ( - $source->has_relationship($column) - && ( $source->relationship_info($column)->{attrs}->{accessor} eq 'single' - || $source->relationship_info($column)->{attrs}->{accessor} eq 'filter' ) - ) - { - my $f_class = $source->related_class($column); - @return = - $f_class->isa('DateTime') - ? ('DateTime') - : ('Select'); - } - # Else is it has_many? - elsif ( $source->has_relationship($column) - && $source->relationship_info($column)->{attrs}->{accessor} eq 'multi' ) - { - @return = ('Multiple'); - } - elsif ( $column =~ /_time$/ ) # ends in time, must be time value - { - @return = ('DateTime'); - } - else # default: Text - { - @return = ('Text'); - } - - return wantarray ? @return : $return[0]; -} - - -sub lookup_options -{ - my ( $self, $field, $accessor_path ) = @_; - - return unless $self->schema; - my $self_source = $self->get_source( $accessor_path ); - - my $accessor = $field->accessor; - - # if this field doesn't refer to a foreign key, return - my $f_class; - my $source; - # belongs_to single select - if ($self_source->has_relationship($accessor) ) { - $f_class = $self_source->related_class($accessor); - $source = $self->schema->source($f_class); - } - else { - # check for many_to_many multiple select - my $resultset = $self_source->resultset; - my $new_result = $resultset->new_result({}); - if( $new_result && $new_result->can("add_to_$accessor") ) { - $source = $new_result->$accessor->result_source; - } - } - return unless $source; - - my $label_column = $field->label_column; - return unless ($source->has_column($label_column) || $source->can($label_column) ); - - my $active_col = $self->active_column || $field->active_column; - $active_col = '' unless $source->has_column($active_col); - my $sort_col = $field->sort_column; - my ($primary_key) = $source->primary_columns; - - # if no sort_column and label_column is a source method, not a real column, must - # use some other column for sort. There's probably some other column that should - # be specified, but this will prevent breakage - if ( ! defined $sort_col ) { - $sort_col = $source->has_column($label_column) ? $label_column : $primary_key; - } - - - # If there's an active column, only select active OR items already selected - my $criteria = {}; - if ($active_col) - { - my @or = ( $active_col => 1 ); - - # But also include any existing non-active - push @or, ( "$primary_key" => $field->init_value ) - if $self->item && defined $field->init_value; - $criteria->{'-or'} = \@or; - } - - # get an array of row objects - my @rows = - $self->schema->resultset( $source->source_name ) - ->search( $criteria, { order_by => $sort_col } )->all; - my @options; - foreach my $row (@rows) - { - my $label = $row->$label_column; - next unless defined $label; # this means there's an invalid value - push @options, $row->id, $active_col && !$row->$active_col ? "[ $label ]" : "$label"; - } - return \@options; -} - -sub init_value -{ - my ( $self, $field, $value ) = @_; - if( ref $value eq 'ARRAY' ){ - $value = [ map { $self->_fix_value( $field, $_ ) } @$value ]; - } - else{ - $value = $self->_fix_value( $field, $value ); - } - $field->init_value($value); - $field->value($value); -} - -sub _fix_value -{ - my ( $self, $field, $value ) = @_; - if( blessed $value && $value->isa('DBIx::Class') ){ -$DB::single=1; - return $value->id; - } - return $value; +sub guess_field_type { + my ( $self, $column ) = @_; + my $source = $self->source; + my @return; + + # TODO: Should be able to use $source->column_info + + # Is it a direct has_a relationship? + if ( + $source->has_relationship($column) && + ( $source->relationship_info($column)->{attrs}->{accessor} eq 'single' || + $source->relationship_info($column)->{attrs}->{accessor} eq 'filter' ) + ) + { + my $f_class = $source->related_class($column); + @return = + $f_class->isa('DateTime') ? ('DateTime') : + ('Select'); + } + + # Else is it has_many? + elsif ( $source->has_relationship($column) && + $source->relationship_info($column)->{attrs}->{accessor} eq 'multi' ) + { + @return = ('Multiple'); + } + elsif ( $column =~ /_time$/ ) # ends in time, must be time value + { + @return = ('DateTime'); + } + else # default: Text + { + @return = ('Text'); + } + + return wantarray ? @return : $return[0]; +} + +sub lookup_options { + my ( $self, $field, $accessor_path ) = @_; + + return unless $self->schema; + my $self_source = $self->get_source($accessor_path); + + my $accessor = $field->accessor; + + # if this field doesn't refer to a foreign key, return + my $f_class; + my $source; + + # belongs_to single select + if ( $self_source->has_relationship($accessor) ) { + $f_class = $self_source->related_class($accessor); + $source = $self->schema->source($f_class); + } + else { + + # check for many_to_many multiple select + my $resultset = $self_source->resultset; + my $new_result = $resultset->new_result( {} ); + if ( $new_result && $new_result->can("add_to_$accessor") ) { + $source = $new_result->$accessor->result_source; + } + } + return unless $source; + + my $label_column = $field->label_column; + return + unless ( $source->has_column($label_column) || + $source->result_class->can($label_column) ); + + my $active_col = $self->active_column || $field->active_column; + $active_col = '' unless $source->has_column($active_col); + my $sort_col = $field->sort_column; + my ($primary_key) = $source->primary_columns; + + # if no sort_column and label_column is a source method, not a real column, must + # use some other column for sort. There's probably some other column that should + # be specified, but this will prevent breakage + if ( !defined $sort_col ) { + $sort_col = $source->has_column($label_column) ? $label_column : $primary_key; + } + + # If there's an active column, only select active OR items already selected + my $criteria = {}; + if ($active_col) { + my @or = ( $active_col => 1 ); + + # But also include any existing non-active + push @or, ( "$primary_key" => $field->init_value ) + if $self->item && defined $field->init_value; + $criteria->{'-or'} = \@or; + } + + # get an array of row objects + my @rows = + $self->schema->resultset( $source->source_name ) + ->search( $criteria, { order_by => $sort_col } )->all; + my @options; + foreach my $row (@rows) { + my $label = $row->$label_column; + next unless defined $label; # this means there's an invalid value + push @options, $row->id, $active_col && !$row->$active_col ? "[ $label ]" : "$label"; + } + return \@options; +} + +sub init_value { + my ( $self, $field, $value ) = @_; + if ( ref $value eq 'ARRAY' ) { + $value = [ map { $self->_fix_value( $field, $_ ) } @$value ]; + } + else { + $value = $self->_fix_value( $field, $value ); + } + $field->init_value($value); + $field->value($value); +} + +sub _fix_value { + my ( $self, $field, $value ) = @_; + if ( blessed $value && $value->isa('DBIx::Class') ) { + return $value->id; + } + return $value; } sub _get_related_source { my ( $self, $source, $name ) = @_; - if( $source->has_relationship( $name ) ){ - return $source->related_source( $name ); + if ( $source->has_relationship($name) ) { + return $source->related_source($name); } + # many to many case - my $row = $source->resultset->new({}); - if ( $row->can( $name ) and $row->can( 'add_to_' . $name ) and $row->can( 'set_' . $name ) ){ + my $row = $source->resultset->new( {} ); + if ( $row->can($name) and + $row->can( 'add_to_' . $name ) and + $row->can( 'set_' . $name ) ) + { return $row->$name->result_source; } return; } - # this needs to be rewritten to be called at the field level # right now it will only work on fields immediately contained # by the form -sub validate_unique -{ - my ($self) = @_; - - my $rs = $self->resultset; - my $found_error = 0; - my $fields = $self->fields; - - my @id_clause = (); - @id_clause = _id_clause( $rs, $self->item_id ) if defined $self->item; - - my $value = $self->value; - for my $field ( @$fields ) - { - next unless $field->unique; - next if ( $field->is_inactive || !$field->has_result ); - next if $field->has_errors; - my $value = $field->value; - next unless defined $value; - my $accessor = $field->accessor; - - my $count = $rs->search( { $accessor => $value, @id_clause } )->count; - next if $count < 1; - my $field_error = $field->unique_message || 'Duplicate value for [_1]'; - $field->add_error( $field_error, $field->loc_label ); - $found_error++; - } - - # validate unique constraints in the model - for my $constraint (@{ $self->unique_constraints }) - { - my @columns = $rs->result_source->unique_constraint_columns($constraint); - - # check for matching field in the form - my $field; - for my $col (@columns) - { - ($field) = grep { $_->accessor eq $col } @$fields; - last if $field; - } - next unless defined $field; - next if ( $field->has_unique ); # already handled or don't do +sub validate_unique { + my ($self) = @_; + + my $rs = $self->resultset; + my $found_error = 0; + my $fields = $self->fields; + + my @id_clause = (); + @id_clause = _id_clause( $rs, $self->item_id ) if defined $self->item; + + my $value = $self->value; + for my $field (@$fields) { + next unless $field->unique; + next if ( $field->is_inactive || !$field->has_result ); + next if $field->has_errors; + my $value = $field->value; + next unless defined $value; + my $accessor = $field->accessor; + + my $count = $rs->search( { $accessor => $value, @id_clause } )->count; + next if $count < 1; + my $field_error = $field->get_message('unique') || $field->unique_message || 'Duplicate value for [_1]'; + $field->add_error( $field_error, $field->loc_label ); + $found_error++; + } - my @values = map { - exists( $value->{$_} ) ? $value->{$_} : undef - || - ( $self->item ? $self->item->get_column($_) : undef ) - } @columns; - - next if @columns != @values; # don't check unique constraints for which we don't have all the values - next if grep { !defined $_ } @values; # don't check unique constraints with NULL values - - my %where; - @where{@columns} = @values; - my $count = $rs->search( \%where )->search({@id_clause})->count; - next if $count < 1; - - my $field_error = $self->unique_message_for_constraint($constraint); - $field->add_error( $field_error, $constraint ); - $found_error++; - } + # validate unique constraints in the model + for my $constraint ( @{ $self->unique_constraints } ) { + my @columns = $rs->result_source->unique_constraint_columns($constraint); + + # check for matching field in the form + my $field; + for my $col (@columns) { + ($field) = grep { $_->accessor eq $col } @$fields; + last if $field; + } + next unless defined $field; + next if ( $field->has_unique ); # already handled or don't do + + my @values = map { + exists( $value->{$_} ) ? $value->{$_} : undef || + ( $self->item ? $self->item->get_column($_) : undef ) + } @columns; + + next + if @columns != + @values; # don't check unique constraints for which we don't have all the values + next + if grep { !defined $_ } @values; # don't check unique constraints with NULL values + + my %where; + @where{@columns} = @values; + my $count = $rs->search( \%where )->search( {@id_clause} )->count; + next if $count < 1; + + my $field_error = $self->unique_message_for_constraint($constraint); + $field->add_error( $field_error, $constraint ); + $found_error++; + } - return $found_error; + return $found_error; } sub unique_message_for_constraint { - my $self = shift; - my $constraint = shift; + my $self = shift; + my $constraint = shift; - return $self->unique_messages->{$constraint} ||= "Duplicate value for [_1] unique constraint"; + return $self->unique_messages->{$constraint} ||= + "Duplicate value for [_1] unique constraint"; } sub _id_clause { - my( $resultset, $id ) = @_; + my ( $resultset, $id ) = @_; + my @pks = $resultset->result_source->primary_columns; - my @ids; - if( ref $id eq 'ARRAY' ){ - @ids = @$id; - } - else{ - @ids = ( $id ); - } - my %result; - for my $i ( $#ids ){ - $result{$pks[$i]} = { '!=' => $ids[$i] }; - } - return %result; -} - -sub build_item -{ - my $self = shift; - - my $item_id = $self->item_id or return; - my $item = $self->resultset->find( ref $item_id eq 'ARRAY' ? - @{$item_id} : $item_id); - $self->item_id(undef) unless $item; - return $item; -} - -sub set_item -{ - my ( $self, $item ) = @_; - return unless $item; - # when the item (DBIC row) is set, set the item_id, item_class - # and schema from the item - if( $item->id ) - { $self->item_id($item->id); } - else - { $self->clear_item_id; } - $self->item_class( $item->result_source->source_name ); - $self->schema( $item->result_source->schema ); -} - -sub set_item_id -{ - my ( $self, $item_id ) = @_; - # if a new item_id has been set - # clear an existing item - if( defined $self->item ) - { - $self->clear_item - if( !defined $item_id || - (ref $item_id eq 'ARRAY' && - join('', @{$item_id}) ne join('', $self->item->id)) || - (ref \$item_id eq 'SCALAR' && - $item_id ne $self->item->id)); - } -} - - -sub build_source_name -{ - my $self = shift; - return $self->item_class; -} - - -sub source -{ - my ( $self, $f_class ) = @_; - return $self->schema->source( $self->source_name || $self->item_class ); -} - -sub resultset -{ - my ( $self, $f_class ) = @_; - die "You must supply a schema for your FormHandler form" unless $self->schema; - return $self->schema->resultset( $self->source_name || $self->item_class ); -} - -sub get_source -{ - my ( $self, $accessor_path ) = @_; - return unless $self->schema; - my $source = $self->source; - return $source unless $accessor_path; - my @accessors = split /\./, $accessor_path; - for my $accessor ( @accessors ) - { - $source = $self->_get_related_source( $source, $accessor ); - die "unable to get source for $accessor" unless $source; - } - return $source; + my %clause; + # multiple primary key + if ( scalar @pks > 1 ) { + die "multiple primary key invalid" if ref $id ne 'ARRAY'; + my $cond = $id->[0]; + my @phrase; + foreach my $col ( keys %$cond ) { + $clause{$col} = { '!=' => $cond->{$col} }; + } + } + else { + %clause = ( $pks[0] => { '!=' => $id } ); + } + return %clause; +} + +sub build_item { + my $self = shift; + + my $item_id = $self->item_id or return; + my $item = $self->resultset->find( ref $item_id eq 'ARRAY' ? @{$item_id} : $item_id ); + $self->item_id(undef) unless $item; + return $item; +} + +sub set_item { + my ( $self, $item ) = @_; + return unless $item; + + # when the item (DBIC row) is set, set the item_id, item_class + # and schema from the item + my @primary_columns = $item->result_source->primary_columns; + my $item_id; + if ( @primary_columns == 1 ) { + $item_id = $item->get_column( $primary_columns[0] ); + } + elsif ( @primary_columns > 1 ) { + my @pks = map { $_ => $item->get_column($_) } @primary_columns; + $item_id = [ { @pks }, { key => 'primary' } ]; + } + if ($item_id) { + $self->item_id($item_id); + } + else { + $self->clear_item_id; + } + $self->item_class( $item->result_source->source_name ); + $self->schema( $item->result_source->schema ); +} + +sub set_item_id { + my ( $self, $item_id ) = @_; + + # if a new item_id has been set + # clear an existing item + if ( defined $self->item ) { + $self->clear_item + if ( + !defined $item_id || + ( ref $item_id eq 'ARRAY' && + join( '', @{$item_id} ) ne join( '', $self->item->id ) ) || + ( ref \$item_id eq 'SCALAR' && + $item_id ne $self->item->id ) + ); + } +} + +sub build_source_name { + my $self = shift; + return $self->item_class; +} + +sub source { + my ( $self, $f_class ) = @_; + return $self->schema->source( $self->source_name || $self->item_class ); +} + +sub resultset { + my ( $self, $f_class ) = @_; + die "You must supply a schema for your FormHandler form" + unless $self->schema; + return $self->schema->resultset( $self->source_name || $self->item_class ); +} + +sub get_source { + my ( $self, $accessor_path ) = @_; + return unless $self->schema; + my $source = $self->source; + return $source unless $accessor_path; + my @accessors = split /\./, $accessor_path; + for my $accessor (@accessors) { + $source = $self->_get_related_source( $source, $accessor ); + die "unable to get source for $accessor" unless $source; + } + return $source; } use namespace::autoclean; @@ -419,7 +425,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 SYNOPSIS @@ -637,7 +643,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/script/form_generator.pl libhtml-formhandler-model-dbic-perl-0.28/script/form_generator.pl --- libhtml-formhandler-model-dbic-perl-0.23/script/form_generator.pl 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/script/form_generator.pl 2013-09-22 16:21:14.000000000 +0000 @@ -21,7 +21,7 @@ =head1 VERSION -version 0.23 +version 0.28 =head1 AUTHOR @@ -29,7 +29,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2012 by Gerda Shank. +This software is copyright (c) 2013 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/active_column.t libhtml-formhandler-model-dbic-perl-0.28/t/active_column.t --- libhtml-formhandler-model-dbic-perl-0.23/t/active_column.t 1970-01-01 00:00:00.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/active_column.t 2013-09-22 16:21:14.000000000 +0000 @@ -0,0 +1,34 @@ +use strict; +use warnings; +use Test::More; +use lib 't/lib'; +use BookDB::Schema; + +{ + package MyApp::Form::Test; + use HTML::FormHandler::Moose; + extends 'HTML::FormHandler::Model::DBIC'; + + has '+item_class' => ( default => 'Book' ); + has_field 'title' => ( + type => 'Text', + required => 1, + ); + + # has_many relationship pointing to mapping table + has_field 'genres' => ( + type => 'Multiple', + label_column => 'name', + active_column => 'is_active', + ); +} + +my $schema = BookDB::Schema->connect('dbi:SQLite:t/db/book.db'); +my $form = MyApp::Form::Test->new( schema => $schema ); + +ok( $form ); + +is( $form->field('genres')->num_options, 3, 'right number of options' ); + +done_testing; + diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/book.t libhtml-formhandler-model-dbic-perl-0.28/t/book.t --- libhtml-formhandler-model-dbic-perl-0.23/t/book.t 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/book.t 2013-09-22 16:21:14.000000000 +0000 @@ -17,6 +17,13 @@ ok( !$form->process( item => $item ), 'Empty data' ); +# check authors options +my $author_options = $form->field('authors')->options; +is( $author_options->[0]->{label}, 'J.K. Rowling', 'right author name'); + +my $borrower_options = $form->field('borrower')->options; +is( $borrower_options->[1]->{label}, 'John Doe ', 'right borrower name'); + # This is munging up the equivalent of param data from a form my $good = { 'title' => 'How to Test Perl Form Processors', @@ -27,6 +34,7 @@ 'publisher' => 'EreWhon Publishing', 'user_updated' => 1, 'comment' => 'this is a comment', + 'borrower' => undef, }; ok( $form->process( item => $item, params => $good ), 'Good data' ); @@ -38,7 +46,7 @@ is( $book->extra, 'this is a comment', 'comment exists' ); is_deeply( $form->values, $good, 'values correct' ); -$good->{$_} = '' for qw/ year pages/; +$good->{$_} = '' for qw/ year pages borrower/; is_deeply( $form->fif, $good, 'fif correct' ); my $num_genres = $book->genres->count; @@ -62,7 +70,8 @@ my $value_hash = { %{$good}, authors => [], year => undef, - pages => undef + pages => undef, + borrower => undef, }; delete $value_hash->{submit}; is_deeply( $form->values, $value_hash, 'get right values from form'); @@ -111,7 +120,7 @@ is( $book->genres->count, 0, 'multiple select list has no selected options'); $form = BookDB::Form::Book->new(schema => $schema, active_column => 'is_active'); -is( scalar @{$form->field( 'genres' )->options}, 0, 'active_column test' ); +is( $form->field( 'genres' )->num_options, 3, 'active_column test' ); { package Test::Book; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/book2pk.t libhtml-formhandler-model-dbic-perl-0.28/t/book2pk.t --- libhtml-formhandler-model-dbic-perl-0.23/t/book2pk.t 1970-01-01 00:00:00.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/book2pk.t 2013-09-22 16:21:14.000000000 +0000 @@ -0,0 +1,30 @@ +use strict; +use warnings; +use Test::More; +use Test::Exception; +use lib 't/lib'; + + +use_ok( 'BookDB::Form::Book2PK'); + +use_ok( 'BookDB::Schema'); + +my $schema = BookDB::Schema->connect('dbi:SQLite:t/db/book.db'); + +my $book = $schema->resultset('Book2PK')->find( { libraryid => 1, id => 1 }, { key => 'primary' }); +my $form = BookDB::Form::Book2PK->new; +ok( $form ); + +$form->process( item => $book, params => {} ); +my $params = $form->fif; +my $orig_pages = $params->{pages}; +$params->{pages} = 500; +lives_ok( sub { $form->process( item => $book, params => $params ) }, 'multiple pk works' ); +$book->discard_changes; +is( $book->pages, 500, 'pages changed' ); + +$params->{pages} = $orig_pages; +$form->process( item => $book, params => $params ); + + +done_testing; Binary files /tmp/1PZLMiGJ6K/libhtml-formhandler-model-dbic-perl-0.23/t/db/book.db and /tmp/61NtgYCc0w/libhtml-formhandler-model-dbic-perl-0.28/t/db/book.db differ diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/db/bookdb.sql libhtml-formhandler-model-dbic-perl-0.28/t/db/bookdb.sql --- libhtml-formhandler-model-dbic-perl-0.23/t/db/bookdb.sql 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/db/bookdb.sql 2013-09-22 16:21:14.000000000 +0000 @@ -178,12 +178,12 @@ name varchar(100), is_active INTEGER ); -INSERT INTO "genre" VALUES(1, 'Sci-Fi', NULL); -INSERT INTO "genre" VALUES(2, 'Computers', NULL); +INSERT INTO "genre" VALUES(1, 'Sci-Fi', 1); +INSERT INTO "genre" VALUES(2, 'Computers', 1); INSERT INTO "genre" VALUES(3, 'Mystery', NULL); INSERT INTO "genre" VALUES(4, 'Historical', NULL); INSERT INTO "genre" VALUES(5, 'Fantasy', NULL); -INSERT INTO "genre" VALUES(6, 'Technical', NULL); +INSERT INTO "genre" VALUES(6, 'Technical', 1); CREATE TABLE author_old ( first_name VARCHAR(100), last_name VARCHAR(100), @@ -278,4 +278,26 @@ CREATE UNIQUE INDEX unique_role ON roles (display_value); +CREATE TABLE book2pk ( + libraryid INTEGER NOT NULL DEFAULT 1, + id INTEGER NOT NULL, + isbn varchar(100), + title varchar(100), + publisher varchar(100), + pages int, + year int, + PRIMARY KEY (libraryid, id) +); + +CREATE UNIQUE INDEX isbn ON book2pk (libraryid, isbn); + +INSERT INTO "book2pk" VALUES(1,1, '0-7475-5100-6', 'Harry Potter and the Order of the Phoenix', 'Boomsbury', 766, 2001); +INSERT INTO "book2pk" VALUES(1,2, '9 788256006199', 'Idioten', 'Interbook', 303, 1901); +INSERT INTO "book2pk" VALUES(1,3, '434012386', 'The Confusion', 'Heinemann', 345, 2002); +INSERT INTO "book2pk" VALUES(1,4, '782128254', 'The Complete Java 2 Certification Study Guide: Programmer''s and Developers Exams (With CD-ROM)', 'Sybex Inc', NULL, 1999); +INSERT INTO "book2pk" VALUES(1,5, '123-1234-0-123', 'Winnie The Pooh', 'Houghton Mifflin', 345, 1935); +INSERT INTO "book2pk" VALUES(1,6, '0-596-10092-2', 'Perl Testing: A Developer''s Notebook', 'O''Reilly', 182, 2005); +INSERT INTO "book2pk" VALUES(1,7, '0-7475-8134-6', 'Harry Potter and the Last Gasp', 'Boomsbury', 801, 2005); + + COMMIT; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/fif.t libhtml-formhandler-model-dbic-perl-0.28/t/fif.t --- libhtml-formhandler-model-dbic-perl-0.23/t/fif.t 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/fif.t 2013-09-22 16:21:14.000000000 +0000 @@ -40,6 +40,7 @@ format => '', year => '', user_updated => 0, + borrower => '', }, 'get form fif' ); $fif->{pages} = '501'; @@ -81,7 +82,7 @@ is( $form->field('isbn')->fif, '02340234', 'get field author after validation' ); -$params->{$_} = '' for qw/ comment format year /; +$params->{$_} = '' for qw/ comment format year borrower /; $params->{user_updated} = 0; is_deeply( $form->fif, $params, 'get form fif after validation' ); diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Form/Book.pm libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Form/Book.pm --- libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Form/Book.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Form/Book.pm 2013-09-22 16:21:14.000000000 +0000 @@ -31,6 +31,7 @@ has_field 'authors' => ( type => 'Multiple', label => 'Authors', + label_column => 'full_name', order => '2', ); @@ -78,6 +79,11 @@ order => 9, ); +has_field 'borrower' => ( + type => 'Select', + label_column => 'name_email', +); + has_field submit => ( type => 'Submit', value => 'Update' ); sub validate_year { diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Form/Book2PK.pm libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Form/Book2PK.pm --- libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Form/Book2PK.pm 1970-01-01 00:00:00.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Form/Book2PK.pm 2013-09-22 16:21:14.000000000 +0000 @@ -0,0 +1,75 @@ +package BookDB::Form::Book2PK; +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler::Model::DBIC'; + +with 'HTML::FormHandler::Widget::Theme::Bootstrap'; + +=head1 NAME + +Form object for the Book Controller + +=head1 SYNOPSIS + +Form used for book/add and book/edit actions + +=head1 DESCRIPTION + +Catalyst Form. + +=cut + +has '+item_class' => ( default => 'Book2PK' ); + +has_field 'title' => ( + type => 'Text', + required => 1, + required_message => 'A book must have a title.', + label => 'Title', +); + +has_field 'publisher' => ( + type => 'Text', + label => 'Publisher', +); + +# has_many relationship pointing to mapping table +has_field 'isbn' => ( + type => 'Text', + label => 'ISBN', + unique => 1, + required => 1, +); +has_field 'year' => ( + type => 'Integer', + range_start => '1900', + range_end => '2020', + label => 'Year', + required => 1, +); +has_field 'pages' => ( + type => 'Integer', + label => 'Pages', +); + +has_field submit => ( type => 'Submit', value => 'Update', element_class => ['btn'] ); + +sub validate_year { + my ( $self, $field ) = @_; + $field->add_error('Invalid year') + if ( ( $field->value > 3000 ) || ( $field->value < 1600 ) ); +} + +=head1 AUTHOR + +Gerda Shank + +=head1 LICENSE AND COPYRIGHT + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. See L. + +=cut + +__PACKAGE__->meta->make_immutable; +no HTML::FormHandler::Moose; +1; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Author.pm libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Author.pm --- libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Author.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Author.pm 2013-09-22 16:21:14.000000000 +0000 @@ -40,7 +40,7 @@ 'books' => 'author_books', 'book' ); -sub name { +sub full_name { my $self = shift; return $self->first_name . " " . $self->last_name; } diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Book2PK.pm libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Book2PK.pm --- libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Book2PK.pm 1970-01-01 00:00:00.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Book2PK.pm 2013-09-22 16:21:14.000000000 +0000 @@ -0,0 +1,31 @@ +package BookDB::Schema::Result::Book2PK; + +use Moose; +use MIME::Base64; + +use base 'DBIx::Class'; + +__PACKAGE__->load_components("Core"); +__PACKAGE__->table("book2pk"); +__PACKAGE__->add_columns( + "libraryid", + { data_type => "INTEGER", is_nullable => 0, default_value => 1, size => undef }, + "id", + { data_type => "INTEGER", is_nullable => 0, size => undef }, + "isbn", + { data_type => "varchar", is_nullable => 0, size => 100 }, + "title", + { data_type => "varchar", is_nullable => 0, size => 100, + extra => { field_def => { type => 'TextArea', size => '64', temp => 'testing' } }, + }, + "publisher", + { data_type => "varchar", is_nullable => 0, size => 100 }, + "pages", + { data_type => "INTEGER", is_nullable => 0, size => undef }, + "year", + { data_type => "INTEGER", is_nullable => 0, size => undef }, +); +__PACKAGE__->set_primary_key("libraryid", "id"); +__PACKAGE__->add_unique_constraint( 'isbn' => ['libraryid', 'isbn'] ); + +1; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Borrower.pm libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Borrower.pm --- libhtml-formhandler-model-dbic-perl-0.23/t/lib/BookDB/Schema/Result/Borrower.pm 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/lib/BookDB/Schema/Result/Borrower.pm 2013-09-22 16:21:14.000000000 +0000 @@ -28,5 +28,10 @@ { "foreign.borrower" => "self.id" }, ); +sub name_email { + my $self = shift; + return $self->name . " <" . $self->email . ">"; +} + 1; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/mult_pk.t libhtml-formhandler-model-dbic-perl-0.28/t/mult_pk.t --- libhtml-formhandler-model-dbic-perl-0.23/t/mult_pk.t 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/mult_pk.t 2013-09-22 16:21:14.000000000 +0000 @@ -37,4 +37,8 @@ ok( $form, 'get form with array of hashref primary key' ); is( $form->item->country_iso, 'GB', 'got right row'); +$form = BookDB::Form::AuthorOld->new( item => $author ); +ok( $form, 'got form with only item passed in' ); +is_deeply( $form->item_id, $pk_hashlist, 'got primary key' ); + done_testing; diff -Nru libhtml-formhandler-model-dbic-perl-0.23/t/unique.t libhtml-formhandler-model-dbic-perl-0.28/t/unique.t --- libhtml-formhandler-model-dbic-perl-0.23/t/unique.t 2012-10-15 20:33:03.000000000 +0000 +++ libhtml-formhandler-model-dbic-perl-0.28/t/unique.t 2013-09-22 16:21:14.000000000 +0000 @@ -45,7 +45,7 @@ isbn => { type => 'Text', unique => 1, - unique_message => 'Duplicate ISBN number', + messages => { unique => 'Duplicate ISBN number' }, } ] }