File Coverage

lib/AI/Agent/Skills/SiteKit.pm
Criterion Covered Total %
statement 29 29 100.0
branch 2 4 50.0
condition 3 6 50.0
subroutine 15 15 100.0
pod 0 11 0.0
total 49 65 75.3


line stmt bran cond sub pod time code
1             package AI::Agent::Skills::SiteKit;
2 1     1   122125 use strict;
  1         2  
  1         28  
3 1     1   4 use warnings;
  1         1  
  1         53  
4 1     1   3 use Exporter 'import';
  1         1  
  1         23  
5 1     1   536 use URI::Escape qw(uri_escape);
  1         1528  
  1         484  
6              
7             our $VERSION = '0.1.0';
8             our @EXPORT_OK = qw(home_url skills_url search_url submit_url blog_url category_url skill_url url_for metadata);
9              
10 8     8 0 45 sub base_url { return 'https://aiagentskills.net' }
11 7   50 7 0 17 sub clean_slug { my $s = shift // ''; $s =~ s!^/+!!; $s =~ s!/+$!!; return $s; }
  7         27  
  7         14  
  7         13  
12 5 50 50 5 0 12 sub url_for { my $clean = clean_slug(shift // ''); return $clean eq '' ? base_url() : base_url() . '/' . $clean . '/'; }
  5         13  
13 1     1 0 154384 sub home_url { return base_url() }
14 1     1 0 3 sub skills_url { return url_for('skills') }
15 1     1 0 2 sub submit_url { return url_for('submit') }
16 1     1 0 4 sub blog_url { return url_for('blog') }
17 1     1 0 3 sub category_url { return url_for('category/' . clean_slug(shift)) }
18 1     1 0 4 sub skill_url { return url_for('skill/' . clean_slug(shift)) }
19 1 50 50 1 0 6 sub search_url { my $q = shift // ''; $q =~ s/^\s+|\s+$//g; return $q eq '' ? skills_url() : base_url() . '/skills/?q=' . uri_escape($q); }
  1         8  
  1         4  
20             sub metadata {
21             return {
22 1     1 0 711 name => 'AI Agent Skills',
23             homepage => base_url(),
24             description => 'Curated directory for Claude skills, Codex skills, and AI agent workflows.',
25             tags => [qw(aiagentskills skills agents claude codex)],
26             };
27             }
28             1;
29             __END__