Config-Processor

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

                underlay: { var: .default }
                host:     "stat-slave.mydb.com"
                username: "stat_reader"
                password: "stat_reader_pass"

              test:
                underlay: { var: .default_test }
                username: "test"
                password: "test_pass"

- overlay

    Merges specified configuration parameters with parameters located at the same
    context. Configuration parameters from the directive overrides parameters from
    the context. `overlay` directive most usefull in combination with `var` and
    `include` directives.

    For example, you can use `overlay` directive to temporaly overriding regular
    configuration parameters.

        myapp:
          db:
            connectors:
              default:
                port:   "1234"
                dbname: "stat"
                options:
                  PrintWarn:  0

README.md  view on Meta::CPAN


              test:
                host: "localhost"
                port: "4321"

              stat_master:
                underlay: { var: .default }
                host:     "stat-master.mydb.com"
                username: "stat_writer"
                password: "stat_writer_pass"
                overlay:  { var: .test }

              stat_slave:
                underlay: { var: .default }
                host:     "stat-slave.mydb.com"
                username: "stat_reader"
                password: "stat_reader_pass"
                overlay:  { var: .test }

    To disable overriding just assign to `test` connector empty hash.

        test: {}

# AUTHOR

Eugene Ponizovsky, <ponizovsky@gmail.com>

# COPYRIGHT AND LICENSE

lib/Config/Processor.pm  view on Meta::CPAN

    elsif ( defined $node->{include} ) {
      $node = $self->_build_tree( $node->{include} );
    }
    else {
      if ( defined $node->{underlay} ) {
        my $layer = delete $node->{underlay};
        $layer = $self->_process_layer( $layer, $ancs );
        $node = $self->{_merger}->merge( $layer, $node );
      }

      if ( defined $node->{overlay} ) {
        my $layer = delete $node->{overlay};
        $layer = $self->_process_layer( $layer, $ancs );
        $node = $self->{_merger}->merge( $node, $layer );
      }
    }
  }

  return $node;
}

sub _process_layer {

lib/Config/Processor.pm  view on Meta::CPAN

          underlay: { var: .default }
          host:     "stat-slave.mydb.com"
          username: "stat_reader"
          password: "stat_reader_pass"

        test:
          underlay: { var: .default_test }
          username: "test"
          password: "test_pass"

=item overlay

Merges specified configuration parameters with parameters located at the same
context. Configuration parameters from the directive overrides parameters from
the context. C<overlay> directive most usefull in combination with C<var> and
C<include> directives.

For example, you can use C<overlay> directive to temporaly overriding regular
configuration parameters.

  myapp:
    db:
      connectors:
        default:
          port:   "1234"
          dbname: "stat"
          options:
            PrintWarn:  0

lib/Config/Processor.pm  view on Meta::CPAN


        test:
          host: "localhost"
          port: "4321"

        stat_master:
          underlay: { var: .default }
          host:     "stat-master.mydb.com"
          username: "stat_writer"
          password: "stat_writer_pass"
          overlay:  { var: .test }

        stat_slave:
          underlay: { var: .default }
          host:     "stat-slave.mydb.com"
          username: "stat_reader"
          password: "stat_reader_pass"
          overlay:  { var: .test }

To disable overriding just assign to C<test> connector empty hash.

  test: {}

=back

=head1 AUTHOR

Eugene Ponizovsky, E<lt>ponizovsky@gmail.comE<gt>

t/02-processing.t  view on Meta::CPAN

      param4_D => {
        underlay => { var => 'moo.param4_B' },
        param4_3 => 'moo:val4_D_3',
        param4_6 => 'moo:val4_D_6',
      },

      param4_E => {
        param4_1 => 'moo:val4_E_1',
        param4_2 => 'moo:val4_E_2',
        param4_5 => 'moo:val4_E_5',
        overlay  => { var => 'moo.param4' },
      },

      param4_F => {
        param4_3 => 'moo:val4_F_3',
        param4_4 => 'moo:val4_F_4',
        param4_5 => 'moo:val4_F_5',
        overlay  => { var => 'moo.param4' },
      },

      param4_G => {
        param4_1 => 'moo:val4_G_1',
        param4_6 => 'moo:val4_G_6',
        overlay  => { var => 'moo.param4_E' },
      },

      param4_H => {
        param4_3 => 'moo:val4_H_3',
        param4_6 => 'moo:val4_H_6',
        overlay   => { var => 'moo.param4_F' },
      },

      param5 => {
        param5_1 => { include => 'includes/moo_A.yml' },
        param5_2 => { include => 'includes/moo_B.json' },
        param5_3 => { include => 'includes/*' },
      },

      param6_A => {
        underlay => [

t/02-processing.t  view on Meta::CPAN

            param6_4 => 'moo:val6_4',
          },
        ],
        param6_5 => 'moo:val6_5',
        param6_6 => 'moo:val6_6',
      },

      param6_B => {
        param6_5 => 'moo:val6_5',
        param6_6 => 'moo:val6_6',
        overlay => [
          { var     => 'foo.param6' },
          { include => 'includes/moo_C.yml' },
          { param6_1 => 'moo:val6_1',
            param6_4 => 'moo:val6_4',
          }
        ],
      },

      param6_C => {
        underlay => [
          'moo:val6_C_1',
          'moo:val6_C_2',
        ],
        param6_2 => 'moo:val6_C_2',
        param6_1 => 'moo:val6_C_1',
      },

       param6_D => {
        param6_1 => 'moo:val6_D_1',
        param6_2 => 'moo:val6_D_2',
        overlay  => [
          'moo:val6_D_1',
          'moo:val6_D_2',
        ],
      },

      param6_E => {
        underlay => 'moo:val6_E_3',
        param6_1 => 'moo:val6_E_1',
        param6_2 => 'moo:val6_E_2',
      },

      param6_F => {
        param6_1 => 'moo:val6_F_1',
        param6_2 => 'moo:val6_F_2',
        overlay  => 'moo:val6_F_3',
      },
    },
  };

  is_deeply( $t_config, $e_config, 'directive processing: off' );

  return;
}

