Class: Dommy::URLSearchParams

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dommy/url.rb

Overview

‘URLSearchParams` — query-string manipulation. Constructed from a raw string (`“a=1&b=2”`), an array of `[k, v]` pairs, or a Hash. Order is preserved. Values are stringified per spec.

Instance Method Summary collapse

Constructor Details

#initialize(input = "", owner: nil) ⇒ URLSearchParams

Returns a new instance of URLSearchParams.



311
312
313
314
# File 'lib/dommy/url.rb', line 311

def initialize(input = "", owner: nil)
  @owner = owner
  @pairs = parse(input)
end

Instance Method Details

#__js_call__(method, args) ⇒ Object



423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/dommy/url.rb', line 423

def __js_call__(method, args)
  case method
  when "get"
    get(args[0])
  when "getAll"
    get_all(args[0])
  when "has"
    has(args[0])
  when "set"
    set(args[0], args[1])
  when "append"
    append(args[0], args[1])
  when "delete"
    delete(args[0], args[1])
  when "sort"
    sort
  when "toString"
    to_s
  when "forEach"
    for_each(&args[0])
  when "keys"
    keys
  when "values"
    values
  when "entries"
    entries
  end
end

#__js_get__(key) ⇒ Object



416
417
418
419
420
421
# File 'lib/dommy/url.rb', line 416

def __js_get__(key)
  case key
  when "size", "length"
    size
  end
end

#__replace__(query_string) ⇒ Object



411
412
413
414
# File 'lib/dommy/url.rb', line 411

def __replace__(query_string)
  @pairs = parse(query_string)
  nil
end

#append(name, value) ⇒ Object



353
354
355
356
357
# File 'lib/dommy/url.rb', line 353

def append(name, value)
  @pairs << [name.to_s, value.to_s]
  notify
  nil
end

#delete(name, value = nil) ⇒ Object



359
360
361
362
363
364
365
366
367
368
369
370
# File 'lib/dommy/url.rb', line 359

def delete(name, value = nil)
  key = name.to_s
  if value.nil?
    @pairs.reject! { |k, _| k == key }
  else
    v = value.to_s
    @pairs.reject! { |k, vv| k == key && vv == v }
  end

  notify
  nil
end

#each(&block) ⇒ Object



384
385
386
# File 'lib/dommy/url.rb', line 384

def each(&block)
  @pairs.each(&block)
end

#entriesObject



396
397
398
# File 'lib/dommy/url.rb', line 396

def entries
  @pairs.dup
end

#for_each(&block) ⇒ Object Also known as: forEach



400
401
402
403
# File 'lib/dommy/url.rb', line 400

def for_each(&block)
  @pairs.each { |k, v| block.call(v, k, self) }
  nil
end

#get(name) ⇒ Object



316
317
318
319
# File 'lib/dommy/url.rb', line 316

def get(name)
  pair = @pairs.find { |k, _| k == name.to_s }
  pair && pair[1]
end

#get_all(name) ⇒ Object Also known as: getAll



321
322
323
# File 'lib/dommy/url.rb', line 321

def get_all(name)
  @pairs.select { |k, _| k == name.to_s }.map { |_, v| v }
end

#has(name) ⇒ Object Also known as: has?



327
328
329
# File 'lib/dommy/url.rb', line 327

def has(name)
  @pairs.any? { |k, _| k == name.to_s }
end

#keysObject



388
389
390
# File 'lib/dommy/url.rb', line 388

def keys
  @pairs.map { |k, _| k }
end

#set(name, value) ⇒ Object



333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# File 'lib/dommy/url.rb', line 333

def set(name, value)
  key = name.to_s
  first_done = false
  @pairs = @pairs.reject do |k, _|
    next false unless k == key

    if first_done
      true
    else
      first_done = true
      false
    end
  end

  @pairs.map! { |pair| pair[0] == key ? [key, value.to_s] : pair }
  @pairs << [key, value.to_s] unless first_done
  notify
  nil
end

#sizeObject Also known as: length



378
379
380
# File 'lib/dommy/url.rb', line 378

def size
  @pairs.length
end

#sortObject



372
373
374
375
376
# File 'lib/dommy/url.rb', line 372

def sort
  @pairs.sort_by! { |k, _| k }
  notify
  nil
end

#to_sObject



407
408
409
# File 'lib/dommy/url.rb', line 407

def to_s
  @pairs.map { |k, v| "#{encode(k)}=#{encode(v)}" }.join("&")
end

#valuesObject



392
393
394
# File 'lib/dommy/url.rb', line 392

def values
  @pairs.map { |_, v| v }
end