allow custom env keys in an embedded hash

This commit is contained in:
risk danger olson 2013-10-13 11:16:39 -06:00
parent 7dff04854e
commit c9c1c4c23e
2 changed files with 62 additions and 1 deletions

View File

@ -205,6 +205,22 @@ module Faraday
def_delegators :request, :params_encoder
def [](key)
if in_member_set?(key)
super(key)
else
custom_members[key]
end
end
def []=(key, value)
if in_member_set?(key)
super(key, value)
else
custom_members[key] = value
end
end
def success?
SuccessfulStatuses.include?(status)
end
@ -225,5 +241,30 @@ module Faraday
def parallel?
!!parallel_manager
end
def custom_members
@custom_members ||= {}
end
def in_member_set?(key)
member_set.include?(key.to_sym)
end
def member_set
@member_set ||= Set.new(members)
end
def inspect
attrs = [nil]
members.each do |mem|
if value = send(mem)
attrs << "@#{mem}=#{value.inspect}"
end
end
if !custom_members.empty?
attrs << "@custom=#{custom_members.inspect}"
end
%(#<#{self.class}#{attrs.join(" ")}>)
end
end
end

View File

@ -143,5 +143,25 @@ class OptionsTest < Faraday::TestCase
assert_equal 1, options.a
assert_nil options.b
end
end
def test_env_access_member
e = Faraday::Env.new
assert_nil e.method
e.method = :get
assert_equal :get, e.method
end
def test_env_access_symbol_non_member
e = Faraday::Env.new
assert_nil e[:custom]
e[:custom] = :boom
assert_equal :boom, e[:custom]
end
def test_env_access_string_non_member
e = Faraday::Env.new
assert_nil e["custom"]
e["custom"] = :boom
assert_equal :boom, e["custom"]
end
end