• R/O
  • HTTP
  • SSH
  • HTTPS

keitairc: Commit

keitaircメインレポジトリ


Commit MetaInfo

Révision1698e63d8e35ec229420cabfdb6fe9e8a91a61d7 (tree)
l'heure2010-06-25 02:08:24
AuteurISHIKAWA Mutsumi <ishikawa@hanz...>
CommiterISHIKAWA Mutsumi

Message de Log

cleanup Keitairc::Config

Change Summary

Modification

--- a/lib/Keitairc/Config.pm
+++ b/lib/Keitairc/Config.pm
@@ -2,6 +2,7 @@
22 # Keitairc::Config
33 #
44 # Copyright (c) 2008 Jun Morimoto <morimoto@mrmt.net>
5+# Copyright (c) 2010 ISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
56 # This program is covered by the GNU General Public License 2
67
78 package Keitairc::Config;
@@ -27,11 +28,11 @@ sub new{
2728
2829 $me->define(
2930 # required
30- 'irc_nick',
31- 'irc_username',
32- 'irc_server',
33- 'web_password',
34- 'web_host',
31+ 'irc_nick' => {ATTR => 'RO|REQ'},
32+ 'irc_username' => {ATTR => 'RO|REQ'},
33+ 'irc_server' => {ATTR => 'RO|REQ'},
34+ 'web_password' => {ATTR => 'RO|REQ'},
35+ 'web_host' => {ATTR => 'RO|REQ'},
3536
3637 # optional
3738 'irc_password',
@@ -42,7 +43,7 @@ sub new{
4243 'softbank_serial_key' => {DEFAULT => ''},
4344 'emobile_userid' => {DEFAULT => ''},
4445 'irc_keyword',
45- 'web_listen_port',
46+ 'web_listen_port' => {ATTR => 'RO'},
4647 'web_title' => {DEFAULT => 'keitairc'},
4748 'common_header' => {DEFAULT => '
4849 <meta name="Robots" content="noindex,nofollow" />
@@ -51,54 +52,54 @@ sub new{
5152 <meta http-equiv="cache-control" content="no-cache" />
5253 <meta http-equiv="expires" content="-1" />'},
5354 'extra_header' => {DEFAULT => ''},
54- 'silent_config' => {DEFAULT => $arg->{silent}},
55+ 'silent_config' => {DEFAULT => $arg->{silent}, ATTR => 'RO'},
5556 'version' => {DEFAULT => $arg->{version}},
56- 'template_dir' => {DEFAULT => getcwd() . '/data/templates:__KEITAIRC_DATA_DIR__/templates'},
57- 'plugin_dir' => {DEFAULT => getcwd() . '/data/plugins:__KEITAIRC_DATA_DIR__/plugins'},
58- 'public_dir' => {DEFAULT => getcwd() . '/data/public:__KEITAIRC_DATA_DIR__/public'},
57+ 'template_dir' => {DEFAULT => getcwd() . '/data/templates:__KEITAIRC_DATA_DIR__/templates', ATTR => 'RO'},
58+ 'plugin_dir' => {DEFAULT => getcwd() . '/data/plugins:__KEITAIRC_DATA_DIR__/plugins', ATTR => 'RO'},
59+ 'public_dir' => {DEFAULT => getcwd() . '/data/public:__KEITAIRC_DATA_DIR__/public', ATTR => 'RO'},
5960 'url_redirect' => {DEFAULT => ''},
6061 'smtp_server' => {DEFAULT => ''},
6162 'smtp_from' => {DEFAULT => ''},
6263 'smtp_to' => {DEFAULT => ''},
6364 'rgeocode_server' => {DEFAULT => 'finds'},
64- 'pid_file' => {DEFAULT => 'keitairc.pid'},
65-
66- 'web_root' => {DEFAULT => '/', VALIDATE => \&valid_web_root},
67- 'web_schema' => {DEFAULT => 'http', VALIDATE => \&valid_web_schema},
68- 'fontsize' => {DEFAULT => '+0', VALIDATE => \&valid_fontsize},
69- 'mobile_fontsize' => {DEFAULT => -1, VALIDATE => \&valid_fontsize},
70- 'irc_charset' => {DEFAULT => 'utf8', VALIDATE => \&valid_charset},
71- 'web_charset' => {DEFAULT => 'shiftjis', VALIDATE => \&valid_charset},
72- 'pid_dir' => {DEFAULT => $ENV{HOME} . '/.keitairc_log', VALIDATE => \&valid_dir},
73- 'url_target' => {DEFAULT => '_self', VALIDATE => \&valid_url_target},
74- 'log' => {DEFAULT => 'file', VALIDATE => \&valid_log},
65+ 'pid_file' => {DEFAULT => 'keitairc.pid', ATTR => 'RO'},
66+
67+ 'web_root' => {TYPE => 'web_root', DEFAULT => '/', ATTR => 'RO'},
68+ 'web_schema' => {TYPE => 'web_schema', DEFAULT => 'http', ATTR => 'RO'},
69+ 'fontsize' => {TYPE => 'fontsize', DEFAULT => '+0'},
70+ 'mobile_fontsize' => {TYPE => 'fontsize', DEFAULT => -1},
71+ 'irc_charset' => {TYPE => 'charset', DEFAULT => 'utf8'},
72+ 'web_charset' => {TYPE => 'charset', DEFAULT => 'shiftjis'},
73+ 'pid_dir' => {TYPE => 'dir', DEFAULT => $ENV{HOME} . '/.keitairc_log', ATTR => 'RO'},
74+ 'url_target' => {TYPE => 'url_target', DEFAULT => '_self'},
75+ 'log' => {TYPE => 'log', DEFAULT => 'file', ATTR => 'RO'},
7576
7677 # optional integer params
77- 'irc_port' => {DEFAULT => 6667, VALIDATE => \&valid_int},
78- 'cookie_ttl' => {DEFAULT => 86400 * 3, VALIDATE => \&valid_int}, # 3 days
79- 'session_ttl' => {DEFAULT => 60 * 30, VALIDATE => \&valid_int}, # 30 min
80- 'cache_expire' => {DEFAULT => 10800, VALIDATE => \&valid_int},
81- 'web_port' => {DEFAULT => 8080, VALIDATE => \&valid_int},
82- 'web_lines' => {DEFAULT => 100, VALIDATE => \&valid_int},
83- 'ping_delay' => {DEFAULT => 30, VALIDATE => \&valid_int},
84- 'reconnect_delay' => {DEFAULT => 10, VALIDATE => \&valid_int},
78+ 'irc_port' => {TYPE => 'int', DEFAULT => 6667},
79+ 'cookie_ttl' => {TYPE => 'int', DEFAULT => 86400 * 3}, # 3 days
80+ 'session_ttl' => {TYPE => 'int', DEFAULT => 60 * 30}, # 30 min
81+ 'cache_expire' => {TYPE => 'int', DEFAULT => 3600 * 12}, # 12 hour
82+ 'web_port' => {TYPE => 'int', DEFAULT => 8080},
83+ 'web_lines' => {TYPE => 'int', DEFAULT => 100},
84+ 'ping_delay' => {TYPE => 'int', DEFAULT => 30},
85+ 'reconnect_delay' => {TYPE => 'int', DEFAULT => 10},
8586
8687 # optional boolean params
87- 'show_joinleave' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
88- 'show_console' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 0},
89- 'follow_nick' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
90- 'debug' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 0},
91- 'daemonize' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 0},
92- 'reverse_message' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
93- 'reverse_recent' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
94- 'reverse_unread' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
95- 'webkit_newui' => {ARGCOUNT => ARGCOUNT_NONE, DEFAULT => 1},
88+ 'show_joinleave' => {TYPE => 'bool', DEFAULT => 1},
89+ 'show_console' => {TYPE => 'bool', DEFAULT => 0},
90+ 'follow_nick' => {TYPE => 'bool', DEFAULT => 1},
91+ 'debug' => {TYPE => 'bool', DEFAULT => 0},
92+ 'daemonize' => {TYPE => 'bool', DEFAULT => 0},
93+ 'reverse_message' => {TYPE => 'bool', DEFAULT => 1},
94+ 'reverse_recent' => {TYPE => 'bool', DEFAULT => 1},
95+ 'reverse_unread' => {TYPE => 'bool', DEFAULT => 1},
96+ 'webkit_newui' => {TYPE => 'bool', DEFAULT => 1},
9697
9798 # obsolates (ignored)
98- 'show_newmsgonly' => {VALIDATE => \&valid_obsolates},
99- 'web_username' => {VALIDATE => \&valid_obsolates},
100- 'use_cookie' => {VALIDATE => \&valid_obsolates},
101- 'au_pcsv' => {VALIDATE => \&valid_obsolates},
99+ 'show_newmsgonly' => {TYPE => 'obsolates'},
100+ 'web_username' => {TYPE => 'obsolates'},
101+ 'use_cookie' => {TYPE => 'obsolates'},
102+ 'au_pcsv' => {TYPE => 'obsolates'},
102103 );
103104
104105 if(-r '/etc/keitairc'){
@@ -118,7 +119,7 @@ sub new{
118119 $me->args(\@argv);
119120
120121 # check required parameters
121- foreach my $n (qw(irc_nick irc_username irc_server web_host web_password)) {
122+ foreach my $n (keys %{$me->{'REQ'}}) {
122123 if(!defined($me->get($n)) || !length($me->get($n))) {
123124 die($n . ' does not specified');
124125 }
@@ -132,7 +133,7 @@ sub new{
132133 }
133134
134135 ################################################################
135-sub file{
136+sub file {
136137 my $me = shift;
137138 my $file = shift;
138139 if(-r $file){
@@ -144,6 +145,73 @@ sub file{
144145 }
145146
146147 ################################################################
148+sub define {
149+ my $me = shift;
150+ my @args = ();
151+
152+ while (@_) {
153+ my $var = shift;
154+ my $cfg = ref($_[0]) eq 'HASH' ? shift : { };
155+ if (defined $cfg->{TYPE}) {
156+ if (!defined $cfg->{VALIDATE} && defined &{'valid_' . $cfg->{TYPE}}) {
157+ $cfg->{VALIDATE} = \&{'valid_' . $cfg->{TYPE}};
158+ }
159+ if (!defined $cfg->{ARGCOUNT} && $cfg->{TYPE} eq 'bool') {
160+ $cfg->{ARGCOUNT} = ARGCOUNT_NONE;
161+ }
162+ $me->type($var, $cfg->{TYPE});
163+ delete $cfg->{TYPE};
164+ }
165+ if (defined $cfg->{ATTR}) {
166+ my @attr = split(/\|/, $cfg->{ATTR});
167+ foreach my $at (@attr) {
168+ if ($at eq 'RO') {
169+ $me->readonly($var, 1);
170+ } elsif ($at eq 'REQ') {
171+ $me->required($var, 1);
172+ } else {
173+ warn 'Ignore unknown attribute: ' . $at;
174+ }
175+ }
176+ delete $cfg->{ATTR};
177+ }
178+ push(@args, $var => $cfg);
179+ }
180+
181+ return $me->SUPER::define(@args);
182+}
183+
184+sub type {
185+ my ($me, $name, $type) = @_;
186+ $me->{TYPE} = {} if (!defined $me->{TYPE});
187+ $me->{TYPE}->{$name} = $type if (defined $type);
188+ return (defined $me->{TYPE}->{$name} ? $me->{TYPE}->{$name} : 'string');
189+}
190+
191+sub bool_attr {
192+ my ($me, $type_name, $name, $flag) = @_;
193+ $me->{$type_name} = {} if (!defined $me->{$type_name});
194+ if (defined $flag) {
195+ if ($flag) {
196+ $me->{$type_name}->{$name} = 1;
197+ } else {
198+ delete $me->{$type_name}->{$name};
199+ }
200+ }
201+ return defined $me->{$type_name}->{$name};
202+}
203+
204+sub readonly {
205+ my $me = shift;
206+ return $me->bool_attr('RO', @_);
207+}
208+
209+sub required {
210+ my $me = shift;
211+ return $me->bool_attr('REQ', @_);
212+}
213+
214+################################################################
147215 sub content_charset{
148216 my $me = shift;
149217 Encode::MIME::Name::get_mime_name(Encode::resolve_alias($me->web_charset()));
Afficher sur ancien navigateur de dépôt.