晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby34/share/gems/gems/rack-3.0.8/lib/rack/ |
| Current File : //opt/alt/ruby34/share/gems/gems/rack-3.0.8/lib/rack/headers.rb |
module Rack
# Rack::Headers is a Hash subclass that downcases all keys. It's designed
# to be used by rack applications that don't implement the Rack 3 SPEC
# (by using non-lowercase response header keys), automatically handling
# the downcasing of keys.
class Headers < Hash
def self.[](*items)
if items.length % 2 != 0
if items.length == 1 && items.first.is_a?(Hash)
new.merge!(items.first)
else
raise ArgumentError, "odd number of arguments for Rack::Headers"
end
else
hash = new
loop do
break if items.length == 0
key = items.shift
value = items.shift
hash[key] = value
end
hash
end
end
def [](key)
super(downcase_key(key))
end
def []=(key, value)
super(key.downcase.freeze, value)
end
alias store []=
def assoc(key)
super(downcase_key(key))
end
def compare_by_identity
raise TypeError, "Rack::Headers cannot compare by identity, use regular Hash"
end
def delete(key)
super(downcase_key(key))
end
def dig(key, *a)
super(downcase_key(key), *a)
end
def fetch(key, *default, &block)
key = downcase_key(key)
super
end
def fetch_values(*a)
super(*a.map!{|key| downcase_key(key)})
end
def has_key?(key)
super(downcase_key(key))
end
alias include? has_key?
alias key? has_key?
alias member? has_key?
def invert
hash = self.class.new
each{|key, value| hash[value] = key}
hash
end
def merge(hash, &block)
dup.merge!(hash, &block)
end
def reject(&block)
hash = dup
hash.reject!(&block)
hash
end
def replace(hash)
clear
update(hash)
end
def select(&block)
hash = dup
hash.select!(&block)
hash
end
def to_proc
lambda{|x| self[x]}
end
def transform_values(&block)
dup.transform_values!(&block)
end
def update(hash, &block)
hash.each do |key, value|
self[key] = if block_given? && include?(key)
block.call(key, self[key], value)
else
value
end
end
self
end
alias merge! update
def values_at(*keys)
keys.map{|key| self[key]}
end
# :nocov:
if RUBY_VERSION >= '2.5'
# :nocov:
def slice(*a)
h = self.class.new
a.each{|k| h[k] = self[k] if has_key?(k)}
h
end
def transform_keys(&block)
dup.transform_keys!(&block)
end
def transform_keys!
hash = self.class.new
each do |k, v|
hash[yield k] = v
end
replace(hash)
end
end
# :nocov:
if RUBY_VERSION >= '3.0'
# :nocov:
def except(*a)
super(*a.map!{|key| downcase_key(key)})
end
end
private
def downcase_key(key)
key.is_a?(String) ? key.downcase : key
end
end
end
|