impuri 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 40ca40d65673baa8fd1e3e0ce1106e66ab63ca2d9aed70cbab13ace1b8c116db
4
+ data.tar.gz: 4604c7ea0f54a85b99a17fb9c93d864c911ccc950d3d4f622cf4a8a0edca9b26
5
+ SHA512:
6
+ metadata.gz: 6be56f6d68e9d44f190798b7f508e4d86fc4b5f67a15305e20a114c692a4070ef6e79259407e13d468d888dedfa5ccebf63d5ed8a6a4943442fb79e4b924a150
7
+ data.tar.gz: 0b173b0184b505df469f7183eb1d73cd79b020af261691601b2346e3bc09696d970ee00a6096577fe5d0d78d0c7f1e971ff953e2ea26818f46a344b1bffd948d
@@ -0,0 +1,517 @@
1
+ # ImpURI.rb
2
+ # ImpURI
3
+
4
+ # 20200207
5
+ # 0.8.0
6
+
7
+ # Description: A cleaner and simpler URI and ssh/scp resource parser for Ruby. Though I'm not sure about the simpler bit anymore. It's now over 500 lines you know!
8
+
9
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
10
+
11
+ require '_meta/blankQ'
12
+ require 'Array/all_but_first'
13
+ require 'Array/all_but_last'
14
+ require 'Array/extract_optionsX'
15
+ require 'Hash/x_www_form_urlencode'
16
+ require 'Module/alias_methods'
17
+
18
+ require 'ImpURI/VERSION'
19
+
20
+ class ImpURI
21
+
22
+ class SchemeMissingError < RuntimeError; end
23
+ class ColonPathSeparatorsNotAllowedError < RuntimeError; end
24
+
25
+ class << self
26
+
27
+ attr_accessor :strict
28
+
29
+ def parse(uri, *args)
30
+ ImpURI.new(uri, *args)
31
+ end
32
+
33
+ def scheme(uri)
34
+ if has_scheme?(uri)
35
+ uri.split('://').first
36
+ else
37
+ nil
38
+ end
39
+ end
40
+ alias_methods :protocol, :scheme_name, :scheme
41
+
42
+ def userinfo(uri)
43
+ if has_userinfo?(uri)
44
+ if all_but_scheme(uri).split('@').size > 1
45
+ all_but_scheme(uri).split('@').all_but_last.join('@')
46
+ else
47
+ all_but_scheme(uri).split('@').first
48
+ end
49
+ elsif has_username?(uri)
50
+ uri.split('@').first
51
+ else
52
+ nil
53
+ end
54
+ end
55
+ alias_methods :credentials, :username_and_password, :user_info, :userinfo
56
+
57
+ def username(uri)
58
+ if has_userinfo?(uri)
59
+ userinfo(uri).split(':')[0]
60
+ elsif has_username?(uri)
61
+ uri.split('@').first
62
+ else
63
+ nil
64
+ end
65
+ end
66
+ alias_methods :user, :username
67
+
68
+ def password(uri)
69
+ if has_userinfo?(uri)
70
+ userinfo(uri).split(':')[1]
71
+ else
72
+ nil
73
+ end
74
+ end
75
+ alias_methods :pass, :passwd, :password
76
+
77
+ def hostname(uri)
78
+ hostname_and_port_number(uri).split(':').first
79
+ end
80
+ alias_methods :host, :hostname
81
+
82
+ def port_number(uri)
83
+ if has_port_number?(uri)
84
+ hostname_and_port_number(uri).split(':').last
85
+ else
86
+ nil
87
+ end
88
+ end
89
+ alias_methods :port, :portnumber, :port_number
90
+
91
+ # For the instance method providing compatibility to Ruby's URI.
92
+ def request_uri(uri)
93
+ if has_colon_path_separator?(uri)
94
+ path = hostname_and_path(uri).split(':').all_but_first.join('/')
95
+ else
96
+ path = hostname_and_path(uri).split('/').all_but_first.join('/')
97
+ path.blank? ? nil : '/' + path
98
+ end
99
+ end
100
+
101
+ def path(uri)
102
+ if non_nil_request_uri = request_uri(uri)
103
+ request_uri = non_nil_request_uri.split('?').first
104
+ request_uri.blank? ? nil : request_uri
105
+ else
106
+ nil
107
+ end
108
+ end
109
+
110
+ def parameter_string(uri)
111
+ parameter_string = has_parameters?(uri) ? request_uri(uri).split('?').last : nil
112
+ parameter_string.blank? ? nil : parameter_string
113
+ end
114
+ alias_methods :query_string, :parameter_string
115
+
116
+ def parameters(uri)
117
+ if non_nil_parameter_string = parameter_string(uri)
118
+ parameter_parts = (
119
+ case parameter_separator(uri)
120
+ when '&'; non_nil_parameter_string.split('&')
121
+ when ';'; non_nil_parameter_string.split(';')
122
+ else [non_nil_parameter_string]
123
+ end
124
+ )
125
+ parameter_parts.inject({}) do |h,pairs|
126
+ a = pairs.split('=')
127
+ h[a[0]] = a[1]
128
+ h
129
+ end
130
+ else
131
+ nil
132
+ end
133
+ end
134
+ alias_methods :query, :parameters
135
+
136
+ def hostname_and_path(uri)
137
+ if has_userinfo?(uri) || has_username?(uri)
138
+ if all_but_scheme(uri).split('@').size > 1
139
+ all_but_scheme(uri).split('@').all_but_first.join('@')
140
+ else
141
+ all_but_scheme(uri).split('@').first
142
+ end
143
+ else
144
+ all_but_scheme(uri)
145
+ end
146
+ end
147
+ alias_methods :host_and_path, :hostname_and_path
148
+
149
+ def hostname_and_port_number(uri)
150
+ if has_colon_path_separator?(uri)
151
+ hostname_and_path(uri).split(':').all_but_last.join(':')
152
+ else
153
+ hostname_and_path(uri).split('/').first
154
+ end
155
+ end
156
+ alias_methods :host_and_port, :host_and_portnumber, :host_and_port_number, :hostname_and_port, :hostname_and_portnumber, :hostname_and_port_number
157
+
158
+ def has_userinfo?(uri)
159
+ if has_scheme?(uri)
160
+ partial_decomposition = uri.split('//').all_but_first.join.split('/')
161
+ if partial_decomposition.size > 1
162
+ next_decomposition = partial_decomposition.all_but_last
163
+ else
164
+ next_decomposition = [partial_decomposition.first]
165
+ end
166
+ next_decomposition.join('/').match(/@/) ? true : false
167
+ else
168
+ uri.match(/.+:.+@/) ? true : false
169
+ end
170
+ end
171
+ alias_methods :credentials?, :username_and_password?, :user_info?, :userinfo?, :has_credentials?, :has_username_and_password?, :has_user_info?, :has_userinfo?
172
+
173
+ def has_username?(uri)
174
+ if has_scheme?(uri)
175
+ all_but_scheme(uri).scan('@').first ? true : false
176
+ else
177
+ uri.scan('@').first ? true : false
178
+ end
179
+ end
180
+
181
+ def has_scheme?(uri)
182
+ uri.match(/^[a-z]*?:\/\//) ? true : false
183
+ end
184
+ alias_methods :protocol?, :scheme_name?, :scheme?, :has_protocol?, :has_scheme_name?, :has_scheme?
185
+
186
+ def has_colon_path_separator?(uri)
187
+ hostname_and_path(uri).match(/:/) && !has_port_number?(uri) ? true : false
188
+ end
189
+ alias_methods :colon_path_separator?, :uses_colon_path_separator?, :has_colon_path_separator?
190
+
191
+ def has_port_number?(uri)
192
+ hostname_and_path(uri).match(/:\d+/) ? true : false
193
+ end
194
+ alias_methods :port?, :portnumber?, :port_number?, :has_port?, :has_portnumber?, :has_port_number?
195
+
196
+ def has_parameters?(uri)
197
+ uri.match(/\?/) ? true : false
198
+ end
199
+ alias_methods :has_get_parameters?, :has_parameters?
200
+
201
+ def has_semicolon_parameter_separator?(uri)
202
+ uri.match(/;/) ? true : false
203
+ end
204
+ alias_methods :has_semicolon_query_separator?, :has_semicolon_parameter_separator?
205
+
206
+ def has_ampersand_parameter_separator?(uri)
207
+ uri.match(/&/) ? true : false
208
+ end
209
+ alias_methods :has_ampersand_query_separator?, :has_ampersand_parameter_separator?
210
+
211
+ def parameter_separator(uri)
212
+ if has_ampersand_parameter_separator?(uri)
213
+ '&'
214
+ elsif has_semicolon_parameter_separator?(uri)
215
+ ';'
216
+ else
217
+ nil
218
+ end
219
+ end
220
+ alias_methods :query_separator, :parameter_separator
221
+
222
+ def all_but_scheme(uri)
223
+ uri.split('://').last
224
+ end
225
+
226
+ def all_but_userinfo(uri)
227
+ if has_userinfo?(uri)
228
+ "#{scheme_with_separator(uri)}#{hostname_and_path(uri)}"
229
+ else
230
+ hostname_and_path(uri)
231
+ end
232
+ end
233
+
234
+ def scheme_with_separator(uri)
235
+ if scheme(uri).blank?
236
+ ''
237
+ else
238
+ "#{scheme(uri)}://"
239
+ end
240
+ end
241
+ alias_methods :protocol_with_separator, :scheme_with_separator
242
+
243
+ def userinfo_with_separator(uri)
244
+ if username(uri).blank?
245
+ ''
246
+ elsif password(uri).blank?
247
+ "#{username(uri)}@"
248
+ else
249
+ "#{username(uri)}:#{password(uri)}@"
250
+ end
251
+ end
252
+ alias_methods :credentials_with_separator, :username_and_password_with_separator, :user_info_with_separator, :userinfo_with_separator
253
+
254
+ def hostname_optionally_with_port_number(uri)
255
+ if port_number(uri).blank?
256
+ "#{hostname(uri)}"
257
+ else
258
+ "#{hostname(uri)}:#{port_number(uri)}"
259
+ end
260
+ end
261
+ alias_methods :hostname_optionally_with_portnumber, :hostname_optionally_with_port_number
262
+
263
+ def is_ssh?(uri)
264
+ !has_scheme?(uri) && has_colon_path_separator?(uri) ? true : false
265
+ end
266
+
267
+ end # class << self
268
+
269
+ def initialize(uri, *args)
270
+ options = args.extract_options!
271
+ if options[:strict]
272
+ raise SchemeMissingError if !ImpURI.has_scheme?(uri)
273
+ raise ColonPathSeparatorsNotAllowedError if ImpURI.has_colon_path_separator?(uri)
274
+ end
275
+ @uri = uri
276
+ end
277
+
278
+ # attributes
279
+
280
+ def scheme
281
+ @scheme ||= ImpURI.scheme(@uri)
282
+ end
283
+ alias_methods :protocol, :scheme_name, :scheme
284
+
285
+ def scheme=(new_scheme)
286
+ @scheme = new_scheme
287
+ @uri = to_s
288
+ end
289
+ alias_methods :protocol=, :scheme_name=, :scheme=
290
+
291
+ def username
292
+ @username ||= ImpURI.username(@uri)
293
+ end
294
+ alias_methods :user, :username
295
+
296
+ def username=(new_username)
297
+ @username = new_username
298
+ @uri = to_s
299
+ end
300
+ alias_methods :user=, :username=
301
+
302
+ def password
303
+ @password ||= ImpURI.password(@uri)
304
+ end
305
+ alias_methods :pass, :passwd, :password
306
+
307
+ def password=(new_password)
308
+ @password = new_password
309
+ @uri = to_s
310
+ end
311
+ alias_methods :pass=, :passwd=, :password=
312
+
313
+ def hostname
314
+ @hostname ||= ImpURI.hostname(@uri)
315
+ end
316
+ alias_methods :host, :hostname
317
+
318
+ def hostname=(new_hostname)
319
+ @hostname = new_hostname
320
+ @uri = to_s
321
+ end
322
+ alias_methods :host=, :hostname=
323
+
324
+ def port_number
325
+ @port_number ||= ImpURI.port_number(@uri)
326
+ end
327
+ alias_methods :port, :portnumber, :port_number
328
+
329
+ def port_number=(new_port_number)
330
+ @port_number = new_port_number
331
+ @uri = to_s
332
+ end
333
+ alias_methods :port=, :portnumber=, :port_number=
334
+
335
+ def path
336
+ @path ||= ImpURI.path(@uri)
337
+ end
338
+
339
+ def path=(new_path)
340
+ @path = new_path
341
+ @uri = to_s
342
+ end
343
+
344
+ def parameter_string
345
+ @parameter_string ||= ImpURI.parameter_string(@uri)
346
+ end
347
+
348
+ def parameter_string=(new_parameter_string)
349
+ @parameter_string = new_parameter_string
350
+ @uri = to_s
351
+ @parameters = ImpURI.parameters(@uri)
352
+ end
353
+
354
+ def parameters
355
+ @parameters ||= ImpURI.parameters(@uri)
356
+ end
357
+
358
+ def parameters=(new_parameters)
359
+ @parameters = new_parameters
360
+ @parameter_string = @parameters.x_www_form_urlencode
361
+ @uri = to_s
362
+ end
363
+
364
+ # For compatability with Ruby's URI. Not quite a drop-in replacement for most aspects as yet however.
365
+ # Perhaps it should be in a compatability module and included.
366
+ def request_uri
367
+ @request_uri ||= ImpURI.request_uri(@uri)
368
+ end
369
+
370
+ # derived attributes
371
+
372
+ def scheme_with_separator
373
+ if scheme.blank?
374
+ ''
375
+ else
376
+ "#{scheme}://"
377
+ end
378
+ end
379
+ alias_methods :protocol_with_separator, :scheme_with_separator
380
+
381
+ def userinfo
382
+ if password
383
+ "#{username}:#{password}"
384
+ else
385
+ "#{username}"
386
+ end
387
+ end
388
+ alias_methods :credentials, :username_and_password, :user_info, :userinfo
389
+
390
+ def userinfo_with_separator
391
+ if username.blank?
392
+ ''
393
+ elsif password.blank?
394
+ "#{username}@"
395
+ else
396
+ "#{username}:#{password}@"
397
+ end
398
+ end
399
+ alias_methods :credentials_with_separator, :username_and_password_with_separator, :user_info_with_separator, :userinfo_with_separator
400
+
401
+ def hostname_optionally_with_port_number
402
+ if has_port_number?
403
+ "#{hostname}:#{port_number}"
404
+ else
405
+ "#{hostname}"
406
+ end
407
+ end
408
+ alias_methods :hostname_optionally_with_portnumber, :hostname_optionally_with_port_number
409
+
410
+ def hostname_and_path
411
+ if has_colon_path_separator?
412
+ "#{hostname}:#{path}"
413
+ else
414
+ "#{hostname}#{path}"
415
+ end
416
+ end
417
+
418
+ def hostname_and_port_number
419
+ if has_colon_path_separator?
420
+ hostname_and_path.split(':').all_but_last.join(':')
421
+ else
422
+ hostname_and_path.split('/').first
423
+ end
424
+ end
425
+
426
+ def all_but_scheme
427
+ if has_colon_path_separator?
428
+ "#{userinfo_with_separator}#{hostname_optionally_with_port_number}:#{path}"
429
+ else
430
+ "#{userinfo_with_separator}#{hostname_optionally_with_port_number}#{path}"
431
+ end
432
+ end
433
+
434
+ def to_s
435
+ if has_parameter_string?
436
+ "#{scheme_with_separator}#{all_but_scheme}?#{parameter_string}"
437
+ else
438
+ "#{scheme_with_separator}#{all_but_scheme}"
439
+ end
440
+ end
441
+
442
+ def to_h
443
+ {scheme: scheme, username: username, password: password, hostname: hostname, port_number: port_number, path: path, parameter_string: parameter_string}
444
+ end
445
+
446
+ # attribute boolean methods
447
+
448
+ def has_scheme?
449
+ scheme.nil? ? false : true
450
+ end
451
+ alias_methods :protocol?, :scheme_name?, :scheme?, :has_protocol?, :has_scheme_name?, :has_scheme?
452
+
453
+ def has_username?
454
+ username.nil? ? false : true
455
+ end
456
+ alias_methods :user?, :username?, :has_user?, :has_username?
457
+
458
+ def has_password?
459
+ password.nil? ? false : true
460
+ end
461
+ alias_methods :pass?, :passwd?, :password?, :has_pass?, :has_passwd?, :has_password?
462
+
463
+ def has_hostname?
464
+ hostname.nil? ? false : true
465
+ end
466
+ alias_methods :host?, :hostname?, :has_host?, :has_hostname?
467
+
468
+ def has_port_number?
469
+ port_number.nil? ? false : true
470
+ end
471
+ alias_methods :port?, :portnumber?, :port_number?, :has_port?, :has_portnumber?, :has_port_number?
472
+
473
+ def has_path?
474
+ path.nil? ? false : true
475
+ end
476
+ alias_methods :path?, :has_path?
477
+
478
+ def has_parameter_string?
479
+ parameter_string.nil? ? false : true
480
+ end
481
+ alias_methods :parameter_string?, :has_get_parameter_string?, :has_parameter_string?
482
+
483
+ def has_parameters?
484
+ parameters.nil? ? false : true
485
+ end
486
+ alias_methods :parameters?, :has_get_parameters?, :has_parameters?
487
+
488
+ # derived attribute boolean methods
489
+
490
+ def has_userinfo?
491
+ ImpURI.has_userinfo?(@uri)
492
+ end
493
+ alias_methods :credentials?, :username_and_password?, :user_info?, :userinfo?, :has_credentials?, :has_username_and_password?, :has_user_info?, :has_userinfo?
494
+
495
+ def has_colon_path_separator?
496
+ ImpURI.has_colon_path_separator?(@uri)
497
+ end
498
+ alias_methods :colon_path_separator?, :uses_colon_path_separator?, :has_colon_path_separator?
499
+
500
+ def has_semicolon_parameter_separator?
501
+ ImpURI.has_semicolon_parameter_separator?(@uri)
502
+ end
503
+ alias_methods :semicolon_query_separator?, :semicolon_parameter_separator?, :has_semicolon_parameter_separator?
504
+ alias_methods :uses_semicolon_query_separator?, :uses_semicolon_parameter_separator?, :has_semicolon_parameter_separator?
505
+ alias_methods :has_semicolon_query_separator?, :has_semicolon_parameter_separator?
506
+
507
+ def has_ampersand_parameter_separator?
508
+ ImpURI.has_ampersand_parameter_separator?(@uri)
509
+ end
510
+ alias_methods :has_ampersand_query_separator?, :has_ampersand_parameter_separator?
511
+
512
+ def is_ssh?
513
+ ImpURI.is_ssh?(to_s)
514
+ end
515
+ alias_methods :ssh?, :is_ssh?
516
+
517
+ end
@@ -0,0 +1,11 @@
1
+ require 'Array/firstX'
2
+
3
+ class Array
4
+
5
+ def all_but_first
6
+ d = self.dup
7
+ d.first!
8
+ d
9
+ end
10
+
11
+ end
@@ -0,0 +1,24 @@
1
+ # Array#all_but_last
2
+
3
+ # 20080831
4
+ # 0.1.0
5
+
6
+ # Description: This returns a copy of the receiving array with the last element removed.
7
+
8
+ # Changes since 0.0:
9
+ # 1. I've added require 'Array/lastX', since I think it is reasonable that each file should load its own dependencies.
10
+
11
+ # Todo:
12
+ # 1. Conditionally do the require depending on whether the method already exists on Array and/or on whether rubylib has been defined elsewhere, since the require will fail in either case; and if rubylib is available, but this method isn't.
13
+
14
+ require 'Array/lastX'
15
+
16
+ class Array
17
+
18
+ def all_but_last
19
+ d = self.dup
20
+ d.last!
21
+ d
22
+ end
23
+
24
+ end
@@ -0,0 +1,13 @@
1
+ # Array#blank?
2
+ # Array#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class Array
10
+
11
+ alias_method :blank?, :empty?
12
+
13
+ end
@@ -0,0 +1,14 @@
1
+ # Array#extract_options!
2
+
3
+ # 20090123
4
+ # 0.0.0
5
+
6
+ # History: Stolen wholesale from ActiveSupport.
7
+
8
+ class Array
9
+
10
+ def extract_options!
11
+ last.is_a?(::Hash) ? pop : {}
12
+ end
13
+
14
+ end
@@ -0,0 +1,10 @@
1
+ # Array#first!
2
+ # 20060630
3
+ #
4
+ # Description: Sometimes it makes more sense to treat arrays this way.
5
+ #
6
+ # Discussion: This and last! were taken from Skink2Quick from a few months ago.
7
+
8
+ class Array
9
+ alias_method :first!, :shift
10
+ end
@@ -0,0 +1,10 @@
1
+ # Array#last!
2
+ # 20060630
3
+ #
4
+ # Description: Sometimes it makes more sense to treat arrays this way.
5
+ #
6
+ # Discussion: This and first! were taken from Skink2Quick from a few months ago.
7
+
8
+ class Array
9
+ alias_method :last!, :pop
10
+ end
@@ -0,0 +1,15 @@
1
+ # FalseClass#blank?
2
+ # FalseClass#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class FalseClass
10
+
11
+ def blank?
12
+ true
13
+ end
14
+
15
+ end
@@ -0,0 +1,13 @@
1
+ # Hash#blank?
2
+ # Hash#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class Hash
10
+
11
+ alias_method :blank?, :empty?
12
+
13
+ end
@@ -0,0 +1,20 @@
1
+ # Hash/x_www_form_urlencode.rb
2
+ # Hash#x_www_form_urlencode
3
+
4
+ # 20130310
5
+ # 0.0.0
6
+
7
+ # Notes: Extracted from MtGox library.
8
+
9
+ # Todo:
10
+ # 1. I should separate out the functionality for adding '+' characters so as it can do both styles of encoding. That way I could reuse the existing Hash/to_parameter_string method as well...
11
+
12
+ require 'String/url_encode'
13
+
14
+ class Hash
15
+
16
+ def x_www_form_urlencode(joiner = '&')
17
+ inject([]){|a,e| a << "#{e.first.to_s.url_encode.gsub(/ /, '+')}=#{e.last.to_s.url_encode.gsub(/ /, '+')}" unless e.last.nil?; a}.join(joiner)
18
+ end
19
+
20
+ end
@@ -0,0 +1,16 @@
1
+ # Module#alias_methods
2
+
3
+ # 20080831
4
+ # 0.0.0
5
+
6
+ # Description: I have a penchance for having multiple method names and having line after line of alias_method calls is kinda ugly.
7
+
8
+ require 'Array/all_but_last'
9
+
10
+ class Module
11
+
12
+ def alias_methods(*args)
13
+ args.all_but_last.each{|e| alias_method e.to_sym, args.last.to_sym}
14
+ end
15
+
16
+ end
@@ -0,0 +1,15 @@
1
+ # NilClass#blank?
2
+ # NilClass#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class NilClass
10
+
11
+ def blank?
12
+ true
13
+ end
14
+
15
+ end
@@ -0,0 +1,15 @@
1
+ # Numeric#blank?
2
+ # Numeric#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class Numeric
10
+
11
+ def blank?
12
+ false
13
+ end
14
+
15
+ end
@@ -0,0 +1,18 @@
1
+ # Object#blankQ
2
+ # Object#blank?
3
+
4
+ # 2010.04.04
5
+ # 0.0.1
6
+
7
+ # History: Stolen wholesale from a recent version of ActiveSupport.
8
+
9
+ # Changes:
10
+ # 1. Now using a more recent version from ActiveSupport. This more recent version from ActiveSupport is likely more efficient and slightly more succinct.
11
+
12
+ class Object
13
+
14
+ def blank?
15
+ respond_to?(:empty?) ? empty? : !self
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ # String#blank?
2
+ # String#blankQ
3
+
4
+ # 2010.04.04
5
+ # 0.0.1
6
+
7
+ # History: Stolen wholesale from a recent version of ActiveSupport.
8
+
9
+ # Changes:
10
+ # 1. Now using a more recent version from ActiveSupport. This more recent version from ActiveSupport is likely more efficient and slightly more succinct.
11
+
12
+ class String
13
+
14
+ def blank?
15
+ self !~ /\S/
16
+ end
17
+
18
+ end
@@ -0,0 +1,15 @@
1
+ # TrueClass#blank?
2
+ # TrueClass#blankQ
3
+
4
+ # 20100308
5
+ # 0.0.0
6
+
7
+ # History: Stolen wholesale from ActiveSupport.
8
+
9
+ class TrueClass
10
+
11
+ def blank?
12
+ false
13
+ end
14
+
15
+ end
@@ -0,0 +1,6 @@
1
+ # ImpURI/VERSION.rb
2
+ # ImpURI::VERSION
3
+
4
+ class ImpURI
5
+ VERSION = '0.8.0'
6
+ end
@@ -0,0 +1,13 @@
1
+ # _meta/blankQ
2
+
3
+ # 2010.04.04
4
+ # 0.0.0
5
+
6
+ require 'Array/blankQ'
7
+ require 'FalseClass/blankQ'
8
+ require 'Hash/blankQ'
9
+ require 'NilClass/blankQ'
10
+ require 'Numeric/blankQ'
11
+ require 'Object/blankQ'
12
+ require 'String/blankQ'
13
+ require 'TrueClass/blankQ'
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: impuri
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
+ platform: ruby
6
+ authors:
7
+ - thoran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A cleaner and simpler URI and ssh/scp resource parser for Ruby. Though
14
+ I'm not sure about the simpler bit anymore. It's now over 500 lines you know!
15
+ email: code@thoran.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/ImpURI.rb
21
+ - lib/ImpURI/Array/all_but_first.rb
22
+ - lib/ImpURI/Array/all_but_last.rb
23
+ - lib/ImpURI/Array/blankQ.rb
24
+ - lib/ImpURI/Array/extract_optionsX.rb
25
+ - lib/ImpURI/Array/firstX.rb
26
+ - lib/ImpURI/Array/lastX.rb
27
+ - lib/ImpURI/FalseClass/blankQ.rb
28
+ - lib/ImpURI/Hash/blankQ.rb
29
+ - lib/ImpURI/Hash/x_www_form_urlencode.rb
30
+ - lib/ImpURI/Module/alias_methods.rb
31
+ - lib/ImpURI/NilClass/blankQ.rb
32
+ - lib/ImpURI/Numeric/blankQ.rb
33
+ - lib/ImpURI/Object/blankQ.rb
34
+ - lib/ImpURI/String/blankQ.rb
35
+ - lib/ImpURI/TrueClass/blankQ.rb
36
+ - lib/ImpURI/VERSION.rb
37
+ - lib/ImpURI/_meta/blankQ.rb
38
+ homepage: http://github.com/thoran/ImpURI
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.8.6
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubygems_version: 3.1.2
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: A cleaner and simpler URI and ssh/scp resource parser for Ruby.
61
+ test_files: []