App-OnePif

 view release on metacpan or  search on metacpan

lib/App/OnePif.pm  view on Meta::CPAN

package App::OnePif;
use strict;
use warnings;
{ our $VERSION = '0.002'; }
use English qw( -no_match_vars );
use Carp;
use 5.010;

use Mo qw< is default >;
use Path::Tiny;
use YAML::Tiny;

{
   no warnings 'redefine';
   my @booleans = (
      'JSON::PP::Boolean',
      'JSON::XS::Boolean',
      'Types::Serialiser::Boolean',  # should not be needed
      'Mojo::JSON::_Bool',           # only up to Mojolicious 6.21
      # Dancer, Dancer2 use JSON
   );
   sub YAML::Tiny::dumper_for_unknown {
      my ($self, $element, $line, $indent, $seen) = @_;
      my $type = ref $element;

      for my $boolean (@booleans) {
         next unless $element->isa($boolean);
         $line .= $element ? ' true' : ' false';
         return $line;
      }

      # no known boolean... complain!
      die \"YAML::Tiny does not support $type references";
   }
}

has file => (
   is      => 'rw',
   lazy    => 1,
   default => sub { 'data.1pif' },
);

has attachments_dir => (
   is => 'rw',
   lazy => 1,
   default => sub {
      my $self = shift;
      path($self->file())->sibling('attachments')
   },
);

has records_byid => (
   is => 'rw',
   lazy => 1,
   default => sub {
      my $self = shift;
      my $bt = $self->records_bytype;
      my %retval;
      for my $list (values %$bt) {
         $retval{$_->{_id}} = $_ for @$list;
      }
      return \%retval;
   },
);

has records_bytype => (
   is => 'rw',
   lazy => 1,
   default => \&DEFAULT_records,
);

has JSON_decoder => (
   is      => 'rw',
   lazy    => 1,
   default => sub {
      for my $module (qw< JSON JSON::PP >) {
         (my $filename = "$module.pm") =~ s{::}{/}gmxs;



( run in 0.673 second using v1.01-cache-2.11-cpan-39bf76dae61 )