OSDN Git Service

Model::Users: make reusable sub model instance
authorhylom <hylom@users.sourceforge.jp>
Wed, 7 Nov 2018 10:29:07 +0000 (19:29 +0900)
committerhylom <hylom@users.sourceforge.jp>
Wed, 7 Nov 2018 10:29:07 +0000 (19:29 +0900)
src/newslash_web/lib/Newslash/Model/Users.pm

index f4926ef..d74a95b 100644 (file)
@@ -75,21 +75,26 @@ sub on_start_up {
 }
 
 ##### sub models
-sub friends { return shift->new_instance_of('::Users::Friends'); }
-sub prefs { return shift->new_instance_of('::Users::Prefs'); }
-sub configs { return shift->new_instance_of('::Users::Configs'); }
-sub achievements { return shift->new_instance_of('::Users::Achievements'); }
-sub passwords { return shift->new_instance_of('::Users::Passwords'); }
-sub info { return shift->new_instance_of('::Users::Info'); }
-sub acl { return shift->new_instance_of('::Users::ACL'); }
-sub acl2 { return shift->new_instance_of('::Users::ACL2'); }
-sub comments { return shift->new_instance_of('::Users::Comments'); }
-sub sidebar { return shift->new_instance_of('::Users::Sidebar'); }
-sub messages { return shift->new_instance_of('::Users::Messages'); }
-sub index { return shift->new_instance_of('::Users::Index'); }
-sub class { return shift->new_instance_of('::Users::Class'); }
-sub param { return shift->new_instance_of('::Users::Param'); }
-sub permissions { return shift->new_instance_of('::Users::Permissions'); }
+sub friends      { return shift->_get_model("_friends",      '::Users::Friends'); }
+sub prefs        { return shift->_get_model("_prefs",        '::Users::Prefs'); }
+sub configs      { return shift->_get_model("_configs",      '::Users::Configs'); }
+sub achievements { return shift->_get_model("_achievements", '::Users::Achievements'); }
+sub passwords    { return shift->_get_model("_passwords",    '::Users::Passwords'); }
+sub info         { return shift->_get_model("_info",         '::Users::Info'); }
+sub acl          { return shift->_get_model("_acl",          '::Users::ACL'); }
+sub acl2         { return shift->_get_model("_acl2",         '::Users::ACL2'); }
+sub comments     { return shift->_get_model("_comments",     '::Users::Comments'); }
+sub sidebar      { return shift->_get_model("_sidebar",      '::Users::Sidebar'); }
+sub messages     { return shift->_get_model("_messages",     '::Users::Messages'); }
+sub index        { return shift->_get_model("_index",        '::Users::Index'); }
+sub class        { return shift->_get_model("_class",        '::Users::Class'); }
+sub param        { return shift->_get_model("_param",        '::Users::Param'); }
+sub permissions  { return shift->_get_model("_permissions",  '::Users::Permissions'); }
+
+sub _get_model {
+    my ($self, $name, $class) = @_;
+    return $self->{$name} ||= $self->new_instance_of($class);
+}
 
 ##### utility functions