gitprep / mojo / lib / Mojo / ByteStream.pm /
Newer Older
350 lines | 7.197kb
copy gitweblite soruce code
root authored on 2012-11-23
1
package Mojo::ByteStream;
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
2
use Mojo::Base -strict;
copy gitweblite soruce code
root authored on 2012-11-23
3
use overload '""' => sub { shift->to_string }, fallback => 1;
4

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
5
use Exporter 'import';
copy gitweblite soruce code
root authored on 2012-11-23
6
use Mojo::Collection;
7
use Mojo::Util;
8

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
9
our @EXPORT_OK = ('b');
10

            
copy gitweblite soruce code
root authored on 2012-11-23
11
# Turn most functions from Mojo::Util into methods
12
my @UTILS = (
update Mojolicious 4.07
Yuki Kimoto authored on 2013-06-03
13
  qw(b64_decode b64_encode camelize decamelize hmac_sha1_sum html_unescape),
14
  qw(md5_bytes md5_sum punycode_decode punycode_encode quote sha1_bytes),
15
  qw(sha1_sum slurp spurt squish trim unquote url_escape url_unescape),
16
  qw(xml_escape xor_encode)
copy gitweblite soruce code
root authored on 2012-11-23
17
);
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
18
for my $name (@UTILS) {
19
  my $sub = Mojo::Util->can($name);
20
  Mojo::Util::monkey_patch __PACKAGE__, $name, sub {
21
    my $self = shift;
22
    $$self = $sub->($$self, @_);
23
    return $self;
24
  };
copy gitweblite soruce code
root authored on 2012-11-23
25
}
26

            
27
sub new {
28
  my $class = shift;
29
  return bless \(my $dummy = join '', @_), ref $class || $class;
30
}
31

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
32
sub b { __PACKAGE__->new(@_) }
33

            
34
sub clone { $_[0]->new(${$_[0]}) }
copy gitweblite soruce code
root authored on 2012-11-23
35

            
36
sub decode {
37
  my $self = shift;
38
  $$self = Mojo::Util::decode shift || 'UTF-8', $$self;
39
  return $self;
40
}
41

            
42
sub encode {
43
  my $self = shift;
44
  $$self = Mojo::Util::encode shift || 'UTF-8', $$self;
45
  return $self;
46
}
47

            
48
{
49
  no warnings 'redefine';
50
  sub say {
51
    my ($self, $handle) = @_;
52
    $handle ||= \*STDOUT;
53
    print $handle $$self. "\n";
54
  }
55
}
56

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
57
sub secure_compare { Mojo::Util::secure_compare ${shift()}, @_ }
copy gitweblite soruce code
root authored on 2012-11-23
58

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
59
sub size { length ${$_[0]} }
copy gitweblite soruce code
root authored on 2012-11-23
60

            
61
sub split {
62
  my ($self, $pattern) = @_;
63
  return Mojo::Collection->new(map { $self->new($_) } split $pattern, $$self);
64
}
65

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
66
sub tap { shift->Mojo::Base::tap(@_) }
67

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
68
sub to_string { ${$_[0]} }
copy gitweblite soruce code
root authored on 2012-11-23
69

            
70
1;
71

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
72
=encoding utf8
73

            
copy gitweblite soruce code
root authored on 2012-11-23
74
=head1 NAME
75

            
76
Mojo::ByteStream - ByteStream
77

            
78
=head1 SYNOPSIS
79

            
80
  # Manipulate bytestreams
81
  use Mojo::ByteStream;
82
  my $stream = Mojo::ByteStream->new('foo_bar_baz');
83
  say $stream->camelize;
84

            
85
  # Chain methods
86
  my $stream = Mojo::ByteStream->new('foo bar baz')->quote;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
87
  $stream = $stream->unquote->encode('UTF-8')->b64_encode('');
88
  say "$stream";
copy gitweblite soruce code
root authored on 2012-11-23
89

            
90
  # Use the alternative constructor
91
  use Mojo::ByteStream 'b';
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
92
  my $stream = b('foobarbaz')->b64_encode('')->say;
