耙子"desc 'description'"背后的魔力是什么?



例如https://github.com/locomotivecms/wagon/blob/master/rakefile#l23

desc 'build the gem and release it to rubygems.org'
task release: :gem do
  sh "gem push pkg/locomotivecms_wagon-#{gemspec.version}.gem"
end

当我运行rake --task时,它返回为描述。

rake clobber_package   # Remove package products
rake gem               # Build the gem file locomotivecms_wagon-2.2.0.beta1.gem
rake package           # Build all the packages
rake release           # build the gem and release it to rubygems.org
rake repackage         # Force a rebuild of the package files
rake spec              # Run RSpec code examples
rake spec:integration  # Run RSpec code examples
rake spec:unit         # Run RSpec code examples

但是我不明白他们如何进行描述,不是每次描述打电话时都会替换它吗?他们如何知道特定描述属于特定任务?

想象具有状态(非常幼稚的实现)的简单DSL

@tasks = []
@current = nil
def desc text
  @current = Task.new(desc: text)
end
def task params, &cb
  @current.update(params)
  yield
   ....
  @tasks << @current
  @current = nil
end

上面的代码需要其他检查等,但是想法是:状态DSL用其描述收集任务。

最新更新