File Coverage

blib/lib/Faker/Plugin.pm
Criterion Covered Total %
statement 49 49 100.0
branch 4 4 100.0
condition n/a
subroutine 15 15 100.0
pod 5 11 45.4
total 73 79 92.4


line stmt bran cond sub pod time code
1             package Faker::Plugin;
2              
3 149     149   118658 use 5.018;
  149         541  
4              
5 149     149   820 use strict;
  149         314  
  149         3099  
6 149     149   728 use warnings;
  149         346  
  149         4578  
7              
8 149     149   931 use Venus::Class 'attr', 'with';
  149         426  
  149         3483  
9              
10             with 'Venus::Role::Buildable';
11             with 'Venus::Role::Optional';
12              
13             # VERSION
14              
15             our $VERSION = '1.17';
16              
17             # ATTRIBUTES
18              
19             attr 'faker';
20              
21             # DEFAULTS
22              
23             sub coerce_faker {
24 8985     8985 0 4201862 return 'Faker';
25             }
26              
27             sub default_faker {
28 448     448 0 2065602 return {};
29             }
30              
31             # METHODS
32              
33             sub execute {
34 1     1 1 11266 my ($self, $data) = @_;
35              
36 1         7 return '';
37             }
38              
39             sub process {
40 5     5 1 7396 my ($self, $data, @types) = @_;
41              
42 5         38 return $self->process_format($self->process_markers($data, @types));
43             }
44              
45             sub process_format {
46 292     292 1 21398 my ($self, $data) = @_;
47              
48 292 100       1290 $data = join ' ', @$data if ref $data eq 'ARRAY';
49              
50 292         2545 $data =~ s/\{\{\s?([#\.\w]+)\s?\}\}/$self->resolve($1)/eg;
  637         96731  
51              
52 292         80480 return $data;
53             }
54              
55             sub process_markers {
56 188     188 1 47741 my ($self, $data, @types) = @_;
57              
58 188 100       1137 my @methods = map "process_markers_for_${_}", (
59             @types ? @types : qw(letters newlines numbers)
60             );
61              
62 188         527 for my $method (@methods) {
63 255         1144 $data = $self->$method($data);
64             }
65              
66 188         1395 return $data;
67             }
68              
69             sub process_markers_for_letters {
70 41     41 0 130 my ($self, $data) = @_;
71              
72 41         165 my $random = $self->faker->random;
73              
74 41         250 $data =~ s/\?/$random->letter/eg;
  12         141  
75              
76 41         894 return $data;
77             }
78              
79             sub process_markers_for_newlines {
80 48     48 0 175 my ($self, $data) = @_;
81              
82 48         168 $data =~ s/\\n/\n/g;
83              
84 48         135 return $data;
85             }
86              
87             sub process_markers_for_numbers {
88 166     166 0 453 my ($self, $data) = @_;
89              
90 166         554 my $random = $self->faker->random;
91              
92 166         1055 $data =~ s/\#/$random->digit/eg;
  802         6180  
93 166         1720 $data =~ s/\%/$random->nonzero('digit')/eg;
  27         124  
94              
95 166         1111 return $data;
96             }
97              
98             sub resolve {
99 640     640 1 36129 my ($self, $method) = @_;
100              
101 640         2092 return $self->faker->$method;
102             }
103              
104             sub transliterate {
105 13     13 0 721 my ($self, $data) = @_;
106              
107 13         1934 state $table = {
108             "'" => '',
109             '/' => '',
110             'À' => 'A',
111             'Á' => 'A',
112             'Â' => 'A',
113             'Ã' => 'A',
114             'Ä' => 'A',
115             'Å' => 'A',
116             'Æ' => 'A',
117             'Ç' => 'C',
118             'È' => 'E',
119             'É' => 'E',
120             'Ê' => 'E',
121             'Ë' => 'E',
122             'Ì' => 'I',
123             'Í' => 'I',
124             'Î' => 'I',
125             'Ï' => 'I',
126             'Ð' => 'D',
127             'Ñ' => 'N',
128             'Ò' => 'O',
129             'Ó' => 'O',
130             'Ô' => 'O',
131             'Õ' => 'O',
132             'Ö' => 'O',
133             'Ø' => 'O',
134             'Ù' => 'U',
135             'Ú' => 'U',
136             'Û' => 'U',
137             'Ü' => 'U',
138             'Ý' => 'Y',
139             'Þ' => 'T',
140             'ß' => 's',
141             'à' => 'a',
142             'á' => 'a',
143             'â' => 'a',
144             'ã' => 'a',
145             'ä' => 'a',
146             'å' => 'a',
147             'æ' => 'a',
148             'ç' => 'c',
149             'è' => 'e',
150             'é' => 'e',
151             'ê' => 'e',
152             'ë' => 'e',
153             'ì' => 'i',
154             'í' => 'i',
155             'î' => 'i',
156             'ï' => 'i',
157             'ð' => 'd',
158             'ñ' => 'n',
159             'ò' => 'o',
160             'ó' => 'o',
161             'ô' => 'o',
162             'õ' => 'o',
163             'ö' => 'o',
164             'ø' => 'o',
165             'ù' => 'u',
166             'ú' => 'u',
167             'û' => 'u',
168             'ü' => 'u',
169             'ý' => 'y',
170             'þ' => 't',
171             'ÿ' => 'y',
172             'Ā' => 'A',
173             'ā' => 'a',
174             'Ă' => 'A',
175             'ă' => 'a',
176             'Ą' => 'A',
177             'ą' => 'a',
178             'Ć' => 'C',
179             'ć' => 'c',
180             'Ĉ' => 'C',
181             'ĉ' => 'c',
182             'Ċ' => 'C',
183             'ċ' => 'c',
184             'Č' => 'C',
185             'č' => 'c',
186             'Ď' => 'D',
187             'ď' => 'd',
188             'Đ' => 'D',
189             'đ' => 'd',
190             'Ē' => 'E',
191             'ē' => 'e',
192             'Ĕ' => 'E',
193             'ĕ' => 'e',
194             'Ė' => 'E',
195             'ė' => 'e',
196             'Ę' => 'E',
197             'ę' => 'e',
198             'Ě' => 'E',
199             'ě' => 'e',
200             'Ĝ' => 'G',
201             'ĝ' => 'g',
202             'Ğ' => 'G',
203             'ğ' => 'g',
204             'Ġ' => 'G',
205             'ġ' => 'g',
206             'Ģ' => 'G',
207             'ģ' => 'g',
208             'Ĥ' => 'H',
209             'ĥ' => 'h',
210             'Ħ' => 'H',
211             'ħ' => 'h',
212             'Ĩ' => 'I',
213             'ĩ' => 'i',
214             'Ī' => 'I',
215             'ī' => 'i',
216             'Ĭ' => 'I',
217             'ĭ' => 'i',
218             'Į' => 'I',
219             'į' => 'i',
220             'İ' => 'I',
221             'ı' => 'i',
222             'IJ' => 'I',
223             'ij' => 'i',
224             'Ĵ' => 'J',
225             'ĵ' => 'j',
226             'Ķ' => 'K',
227             'ķ' => 'k',
228             'ĸ' => 'k',
229             'Ĺ' => 'K',
230             'ĺ' => 'l',
231             'Ļ' => 'K',
232             'ļ' => 'l',
233             'Ľ' => 'K',
234             'ľ' => 'l',
235             'Ŀ' => 'K',
236             'ŀ' => 'l',
237             'Ł' => 'L',
238             'ł' => 'l',
239             'Ń' => 'N',
240             'ń' => 'n',
241             'Ņ' => 'N',
242             'ņ' => 'n',
243             'Ň' => 'N',
244             'ň' => 'n',
245             'ʼn' => 'n',
246             'Ŋ' => 'N',
247             'ŋ' => 'n',
248             'Ō' => 'O',
249             'ō' => 'o',
250             'Ŏ' => 'O',
251             'ŏ' => 'o',
252             'Ő' => 'O',
253             'ő' => 'o',
254             'Œ' => 'O',
255             'œ' => 'o',
256             'Ŕ' => 'R',
257             'ŕ' => 'r',
258             'Ŗ' => 'R',
259             'ŗ' => 'r',
260             'Ř' => 'R',
261             'ř' => 'r',
262             'Ś' => 'S',
263             'ś' => 's',
264             'Ŝ' => 'S',
265             'Ş' => 'S',
266             'ş' => 's',
267             'Š' => 'S',
268             'š' => 's',
269             'Ţ' => 'T',
270             'ţ' => 't',
271             'Ť' => 'T',
272             'ť' => 't',
273             'Ŧ' => 'T',
274             'Ũ' => 'U',
275             'ũ' => 'u',
276             'Ū' => 'U',
277             'ū' => 'u',
278             'Ŭ' => 'U',
279             'ŭ' => 'u',
280             'Ů' => 'U',
281             'ů' => 'u',
282             'Ű' => 'U',
283             'ű' => 'u',
284             'Ų' => 'U',
285             'ų' => 'u',
286             'Ŵ' => 'W',
287             'ŵ' => 'w',
288             'Ŷ' => 'Y',
289             'ŷ' => 'y',
290             'Ÿ' => 'Y',
291             'Ź' => 'Z',
292             'ź' => 'z',
293             'Ż' => 'Z',
294             'ż' => 'z',
295             'Ž' => 'Z',
296             'ž' => 'z',
297             'ſ' => 's',
298             'ƒ' => 'f',
299             'ơ' => 'o',
300             'ư' => 'u',
301             'Ș' => 'S',
302             'ș' => 's',
303             'Ț' => 'T',
304             'ț' => 't',
305             'ʼ' => "'",
306             '̧' => '',
307             'Ά' => 'A',
308             'Έ' => 'E',
309             'Ή' => 'I',
310             'Ί' => 'I',
311             'Ό' => 'O',
312             'Ύ' => 'Y',
313             'Ώ' => 'O',
314             'ΐ' => 'i',
315             'Α' => 'A',
316             'Β' => 'B',
317             'Γ' => 'G',
318             'Δ' => 'D',
319             'Ε' => 'E',
320             'Ζ' => 'Z',
321             'Η' => 'I',
322             'Θ' => 'T',
323             'Ι' => 'I',
324             'Κ' => 'K',
325             'Λ' => 'L',
326             'Μ' => 'M',
327             'Ν' => 'N',
328             'Ξ' => 'K',
329             'Ο' => 'O',
330             'Π' => 'P',
331             'Ρ' => 'R',
332             'Σ' => 'S',
333             'Τ' => 'T',
334             'Υ' => 'Y',
335             'Φ' => 'F',
336             'Χ' => 'X',
337             'Ψ' => 'P',
338             'Ω' => 'O',
339             'Ϊ' => 'I',
340             'Ϋ' => 'Y',
341             'ά' => 'a',
342             'έ' => 'e',
343             'ή' => 'i',
344             'ί' => 'i',
345             'ΰ' => 'y',
346             'α' => 'a',
347             'β' => 'b',
348             'γ' => 'g',
349             'δ' => 'd',
350             'ε' => 'e',
351             'ζ' => 'z',
352             'η' => 'i',
353             'θ' => 't',
354             'ι' => 'i',
355             'κ' => 'k',
356             'λ' => 'l',
357             'μ' => 'm',
358             'ν' => 'n',
359             'ξ' => 'k',
360             'ο' => 'o',
361             'π' => 'p',
362             'ρ' => 'r',
363             'ς' => 's',
364             'σ' => 's',
365             'τ' => 't',
366             'υ' => 'y',
367             'φ' => 'f',
368             'χ' => 'x',
369             'ψ' => 'p',
370             'ω' => 'o',
371             'ϊ' => 'i',
372             'ϋ' => 'y',
373             'ό' => 'o',
374             'ύ' => 'y',
375             'ώ' => 'o',
376             'Ё' => 'E',
377             'А' => 'A',
378             'Б' => 'B',
379             'В' => 'V',
380             'Г' => 'G',
381             'Д' => 'D',
382             'Е' => 'E',
383             'Ж' => 'Z',
384             'З' => 'Z',
385             'И' => 'I',
386             'Й' => 'I',
387             'К' => 'K',
388             'Л' => 'L',
389             'М' => 'M',
390             'Н' => 'N',
391             'О' => 'O',
392             'П' => 'P',
393             'Р' => 'R',
394             'С' => 'S',
395             'Т' => 'T',
396             'У' => 'U',
397             'Ф' => 'F',
398             'Х' => 'K',
399             'Ц' => 'T',
400             'Ч' => 'C',
401             'Ш' => 'S',
402             'Щ' => 'S',
403             'Ы' => 'Y',
404             'Э' => 'E',
405             'Ю' => 'Y',
406             'Я' => 'Y',
407             'а' => 'A',
408             'б' => 'B',
409             'в' => 'V',
410             'г' => 'G',
411             'д' => 'D',
412             'е' => 'E',
413             'ж' => 'Z',
414             'з' => 'Z',
415             'и' => 'I',
416             'й' => 'I',
417             'к' => 'K',
418             'л' => 'L',
419             'м' => 'M',
420             'н' => 'N',
421             'о' => 'O',
422             'п' => 'P',
423             'р' => 'R',
424             'с' => 'S',
425             'т' => 'T',
426             'у' => 'U',
427             'ф' => 'F',
428             'х' => 'K',
429             'ц' => 'T',
430             'ч' => 'C',
431             'ш' => 'S',
432             'щ' => 'S',
433             'ы' => 'Y',
434             'э' => 'E',
435             'ю' => 'Y',
436             'я' => 'Y',
437             'ё' => 'E',
438             'ա' => 'a',
439             'բ' => 'b',
440             'գ' => 'g',
441             'դ' => 'd',
442             'ե' => 'e',
443             'զ' => 'z',
444             'է' => 'e',
445             'ը' => 'y',
446             'թ' => 't',
447             'ժ' => 'zh',
448             'ի' => 'i',
449             'լ' => 'l',
450             'խ' => 'kh',
451             'ծ' => 'ts',
452             'կ' => 'k',
453             'հ' => 'h',
454             'ձ' => 'dz',
455             'ղ' => 'gh',
456             'ճ' => 'ch',
457             'մ' => 'm',
458             'յ' => 'y',
459             'ն' => 'n',
460             'շ' => 'sh',
461             'ո' => 'o',
462             'ու' => 'u',
463             'չ' => 'ch',
464             'պ' => 'p',
465             'ջ' => 'j',
466             'ռ' => 'r',
467             'ս' => 's',
468             'վ' => 'v',
469             'տ' => 't',
470             'ր' => 'r',
471             'ց' => 'ts',
472             'փ' => 'p',
473             'ք' => 'q',
474             'օ' => 'o',
475             'ֆ' => 'f',
476             'և' => 'ev',
477             'ა' => 'a',
478             'ბ' => 'b',
479             'გ' => 'g',
480             'დ' => 'd',
481             'ე' => 'e',
482             'ვ' => 'v',
483             'ზ' => 'z',
484             'თ' => 't',
485             'ი' => 'i',
486             'კ' => 'k',
487             'ლ' => 'l',
488             'მ' => 'm',
489             'ნ' => 'n',
490             'ო' => 'o',
491             'პ' => 'p',
492             'ჟ' => 'z',
493             'რ' => 'r',
494             'ს' => 's',
495             'ტ' => 't',
496             'უ' => 'u',
497             'ფ' => 'p',
498             'ქ' => 'k',
499             'ღ' => 'g',
500             'ყ' => 'q',
501             'შ' => 's',
502             'ჩ' => 'c',
503             'ც' => 't',
504             'ძ' => 'd',
505             'წ' => 't',
506             'ჭ' => 'c',
507             'ხ' => 'k',
508             'ჯ' => 'j',
509             'ჰ' => 'h',
510             'Ḑ' => 'D',
511             'ḑ' => 'd',
512             'Ḩ' => 'H',
513             'ḩ' => 'h',
514             'ạ' => 'a',
515             'ả' => 'a',
516             'ầ' => 'a',
517             'ậ' => 'a',
518             'ắ' => 'a',
519             'ằ' => 'a',
520             'ẵ' => 'a',
521             'ế' => 'e',
522             'ề' => 'e',
523             'ệ' => 'e',
524             'ỉ' => 'i',
525             'ị' => 'i',
526             'ồ' => 'o',
527             'ộ' => 'o',
528             'ừ' => 'u',
529             'ἀ' => 'a',
530             'ἁ' => 'a',
531             'ἂ' => 'a',
532             'ἃ' => 'a',
533             'ἄ' => 'a',
534             'ἅ' => 'a',
535             'ἆ' => 'a',
536             'ἇ' => 'a',
537             'Ἀ' => 'A',
538             'Ἁ' => 'A',
539             'Ἂ' => 'A',
540             'Ἃ' => 'A',
541             'Ἄ' => 'A',
542             'Ἅ' => 'A',
543             'Ἆ' => 'A',
544             'Ἇ' => 'A',
545             'ἐ' => 'e',
546             'ἑ' => 'e',
547             'ἒ' => 'e',
548             'ἓ' => 'e',
549             'ἔ' => 'e',
550             'ἕ' => 'e',
551             'Ἐ' => 'E',
552             'Ἑ' => 'E',
553             'Ἒ' => 'E',
554             'Ἓ' => 'E',
555             'Ἔ' => 'E',
556             'Ἕ' => 'E',
557             'ἠ' => 'i',
558             'ἡ' => 'i',
559             'ἢ' => 'i',
560             'ἣ' => 'i',
561             'ἤ' => 'i',
562             'ἥ' => 'i',
563             'ἦ' => 'i',
564             'ἧ' => 'i',
565             'Ἠ' => 'I',
566             'Ἡ' => 'I',
567             'Ἢ' => 'I',
568             'Ἣ' => 'I',
569             'Ἤ' => 'I',
570             'Ἥ' => 'I',
571             'Ἦ' => 'I',
572             'Ἧ' => 'I',
573             'ἰ' => 'i',
574             'ἱ' => 'i',
575             'ἲ' => 'i',
576             'ἳ' => 'i',
577             'ἴ' => 'i',
578             'ἵ' => 'i',
579             'ἶ' => 'i',
580             'ἷ' => 'i',
581             'Ἰ' => 'I',
582             'Ἱ' => 'I',
583             'Ἲ' => 'I',
584             'Ἳ' => 'I',
585             'Ἴ' => 'I',
586             'Ἵ' => 'I',
587             'Ἶ' => 'I',
588             'Ἷ' => 'I',
589             'ὀ' => 'o',
590             'ὁ' => 'o',
591             'ὂ' => 'o',
592             'ὃ' => 'o',
593             'ὄ' => 'o',
594             'ὅ' => 'o',
595             'Ὀ' => 'O',
596             'Ὁ' => 'O',
597             'Ὂ' => 'O',
598             'Ὃ' => 'O',
599             'Ὄ' => 'O',
600             'Ὅ' => 'O',
601             'ὐ' => 'y',
602             'ὑ' => 'y',
603             'ὒ' => 'y',
604             'ὓ' => 'y',
605             'ὔ' => 'y',
606             'ὕ' => 'y',
607             'ὖ' => 'y',
608             'ὗ' => 'y',
609             'Ὑ' => 'Y',
610             'Ὓ' => 'Y',
611             'Ὕ' => 'Y',
612             'Ὗ' => 'Y',
613             'ὠ' => 'o',
614             'ὡ' => 'o',
615             'ὢ' => 'o',
616             'ὣ' => 'o',
617             'ὤ' => 'o',
618             'ὥ' => 'o',
619             'ὦ' => 'o',
620             'ὧ' => 'o',
621             'Ὠ' => 'O',
622             'Ὡ' => 'O',
623             'Ὢ' => 'O',
624             'Ὣ' => 'O',
625             'Ὤ' => 'O',
626             'Ὥ' => 'O',
627             'Ὦ' => 'O',
628             'Ὧ' => 'O',
629             'ὰ' => 'a',
630             'ὲ' => 'e',
631             'ὴ' => 'i',
632             'ὶ' => 'i',
633             'ὸ' => 'o',
634             'ὺ' => 'y',
635             'ὼ' => 'o',
636             'ᾀ' => 'a',
637             'ᾁ' => 'a',
638             'ᾂ' => 'a',
639             'ᾃ' => 'a',
640             'ᾄ' => 'a',
641             'ᾅ' => 'a',
642             'ᾆ' => 'a',
643             'ᾇ' => 'a',
644             'ᾈ' => 'A',
645             'ᾉ' => 'A',
646             'ᾊ' => 'A',
647             'ᾋ' => 'A',
648             'ᾌ' => 'A',
649             'ᾍ' => 'A',
650             'ᾎ' => 'A',
651             'ᾏ' => 'A',
652             'ᾐ' => 'i',
653             'ᾑ' => 'i',
654             'ᾒ' => 'i',
655             'ᾓ' => 'i',
656             'ᾔ' => 'i',
657             'ᾕ' => 'i',
658             'ᾖ' => 'i',
659             'ᾗ' => 'i',
660             'ᾘ' => 'I',
661             'ᾙ' => 'I',
662             'ᾚ' => 'I',
663             'ᾛ' => 'I',
664             'ᾜ' => 'I',
665             'ᾝ' => 'I',
666             'ᾞ' => 'I',
667             'ᾟ' => 'I',
668             'ᾠ' => 'o',
669             'ᾡ' => 'o',
670             'ᾢ' => 'o',
671             'ᾣ' => 'o',
672             'ᾤ' => 'o',
673             'ᾥ' => 'o',
674             'ᾦ' => 'o',
675             'ᾧ' => 'o',
676             'ᾨ' => 'O',
677             'ᾩ' => 'O',
678             'ᾪ' => 'O',
679             'ᾫ' => 'O',
680             'ᾬ' => 'O',
681             'ᾭ' => 'O',
682             'ᾮ' => 'O',
683             'ᾯ' => 'O',
684             'ᾰ' => 'a',
685             'ᾱ' => 'a',
686             'ᾲ' => 'a',
687             'ᾳ' => 'a',
688             'ᾴ' => 'a',
689             'ᾶ' => 'a',
690             'ᾷ' => 'a',
691             'Ᾰ' => 'A',
692             'Ᾱ' => 'A',
693             'Ὰ' => 'A',
694             'ᾼ' => 'A',
695             'ῂ' => 'i',
696             'ῃ' => 'i',
697             'ῄ' => 'i',
698             'ῆ' => 'i',
699             'ῇ' => 'i',
700             'Ὲ' => 'E',
701             'Ὴ' => 'I',
702             'ῌ' => 'I',
703             'ῐ' => 'i',
704             'ῑ' => 'i',
705             'ῒ' => 'i',
706             'ῖ' => 'i',
707             'ῗ' => 'i',
708             'Ῐ' => 'I',
709             'Ῑ' => 'I',
710             'Ὶ' => 'I',
711             'ῠ' => 'y',
712             'ῡ' => 'y',
713             'ῢ' => 'y',
714             'ῤ' => 'r',
715             'ῥ' => 'r',
716             'ῦ' => 'y',
717             'ῧ' => 'y',
718             'Ῠ' => 'Y',
719             'Ῡ' => 'Y',
720             'Ὺ' => 'Y',
721             'Ῥ' => 'R',
722             'ῲ' => 'o',
723             'ῳ' => 'o',
724             'ῴ' => 'o',
725             'ῶ' => 'o',
726             'ῷ' => 'o',
727             'Ὸ' => 'O',
728             'Ὼ' => 'O',
729             'ῼ' => 'O',
730             '‘' => "'",
731             '’' => "'",
732             };
733              
734 13         29426 $data =~ s/$_/$$table{$_}/gue for keys %$table;
  4         3606  
735              
736 13         376 return $data;
737             }
738              
739             1;
740              
741              
742              
743             =head1 NAME
744              
745             Faker::Plugin - Fake Data Plugin
746              
747             =cut
748              
749             =head1 ABSTRACT
750              
751             Fake Data Plugin Base
752              
753             =cut
754              
755             =head1 VERSION
756              
757             1.17
758              
759             =cut
760              
761             =head1 SYNOPSIS
762              
763             package main;
764              
765             use Faker::Plugin;
766              
767             my $plugin = Faker::Plugin->new;
768              
769             # bless(..., "Faker::Plugin")
770              
771             # my $result = $plugin->execute;
772              
773             # ""
774              
775             =cut
776              
777             =head1 DESCRIPTION
778              
779             This distribution provides a library of fake data generators and a framework
780             for extending the library via plugins.
781              
782             =encoding utf8
783              
784             =cut
785              
786             =head1 ATTRIBUTES
787              
788             This package has the following attributes:
789              
790             =cut
791              
792             =head2 faker
793              
794             faker(Object $data) (Object)
795              
796             The faker attribute holds the L object.
797              
798             I>
799              
800             =over 4
801              
802             =item faker example 1
803              
804             # given: synopsis
805              
806             package main;
807              
808             my $faker = $plugin->faker;
809              
810             # bless(..., "Faker")
811              
812             =back
813              
814             =over 4
815              
816             =item faker example 2
817              
818             # given: synopsis
819              
820             package main;
821              
822             my $faker = $plugin->faker({});
823              
824             # bless(..., "Faker")
825              
826             =back
827              
828             =over 4
829              
830             =item faker example 3
831              
832             # given: synopsis
833              
834             package main;
835              
836             use Faker;
837              
838             my $faker = $plugin->faker(Faker->new);
839              
840             # bless(..., "Faker")
841              
842             =back
843              
844             =cut
845              
846             =head1 INTEGRATES
847              
848             This package integrates behaviors from:
849              
850             L
851              
852             L
853              
854             =cut
855              
856             =head1 METHODS
857              
858             This package provides the following methods:
859              
860             =cut
861              
862             =head2 execute
863              
864             execute(HashRef $data) (Str)
865              
866             The execute method should be overridden by a plugin subclass, and should
867             generate and return a random string.
868              
869             I>
870              
871             =over 4
872              
873             =item execute example 1
874              
875             # given: synopsis
876              
877             package main;
878              
879             my $data = $plugin->execute;
880              
881             # ""
882              
883             =back
884              
885             =cut
886              
887             =head2 new
888              
889             new(HashRef $data) (Plugin)
890              
891             The new method returns a new instance of the class.
892              
893             I>
894              
895             =over 4
896              
897             =item new example 1
898              
899             package main;
900              
901             use Faker::Plugin;
902              
903             my $plugin = Faker::Plugin->new;
904              
905             # bless(... "Faker::Plugin")
906              
907             =back
908              
909             =over 4
910              
911             =item new example 2
912              
913             package main;
914              
915             use Faker::Plugin;
916              
917             my $plugin = Faker::Plugin->new({faker => ['en-us', 'es-es']});
918              
919             # bless(... "Faker::Plugin")
920              
921             =back
922              
923             =over 4
924              
925             =item new example 3
926              
927             package main;
928              
929             use Faker::Plugin;
930              
931             my $plugin = Faker::Plugin->new({faker => Faker->new('ja-jp')});
932              
933             # bless(... "Faker::Plugin")
934              
935             =back
936              
937             =cut
938              
939             =head2 process
940              
941             process(Str $data) (Str)
942              
943             The process method accepts a data template and calls L and
944             L with the arguments provided and returns the result.
945              
946             I>
947              
948             =over 4
949              
950             =item process example 1
951              
952             # given: synopsis
953              
954             package main;
955              
956             $plugin->faker->locales(['en-us']);
957              
958             my $process = $plugin->process('@?{{person_last_name}}####');
959              
960             # "\@ZWilkinson4226"
961              
962             =back
963              
964             =cut
965              
966             =head2 process_format
967              
968             process_format(Str $data) (Str)
969              
970             The process_format method accepts a data template replacing any tokens found
971             with the return value from L.
972              
973             I>
974              
975             =over 4
976              
977             =item process_format example 1
978              
979             # given: synopsis
980              
981             package main;
982              
983             my $process_format = $plugin->process_format('Version {{software_version}}');
984              
985             # "Version 0.78"
986              
987             =back
988              
989             =cut
990              
991             =head2 process_markers
992              
993             process_markers(Str $data, Str @types) (Str)
994              
995             The process_markers method accepts a string with markers, replaces the markers
996             (i.e. special symbols) and returns the result. This method also, optionally,
997             accepts a list of the types of replacements to be performed. The markers are:
998             C<#> (see L), C<%> (see L), C
999             (see L), and C<\n>. The replacement types are:
1000             I<"letters">, I<"numbers">, and I<"newlines">.
1001              
1002             I>
1003              
1004             =over 4
1005              
1006             =item process_markers example 1
1007              
1008             # given: synopsis
1009              
1010             package main;
1011              
1012             my $process_markers = $plugin->process_markers('Version %##');
1013              
1014             # "Version 342"
1015              
1016             =back
1017              
1018             =over 4
1019              
1020             =item process_markers example 2
1021              
1022             # given: synopsis
1023              
1024             package main;
1025              
1026             my $process_markers = $plugin->process_markers('Version %##', 'numbers');
1027              
1028             # "Version 185"
1029              
1030             =back
1031              
1032             =over 4
1033              
1034             =item process_markers example 3
1035              
1036             # given: synopsis
1037              
1038             package main;
1039              
1040             my $process_markers = $plugin->process_markers('Dept. %-??', 'letters', 'numbers');
1041              
1042             # "Dept. 6-EL"
1043              
1044             =back
1045              
1046             =over 4
1047              
1048             =item process_markers example 4
1049              
1050             # given: synopsis
1051              
1052             package main;
1053              
1054             my $process_markers = $plugin->process_markers('root\nsecret', 'newlines');
1055              
1056             # "root\nsecret"
1057              
1058             =back
1059              
1060             =cut
1061              
1062             =head2 resolve
1063              
1064             resolve(Str $name) (Str)
1065              
1066             The resolve method replaces tokens from L with the return
1067             value from their corresponding plugins.
1068              
1069             I>
1070              
1071             =over 4
1072              
1073             =item resolve example 1
1074              
1075             # given: synopsis
1076              
1077             package main;
1078              
1079             my $color_hex_code = $plugin->resolve('color_hex_code');
1080              
1081             # "#adfc4b"
1082              
1083             =back
1084              
1085             =over 4
1086              
1087             =item resolve example 2
1088              
1089             # given: synopsis
1090              
1091             package main;
1092              
1093             my $internet_ip_address = $plugin->resolve('internet_ip_address');
1094              
1095             # "edb6:0311:c3e3:fdc1:597d:115c:c179:3998"
1096              
1097             =back
1098              
1099             =over 4
1100              
1101             =item resolve example 3
1102              
1103             # given: synopsis
1104              
1105             package main;
1106              
1107             my $color_name = $plugin->resolve('color_name');
1108              
1109             # "MintCream"
1110              
1111             =back
1112              
1113             =cut
1114              
1115             =head1 FEATURES
1116              
1117             This package provides the following features:
1118              
1119             =cut
1120              
1121             =over 4
1122              
1123             =item subclass-feature
1124              
1125             This package is meant to be subclassed.
1126              
1127             B
1128              
1129             package Faker::Plugin::UserId;
1130              
1131             use base 'Faker::Plugin';
1132              
1133             sub execute {
1134             my ($self) = @_;
1135              
1136             return $self->process('####-####');
1137             }
1138              
1139             package main;
1140              
1141             use Faker;
1142              
1143             my $faker = Faker->new;
1144              
1145             # bless(..., "Faker")
1146              
1147             my $result = $faker->user_id;
1148              
1149             # "8359-6325"
1150              
1151             =back