File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package less ;
2+
3+ use strict;
4+ use warnings;
5+
6+ our $VERSION = ' 0.03' ;
7+
8+ sub _pack_tags {
9+ return join ' ' , @_ ;
10+ }
11+
12+ sub _unpack_tags {
13+ return grep { defined and length }
14+ map { split ' ' }
15+ grep { defined } @_ ;
16+ }
17+
18+ sub stash_name {
19+ return $_ [0];
20+ }
21+
22+ sub of {
23+ my $class = shift ;
24+
25+ return unless defined wantarray ;
26+
27+ my $hinthash = (caller 0)[10] || {};
28+ my %tags ;
29+ @tags { _unpack_tags($hinthash -> { $class -> stash_name }) } = ();
30+
31+ if (@_ ) {
32+ exists $tags {$_ } and return 1 for @_ ;
33+ return ;
34+ }
35+
36+ return keys %tags ;
37+ }
38+
39+ sub import {
40+ my $class = shift ;
41+ my $stash = $class -> stash_name;
42+
43+ @_ = ' please' if !@_ ;
44+
45+ my %tags ;
46+ @tags { _unpack_tags(@_ , $^H{$stash }) } = ();
47+ $^H{$stash } = _pack_tags(keys %tags );
48+
49+ return ;
50+ }
51+
52+ sub unimport {
53+ my $class = shift ;
54+ my $stash = $class -> stash_name;
55+
56+ if (@_ ) {
57+ my %tags ;
58+ @tags { _unpack_tags($^H{$stash }) } = ();
59+ delete @tags { _unpack_tags(@_ ) };
60+
61+ my $new = _pack_tags(keys %tags );
62+ if (length $new ) {
63+ $^H{$stash } = $new ;
64+ }
65+ else {
66+ delete $^H{$stash };
67+ }
68+ }
69+ else {
70+ delete $^H{$stash };
71+ }
72+
73+ return ;
74+ }
75+
76+ 1;
Original file line number Diff line number Diff line change 1+ use strict;
2+ use warnings;
3+ use Test::More;
4+
5+ ok(!less-> of, ' less has no active tags by default' );
6+
7+ {
8+ use less;
9+ ok(less-> of(' please' ), ' use less defaults to please' );
10+ is_deeply([sort less-> of], [' please' ], ' less->of lists active default tag' );
11+ }
12+
13+ ok(!less-> of(' please' ), ' less hint is lexical' );
14+
15+ {
16+ use less qw( memory CPU) ;
17+ ok(less-> of(' memory' ), ' less sees memory tag' );
18+ ok(less-> of(' CPU' ), ' less sees CPU tag' );
19+ ok(less-> of(' CPU' , ' disk' ), ' less checks any requested tag' );
20+
21+ {
22+ no less ' CPU' ;
23+ ok(less-> of(' memory' ), ' no less removes only named tag' );
24+ ok(!less-> of(' CPU' ), ' CPU tag removed' );
25+ }
26+
27+ ok(less-> of(' CPU' ), ' outer less tags are restored' );
28+ }
29+
30+ done_testing;
You can’t perform that action at this time.
0 commit comments