Guest User

Untitled

a guest
Jul 15th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. use strict;
  2. use warnings;
  3.  
  4. package TFX::Flight;
  5.  
  6. use Moose;
  7. use MooseX::HasDefaults::RO;
  8.  
  9. use Class::Load 'load_class';
  10.  
  11. use lib '..';
  12. use TFX::Sealtix;
  13.  
  14. has [ TFX::Sealtix->get_fields ] => ( isa => 'Any', lazy_build => 1 );
  15.  
  16. sub build {
  17. my ( $class, %args ) = @_;
  18.  
  19. my $source = delete $args{source};
  20. my $engine = "$class\::$source";
  21.  
  22. load_class( $engine );
  23. return $engine->new( $args{data} );
  24. }
  25.  
  26. sub as_hash {
  27. my ( $self ) = @_;
  28.  
  29. my @fields = $self->hash_fields;
  30. my %hash = map $self->_get_field_value($_), @fields;
  31.  
  32. return \%hash;
  33. }
  34.  
  35. sub hash_fields {
  36. my ( $self ) = @_;
  37.  
  38. my @fields = TFX::Sealtix->get_fields;
  39.  
  40. # trim multi leg flight fields if it's a single leg flight
  41. @fields = grep { !/^leg\d_/ } @fields if @{ $self->legs } < 2;
  42.  
  43. # trim certain flight fields if it's a multi leg flight
  44. @fields = grep { $_ ne 'flight_carrier' and $_ ne 'flight_number' } @fields if @{ $self->legs } > 1;
  45.  
  46. return @fields;
  47. }
  48.  
  49. sub _get_field_value {
  50. my ( $self, $field ) = @_;
  51.  
  52. return ( $field => $self->$field ) if defined $self->$field;
  53. return;
  54. }
  55.  
  56. 1;
Add Comment
Please, Sign In to add comment