The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

package ElasticSearchX::Model::Generator::TypenameTranslator;
BEGIN {
  $ElasticSearchX::Model::Generator::TypenameTranslator::AUTHORITY = 'cpan:KENTNL';
}
{
  $ElasticSearchX::Model::Generator::TypenameTranslator::VERSION = '0.1.6';
}

# ABSTRACT: Transform upstream type/document names to downstream Package/Class/File names.

use Moo;
use Path::Tiny ();
use Data::Dump qw( pp );
use MooseX::Has::Sugar qw( rw required weak_ref );


has
  'generator_base' => rw,
  required, weak_ref, handles => [qw( attribute_generator document_generator generated_base_class base_dir )];


sub _words {
  my ( $self, $input ) = @_;
  return split /\W+/, $input;
}


sub translate_to_path {
  my ( $self, %args ) = @_;
  my $package = $self->translate_to_package(%args);

  my (@words) = split /::/, $package;
  if ( not @words ) {
    require Carp;
    Carp::confess("Error translating typename to deploy path: $package ");
  }
  my $basename = pop @words;
  if ( not length $basename ) {
    require Carp;
    Carp::confess("\$basename Path part was 0 characters long:  $package");
  }
  $basename .= '.pm';
  return Path::Tiny::path( $self->base_dir )->child( map { ucfirst $_ } @words )->child( ucfirst $basename );
}


sub translate_to_package {
  my ( $self, %args ) = @_;
  return sprintf q{%s::%s}, $self->generated_base_class, join q{}, map { ucfirst $_ } $self->_words( $args{typename} );
}

no Moo;

1;

__END__

=pod

=encoding utf-8

=head1 NAME

ElasticSearchX::Model::Generator::TypenameTranslator - Transform upstream type/document names to downstream Package/Class/File names.

=head1 VERSION

version 0.1.6

=head1 METHODS

=head2 translate_to_path

  my $path = $instance->translate_to_path( 'file' );
  # ->  /my/base/dir/File.pm

=head2 translate_to_package

  my $package = $instance->translate_to_package('file');
  # -> MyBaseClass::File

=head1 ATTRIBUTES

=head2 generator_base

  rw, required, weak_ref

=head1 PRIVATE METHODS

=head2 _words

  @words = $instance->_words( $string );

=head1 AUTHOR

Kent Fredric <kentfredric@gmail.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Kent Fredric <kentfredric@gmail.com>.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut