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.



539
540
541
542
# File 'lib/dommy/url.rb', line 539

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

Instance Method Details

#__js_call__(method, args) ⇒ Object



651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
# File 'lib/dommy/url.rb', line 651

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



644
645
646
647
648
649
# File 'lib/dommy/url.rb', line 644

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

#__replace__(query_string) ⇒ Object



639
640
641
642
# File 'lib/dommy/url.rb', line 639

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

#append(name, value) ⇒ Object



581
582
583
584
585
# File 'lib/dommy/url.rb', line 581

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

#delete(name, value = nil) ⇒ Object



587
588
589
590
591
592
593
594
595
596
597
598
# File 'lib/dommy/url.rb', line 587

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



612
613
614
# File 'lib/dommy/url.rb', line 612

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

#entriesObject



624
625
626
# File 'lib/dommy/url.rb', line 624

def entries
  @pairs.dup
end

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



628
629
630
631
# File 'lib/dommy/url.rb', line 628

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

#get(name) ⇒ Object



544
545
546
547
# File 'lib/dommy/url.rb', line 544

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

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



549
550
551
# File 'lib/dommy/url.rb', line 549

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

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



555
556
557
# File 'lib/dommy/url.rb', line 555

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

#keysObject



616
617
618
# File 'lib/dommy/url.rb', line 616

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

#set(name, value) ⇒ Object



561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
# File 'lib/dommy/url.rb', line 561

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



606
607
608
# File 'lib/dommy/url.rb', line 606

def size
  @pairs.length
end

#sortObject



600
601
602
603
604
# File 'lib/dommy/url.rb', line 600

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

#to_sObject



635
636
637
# File 'lib/dommy/url.rb', line 635

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

#valuesObject



620
621
622
# File 'lib/dommy/url.rb', line 620

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