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 )