Class: Seam::UrlSearchParams
- Inherits:
-
Object
- Object
- Seam::UrlSearchParams
- Includes:
- Enumerable
- Defined in:
- lib/seam/url_search_params.rb
Overview
A mutable, ordered list of name/value string pairs modeling the parts of the WHATWG URLSearchParams interface that the Seam URL search params serializer needs.
Class Method Summary collapse
Instance Method Summary collapse
- #append(name, value) ⇒ Object
- #delete(name) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #get(name) ⇒ Object
- #get_all(name) ⇒ Object
- #has?(name) ⇒ Boolean
-
#initialize(init = nil) ⇒ UrlSearchParams
constructor
A new instance of UrlSearchParams.
- #set(name, value) ⇒ Object
- #size ⇒ Object (also: #length)
- #sort! ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(init = nil) ⇒ UrlSearchParams
Returns a new instance of UrlSearchParams.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/seam/url_search_params.rb', line 13 def initialize(init = nil) @pairs = [] return if init.nil? case init when String query = init.delete_prefix("?") URI.decode_www_form(query).each { |name, value| append(name, value) } unless query.empty? when Hash init.each { |name, value| append(name, value) } else init.each { |name, value| append(name, value) } end end |
Class Method Details
.encode_component(string) ⇒ Object
98 99 100 |
# File 'lib/seam/url_search_params.rb', line 98 def self.encode_component(string) URI.encode_www_form_component(string.encode(Encoding::UTF_8)) end |
Instance Method Details
#append(name, value) ⇒ Object
28 29 30 31 |
# File 'lib/seam/url_search_params.rb', line 28 def append(name, value) @pairs << [name.to_s, value.to_s] nil end |
#delete(name) ⇒ Object
63 64 65 66 67 |
# File 'lib/seam/url_search_params.rb', line 63 def delete(name) name = name.to_s @pairs.reject! { |pair_name, _| pair_name == name } nil end |
#each(&block) ⇒ Object
76 77 78 79 80 81 |
# File 'lib/seam/url_search_params.rb', line 76 def each(&block) return @pairs.each unless block @pairs.each(&block) self end |
#empty? ⇒ Boolean
88 89 90 |
# File 'lib/seam/url_search_params.rb', line 88 def empty? @pairs.empty? end |
#get(name) ⇒ Object
47 48 49 50 51 |
# File 'lib/seam/url_search_params.rb', line 47 def get(name) name = name.to_s @pairs.each { |pair_name, value| return value if pair_name == name } nil end |
#get_all(name) ⇒ Object
53 54 55 56 |
# File 'lib/seam/url_search_params.rb', line 53 def get_all(name) name = name.to_s @pairs.filter_map { |pair_name, value| value if pair_name == name } end |
#has?(name) ⇒ Boolean
58 59 60 61 |
# File 'lib/seam/url_search_params.rb', line 58 def has?(name) name = name.to_s @pairs.any? { |pair_name, _| pair_name == name } end |
#set(name, value) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/seam/url_search_params.rb', line 33 def set(name, value) name = name.to_s replaced = false @pairs = @pairs.filter_map do |pair| next pair unless pair.first == name next nil if replaced replaced = true [name, value.to_s] end append(name, value) unless replaced nil end |
#size ⇒ Object Also known as: length
83 84 85 |
# File 'lib/seam/url_search_params.rb', line 83 def size @pairs.size end |
#sort! ⇒ Object
69 70 71 72 73 74 |
# File 'lib/seam/url_search_params.rb', line 69 def sort! @pairs = @pairs.each_with_index.sort_by do |(name, _), index| [name.encode(Encoding::UTF_16BE).b, index] end.map(&:first) nil end |
#to_s ⇒ Object
92 93 94 95 96 |
# File 'lib/seam/url_search_params.rb', line 92 def to_s @pairs.map do |name, value| "#{self.class.encode_component(name)}=#{self.class.encode_component(value)}" end.join("&") end |