File Coverage

blib/lib/WWW/MetaForge/ArcRaiders/Request.pm
Criterion Covered Total %
statement 28 28 100.0
branch 2 2 100.0
condition n/a
subroutine 11 11 100.0
pod 6 6 100.0
total 47 47 100.0


line stmt bran cond sub pod time code
1             package WWW::MetaForge::ArcRaiders::Request;
2             our $AUTHORITY = 'cpan:GETTY';
3             # ABSTRACT: HTTP Request factory for MetaForge ARC Raiders API
4             our $VERSION = '0.002';
5              
6 6     6   315072 use Moo;
  6         5943  
  6         48  
7 6     6   4153 use HTTP::Request;
  6         23372  
  6         219  
8 6     6   40 use URI;
  6         18  
  6         195  
9 6     6   574 use namespace::clean;
  6         16070  
  6         43  
10              
11              
12             our $BASE_URL = 'https://metaforge.app/api/arc-raiders';
13             our $MAP_DATA_URL = 'https://metaforge.app/api/game-map-data';
14              
15             has base_url => (
16             is => 'ro',
17             default => sub { $BASE_URL },
18             );
19              
20              
21             has map_data_url => (
22             is => 'ro',
23             default => sub { $MAP_DATA_URL },
24             );
25              
26              
27             sub _build_request {
28 62     62   165 my ($self, $url, %params) = @_;
29 62         436 my $uri = URI->new($url);
30 62 100       59479 $uri->query_form(%params) if %params;
31 62         2544 return HTTP::Request->new(GET => $uri->as_string);
32             }
33              
34             sub items {
35 22     22 1 18997 my ($self, %params) = @_;
36 22         123 return $self->_build_request($self->base_url . '/items', %params);
37             }
38              
39              
40             sub arcs {
41 10     10 1 9415 my ($self, %params) = @_;
42 10         62 return $self->_build_request($self->base_url . '/arcs', %params);
43             }
44              
45              
46             sub quests {
47 12     12 1 8524 my ($self, %params) = @_;
48 12         73 return $self->_build_request($self->base_url . '/quests', %params);
49             }
50              
51              
52             sub traders {
53 9     9 1 6074 my ($self, %params) = @_;
54 9         46 return $self->_build_request($self->base_url . '/traders', %params);
55             }
56              
57              
58             sub event_timers {
59 6     6 1 6602 my ($self, %params) = @_;
60 6         46 return $self->_build_request($self->base_url . '/events-schedule', %params);
61             }
62              
63              
64             sub map_data {
65 3     3 1 6641 my ($self, %params) = @_;
66 3         16 return $self->_build_request($self->map_data_url, %params);
67             }
68              
69              
70             1;
71              
72             __END__
73              
74             =pod
75              
76             =encoding UTF-8
77              
78             =head1 NAME
79              
80             WWW::MetaForge::ArcRaiders::Request - HTTP Request factory for MetaForge ARC Raiders API
81              
82             =head1 VERSION
83              
84             version 0.002
85              
86             =head1 SYNOPSIS
87              
88             use WWW::MetaForge::ArcRaiders::Request;
89              
90             my $factory = WWW::MetaForge::ArcRaiders::Request->new;
91              
92             # Get HTTP::Request objects for async usage
93             my $req = $factory->items(search => 'Ferro');
94             my $req = $factory->event_timers(map => 'Dam');
95              
96             =head1 DESCRIPTION
97              
98             Factory for creating L<HTTP::Request> objects for the MetaForge API.
99             Use standalone for integration with async HTTP frameworks like L<WWW::Chain>.
100              
101             =head2 base_url
102              
103             Base URL for main API endpoints. Defaults to C<https://metaforge.app/api/arc-raiders>.
104              
105             =head2 map_data_url
106              
107             Base URL for map data endpoint. Defaults to C<https://metaforge.app/api/game-map-data>.
108              
109             =head2 items
110              
111             my $req = $factory->items(search => 'Ferro', page => 1);
112              
113             Returns L<HTTP::Request> for C</items> endpoint.
114              
115             =head2 arcs
116              
117             my $req = $factory->arcs(includeLoot => 'true');
118              
119             Returns L<HTTP::Request> for C</arcs> endpoint.
120              
121             =head2 quests
122              
123             my $req = $factory->quests(type => 'StoryQuest');
124              
125             Returns L<HTTP::Request> for C</quests> endpoint.
126              
127             =head2 traders
128              
129             my $req = $factory->traders;
130              
131             Returns L<HTTP::Request> for C</traders> endpoint.
132              
133             =head2 event_timers
134              
135             my $req = $factory->event_timers(map => 'Dam');
136              
137             Returns L<HTTP::Request> for C</events-schedule> endpoint.
138              
139             =head2 map_data
140              
141             my $req = $factory->map_data(map => 'Spaceport');
142              
143             Returns L<HTTP::Request> for C</game-map-data> endpoint.
144              
145             =head1 SUPPORT
146              
147             =head2 Issues
148              
149             Please report bugs and feature requests on GitHub at
150             L<https://github.com/Getty/p5-www-metaforge/issues>.
151              
152             =head2 IRC
153              
154             You can reach Getty on C<irc.perl.org> for questions and support.
155              
156             =head1 CONTRIBUTING
157              
158             Contributions are welcome! Please fork the repository and submit a pull request.
159              
160             =head1 AUTHOR
161              
162             Torsten Raudssus <torsten@raudssus.de>
163              
164             =head1 COPYRIGHT AND LICENSE
165              
166             This software is copyright (c) 2026 by Torsten Raudssus.
167              
168             This is free software; you can redistribute it and/or modify it under
169             the same terms as the Perl 5 programming language system itself.
170              
171             =cut