sub t_complete_processing {

t/etc/moo.yml  view on Meta::CPAN


  param4_D:
    underlay:   { var: moo.param4_B }
    param4_3: "moo:val4_D_3"
    param4_6: "moo:val4_D_6"

  param4_E:
    param4_1: "moo:val4_E_1"
    param4_2: "moo:val4_E_2"
    param4_5: "moo:val4_E_5"
    overlay:   { var: moo.param4 }

  param4_F:
    param4_3: "moo:val4_F_3"
    param4_4: "moo:val4_F_4"
    param4_5: "moo:val4_F_5"
    overlay:   { var: moo.param4 }

  param4_G:
    param4_1: "moo:val4_G_1"
    param4_6: "moo:val4_G_6"
    overlay:   { var: moo.param4_E }

  param4_H:
    param4_3: "moo:val4_H_3"
    param4_6: "moo:val4_H_6"
    overlay:   { var: moo.param4_F }

  param5:
    param5_1: { include: includes/moo_A.yml }
    param5_2: { include: includes/moo_B.json }
    param5_3: { include: includes/* }

  param6_A:
    underlay:
      - { var: foo.param6 }
      - { include: includes/moo_C.yml }
      - param6_1: "moo:val6_1"
        param6_4: "moo:val6_4"
    param6_5: "moo:val6_5"
    param6_6: "moo:val6_6"

  param6_B:
    param6_5: "moo:val6_5"
    param6_6: "moo:val6_6"
    overlay:
      - { var: foo.param6 }
      - { include: includes/moo_C.yml }
      - param6_1: "moo:val6_1"
        param6_4: "moo:val6_4"

  param6_C:
    underlay:
      - "moo:val6_C_1"
      - "moo:val6_C_2"
    param6_1: "moo:val6_C_1"
    param6_2: "moo:val6_C_2"

  param6_D:
    param6_1: "moo:val6_D_1"
    param6_2: "moo:val6_D_2"
    overlay:
      - "moo:val6_D_1"
      - "moo:val6_D_2"

  param6_E:
    underlay:  'moo:val6_E_3'
    param6_1: "moo:val6_E_1"
    param6_2: "moo:val6_E_2"

  param6_F:
    param6_1: "moo:val6_F_1"
    param6_2: "moo:val6_F_2"
    overlay:   'moo:val6_F_3'

t/etc/yar.yml  view on Meta::CPAN

yar:
  param1:
    underlay:
      - { var: moo.param6_A }
      - { include: yar_A.yml }
      - param1_4: "yar:${jar.param6.param6_2.0}"
        param1_5: "yar:val1_5"
    param1_6: "yar:${jar.param1}"
    param1_7: "yar:val1_7"
    overlay:
      - { var: moo.param5 }
      - { var: moo.param4_A }
      - param1_8: "yar:${jar.param2}"
        param1_9: "yar:val1_9"

  param2:
    underlay:
      - { include: yar_B.yml }
      - { include: yar_C.yml }



( run in 0.895 second using v1.01-cache-2.11-cpan-df04353d9ac )