copy gitweblite soruce code
root authored on 2012-11-23
93

            
94
=head1 DESCRIPTION
95

            
96
L<Mojo::ByteStream> provides a more friendly API for the bytestream
97
manipulation functions in L<Mojo::Util>.
98

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
99
=head1 FUNCTIONS
100

            
101
L<Mojo::ByteStream> implements the following functions.
102

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
103
=head2 b
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
104

            
105
  my $stream = b('test123');
106

            
107
Construct a new scalar-based L<Mojo::ByteStream> object.
108

            
copy gitweblite soruce code
root authored on 2012-11-23
109
=head1 METHODS
110

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
111
L<Mojo::ByteStream> implements the following methods.
copy gitweblite soruce code
root authored on 2012-11-23
112

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
113
=head2 new
copy gitweblite soruce code
root authored on 2012-11-23
114

            
115
  my $stream = Mojo::ByteStream->new('test123');
116

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
117
Construct a new scalar-based L<Mojo::ByteStream> object.
copy gitweblite soruce code
root authored on 2012-11-23
118

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
119
=head2 b64_decode
copy gitweblite soruce code
root authored on 2012-11-23
120

            
121
  $stream = $stream->b64_decode;
122

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
123
Base64 decode bytestream with L<Mojo::Util/"b64_decode">.
copy gitweblite soruce code
root authored on 2012-11-23
124

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
125
=head2 b64_encode
copy gitweblite soruce code
root authored on 2012-11-23
126

            
127
  $stream = $stream->b64_encode;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
128
  $stream = $stream->b64_encode("\n");
129

            
130
Base64 encode bytestream with L<Mojo::Util/"b64_encode">.
copy gitweblite soruce code
root authored on 2012-11-23
131

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
132
  b('foo bar baz')->b64_encode('')->say;
copy gitweblite soruce code
root authored on 2012-11-23
133

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
134
=head2 camelize
copy gitweblite soruce code
root authored on 2012-11-23
135

            
136
  $stream = $stream->camelize;
137

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
138
Camelize bytestream with L<Mojo::Util/"camelize">.
copy gitweblite soruce code
root authored on 2012-11-23
139

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
140
=head2 clone
copy gitweblite soruce code
root authored on 2012-11-23
141

            
142
  my $stream2 = $stream->clone;
143

            
144
Clone bytestream.
145

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
146
=head2 decamelize
copy gitweblite soruce code
root authored on 2012-11-23
147

            
148
  $stream = $stream->decamelize;
149

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
150
Decamelize bytestream with L<Mojo::Util/"decamelize">.
copy gitweblite soruce code
root authored on 2012-11-23
151

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
152
=head2 decode
copy gitweblite soruce code
root authored on 2012-11-23
153

            
154
  $stream = $stream->decode;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
155
  $stream = $stream->decode('iso-8859-1');
copy gitweblite soruce code
root authored on 2012-11-23
156

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
157
Decode bytestream with L<Mojo::Util/"decode">, defaults to C<UTF-8>.
copy gitweblite soruce code
root authored on 2012-11-23
158

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
159
  $stream->decode('UTF-16LE')->unquote->trim->say;
copy gitweblite soruce code
root authored on 2012-11-23
160

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
161
=head2 encode
copy gitweblite soruce code
root authored on 2012-11-23
162

            
163
  $stream = $stream->encode;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
164
  $stream = $stream->encode('iso-8859-1');
copy gitweblite soruce code
root authored on 2012-11-23
165

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
166
Encode bytestream with L<Mojo::Util/"encode">, defaults to C<UTF-8>.
copy gitweblite soruce code
root authored on 2012-11-23
167

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
168
  $stream->trim->quote->encode->say;
copy gitweblite soruce code
root authored on 2012-11-23
169

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
170
=head2 hmac_sha1_sum
copy gitweblite soruce code
root authored on 2012-11-23
171

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
172
  $stream = $stream->hmac_sha1_sum('passw0rd');
copy gitweblite soruce code
root authored on 2012-11-23
173

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
174
Generate HMAC-SHA1 checksum for bytestream with L<Mojo::Util/"hmac_sha1_sum">.
175

            
176
  b('foo bar baz')->hmac_sha1_sum('secr3t')->quote->say;
