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.



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

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

Instance Method Details

#__internal_replace__(query_string) ⇒ Object



656
657
658
659
# File 'lib/dommy/url.rb', line 656

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

#__js_call__(method, args) ⇒ Object



668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
# File 'lib/dommy/url.rb', line 668

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



661
662
663
664
665
666
# File 'lib/dommy/url.rb', line 661

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

#append(name, value) ⇒ Object



598
599
600
601
602
# File 'lib/dommy/url.rb', line 598

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

#delete(name, value = nil) ⇒ Object



604
605
606
607
608
609
610
611
612
613
614
615
# File 'lib/dommy/url.rb', line 604

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



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

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

#entriesObject



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

def entries
  @pairs.dup
end

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



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

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

#get(name) ⇒ Object



561
562
563
564
# File 'lib/dommy/url.rb', line 561

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

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



566
567
568
# File 'lib/dommy/url.rb', line 566

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

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



572
573
574
# File 'lib/dommy/url.rb', line 572

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

#keysObject



633
634
635
# File 'lib/dommy/url.rb', line 633

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

#set(name, value) ⇒ Object



578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
# File 'lib/dommy/url.rb', line 578

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



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

def size
  @pairs.length
end

#sortObject



617
618
619
620
621
# File 'lib/dommy/url.rb', line 617

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

#to_sObject



652
653
654
# File 'lib/dommy/url.rb', line 652

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

#valuesObject



637
638
639
# File 'lib/dommy/url.rb', line 637

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