line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package IO::Iron; |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
## no critic (Documentation::RequirePodAtEnd) |
4
|
|
|
|
|
|
|
## no critic (Documentation::RequirePodSections) |
5
|
|
|
|
|
|
|
|
6
|
3
|
|
|
3
|
|
105262
|
use 5.010_000; |
|
3
|
|
|
|
|
27
|
|
7
|
3
|
|
|
3
|
|
55
|
use strict; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
76
|
|
8
|
3
|
|
|
3
|
|
17
|
use warnings; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
101
|
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
# Global creator |
11
|
|
|
|
|
|
|
BEGIN { |
12
|
3
|
|
|
3
|
|
452
|
use parent qw( Exporter ); |
|
3
|
|
|
|
|
307
|
|
|
3
|
|
|
|
|
15
|
|
13
|
3
|
|
|
3
|
|
287
|
our ( @EXPORT_OK, %EXPORT_TAGS ); |
14
|
3
|
|
|
|
|
11
|
%EXPORT_TAGS = ( 'all' => [qw(ironcache ironmq ironworker)] ); |
15
|
3
|
|
|
|
|
632
|
@EXPORT_OK = qw(all ironcache ironmq ironworker); |
16
|
|
|
|
|
|
|
} |
17
|
|
|
|
|
|
|
our @EXPORT_OK; |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
# Global destructor |
20
|
|
|
|
3
|
|
|
END { |
21
|
|
|
|
|
|
|
} |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
# ABSTRACT: Client Libraries to Iron services IronCache, IronMQ and IronWorker. |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
our $VERSION = '0.14'; # VERSION: generated by DZP::OurPkgVersion |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
require IO::Iron::IronCache::Client; |
28
|
|
|
|
|
|
|
require IO::Iron::IronMQ::Client; |
29
|
|
|
|
|
|
|
require IO::Iron::IronWorker::Client; |
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
sub ironcache { |
32
|
0
|
|
|
0
|
1
|
|
my (%params) = @_; |
33
|
0
|
|
|
|
|
|
return IO::Iron::IronCache::Client->new( \%params ); |
34
|
|
|
|
|
|
|
} |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
sub ironmq { |
37
|
0
|
|
|
0
|
1
|
|
my (%params) = @_; |
38
|
0
|
|
|
|
|
|
return IO::Iron::IronMQ::Client->new( \%params ); |
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
sub ironworker { |
42
|
0
|
|
|
0
|
1
|
|
my (%params) = @_; |
43
|
0
|
|
|
|
|
|
return IO::Iron::IronWorker::Client->new(%params); |
44
|
|
|
|
|
|
|
} |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
1; |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
__END__ |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
=pod |
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
=encoding UTF-8 |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
=head1 NAME |
55
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
IO::Iron - Client Libraries to Iron services IronCache, IronMQ and IronWorker. |
57
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
=head1 VERSION |
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
version 0.14 |
61
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
=head1 SYNOPSIS |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
use IO::Iron; |
65
|
|
|
|
|
|
|
use IO::Iron qw{ironcache ironmq ironworker}; |
66
|
|
|
|
|
|
|
use IO::Iron ':all'; |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
my $iron_mq_client = ironmq(); |
69
|
|
|
|
|
|
|
my @iron_mq_queues = $iron_mq_client->get_queues(); |
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
my $iron_cache_client = ironcache( config => 'iron_cache.json' ); |
72
|
|
|
|
|
|
|
my @iron_caches = $iron_cache_client->get_caches(); |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
my $iron_worker_client = ironworker( config => 'iron_worker.json' ); |
75
|
|
|
|
|
|
|
my @iron_codes = $iron_worker_client->list_code_packages(); |
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
=head1 DESCRIPTION |
78
|
|
|
|
|
|
|
|
79
|
|
|
|
|
|
|
IronCache, IronMQ and IronWorker are cloud based services accessible |
80
|
|
|
|
|
|
|
via a REST API. CPAN Distribution IO::Iron contains Perl clients for |
81
|
|
|
|
|
|
|
accessing them. |
82
|
|
|
|
|
|
|
|
83
|
|
|
|
|
|
|
[See L<http://www.iron.io/|http://www.iron.io/>] |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
Please see the individual clients for further documentation and usage. |
86
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
Clients: |
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
=over 8 |
90
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
=item L<IO::Iron::IronCache::Client|IO::Iron::IronCache::Client> |
92
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
=item L<IO::Iron::IronMQ::Client|IO::Iron::IronMQ::Client> |
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
=item L<IO::Iron::IronWorker::Client|IO::Iron::IronWorker::Client> |
96
|
|
|
|
|
|
|
|
97
|
|
|
|
|
|
|
=back |
98
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
IO-Iron code is available at Github: L<IO-Iron|https://github.com/mikkoi/io-iron> |
100
|
|
|
|
|
|
|
for download with Git: L<https://github.com/mikkoi/io-iron.git|https://github.com/mikkoi/io-iron.git>. |
101
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
=head2 IO::Iron |
103
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
Package IO::Iron is only a "convenience" module for quick startup. |
105
|
|
|
|
|
|
|
The three functions provided are L</ironcache>, L</ironmq> and L</ironworker>. |
106
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
The following parameters can be given to each of them as hash item type |
108
|
|
|
|
|
|
|
parameters. See section L</SYNOPSIS> for an example. |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
=over 8 |
111
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
=item C<project_id>, The ID of the project to use for requests. |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
=item C<token>, The OAuth token that is used to authenticate requests. |
115
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
=item C<host>, The domain name the API can be located at. E.g. 'mq-aws-us-east-1.iron.io/1'. |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
=item C<protocol>, The protocol that will be used to communicate with the API. Defaults to "https". |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
=item C<port>, The port to connect to the API through. Defaults to 443. |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
=item C<api_version>, The version of the API to connect through. Defaults to the version supported by the client. |
123
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
=item C<timeout>, REST client timeout (for REST calls accessing IronMQ.) |
125
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
=item C<config>, Config filename with path if required. |
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
=back |
129
|
|
|
|
|
|
|
|
130
|
|
|
|
|
|
|
You can also give the parameters in the config file F<.iron.json> or |
131
|
|
|
|
|
|
|
F<iron.json> (in local directory) or as environmental variables. Please read |
132
|
|
|
|
|
|
|
L<Configuring the Official Client Libraries|http://dev.iron.io/mq/reference/configuration/> for further details. |
133
|
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
=head3 Client Documentation |
135
|
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
Please read individual client's documentation for using them. |
137
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
=head3 Exceptions |
139
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
A REST call to Iron service may fail for several reason. |
141
|
|
|
|
|
|
|
All failures generate an exception using the L<Exception::Class|Exception::Class> package. |
142
|
|
|
|
|
|
|
Class IronHTTPCallException contains the field status_code, response_message and error. |
143
|
|
|
|
|
|
|
Error is formatted as such: IronHTTPCallException: status_code=<HTTP status code> response_message=<response_message>. |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
use Try::Tiny; |
146
|
|
|
|
|
|
|
use Scalar::Util qw{blessed}; |
147
|
|
|
|
|
|
|
try { |
148
|
|
|
|
|
|
|
my $asked_iron_cache_01 = $iron_cache_client->get_cache('name' => 'unique_cache_name_01'); |
149
|
|
|
|
|
|
|
} |
150
|
|
|
|
|
|
|
catch { |
151
|
|
|
|
|
|
|
die $_ unless blessed $_ && $_->can('rethrow'); |
152
|
|
|
|
|
|
|
if ( $_->isa('IronHTTPCallException') ) { |
153
|
|
|
|
|
|
|
if ($_->status_code == 404) { |
154
|
|
|
|
|
|
|
print "Bad things! Can not just find the catch in this!\n"; |
155
|
|
|
|
|
|
|
} |
156
|
|
|
|
|
|
|
} |
157
|
|
|
|
|
|
|
else { |
158
|
|
|
|
|
|
|
$_->rethrow; # Push the error upwards. |
159
|
|
|
|
|
|
|
} |
160
|
|
|
|
|
|
|
}; |
161
|
|
|
|
|
|
|
|
162
|
|
|
|
|
|
|
When using policies (see next chapter) also exceptions |
163
|
|
|
|
|
|
|
NoIronPolicyException and CharacterGroupNotDefinedIronPolicyException |
164
|
|
|
|
|
|
|
can be met. |
165
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
=head3 Policies |
167
|
|
|
|
|
|
|
|
168
|
|
|
|
|
|
|
Policies is a way to limit the names of message queues, code packages, |
169
|
|
|
|
|
|
|
caches and items (item keys) |
170
|
|
|
|
|
|
|
to a predefined group of possible strings. This can limit the chances |
171
|
|
|
|
|
|
|
for typos and enforce an enterprise policy. The policies are loaded from |
172
|
|
|
|
|
|
|
a JSON file which is specified either when creating a |
173
|
|
|
|
|
|
|
IO::Iron::Iron*::Client object, or |
174
|
|
|
|
|
|
|
in the config file F<.iron.json> (or equivalent). |
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
=head4 Policies in Config file |
177
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
Add the item I<policies> to the config file. The value of the item is the |
179
|
|
|
|
|
|
|
filename of the policies file. |
180
|
|
|
|
|
|
|
|
181
|
|
|
|
|
|
|
Example config file: |
182
|
|
|
|
|
|
|
|
183
|
|
|
|
|
|
|
{ |
184
|
|
|
|
|
|
|
"project_id":"51bdf5fb2267d84ced002c99", |
185
|
|
|
|
|
|
|
"token":"-Q9OEHZPhdZtd0KHBzzdUJIqV_E", |
186
|
|
|
|
|
|
|
"host":"cache-aws-us-east-1.iron.io", |
187
|
|
|
|
|
|
|
"policies":"iron_policies.json" |
188
|
|
|
|
|
|
|
} |
189
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
=head4 Policies file specified when creating the client |
191
|
|
|
|
|
|
|
|
192
|
|
|
|
|
|
|
my $policies_filename = '/etc/ironmq/global_policies.json'; |
193
|
|
|
|
|
|
|
my $client = IO::Iron::IronCache::Client->new('policies' => $policies_filename); |
194
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
=head4 Examples of Policies File and Explanation of Configuration |
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
The 'default' policies JSON file: |
198
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
{ |
200
|
|
|
|
|
|
|
"definition":{ |
201
|
|
|
|
|
|
|
"character_group":{ |
202
|
|
|
|
|
|
|
}, |
203
|
|
|
|
|
|
|
"no_limitation":1, # There is an unlimited number of alternatives. |
204
|
|
|
|
|
|
|
}, |
205
|
|
|
|
|
|
|
"queue":{ "name":[ "[:alnum:]{1,}" ], }, |
206
|
|
|
|
|
|
|
"cache":{ |
207
|
|
|
|
|
|
|
"name":[ "[:alnum:]{1,}" ], |
208
|
|
|
|
|
|
|
"item_key":[ "[:alnum:]{1,}" ] |
209
|
|
|
|
|
|
|
}, |
210
|
|
|
|
|
|
|
"worker":{ "name":[ "[:alnum:]{1,}" ], } |
211
|
|
|
|
|
|
|
} |
212
|
|
|
|
|
|
|
|
213
|
|
|
|
|
|
|
The above file would set an open policy for IronMQ, IronCache and IronWorker alike. |
214
|
|
|
|
|
|
|
The file is divided into four parts: definition for defining meta options, and |
215
|
|
|
|
|
|
|
queue|cache|worker parts for defining the changing strings |
216
|
|
|
|
|
|
|
(queue|cache|worker names and item keys). The character group I<alnum> covers |
217
|
|
|
|
|
|
|
all ascii alphabetic characters (both lower and upper case) and digits (0-9). |
218
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
N.B. The option I<definition:no_limitation> controls the open/closed policy. |
220
|
|
|
|
|
|
|
If I<definition:no_limitation> is set (1=set), the policy control is |
221
|
|
|
|
|
|
|
turned off. |
222
|
|
|
|
|
|
|
|
223
|
|
|
|
|
|
|
An example of policies file |
224
|
|
|
|
|
|
|
|
225
|
|
|
|
|
|
|
{ |
226
|
|
|
|
|
|
|
"__comment1":"Use normal regexp. [:digit:] = number:0-9, [:alpha:] = alphabetic character, [:alnum:] = character or number.", |
227
|
|
|
|
|
|
|
"__comment2":"Do not use end/begin limitators '^' and '\$'. They are added automatically.", |
228
|
|
|
|
|
|
|
"__comment3":"Note that character groups are closed inside '[::]', not '[[:]]' as normal POSIX groups.", |
229
|
|
|
|
|
|
|
"definition":{ |
230
|
|
|
|
|
|
|
"character_group":{ |
231
|
|
|
|
|
|
|
"[:lim_uchar:]":"ABC", |
232
|
|
|
|
|
|
|
"[:low_digit:]":"0123" |
233
|
|
|
|
|
|
|
}, |
234
|
|
|
|
|
|
|
}, |
235
|
|
|
|
|
|
|
"cache":{ |
236
|
|
|
|
|
|
|
"name":[ |
237
|
|
|
|
|
|
|
"cache_01_main", |
238
|
|
|
|
|
|
|
"cache_[:alpha:]{1}[:digit:]{2}" |
239
|
|
|
|
|
|
|
], |
240
|
|
|
|
|
|
|
"item_key":[ |
241
|
|
|
|
|
|
|
"item.01_[:digit:]{2}", |
242
|
|
|
|
|
|
|
"item.02_[:lim_uchar:]{1,2}" |
243
|
|
|
|
|
|
|
] |
244
|
|
|
|
|
|
|
} |
245
|
|
|
|
|
|
|
} |
246
|
|
|
|
|
|
|
|
247
|
|
|
|
|
|
|
This policies file sets policies for cache names and item keys. Both have two |
248
|
|
|
|
|
|
|
templates. Template "cache_01_main" is without wildcards: the template list |
249
|
|
|
|
|
|
|
can also only contain predefined names or keys. Sometimes this could be |
250
|
|
|
|
|
|
|
exactly the wanted behaviour, especially in regard to cache and |
251
|
|
|
|
|
|
|
message queue names. |
252
|
|
|
|
|
|
|
|
253
|
|
|
|
|
|
|
Items beginning with '__' are considered comments. Comments can not be |
254
|
|
|
|
|
|
|
inserted into lists, such as I<character_group>. |
255
|
|
|
|
|
|
|
|
256
|
|
|
|
|
|
|
The I<definition> part contains the list I<character_group> for user-defined |
257
|
|
|
|
|
|
|
groups. The following groups are predefined: |
258
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
=over 8 |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
=item [:alpha:], ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
262
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
=item [:alnum:], ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 |
264
|
|
|
|
|
|
|
|
265
|
|
|
|
|
|
|
=item [:digit:], 0123456789 |
266
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
=item [:lower:], abcdefghijklmnopqrstuvwxyz |
268
|
|
|
|
|
|
|
|
269
|
|
|
|
|
|
|
=item [:upper:], ABCDEFGHIJKLMNOPQRSTUVWXYZ |
270
|
|
|
|
|
|
|
|
271
|
|
|
|
|
|
|
=item [:word:], ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ |
272
|
|
|
|
|
|
|
|
273
|
|
|
|
|
|
|
=back |
274
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
All lower ASCII (7-bit) characters are allowed in names and in character |
276
|
|
|
|
|
|
|
groups, except for the reserved characters (S<RFC 3986>) |
277
|
|
|
|
|
|
|
S<B<!$&'()*+,;=:/?#[]@>>. |
278
|
|
|
|
|
|
|
|
279
|
|
|
|
|
|
|
A character group definition is closed inside characters '[::]', |
280
|
|
|
|
|
|
|
not '[[:]]' as normal POSIX groups. Only the equivalents of the POSIX groups |
281
|
|
|
|
|
|
|
mentioned above can be used; e.g. POSIX group C<[[:graph:]]> is not available. |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
When using the character groups in a name or key, only two markings are allowed: |
284
|
|
|
|
|
|
|
C<[:group:]{n}> and C<[:group:]{n,n}>, where C<n> is an integer. |
285
|
|
|
|
|
|
|
This limitation (not being able to use any regular expression) is due to the |
286
|
|
|
|
|
|
|
double functionality of the policy: a) it acts as a filter when creating |
287
|
|
|
|
|
|
|
and naming new message queues, code packages, caches and cache items; 2) it |
288
|
|
|
|
|
|
|
can be used to list all possible names, for example when querying for |
289
|
|
|
|
|
|
|
cache items. |
290
|
|
|
|
|
|
|
|
291
|
|
|
|
|
|
|
=for stopwords IronCache IronMQ IronWorker Iron.io API JSON IronIO json OAuth |
292
|
|
|
|
|
|
|
aws AWS Rackspace CPAN Github startup ironcache ironmq ironworker https Config |
293
|
|
|
|
|
|
|
filename config IronHTTPCallException NoIronPolicyException |
294
|
|
|
|
|
|
|
CharacterGroupNotDefinedIronPolicyException alnum ascii wildcards behaviour |
295
|
|
|
|
|
|
|
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ POSIX Subdirectory lv |
296
|
|
|
|
|
|
|
Mikko Koivunalho perldoc AnnoCPAN webhooks tradename licensable MERCHANTABILITY |
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
=head1 STATUS |
299
|
|
|
|
|
|
|
|
300
|
|
|
|
|
|
|
Iron.io libraries are currently being developed so changes in the API are |
301
|
|
|
|
|
|
|
possible. |
302
|
|
|
|
|
|
|
|
303
|
|
|
|
|
|
|
=head1 REQUIREMENTS |
304
|
|
|
|
|
|
|
|
305
|
|
|
|
|
|
|
IO::Iron requires an IronIO account. Three configuration items must |
306
|
|
|
|
|
|
|
be set (others available) before using the functions: |
307
|
|
|
|
|
|
|
C<project_id>, C<token> and C<host>. These can be set in a json file, |
308
|
|
|
|
|
|
|
as environmental variables or as parameters when creating the object. |
309
|
|
|
|
|
|
|
|
310
|
|
|
|
|
|
|
=over 8 |
311
|
|
|
|
|
|
|
|
312
|
|
|
|
|
|
|
=item C<project_id>, the identification string, from IronIO. |
313
|
|
|
|
|
|
|
|
314
|
|
|
|
|
|
|
=item C<token>, an OAuth authentication token string, from IronIO. |
315
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
=item C<host>, the cloud in which you want to operate, e.g. 'cache-aws-us-east-1' for AWS (Amazon) or 'mq-rackspace-ord.iron.io' or 'mq-rackspace-lon.iron.io' for Rackspace. |
317
|
|
|
|
|
|
|
|
318
|
|
|
|
|
|
|
Please see L<IronMQ HTTP API Reference (hosts)|http://dev.iron.io/mq/3/host/> |
319
|
|
|
|
|
|
|
for available hosts. |
320
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
=back |
322
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
=head1 TESTING |
324
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
Subdirectory F<integ_t> contains "integration" tests which require an active Iron.io account and Internet connection. |
326
|
|
|
|
|
|
|
To run the tests, create first three config files in the main directory: |
327
|
|
|
|
|
|
|
F<iron_cache.json>, F<iron_mq.json>, F<iron_worker.json>. |
328
|
|
|
|
|
|
|
Set at least the following attributes: B<project_id>, B<token> and B<host>. |
329
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
Execute B<prove> (L<prove|https://metacpan.org/pod/distribution/TAP-Parser/bin/prove>), e.g. B<prove -lv -Iinteg_t integ_t\Iron\iron_all.t>. |
331
|
|
|
|
|
|
|
|
332
|
|
|
|
|
|
|
=head1 FUNCTIONS |
333
|
|
|
|
|
|
|
|
334
|
|
|
|
|
|
|
=head2 ironcache |
335
|
|
|
|
|
|
|
|
336
|
|
|
|
|
|
|
Create an IronCache client object and return it to user. |
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
=head2 ironmq |
339
|
|
|
|
|
|
|
|
340
|
|
|
|
|
|
|
Create an IronMQ client object and return it to user. |
341
|
|
|
|
|
|
|
|
342
|
|
|
|
|
|
|
=head2 ironworker |
343
|
|
|
|
|
|
|
|
344
|
|
|
|
|
|
|
Create an IronWorker client object and return it to user. |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
=head1 AUTHOR |
347
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
Mikko Koivunalho <mikko.koivunalho@iki.fi> |
349
|
|
|
|
|
|
|
|
350
|
|
|
|
|
|
|
=head1 BUGS |
351
|
|
|
|
|
|
|
|
352
|
|
|
|
|
|
|
Please report any bugs or feature requests to bug-io-iron@rt.cpan.org or through the web interface at: |
353
|
|
|
|
|
|
|
http://rt.cpan.org/Public/Dist/Display.html?Name=IO-Iron |
354
|
|
|
|
|
|
|
|
355
|
|
|
|
|
|
|
=head1 COPYRIGHT AND LICENSE |
356
|
|
|
|
|
|
|
|
357
|
|
|
|
|
|
|
This software is copyright (c) 2023 by Mikko Koivunalho. |
358
|
|
|
|
|
|
|
|
359
|
|
|
|
|
|
|
This is free software; you can redistribute it and/or modify it under |
360
|
|
|
|
|
|
|
the same terms as the Perl 5 programming language system itself. |
361
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
The full text of the license can be found in the |
363
|
|
|
|
|
|
|
F<LICENSE> file included with this distribution. |
364
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
=cut |