git.shiar.nl
/
perl
/
list-index.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rethink method parameters: options to new(), data to ranges()
[perl/list-index.git]
/
lib
/
List
/
Index.pm
diff --git
a/lib/List/Index.pm
b/lib/List/Index.pm
index 719aca74ed00acf60feddb2437bcce314410277f..daeb707f9835c58e8160edf05440f59acd600690 100644
(file)
--- a/
lib/List/Index.pm
+++ b/
lib/List/Index.pm
@@
-6,36
+6,40
@@
use warnings;
use Exporter 'import';
use Exporter 'import';
-our $VERSION = '1.0
1
';
+our $VERSION = '1.0
2
';
our @EXPORT_OK = qw(rangematch);
sub new {
our @EXPORT_OK = qw(rangematch);
sub new {
- my ($class, $values) = @_;
- bless [sort map { s/[^a-z]/./g; $_ } @$values], $class;
+ my ($class, $options) = @_;
+ $options ||= {};
+ bless $options, $class;
}
sub ranges {
my $self = shift;
}
sub ranges {
my $self = shift;
+ my @rows = sort map { s/[^a-z]/./g; $_ } @{ shift() };
my $options = shift || {};
my $options = shift || {};
+ $options->{$_} //= $self->{$_} for keys %$self;
+
my $pagesize = $options->{pagesize} || 50;
my $context = $options->{context } // 1 + ($pagesize >> 4);
my $length = $options->{length } || 4;
my $pagesize = $options->{pagesize} || 50;
my $context = $options->{context } // 1 + ($pagesize >> 4);
my $length = $options->{length } || 4;
- my $pages = $options->{pages } || 1 + int $#
$self
/ $pagesize;
+ my $pages = $options->{pages } || 1 + int $#
rows
/ $pagesize;
- $pagesize = $pages >= $#
$self ? 1 : @$self
/ $pages;
+ $pagesize = $pages >= $#
rows ? 1 : @rows
/ $pages;
my $lookbehind = -$context;
my $lookahead = $context;
my @links = ('');
my $lookbehind = -$context;
my $lookahead = $context;
my @links = ('');
- for (my $offset = $pagesize + .5; $offset < @
$self
; $offset += $pagesize) {
- my $link = substr $
self->
[$offset], 0, $length;
+ for (my $offset = $pagesize + .5; $offset < @
rows
; $offset += $pagesize) {
+ my $link = substr $
rows
[$offset], 0, $length;
if ($context) {
my $penalty = 0;
# take a value slightly before the current offset
if ((my $before = $offset + $lookbehind) > 0) {
# see how much of it matches the current link
my $trim = 1;
if ($context) {
my $penalty = 0;
# take a value slightly before the current offset
if ((my $before = $offset + $lookbehind) > 0) {
# see how much of it matches the current link
my $trim = 1;
- for my $match (split //, $
self->
[$before - 1]) {
+ for my $match (split //, $
rows
[$before - 1]) {
scalar $link =~ /\G\Q$match/g or last;
$trim++;
}
scalar $link =~ /\G\Q$match/g or last;
$trim++;
}
@@
-43,7
+47,7
@@
sub ranges {
if ($trim < length $link) {
substr($link, $trim) = '';
for (reverse $before .. $offset) {
if ($trim < length $link) {
substr($link, $trim) = '';
for (reverse $before .. $offset) {
- $
self->
[$offset - $penalty] =~ /^\Q$link/ or last;
+ $
rows
[$offset - $penalty] =~ /^\Q$link/ or last;
$penalty++;
}
}
$penalty++;
}
}
@@
-52,20
+56,20
@@
sub ranges {
$lookbehind = -$context;
# take a value after the current offset
$lookbehind = -$context;
# take a value after the current offset
- if ((my $after = $offset + $lookahead) < $#
$self
) {
+ if ((my $after = $offset + $lookahead) < $#
rows
) {
# see how much of it matches the current link
my $trim = 1;
# see how much of it matches the current link
my $trim = 1;
- for my $match (split //, $
self->
[$after]) {
+ for my $match (split //, $
rows
[$after]) {
scalar $link =~ /\G\Q$match/g or last;
$trim++;
}
# use this link if it's shorter
if ($trim < length $link) {
scalar $link =~ /\G\Q$match/g or last;
$trim++;
}
# use this link if it's shorter
if ($trim < length $link) {
- $link = substr $
self->
[$after], 0, $trim;
+ $link = substr $
rows
[$after], 0, $trim;
# advance lookbehind offset on the next page
$penalty = 0;
for ($offset .. $after) {
# advance lookbehind offset on the next page
$penalty = 0;
for ($offset .. $after) {
- last if $
self->
[$_] =~ /^\Q$link/;
+ last if $
rows
[$_] =~ /^\Q$link/;
$lookbehind++;
}
}
$lookbehind++;
}
}
@@
-186,8
+190,8
@@
List::Index - Find and apply prefix ranges to paginate keywords
=head1 SYNOPSIS
use List::Index;
=head1 SYNOPSIS
use List::Index;
- my $index = List::Index->new(
\@values
);
- my @pages = $index->ranges(
{pagesize => 50}
);
+ my $index = List::Index->new(
{ pagesize => 50 }
);
+ my @pages = $index->ranges(
\@values
);
say "<a href='?q=$_'>$_</a>" for @pages;
use List::Index 'rangematch';
say "<a href='?q=$_'>$_</a>" for @pages;
use List::Index 'rangematch';