Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
- tuneup model::*
- do not fill undef to not validated parameters.
  • Loading branch information
tokuhirom committed Nov 11, 2010
1 parent 1e819d9 commit 86a7b3f
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 33 deletions.
1 change: 1 addition & 0 deletions .shipit
@@ -1 +1,2 @@
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN
git.push_to=origin
2 changes: 1 addition & 1 deletion Makefile.PL
Expand Up @@ -11,7 +11,7 @@ requires 'Email::Valid::Loose' => 0.05;
recommends 'Lingua::JA::Regular::Unicode';

test_requires 'Test::Requires';
test_requires 'Test::More' => 0.94;
test_requires 'Test::More' => 0.96;

tests 't/*.t t/*/*.t';
author_tests 'xt';
Expand Down
8 changes: 6 additions & 2 deletions lib/HTML/Shakan/Model/DBIxSkinny.pm
Expand Up @@ -13,8 +13,10 @@ sub fill {
sub create {
my ($self, $model, $name) = @_;
my $row = {};
my $params = $self->form->params();
for my $column (@{ $model->schema->schema_info->{$name}->{columns} }) {
$row->{$column} = $self->form->param($column);
next unless exists $params->{$column};
$row->{$column} = $params->{$column};
}
$model->insert($name => $row);
}
Expand All @@ -25,8 +27,10 @@ sub update {
my ($self, $row) = @_;
my $dat = {};
my $columns = $row->get_columns;
my $params = $self->form->params();
for my $column (keys %$columns) {
$dat->{$column} = $self->form->param($column);
next unless exists $params->{$column};
$dat->{$column} = $params->{$column};
}
$row->update($dat);
}
Expand Down
8 changes: 6 additions & 2 deletions lib/HTML/Shakan/Model/DataModel.pm
Expand Up @@ -13,18 +13,22 @@ sub fill {
sub create {
my ($self, $model, $name) = @_;
my $row = {};
my $params = $self->form->params();
for my $column ($model->get_schema($name)->column_names) {
$row->{$column} = $self->form->param($column);
next unless exists $params->{$column};
$row->{$column} = $params->{$column};
}
$model->set($name => $row);
}

sub update {
my ($self, $row) = @_;
my $dat = {};
my $params = $self->form->params();
my $columns = $row->get_columns;
for my $column (keys %$columns) {
$row->$column($self->form->param($column));
next unless exists $params->{$column};
$row->$column($params->{$column});
}
$row->update();
}
Expand Down
36 changes: 23 additions & 13 deletions t/040_model/001_datamodel.t
Expand Up @@ -4,7 +4,6 @@ use HTML::Shakan;
use CGI;
use Test::Requires 'Data::Model';

plan tests => 7;
require HTML::Shakan::Model::DataModel;

# evaluate at run time
Expand All @@ -22,13 +21,17 @@ eval <<'...';
auto_increment => 1 ,
type => 'varchar',
};
column 'bar' => {
auto_increment => 1 ,
type => 'varchar',
};
};
...
die $@ if $@;

my $dm = MyModel->new();
# fill
{

subtest 'fill' => sub {
my $user = $dm->set('user' => {
foo => 'bar'
});
Expand All @@ -45,12 +48,11 @@ my $dm = MyModel->new();
is $form->render, trim(<<'...');
<label for="id_foo">foo</label><input id="id_foo" name="foo" type="text" value="bar" />
...
}
};

# create
{
subtest 'create' => sub {
my $form = HTML::Shakan->new(
request => CGI->new({'foo'=> 'gay'}),
request => CGI->new({'foo'=> 'gay', bar => 'ATTACK'}),
fields => [
TextField(
name => 'foo',
Expand All @@ -60,16 +62,17 @@ my $dm = MyModel->new();
);
is $form->is_valid, 1;
$form->model->create($dm => 'user');
my $user = $dm->get(user => 'gay');
my ($user) = $dm->get(user => 'gay');
ok $user;
}
is $user->foo, 'gay';
is $user->bar, undef;
};

# update
{
subtest 'update' => sub {
my $user = $dm->lookup(user => 'gay');
ok $user;
my $form = HTML::Shakan->new(
request => CGI->new({'foo'=> 'way'}),
request => CGI->new({'foo'=> 'way', bar => 'ATTACK'}),
fields => [
TextField(
name => 'foo',
Expand All @@ -82,4 +85,11 @@ my $dm = MyModel->new();

ok !$dm->get(user => 'gay');
ok $dm->get(user => 'way');
}
{
my ($u) = $dm->get(user => 'way');
is $u->bar, undef;
}
};

done_testing;

38 changes: 23 additions & 15 deletions t/040_model/002_skinny.t
Expand Up @@ -2,7 +2,7 @@ use t::Util;
use HTML::Shakan;
use CGI;
use Test::Requires 'DBIx::Skinny', 'DBD::SQLite';
use Test::More tests => 7;
use Test::More;
use HTML::Shakan::Model::DBIxSkinny;

{
Expand All @@ -14,7 +14,7 @@ use HTML::Shakan::Model::DBIxSkinny;

install_table user => schema {
pk 'foo';
columns qw/foo/;
columns qw/foo bar/;
};
}

Expand All @@ -23,13 +23,15 @@ die $@ if $@;
my $dm = MyModel->new({dsn => 'dbi:SQLite:'});
$dm->dbh->do(q{
create table user (
foo varchar(255)
foo varchar(255),
bar varchar(255)
);
});
# fill
{

subtest 'fill' => sub {
my $user = $dm->insert('user' => {
foo => 'bar'
foo => 'bar',
bar => 'baz',
});
my $form = HTML::Shakan->new(
request => CGI->new(),
Expand All @@ -44,12 +46,11 @@ $dm->dbh->do(q{
is $form->render, trim(<<'...'), 'fill';
<label for="id_foo">foo</label><input id="id_foo" name="foo" type="text" value="bar" />
...
}
};

# create
{
subtest 'create' => sub {
my $form = HTML::Shakan->new(
request => CGI->new({'foo'=> 'gay'}),
request => CGI->new({'foo'=> 'gay', 'bar' => 'ATTACK!'}),
fields => [
TextField(
name => 'foo',
Expand All @@ -61,14 +62,16 @@ $dm->dbh->do(q{
$form->model->create($dm => 'user');
my $user = $dm->single(user => {foo => 'gay'});
ok $user, 'insert';
}
is $user->foo, 'gay';
is $user->bar, undef;
};

# update
{
subtest 'update' => sub {
my $user = $dm->single(user => {foo => 'gay'});
$user->update({bar => "origin"});
ok $user, 'fetch user';
my $form = HTML::Shakan->new(
request => CGI->new({'foo'=> 'way'}),
request => CGI->new({'foo'=> 'way', 'bar' => 'ATTACK!'}),
fields => [
TextField(
name => 'foo',
Expand All @@ -81,4 +84,9 @@ $dm->dbh->do(q{

ok !$dm->single(user => {foo => 'gay'}), 'missing old row';
ok $dm->single(user => {foo => 'way'});
}
my $new = $dm->single(user => {foo => 'way'});
is $new->bar, 'origin', 'do not modify filed without validation';
};

done_testing;

0 comments on commit 86a7b3f

Please sign in to comment.