首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建Thor::Group类变量

如何创建Thor::Group类变量
EN

Stack Overflow用户
提问于 2011-10-06 23:19:00
回答 1查看 878关注 0票数 0

我似乎无法让变量在Thor::Group中工作。我已经尝试了定义常量$CONFIG $STAGING_DIR的所有方法,但它们都不起作用。

代码语言:javascript
复制
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中访问类变量吗?

EN

回答 1

Stack Overflow用户

发布于 2011-11-21 21:51:06

只要定义一些私有方法即可。私有方法不会像Thor脚本中的常规方法那样自动执行。该方法中的实例变量计算第一次调用该方法时放在||=右侧的内容。然后返回结果。然后,它简单地返回值。因此您的代码将按如下方式重写:

代码语言:javascript
复制
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.start
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7676516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档