our
$VERSION
=
'1.16.0'
;
use
vars
qw($SECTION @EXPORT)
;
@EXPORT
=
qw(section)
;
$SECTION
= {};
sub
new {
my
$that
=
shift
;
my
$proto
=
ref
(
$that
) ||
$that
;
my
$self
= {
@_
};
bless
(
$self
,
$proto
);
return
$self
;
}
sub
section {
my
(
$class
,
$section
) =
@_
;
$SECTION
->{
$class
} =
$section
;
}
sub
has
{
my
(
$class
,
$item
,
$is_array
) =
@_
;
unless
(
ref
(
$item
) eq
"ARRAY"
) {
my
$_tmp
=
$item
;
$item
= [
$_tmp
];
}
no
strict
'refs'
;
for
my
$_itm
( @{
$item
} ) {
my
(
$itm
,
$from
);
if
(
ref
(
$_itm
) eq
"HASH"
) {
$itm
=
$_itm
->{key};
$from
=
$_itm
->{from};
}
else
{
$itm
=
$_itm
;
$from
=
$_itm
;
}
$itm
=~ s/[^a-zA-Z0-9_]+/_/g;
*{
"${class}::get_\L$itm"
} =
sub
{
my
$self
=
shift
;
return
$self
->get(
$from
,
$is_array
);
};
push
( @{
"${class}::items"
},
"\L$itm"
);
}
}
sub
dmi {
my
(
$self
) =
@_
;
return
$self
->{
"dmi"
};
}
sub
get {
my
(
$self
,
$key
,
$is_array
) =
@_
;
return
$self
->_search_for(
$key
,
$is_array
);
}
sub
get_all {
my
(
$self
) =
@_
;
my
$r
=
ref
(
$self
);
no
strict
'refs'
;
my
@items
= @{
"${r}::items"
};
my
$ret
= {};
for
my
$itm
(
@items
) {
my
$f
=
"get_$itm"
;
$ret
->{
$itm
} =
$self
->
$f
();
}
return
$ret
;
}
sub
dump
{
my
(
$self
) =
@_
;
print
Data::Dumper::Dumper(
$self
->dmi->get_tree(
$SECTION
->{
ref
(
$self
) } ) );
}
sub
_search_for {
my
(
$self
,
$key
,
$is_array
) =
@_
;
unless
(
$self
->dmi->get_tree(
$SECTION
->{
ref
(
$self
) } ) ) {
return
;
}
my
$idx
= 0;
for
my
$entry
( @{
$self
->dmi->get_tree(
$SECTION
->{
ref
(
$self
) } ) } ) {
my
(
$_key
) =
keys
%{
$entry
};
if
(
$is_array
) {
if
(
$idx
!=
$self
->get_index() ) {
++
$idx
;
next
;
}
}
if
(
exists
$entry
->{
$key
} ) {
return
$entry
->{
$key
};
}
else
{
return
""
;
}
++
$idx
;
}
return
""
;
}
sub
get_index {
my
(
$self
) =
@_
;
return
$self
->{
"index"
} || 0;
}
1;