晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby23/lib64/ruby/2.3.0/rubygems/ |
| Current File : //opt/alt/ruby23/lib64/ruby/2.3.0/rubygems/stub_specification.rb |
# frozen_string_literal: true
##
# Gem::StubSpecification reads the stub: line from the gemspec. This prevents
# us having to eval the entire gemspec in order to find out certain
# information.
class Gem::StubSpecification < Gem::BasicSpecification
# :nodoc:
PREFIX = "# stub: "
OPEN_MODE = # :nodoc:
if Object.const_defined? :Encoding then
'r:UTF-8:-'
else
'r'
end
class StubLine # :nodoc: all
attr_reader :name, :version, :platform, :require_paths, :extensions,
:full_name
NO_EXTENSIONS = [].freeze
# These are common require paths.
REQUIRE_PATHS = { # :nodoc:
'lib' => 'lib'.freeze,
'test' => 'test'.freeze,
'ext' => 'ext'.freeze,
}
# These are common require path lists. This hash is used to optimize
# and consolidate require_path objects. Most specs just specify "lib"
# in their require paths, so lets take advantage of that by pre-allocating
# a require path list for that case.
REQUIRE_PATH_LIST = { # :nodoc:
'lib' => ['lib'].freeze
}
def initialize data, extensions
parts = data[PREFIX.length..-1].split(" ".freeze, 4)
@name = parts[0].freeze
@version = Gem::Version.new parts[1]
@platform = Gem::Platform.new parts[2]
@extensions = extensions
@full_name = if platform == Gem::Platform::RUBY
"#{name}-#{version}"
else
"#{name}-#{version}-#{platform}"
end
path_list = parts.last
@require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! { |x|
REQUIRE_PATHS[x] || x
}
end
end
def self.default_gemspec_stub filename, base_dir, gems_dir
new filename, base_dir, gems_dir, true
end
def self.gemspec_stub filename, base_dir, gems_dir
new filename, base_dir, gems_dir, false
end
attr_reader :base_dir, :gems_dir
def initialize filename, base_dir, gems_dir, default_gem
super()
filename.untaint
self.loaded_from = filename
@data = nil
@name = nil
@spec = nil
@base_dir = base_dir
@gems_dir = gems_dir
@default_gem = default_gem
end
##
# True when this gem has been activated
def activated?
@activated ||=
begin
loaded = Gem.loaded_specs[name]
loaded && loaded.version == version
end
end
def this; self; end
def default_gem?
@default_gem
end
def build_extensions # :nodoc:
return if default_gem?
return if extensions.empty?
to_spec.build_extensions
end
##
# If the gemspec contains a stubline, returns a StubLine instance. Otherwise
# returns the full Gem::Specification.
def data
unless @data
begin
saved_lineno = $.
open loaded_from, OPEN_MODE do |file|
begin
file.readline # discard encoding line
stubline = file.readline.chomp
if stubline.start_with?(PREFIX) then
extensions = if /\A#{PREFIX}/ =~ file.readline.chomp
$'.split "\0"
else
StubLine::NO_EXTENSIONS
end
@data = StubLine.new stubline, extensions
end
rescue EOFError
end
end
ensure
$. = saved_lineno
end
end
@data ||= to_spec
end
private :data
def raw_require_paths # :nodoc:
data.require_paths
end
def missing_extensions?
return false if default_gem?
return false if extensions.empty?
return false if File.exist? gem_build_complete_path
to_spec.missing_extensions?
end
##
# Name of the gem
def name
data.name
end
##
# Platform of the gem
def platform
data.platform
end
##
# Extensions for this gem
def extensions
data.extensions
end
##
# Version of the gem
def version
data.version
end
def full_name
data.full_name
end
##
# The full Gem::Specification for this gem, loaded from evalling its gemspec
def to_spec
@spec ||= if @data then
Gem.loaded_specs.values.find { |spec|
spec.name == name and spec.version == version
}
end
@spec ||= Gem::Specification.load(loaded_from)
@spec.ignored = @ignored if @spec
@spec
end
##
# Is this StubSpecification valid? i.e. have we found a stub line, OR does
# the filename contain a valid gemspec?
def valid?
data
end
##
# Is there a stub line present for this StubSpecification?
def stubbed?
data.is_a? StubLine
end
end
|