Skip to content

Commit

Permalink
Merge pull request #8 from ursm/key
Browse files Browse the repository at this point in the history
The key must be a Symbol or an object that responds to #to_str
  • Loading branch information
ursm authored Jul 7, 2024
2 parents 6119873 + 3462784 commit b1ab6dc
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 22 deletions.
14 changes: 9 additions & 5 deletions lib/fetch/form_data.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
require_relative 'symbol_to_str'

module Fetch
class FormData
include Enumerable

using SymbolToStr

def self.build(enumerable)
data = FormData.new

Expand All @@ -19,23 +23,23 @@ def initialize
attr_reader :entries

def append(key, value)
@entries.push [key.to_s, value]
@entries.push [key.to_str, value]
end

def delete(key)
@entries.reject! {|k,| k == key.to_s }
@entries.reject! {|k,| k == key.to_str }
end

def get(key)
@entries.assoc(key.to_s)&.last
@entries.assoc(key.to_str)&.last
end

def get_all(key)
@entries.select {|k,| k == key.to_s }.map(&:last)
@entries.select {|k,| k == key.to_str }.map(&:last)
end

def has(key)
@entries.any? {|k,| k == key.to_s }
@entries.any? {|k,| k == key.to_str }
end

def keys
Expand Down
14 changes: 9 additions & 5 deletions lib/fetch/headers.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
require_relative 'symbol_to_str'

module Fetch
class Headers
include Enumerable

using SymbolToStr

def initialize(init = [])
@data = {}

Expand All @@ -11,31 +15,31 @@ def initialize(init = [])
end

def append(key, value)
(@data[key.to_s.downcase] ||= []) << value
(@data[key.to_str.downcase] ||= []) << value
end

def delete(key)
@data.delete key.to_s.downcase
@data.delete key.to_str.downcase
end

def entries
@data.map {|k, vs| [k, vs.join(', ')] }
end

def get(key)
@data[key.to_s.downcase]&.join(', ')
@data[key.to_str.downcase]&.join(', ')
end

def has(key)
@data.key?(key.to_s.downcase)
@data.key?(key.to_str.downcase)
end

def keys
@data.keys
end

def set(key, value)
@data[key.to_s.downcase] = [value]
@data[key.to_str.downcase] = [value]
end

def values
Expand Down
9 changes: 9 additions & 0 deletions lib/fetch/symbol_to_str.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module Fetch
module SymbolToStr
refine Symbol do
def to_str
to_s
end
end
end
end
14 changes: 9 additions & 5 deletions lib/fetch/url_search_params.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
require_relative 'symbol_to_str'

require 'uri'

module Fetch
class URLSearchParams
include Enumerable

using SymbolToStr

def initialize(options = [])
@entries = []

Expand All @@ -22,23 +26,23 @@ def initialize(options = [])
attr_reader :entries

def append(key, value)
@entries.push [key.to_s, value]
@entries.push [key.to_str, value]
end

def delete(key)
@entries.reject! {|k,| k == key.to_s }
@entries.reject! {|k,| k == key.to_str }
end

def get(key)
@entries.assoc(key.to_s)&.last
@entries.assoc(key.to_str)&.last
end

def get_all(key)
@entries.select {|k,| k == key.to_s }.map(&:last)
@entries.select {|k,| k == key.to_str }.map(&:last)
end

def has(key)
@entries.any? {|k,| k == key.to_s }
@entries.any? {|k,| k == key.to_str }
end

def keys
Expand Down
10 changes: 4 additions & 6 deletions spec/fetch/form_data_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
['foo', 'bar']
])

data.append 'foo', 'baz'
data.append :foo, 'baz'

expect(data.entries).to eq([
['foo', 'bar'],
Expand Down Expand Up @@ -68,7 +68,7 @@
data.append 'foo', 'bar'

expect(data.has('foo')).to be_truthy
expect(data.has('qux')).to be_falsey
expect(data.has('baz')).to be_falsey
end

example '#keys' do
Expand All @@ -85,12 +85,10 @@
data = Fetch::FormData.new

data.append 'foo', 'bar'
data.append 'foo', 'baz'

data.set 'foo', 'qux'
data.set 'foo', 'baz'

expect(data.entries).to eq([
['foo', 'qux']
['foo', 'baz']
])
end

Expand Down
2 changes: 1 addition & 1 deletion spec/fetch/url_search_params_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
['foo', 'bar']
])

data.append 'foo', 'baz'
data.append :foo, 'baz'

expect(data.entries).to eq([
['foo', 'bar'],
Expand Down

0 comments on commit b1ab6dc

Please sign in to comment.