view release on metacpan or search on metacpan
- Shut up "Wide character in print" from Pod::Spelling.
0.20 2013-12-24 03:22:10 CET
- Removed dependency IO::Socket::SSL - not mandatory yet
- Upgraded to Mojolicious 4.63
- Enhanced Ado::Manual
- Skipping pod-coverage.t under Perl 5.014
0.19 2013-12-23 00:37:22 CET
- More strict checks regarding --install_base.
use 5.014 to enable say().
0.18 2013-12-22 17:34:32 CET
- Removed release_status=>'unstable' from Build.PL.
This does not mean much.
- Started developing an external plugin - Ado::Plugin::Mess.
- First attempt for a logo.
0.17 2013-12-21 00:11:06 CET
- Refactored list() in Ado::Control::Ado::Users
and implemented list_for_json in Ado::Control.
=head1 ATTRIBUTES
Ado inherits all attributes from Mojolicious and implements the following new
ones.
=head2 ado_home
Returns an instance of L<Mojo::Home> pointing to the base directory where
L<Ado> is installed.
~$ ado eval 'say app->ado_home'
/home/berov/opt/public_dev/Ado
=head2 CODENAME
Returns the current C<CODENAME>.
=head2 home
#/where/is/your_app/rootdir
$app->home;
lib/Ado/Build.pm view on Meta::CPAN
my $module = $self->module_name;
my $installed = ExtUtils::Installed->new;
my $packlist = $installed->packlist($module)->packlist_file;
# Remove all installed files
ExtUtils::Install::uninstall($packlist, $verbose, $dryrun);
# Remove empty installation directories.
foreach (reverse sort $installed->directories($module)) {
say "rmdir $_" and next if $verbose and $dryrun;
say rmdir $_ ? "rmdir $_" : "rmdir $_ - $!" if not $dryrun;
}
return;
}
sub ACTION_uninstall {
my $self = shift;
return $self->_uninstall;
}
sub ACTION_fakeuninstall {
lib/Ado/Build.pm view on Meta::CPAN
my @files;
for my $dir ($self->PERL_DIRS) {
my $dir_files = $self->rscan_dir($dir);
for my $file (@$dir_files) {
push @files, $file
if -f $file && $file =~ m{(\.pl|/ado|\.pm|ado.*?\.conf|\.t)$}x;
}
}
if ($self->verbose) {
say join($/, @files) . "$/perltidy-ing " . @files . " files...";
}
#We use ./.perltidyrc for all arguments
Perl::Tidy::perltidy(argv => [@files]);
foreach my $file (@{$self->rscan_dir($self->base_dir)}) {
unlink($file) if $file =~ /\.bak$/;
}
say "perltidy-ed distribution.";
return;
}
sub ACTION_submit {
my $self = shift;
#$self->depends_on("perltidy");
say "TODO: commit and push after tidying and testing and who knows what";
return;
}
#Empties log files in a given directory.
sub _empty_log_files {
(my ($log_dir) = @_) || Carp::croak('Please provide $log_dir');
open my $logd, ">", "$log_dir/development.log" || Carp::croak $!;
close $logd;
open my $logp, ">", "$log_dir/production.log" || Carp::croak $!;
lib/Ado/Build.pm view on Meta::CPAN
|| return $self->log_warn('Pod::Markdown required for creating README.md' . $/);
$parser = Pod::Markdown->new;
$parser->parse_from_file($readme_from);
my $readme_md = 'README.md';
if (open(my $out, '>', $readme_md)) {
my $markdown = $parser->as_markdown;
my $ci_badge =
'[](https://travis-ci.org/kberov/Ado)';
$markdown =~ s/(\n.+Travis-CI.+\n)/$1\n$ci_badge\n\n/xgm;
$out->say($markdown);
$out->close;
$self->log_info("Created $readme_md$/");
}
else { Carp::croak("Could not create $readme_md... $!"); }
}
else {
$self->SUPER::do_create_readme();
}
return;
}
lib/Ado/Command/adduser.pm view on Meta::CPAN
# Assume an UTF-8 terminal. TODO: make this more clever
utf8::decode($args->{login_name})
if ($args->{login_name} && !utf8::is_utf8($args->{login_name}));
utf8::decode($args->{first_name})
if ($args->{first_name} && !utf8::is_utf8($args->{first_name}));
utf8::decode($args->{last_name})
if ($args->{last_name} && !utf8::is_utf8($args->{last_name}));
$args->{login_password} = Mojo::Util::sha1_hex($args->{login_name} . $args->{login_password});
unless ($args->{ingroup}) {
say($self->usage)
unless ($args->{first_name}
and $args->{last_name}
and $args->{login_name}
and $args->{email});
}
$self->app->log->debug('$self->args: ' . $self->app->dumper($self->args));
return $ret;
}
#default action
sub adduser {
my $self = shift;
my $args = $self->args;
my ($group, $user, $ingroup);
if (($group = Ado::Model::Groups->by_name($args->{login_name}))->id) {
$self->app->log->debug('$group:', $self->app->dumper($group));
#if we have such group, we have the user or we do not want to give a user
#the privileges of a shared group
say "'$args->{login_name}' is already taken!";
}
else {
$user = Ado::Model::Users->add($args) unless $group->id;
return unless $user;
}
if ($user) {
say "User '$args->{login_name}' was created with primary group '$args->{login_name}'.";
}
else {
$user = Ado::Model::Users->by_login_name($args->{login_name});
}
return unless $args->{ingroup};
if (not $user->ingroup($args->{ingroup})) {
if ($ingroup = $user->add_to_group($args)) {
say "User '$args->{login_name}' was added to group '$args->{ingroup}'.";
}
}
else {
say "User '$args->{login_name}' is already in group '$args->{ingroup}'.";
}
return 1;
}
1;
=pod
=encoding utf8
lib/Ado/Command/generate/apache2htaccess.pm view on Meta::CPAN
if ($IS_DOS) {
$args->{DocumentRoot} =~ s|\\|/|g;
$args->{perl} =~ s|\\|/|g;
}
$args->{plackup} = $self->_which('plackup')
if ( eval { require Plack }
&& eval { require FCGI }
&& eval { require FCGI::ProcManager }
&& eval { require Apache::LogFormat::Compiler });
say STDERR 'Using arguments:' . $app->dumper($args) if $args->{verbose};
state $rel_file = 'templates/partials/apache2htaccess.ep';
state $template_file = (
-s $home->rel_file($rel_file)
? $home->rel_file($rel_file)
: $ado_home->rel_file($rel_file)
);
$args->{moniker} = $app->moniker;
my $config = Mojo::Template->new->render_file($template_file, $args);
if ($args->{config_file}) {
say STDERR 'Writing ' . $args->{config_file} if $args->{verbose};
path($args->{config_file})->spurt($config);
}
else {
say $config;
}
return $self;
}
1;
=pod
=encoding utf8
lib/Ado/Command/generate/apache2vhost.pm view on Meta::CPAN
Carp::croak $self->usage unless $args->{ServerName};
$args->{ServerAlias} //=
$$args{ServerName} =~ /^www\./ ? $$args{ServerName} : 'www.' . $$args{ServerName};
$args->{ServerAdmin} //= 'webmaster@' . $args->{ServerName};
$args->{user} //= ($ENV{USER} || getlogin || 'nobody');
$args->{group} //= $args->{user};
$args->{DocumentRoot} =~ s|\\|/|g if $IS_DOS;
say STDERR 'Using arguments:' . $app->dumper($args) if $args->{verbose};
state $rel_file = 'templates/partials/apache2vhost.ep';
state $template_file = (
-s $home->rel_file($rel_file)
? $home->rel_file($rel_file)
: $ado_home->rel_file($rel_file)
);
my $config = Mojo::Template->new->render_file($template_file, $args);
if ($args->{config_file}) {
say STDERR 'Writing ' . $args->{config_file} if $args->{verbose};
path($args->{config_file})->spurt($config);
}
else {
say $config;
}
return $self;
}
1;
=pod
=encoding utf8
lib/Ado/Command/version.pm view on Meta::CPAN
$Ado::VERSION . ' - ' . $Ado::CODENAME);
my $latest = $self->latest;
if ($latest) {
$msg .= "$/ This version is up to date, have fun!$/"
if $latest == $Ado::VERSION;
$msg .= "$/ Thanks for testing a development release, you are awesome!$/"
if $latest < $Ado::VERSION;
$msg .= "$/ You might want to update your Ado to $latest.$/"
if $latest > $Ado::VERSION;
}
say $msg;
Mojolicious::Command::version->new->run();
return;
}
1;
=pod
=encoding utf8
lib/Ado/Model/Groups.pm view on Meta::CPAN
=head1 METHODS
Ado::Model::Groups inherits all methods from Ado::Model and provides the following
additional:
=head2 by_name
Selects a group by name column.
my $group = Ado::Model::Groups->by_name('guest');
say $group->name if $group->id;
=head1 GENERATOR
L<DBIx::Simple::Class::Schema>
=head1 SEE ALSO
L<Ado::Model>, L<DBIx::Simple::Class>, L<DBIx::Simple::Class::Schema>
lib/Ado/Model/Users.pm view on Meta::CPAN
Creates the group if it does not already exists.
Returns the group.
$ingroup = $user->add_to_group(ingroup=>'admin');
=head2 by_email
Selects a user by email column.
my $user = Ado::Model::Users->by_email('user@example.com');
say $user->email if $user->id;
=head2 by_group_name
Selects active users (C<WHERE (disabled=0 AND (stop_date>$now OR stop_date=0)
AND start_date<$now )>) belonging to a given group only and within a given
range, ordered by C<first_name, last_name> alphabetically. C<$limit> defaults
to 500 and C<$offset> to 0. Only the following fields are retrieved: C<id,
login_name, first_name, last_name, email>.
Returns an array of hashes. The L</name> method is executed for each row in
the resultset and the evaluation is available via key 'name'.
#get contacts of the user 'berov'
my @users = Ado::Model::Users->by_group_name('vest_contacts_for_berov', $limit, $offset);
=head2 by_login_name
Selects a user by login_name column.
my $user = Ado::Model::Users->by_login_name('guest');
say $user->login_name if $user->id;
=head2 ingroup
Given a group name returns true if a user is member of the group.
Returns false otherwise.
Returns a list of all group names a user belongs to if no group name passed.
say $user->name . ' is admin!' if $user->ingroup('admin');
say $user->name .' is member of the following groups:'
. join(', ', $user->ingroup);
=head1 GENERATOR
L<DBIx::Simple::Class::Schema>
This class contains also custom code.
=head1 SEE ALSO
lib/Ado/Plugin/Auth.pm view on Meta::CPAN
$c->debug("in _login_google error from provider: " . ($c->param('error') || 'no error'));
} if $Ado::Control::DEV_MODE;
if ($response->{access_token}) { #Athenticate, create and login the user.
return _create_or_authenticate_google_user(
$c,
$response->{access_token},
$providers->{$provider}
);
}
else {
#Redirect to front-page and say sorry
# We are very sorry but we need to know you are a reasonable human being.
$c->flash(error_login => $c->l('oauth2_sorry[_1]', ucfirst($provider))
. ($c->param('error') || ''));
$c->app->log->error('error_response:' . $c->dumper($response));
$c->res->code(307); #307 Temporary Redirect
$c->redirect_to('/');
}
return;
}
lib/Ado/Plugin/Auth.pm view on Meta::CPAN
"in _login_facebook error from provider: " . ($c->param('error') || 'no error'));
} if $Ado::Control::DEV_MODE;
if ($response->{access_token}) { #Athenticate, create and login the user.
return _create_or_authenticate_facebook_user(
$c,
$response->{access_token},
$providers->{$provider}
);
}
else {
#Redirect to front-page and say sorry
# We are very sorry but we need to know you are a reasonable human being.
$c->flash(error_login => $c->l('oauth2_sorry[_1]', ucfirst($provider))
. ($c->param('error') || ''));
$c->app->log->error('error_response:' . $c->dumper($response));
$c->res->code(307); #307 Temporary Redirect
$c->redirect_to('/');
}
return;
}