copy gitweblite soruce code
root authored on 2012-11-23
177

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
178
=head2 html_unescape
copy gitweblite soruce code
root authored on 2012-11-23
179

            
180
  $stream = $stream->html_unescape;
181

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
182
Unescape all HTML entities in bytestream with L<Mojo::Util/"html_unescape">.
183

            
184
  b('&lt;html&gt;')->html_unescape->url_escape->say;
copy gitweblite soruce code
root authored on 2012-11-23
185

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
186
=head2 md5_bytes
copy gitweblite soruce code
root authored on 2012-11-23
187

            
188
  $stream = $stream->md5_bytes;
189

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
190
Generate binary MD5 checksum for bytestream with L<Mojo::Util/"md5_bytes">.
copy gitweblite soruce code
root authored on 2012-11-23
191

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
192
=head2 md5_sum
copy gitweblite soruce code
root authored on 2012-11-23
193

            
194
  $stream = $stream->md5_sum;
195

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
196
Generate MD5 checksum for bytestream with L<Mojo::Util/"md5_sum">.
copy gitweblite soruce code
root authored on 2012-11-23
197

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
198
=head2 punycode_decode
copy gitweblite soruce code
root authored on 2012-11-23
199

            
200
  $stream = $stream->punycode_decode;
201

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
202
Punycode decode bytestream with L<Mojo::Util/"punycode_decode">.
copy gitweblite soruce code
root authored on 2012-11-23
203

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
204
=head2 punycode_encode
copy gitweblite soruce code
root authored on 2012-11-23
205

            
206
  $stream = $stream->punycode_encode;
207

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
208
Punycode encode bytestream with L<Mojo::Util/"punycode_encode">.
copy gitweblite soruce code
root authored on 2012-11-23
209

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
210
=head2 quote
copy gitweblite soruce code
root authored on 2012-11-23
211

            
212
  $stream = $stream->quote;
213

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
214
Quote bytestream with L<Mojo::Util/"quote">.
copy gitweblite soruce code
root authored on 2012-11-23
215

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
216
=head2 say
copy gitweblite soruce code
root authored on 2012-11-23
217

            
218
  $stream->say;
219
  $stream->say(*STDERR);
220

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
221
Print bytestream to handle and append a newline, defaults to C<STDOUT>.
copy gitweblite soruce code
root authored on 2012-11-23
222

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
223
=head2 secure_compare
copy gitweblite soruce code
root authored on 2012-11-23
224

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
225
  my $bool = $stream->secure_compare($str);
copy gitweblite soruce code
root authored on 2012-11-23
226

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
227
Compare bytestream with L<Mojo::Util/"secure_compare">.
228

            
229
  say 'Match!' if b('foo')->secure_compare('foo');
copy gitweblite soruce code
root authored on 2012-11-23
230

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
231
=head2 sha1_bytes
copy gitweblite soruce code
root authored on 2012-11-23
232

            
233
  $stream = $stream->sha1_bytes;
234

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
235
Generate binary SHA1 checksum for bytestream with L<Mojo::Util/"sha1_bytes">.
copy gitweblite soruce code
root authored on 2012-11-23
236

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
237
=head2 sha1_sum
copy gitweblite soruce code
root authored on 2012-11-23
238

            
239
  $stream = $stream->sha1_sum;
240

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
241
Generate SHA1 checksum for bytestream with L<Mojo::Util/"sha1_sum">.
copy gitweblite soruce code
root authored on 2012-11-23
242

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
243
=head2 size
copy gitweblite soruce code
root authored on 2012-11-23
244

            
245
  my $size = $stream->size;
246

            
247
Size of bytestream.
248

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
249
=head2 slurp
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
250

            
251
  $stream = $stream->slurp;
252

            
253
Read all data at once from file into bytestream with L<Mojo::Util/"slurp">.
254

            
255
  b('/home/sri/myapp.pl')->slurp->split("\n")->shuffle->join("\n")->say;
256

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
257
=head2 spurt
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
258

            
259
  $stream = $stream->spurt('/home/sri/myapp.pl');
