Astro-NED-Query

 view release on metacpan or  search on metacpan

lib/Astro/NED/Query.pm  view on Meta::CPAN

    my ( $self ) = @_;
    croak( ref $self, ': internal implementation error; _init undefined' );
}


sub field {

    my ( $self, $key ) = @_;

    return exists $self->Field->{$key} ? $self->Field->{$key} : undef;
}


#---------------------------------------------------------------------------


sub set
{
  my ( $self, $name, $value ) = @_;

  confess( ref $self, '->set: Wrong number of arguments' )
    unless 3 == @_;

  if ( defined ( my $field = $self->field($name) ) )
  {
    eval {
      $self->{_ua}->field( $field, $value );
    };
    croak( ref $self, "->set($name):  illegal value" )
      if $@;
  }
  else
  {
    $self->{$name} = $value;
  }

  return;
}

sub get
{
  my ( $self, $name ) = @_;

  confess( ref $self, '->get: Wrong number of arguments' )
    unless defined $name;

  my $field = $self->field($name);

  return defined($field)
     ? $self->{_ua}->current_form->value( $field )
     : $self->{$name};
}

#---------------------------------------------------------------------------

# map between Multiple values and form inputs.

#  HTML::Table creates a separate input for each value in a checkbox
#  or option.  this routine creates a hash matching the values to the
#  input to make it easier to set the inputs.  In some cases a single
#  logical list of options is split into several so the GUI looks
#  cleaner. this will merge them.

sub _setupMultiple
{
  my ( $self, $type, $alias, @names  ) = @_;

  my %input;

  foreach my $name ( @names )
  {
    $name = qr/^$name$/ unless 'Regexp' eq ref $name;

    foreach my $input ( $self->{_ua}->current_form->inputs )
    {
      next unless defined $input->name &&
	            $input->name =~ /$name/ && $input->type eq $type;

      my @value = grep { defined $_ } $input->possible_values;
      croak( ref $self, "->setupMultiple: ($name,$type) multivalued multiple\n" )
	if @value > 1;
      $input{$value[0]} = $input;
    }
  }

  $self->{_Multiple}{$alias} = \%input;

  return;
}

# steal a page (well, actually code) from Class::Accessor for inputs
# which have multiple values
sub _mkMultipleAccessor {
    my($self, @fields) = @_;
    my $class = ref $self || $self;

    foreach my $field (@fields) {
	if ( $field eq 'DESTROY' ) {
	    require Carp;
	    Carp::carp('Having a data accessor named DESTROY  in '.
			"'$class' is unwise.");
	}

	my $accessor = sub {
	    my $self = shift;

	    return 1 == @_ ?
	      $self->getMultiple( $field, @_ ) :
		$self->setMultiple( $field, @_ );
	};

	my $alias = "_${field}_accessor";

	## no critic (ProhibitNoStrict)
	no strict 'refs';

	*{$class."\:\:$field"}  = $accessor
	  unless defined &{$class."\:\:$field"};

	*{$class."\:\:$alias"}  = $accessor
	  unless defined &{$class."\:\:$alias"};



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