[Jifty-commit] r5912 - in JiftyX-ExpenseApp/trunk: . lib lib/Jifty lib/Jifty/Plugin lib/Jifty/Plugin/ExpenseApp lib/Jifty/Plugin/ExpenseApp/Model share share/web share/web/static share/web/static/css t t/Testapp t/Testapp/bin t/Testapp/doc t/Testapp/etc t/Testapp/lib t/Testapp/lib/Testapp t/Testapp/lib/Testapp/Action t/Testapp/lib/Testapp/Model t/Testapp/log t/Testapp/share t/Testapp/share/po t/Testapp/share/web t/Testapp/share/web/static t/Testapp/share/web/static/css t/Testapp/share/web/templates t/Testapp/t t/Withusers t/Withusers/bin t/Withusers/doc t/Withusers/etc t/Withusers/lib t/Withusers/lib/Withusers t/Withusers/lib/Withusers/Action t/Withusers/lib/Withusers/Model t/Withusers/log t/Withusers/share t/Withusers/share/po t/Withusers/share/web t/Withusers/share/web/static t/Withusers/share/web/static/css t/Withusers/share/web/templates t/Withusers/t
Jifty commits
jifty-commit at lists.jifty.org
Thu Oct 9 21:46:13 EDT 2008
Author: gugod
Date: Thu Oct 9 21:46:13 2008
New Revision: 5912
Added:
JiftyX-ExpenseApp/trunk/.gitignore
JiftyX-ExpenseApp/trunk/lib/
JiftyX-ExpenseApp/trunk/lib/Jifty/
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp.pm
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Dispatcher.pm
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Model/
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Model/Expense.pm
JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/View.pm
JiftyX-ExpenseApp/trunk/lib/JiftyX/
JiftyX-ExpenseApp/trunk/lib/JiftyX/ExpenseApp.pm
JiftyX-ExpenseApp/trunk/share/
JiftyX-ExpenseApp/trunk/share/web/
JiftyX-ExpenseApp/trunk/share/web/static/
JiftyX-ExpenseApp/trunk/share/web/static/css/
JiftyX-ExpenseApp/trunk/share/web/static/css/jiftyx_expenseapp.css (contents, props changed)
JiftyX-ExpenseApp/trunk/t/
JiftyX-ExpenseApp/trunk/t/Testapp/ (props changed)
JiftyX-ExpenseApp/trunk/t/Testapp/Makefile.PL
JiftyX-ExpenseApp/trunk/t/Testapp/bin/
JiftyX-ExpenseApp/trunk/t/Testapp/bin/jifty (contents, props changed)
JiftyX-ExpenseApp/trunk/t/Testapp/doc/
JiftyX-ExpenseApp/trunk/t/Testapp/etc/
JiftyX-ExpenseApp/trunk/t/Testapp/etc/config.yml
JiftyX-ExpenseApp/trunk/t/Testapp/lib/
JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp/
JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp.pm
JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp/Action/
JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp/Model/
JiftyX-ExpenseApp/trunk/t/Testapp/log/
JiftyX-ExpenseApp/trunk/t/Testapp/share/
JiftyX-ExpenseApp/trunk/t/Testapp/share/po/
JiftyX-ExpenseApp/trunk/t/Testapp/share/web/
JiftyX-ExpenseApp/trunk/t/Testapp/share/web/static/
JiftyX-ExpenseApp/trunk/t/Testapp/share/web/static/css/
JiftyX-ExpenseApp/trunk/t/Testapp/share/web/static/css/jiftyx_expenseapp.css (contents, props changed)
JiftyX-ExpenseApp/trunk/t/Testapp/share/web/templates/
JiftyX-ExpenseApp/trunk/t/Testapp/t/
JiftyX-ExpenseApp/trunk/t/Withusers/ (props changed)
JiftyX-ExpenseApp/trunk/t/Withusers/Makefile.PL
JiftyX-ExpenseApp/trunk/t/Withusers/bin/
JiftyX-ExpenseApp/trunk/t/Withusers/bin/jifty (contents, props changed)
JiftyX-ExpenseApp/trunk/t/Withusers/doc/
JiftyX-ExpenseApp/trunk/t/Withusers/etc/
JiftyX-ExpenseApp/trunk/t/Withusers/etc/config.yml
JiftyX-ExpenseApp/trunk/t/Withusers/lib/
JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/
JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers.pm
JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/Action/
JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/Model/
JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/Model/User.pm
JiftyX-ExpenseApp/trunk/t/Withusers/log/
JiftyX-ExpenseApp/trunk/t/Withusers/share/
JiftyX-ExpenseApp/trunk/t/Withusers/share/po/
JiftyX-ExpenseApp/trunk/t/Withusers/share/web/
JiftyX-ExpenseApp/trunk/t/Withusers/share/web/static/
JiftyX-ExpenseApp/trunk/t/Withusers/share/web/static/css/
JiftyX-ExpenseApp/trunk/t/Withusers/share/web/static/css/jiftyx_expenseapp.css (contents, props changed)
JiftyX-ExpenseApp/trunk/t/Withusers/share/web/templates/
JiftyX-ExpenseApp/trunk/t/Withusers/t/
JiftyX-ExpenseApp/trunk/t/Withusers/t/00-model-User.t
Log:
Initial import of previous works.
Added: JiftyX-ExpenseApp/trunk/.gitignore
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/.gitignore Thu Oct 9 21:46:13 2008
@@ -0,0 +1,5 @@
+t/Testapp/testapp
+t/Testapp/var/
+t/Withusers/var/
+t/Withusers/withusers
+
Added: JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,7 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::ExpenseApp;
+use base qw/Jifty::Plugin/;
+
+1;
Added: JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Dispatcher.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Dispatcher.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,58 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::ExpenseApp::Dispatcher;
+
+use Jifty::Dispatcher -base;
+
+before '*' => run {
+ my $top = Jifty->web->navigation;
+ $top->child(
+ 'ExpensesApp',
+ url => "/=/x/expenses",
+ label => _('Expenses'),
+ sort_order => 900
+ );
+};
+
+my $model_class = "Jifty::Plugin::ExpenseApp::Model::Expense";
+
+sub Expense {
+ Jifty::Util->require($model_class);
+
+ $model_class->new;
+}
+
+sub ExpenseCollection {
+ my $c = "${model_class}Collection";
+ Jifty::Util->require($c);
+
+ $c = $c->new;
+ $c->unlimit;
+ unless ( Jifty->config->framework("SkipAccessControl") ) {
+ my $id = Jifty->web->current_user->id;
+ if (defined($id)) {
+ $c->limit(column => 'created_by', value => $id);
+ }
+ else {
+ $c->limit(column => 'created_by', operator => "IS", value => 'NULL');
+ }
+ }
+ $c->order_by(
+ {column => "happened_at", order => "DES"},
+ {column => "id", order => "DES"}
+ );
+
+ return $c;
+}
+
+on '/=/x/_expenses' => run {
+ set create_action => Expense->as_create_action;
+ set expenses => ExpenseCollection;
+};
+
+on '/=/x/expenses/reports' => run {
+ # ...
+};
+
+1;
Added: JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Model/Expense.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/Model/Expense.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,57 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::ExpenseApp::Model::Expense;
+
+use Jifty::DBI::Schema;
+use base 'Jifty::DBI::Record::Plugin';
+
+use Jifty::Plugin::ExpenseApp::Record schema {
+ column created_at =>
+ type is 'timestamp',
+ render_as "Hidden",
+ default is defer { Jifty::DateTime->now },
+ filters are ('Jifty::Filter::DateTime', 'Jifty::DBI::Filter::DateTime');
+
+ column created_by =>
+ type is 'int',
+ render_as "Hidden",
+ default is defer { Jifty->web->current_user->id };
+
+ column happened_at =>
+ type is 'timestamp',
+ render_as "Date",
+ label is _("Date"),
+ is mandatory,
+ filters are ('Jifty::Filter::DateTime', 'Jifty::DBI::Filter::DateTime');
+
+ column amount =>
+ type is 'int',
+ is mandatory;
+
+ column currency =>
+ type is 'varchar(255)',
+ label is _("Currency"),
+ render_as "Radio",
+ is mandatory,
+ valid_values are qw(JPY NTD);
+
+ column category =>
+ label is _("Category"),
+ type is 'varchar(255)';
+
+ column note =>
+ type is 'text',
+ render_as 'Textarea';
+};
+
+sub current_user_can {
+ my ($self, $right, $attr) = @_;
+ return 1 if $right eq 'create';
+ if ( defined($self->__value("created_by")) ) {
+ return 1 if $self->current_user->id == $self->__value("created_by");
+ }
+ return 0;
+}
+
+1;
Added: JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/View.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/lib/Jifty/Plugin/ExpenseApp/View.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,74 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::ExpenseApp::View;
+use Jifty::View::Declare -base;
+
+template '/=/x/expenses' => page {
+ title => _("Expenses")
+} content {
+ div {
+ class is "expensesapp";
+
+ hyperlink(url => "expenses/reports", label => _("Expenses Reports"));
+
+ render_region(
+ path => "/=/x/_expenses",
+ name => "expenses"
+ );
+ }
+};
+
+template '/=/x/_expenses' => sub {
+ div {
+ class is "create";
+
+ my $action = get('create_action');
+ form {
+ render_action( $action );
+
+ form_submit(
+ label => _("Add"),
+ onclick => {
+ submit => $action,
+ refresh_self => 1
+ }
+ );
+ };
+ };
+
+ div {
+ class is "list";
+
+ table {
+ row {
+ th { _("Date") };
+ th { _("Amount") };
+ th { _("Currency") };
+ th { _("Category") };
+ th { _("Note") };
+ };
+
+ my $expenses = get('expenses');
+ while(my $expense = $expenses->next) {
+ row {
+ cell { $expense->happened_at };
+ cell { $expense->amount };
+ cell { $expense->currency };
+ cell { $expense->category };
+ cell { $expense->note };
+ }
+ }
+ };
+ };
+};
+
+template '/=/x/expenses/reports' => page {
+ title => _("Expenses Reports")
+} content {
+
+ div { "(Not Implemented Yet)" };
+
+};
+
+1;
Added: JiftyX-ExpenseApp/trunk/lib/JiftyX/ExpenseApp.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/lib/JiftyX/ExpenseApp.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,6 @@
+package JiftyX::ExpenseApp;
+
+my $VERSION = "0.01";
+
+1;
+
Added: JiftyX-ExpenseApp/trunk/share/web/static/css/jiftyx_expenseapp.css
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/share/web/static/css/jiftyx_expenseapp.css Thu Oct 9 21:46:13 2008
@@ -0,0 +1,18 @@
+.expensesapp .list table {
+ table-layout: fixed;
+ width: 100%;
+}
+
+.expensesapp .create {
+ background: #ffc;
+ margin: 5px 0;
+ padding: 12px 0;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+}
+
+.expensesapp .list table tr:nth-child(2n) {
+ background: #ccf;
+}
+
Added: JiftyX-ExpenseApp/trunk/t/Testapp/Makefile.PL
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Testapp/Makefile.PL Thu Oct 9 21:46:13 2008
@@ -0,0 +1,7 @@
+use inc::Module::Install;
+
+name 'Testapp';
+version '0.01';
+requires 'Jifty' => '0.80913';
+
+WriteAll;
Added: JiftyX-ExpenseApp/trunk/t/Testapp/bin/jifty
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Testapp/bin/jifty Thu Oct 9 21:46:13 2008
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use UNIVERSAL::require;
+use lib '../../lib';
+
+BEGIN {
+ Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+ my $root = Jifty::Util->app_root;
+ unshift @INC, "$root/lib" if ($root);
+}
+
+use Jifty;
+use Jifty::Script;
+
+local $SIG{INT} = sub { warn "Stopped\n"; exit; };
+Jifty::Script->dispatch();
Added: JiftyX-ExpenseApp/trunk/t/Testapp/etc/config.yml
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Testapp/etc/config.yml Thu Oct 9 21:46:13 2008
@@ -0,0 +1,60 @@
+---
+framework:
+ AdminMode: 0
+ ApplicationClass: Testapp
+ ApplicationName: Testapp
+ ApplicationUUID: 403FBE90-9558-11DD-982A-EE69FE1C1398
+ ConfigFileVersion: 4
+ Database:
+ AutoUpgrade: 1
+ CheckSchema: 1
+ Database: testapp
+ Driver: SQLite
+ Host: localhost
+ Password: ''
+ RecordBaseClass: Jifty::DBI::Record::Cachable
+ User: ''
+ Version: 0.0.1
+ DevelMode: 1
+ L10N:
+ PoDir: share/po
+ LogLevel: INFO
+ Mailer: Sendmail
+ MailerArgs: []
+
+ Plugins:
+ - ExpenseApp: {}
+ - LetMe: {}
+ - SkeletonApp: {}
+ - REST: {}
+ - Halo: {}
+ - ErrorTemplates: {}
+ - OnlineDocs: {}
+ - CompressedCSSandJS: {}
+ - AdminUI: {}
+
+ PubSub:
+ Backend: Memcached
+ Enable: ~
+ SkipAccessControl: 1
+ TemplateClass: Testapp::View
+ View:
+ FallbackHandler: Jifty::View::Mason::Handler
+ Handlers:
+ - Jifty::View::Static::Handler
+ - Jifty::View::Declare::Handler
+ - Jifty::View::Mason::Handler
+ Web:
+ BaseURL: http://localhost
+ DataDir: var/mason
+ Globals: []
+
+ MasonConfig:
+ autoflush: 0
+ default_escape_flags: h
+ error_format: text
+ error_mode: fatal
+ Port: 8888
+ ServeStaticFiles: 1
+ StaticRoot: share/web/static
+ TemplateRoot: share/web/templates
Added: JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Testapp/lib/Testapp.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,8 @@
+package Testapp;
+
+sub start {
+ Jifty->web->add_css("jiftyx_expenseapp.css");
+}
+
+1;
+
Added: JiftyX-ExpenseApp/trunk/t/Testapp/share/web/static/css/jiftyx_expenseapp.css
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Testapp/share/web/static/css/jiftyx_expenseapp.css Thu Oct 9 21:46:13 2008
@@ -0,0 +1 @@
+link ../../../../../../share/web/static/css/jiftyx_expenseapp.css
\ No newline at end of file
Added: JiftyX-ExpenseApp/trunk/t/Withusers/Makefile.PL
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/Makefile.PL Thu Oct 9 21:46:13 2008
@@ -0,0 +1,7 @@
+use inc::Module::Install;
+
+name 'Withusers';
+version '0.01';
+requires 'Jifty' => '0.80913';
+
+WriteAll;
Added: JiftyX-ExpenseApp/trunk/t/Withusers/bin/jifty
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/bin/jifty Thu Oct 9 21:46:13 2008
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use lib "../../lib";
+use UNIVERSAL::require;
+
+BEGIN {
+ Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+ my $root = Jifty::Util->app_root;
+ unshift @INC, "$root/lib" if ($root);
+}
+
+use Jifty;
+use Jifty::Script;
+
+local $SIG{INT} = sub { warn "Stopped\n"; exit; };
+Jifty::Script->dispatch();
Added: JiftyX-ExpenseApp/trunk/t/Withusers/etc/config.yml
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/etc/config.yml Thu Oct 9 21:46:13 2008
@@ -0,0 +1,78 @@
+---
+framework:
+ AdminMode: 1
+ ApplicationClass: Withusers
+ ApplicationName: Withusers
+ ApplicationUUID: 22F6B93E-95E3-11DD-9360-E87BFF7AA801
+ ConfigFileVersion: 4
+ Database:
+ AutoUpgrade: 1
+ CheckSchema: 1
+ Database: withusers
+ Driver: SQLite
+ Host: localhost
+ Password: ''
+ RecordBaseClass: Jifty::DBI::Record::Cachable
+ User: ''
+ Version: 0.0.1
+ DevelMode: 1
+ L10N:
+ PoDir: share/po
+ LogLevel: INFO
+ Mailer: Sendmail
+ MailerArgs: []
+
+ Plugins:
+ - ExpenseApp: {}
+ - User: {}
+ - Authentication::Password:
+ login_by: email
+ -
+ LetMe: {}
+
+ -
+ SkeletonApp: {}
+
+ -
+ REST: {}
+
+ -
+ Halo: {}
+
+ -
+ ErrorTemplates: {}
+
+ -
+ OnlineDocs: {}
+
+ -
+ CompressedCSSandJS: {}
+
+ -
+ AdminUI: {}
+
+ PubSub:
+ Backend: Memcached
+ Enable: ~
+ SkipAccessControl: 0
+ TemplateClass: Withusers::View
+ View:
+ FallbackHandler: Jifty::View::Mason::Handler
+ Handlers:
+ - Jifty::View::Static::Handler
+ - Jifty::View::Declare::Handler
+ - Jifty::View::Mason::Handler
+ Web:
+ BaseURL: http://localhost
+ DataDir: var/mason
+ Globals: []
+
+ MasonConfig:
+ autoflush: 0
+ default_escape_flags: h
+ error_format: text
+ error_mode: fatal
+ Port: 8888
+ ServeStaticFiles: 1
+ StaticRoot: share/web/static
+ TemplateRoot: share/web/templates
Added: JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,8 @@
+package Withusers;
+
+sub start {
+ Jifty->web->add_css('jiftyx_expenseapp.css');
+}
+
+1;
+
Added: JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/Model/User.pm
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/lib/Withusers/Model/User.pm Thu Oct 9 21:46:13 2008
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+
+package Withusers::Model::User;
+use Jifty::DBI::Schema;
+
+use Withusers::Record schema {
+ column location => type is 'varchar(255)';
+};
+
+use Jifty::Plugin::User::Mixin::Model::User;
+use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
+
+sub brief_description {
+ my $self = shift;
+ $self->__value("name");
+}
+
+1;
+
Added: JiftyX-ExpenseApp/trunk/t/Withusers/share/web/static/css/jiftyx_expenseapp.css
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/share/web/static/css/jiftyx_expenseapp.css Thu Oct 9 21:46:13 2008
@@ -0,0 +1 @@
+link ../../../../../../share/web/static/css/jiftyx_expenseapp.css
\ No newline at end of file
Added: JiftyX-ExpenseApp/trunk/t/Withusers/t/00-model-User.t
==============================================================================
--- (empty file)
+++ JiftyX-ExpenseApp/trunk/t/Withusers/t/00-model-User.t Thu Oct 9 21:46:13 2008
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+
+=head1 DESCRIPTION
+
+A basic test harness for the User model.
+
+=cut
+
+use Jifty::Test tests => 11;
+
+# Make sure we can load the model
+use_ok('Withusers::Model::User');
+
+# Grab a system user
+my $system_user = Withusers::CurrentUser->superuser;
+ok($system_user, "Found a system user");
+
+# Try testing a create
+my $o = Withusers::Model::User->new(current_user => $system_user);
+my ($id) = $o->create();
+ok($id, "User create returned success");
+ok($o->id, "New User has valid id set");
+is($o->id, $id, "Create returned the right id");
+
+# And another
+$o->create();
+ok($o->id, "User create returned another value");
+isnt($o->id, $id, "And it is different from the previous one");
+
+# Searches in general
+my $collection = Withusers::Model::UserCollection->new(current_user => $system_user);
+$collection->unlimit;
+is($collection->count, 2, "Finds two records");
+
+# Searches in specific
+$collection->limit(column => 'id', value => $o->id);
+is($collection->count, 1, "Finds one record with specific id");
+
+# Delete one of them
+$o->delete;
+$collection->redo_search;
+is($collection->count, 0, "Deleted row is gone");
+
+# And the other one is still there
+$collection->unlimit;
+is($collection->count, 1, "Still one left");
+
More information about the Jifty-commit
mailing list