260

            
261
Write all data from bytestream at once to file with L<Mojo::Util/"spurt">.
262

            
263
  b('/home/sri/foo.txt')->slurp->squish->spurt('/home/sri/bar.txt');
264

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
265
=head2 split
copy gitweblite soruce code
root authored on 2012-11-23
266

            
267
  my $collection = $stream->split(',');
268

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
269
Turn bytestream into L<Mojo::Collection> object containing L<Mojo::ByteStream>
270
objects.
copy gitweblite soruce code
root authored on 2012-11-23
271

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
272
  b('a,b,c')->split(',')->quote->join(',')->say;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
273

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
274
=head2 squish
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
275

            
276
  $stream = $stream->squish;
277

            
278
Trim whitespace characters from both ends of bytestream and then change all
279
consecutive groups of whitespace into one space each with
280
L<Mojo::Util/"squish">.
copy gitweblite soruce code
root authored on 2012-11-23
281

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
282
=head2 tap
283

            
284
  $stream = $stream->tap(sub {...});
285

            
286
Alias for L<Mojo::Base/"tap">.
287

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
288
=head2 to_string
copy gitweblite soruce code
root authored on 2012-11-23
289

            
update Mojolicious 4.07
Yuki Kimoto authored on 2013-06-03
290
  my $str = $stream->to_string;
291
  my $str = "$stream";
copy gitweblite soruce code
root authored on 2012-11-23
292

            
293
Stringify bytestream.
294

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
295
=head2 trim
copy gitweblite soruce code
root authored on 2012-11-23
296

            
297
  $stream = $stream->trim;
298

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
299
Trim whitespace characters from both ends of bytestream with
300
L<Mojo::Util/"trim">.
copy gitweblite soruce code
root authored on 2012-11-23
301

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
302
=head2 unquote
copy gitweblite soruce code
root authored on 2012-11-23
303

            
304
  $stream = $stream->unquote;
305

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
306
Unquote bytestream with L<Mojo::Util/"unquote">.
copy gitweblite soruce code
root authored on 2012-11-23
307

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
308
=head2 url_escape
copy gitweblite soruce code
root authored on 2012-11-23
309

            
310
  $stream = $stream->url_escape;
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
311
  $stream = $stream->url_escape('^A-Za-z0-9\-._~');
copy gitweblite soruce code
root authored on 2012-11-23
312

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
313
Percent encode all unsafe characters in bytestream with
314
L<Mojo::Util/"url_escape">.
315

            
316
  b('foo bar baz')->url_escape->say;
copy gitweblite soruce code
root authored on 2012-11-23
317

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
318
=head2 url_unescape
copy gitweblite soruce code
root authored on 2012-11-23
319

            
320
  $stream = $stream->url_unescape;
321

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
322
Decode percent encoded characters in bytestream with
323
L<Mojo::Util/"url_unescape">.
324

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
325
  b('%3Chtml%3E')->url_unescape->xml_escape->say;
copy gitweblite soruce code
root authored on 2012-11-23
326

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
327
=head2 xml_escape
copy gitweblite soruce code
root authored on 2012-11-23
328

            
329
  $stream = $stream->xml_escape;
330

            
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
331
Escape only the characters C<&>, C<E<lt>>, C<E<gt>>, C<"> and C<'> in
332
bytestream with L<Mojo::Util/"xml_escape">.
333

            
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
334
=head2 xor_encode
upgraded Mojolicious to v3.7...
Yuki Kimoto authored on 2013-01-28
335

            
336
  $stream = $stream->xor_encode($key);
337

            
338
XOR encode bytestream with L<Mojo::Util/"xor_encode">.
copy gitweblite soruce code
root authored on 2012-11-23
339

            
update Mojolicious to 4.57
Yuki Kimoto authored on 2013-12-02
340
=head1 BYTESTREAM
341

            
342
Direct scalar reference access to the bytestream is also possible.
343

            
344
  $$stream .= 'foo';
345

            
copy gitweblite soruce code
root authored on 2012-11-23
346
=head1 SEE ALSO
347

            
348
L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicio.us>.
349

            
350
=cut