我似乎无法让变量在Thor::Group中工作。我已经尝试了定义常量$CONFIG $STAGING_DIR的所有方法,但它们都不起作用。
class Package < Thor::Group
include Thor::Actions
attr_accessor :staging_dir, :config
argument :repo, :type => :string, :desc => "The repo to export"
desc "Testing 1.2.3..."
def test_meth
uri = URI.parse(repo)
if uri.kind_of?(URI::Generic)
say "-- Repository seems to be a local directory", :cyan
if File.exist? repo
@config = YAML.load_file(repo + "/project.yaml")
@staging_dir = "/var/tmp/pkg/stage/" + @config["project"]["name"]
FileUtils.remove_dir @staging_dir if File.exists? @staging_dir
empty_directory @staging_dir
directory(repo, @staging_dir)
end
end
end
def failure
puts @config
puts @staging_dir
end
def self.source_root
File.dirname(@staging_dir)
end
end
Package.start./fubar /var/tmp/test/ -存储库似乎是一个本地目录nil nil
有人知道如何在Thor::Group中访问类变量吗?
发布于 2011-11-21 21:51:06
只要定义一些私有方法即可。私有方法不会像Thor脚本中的常规方法那样自动执行。该方法中的实例变量计算第一次调用该方法时放在||=右侧的内容。然后返回结果。然后,它简单地返回值。因此您的代码将按如下方式重写:
class Package < Thor::Group
include Thor::Actions
attr_accessor :staging_dir, :config
argument :repo, :type => :string, :desc => "The repo to export"
desc "Testing 1.2.3..."
def test_meth
uri = URI.parse(repo)
if uri.kind_of?(URI::Generic)
say "-- Repository seems to be a local directory", :cyan
if File.exist? repo
FileUtils.remove_dir staging_dir if File.exists? staging_dir
empty_directory staging_dir
directory(repo, staging_dir)
end
end
end
def failure
puts config
puts staging_dir
end
def self.source_root
File.dirname(staging_dir)
end
private
def config
@config ||= YAML.load_file(repo + "/project.yaml")
end
def staging_dir
@staging_dir ||= "/var/tmp/pkg/stage/" + @config["project"]["name"]
end
end
Package.starthttps://stackoverflow.com/questions/7676516
复制相似问题