`

如何手动编写Rakefile

阅读更多

这是来自O’Reilly Network的一篇关于如何如何使用Ruby及ActiveRecord编写控制台程序的教程,文章通过一个例子程序EarGTD演示了编写控制台程序需要注意的方方面面(文件布局,数据库连接等等),作者是Gregory Brown,你可以在这里找到原文 ,这是第二部分。

手动编写Rakefile

在Rails中,你可能经常会用到Rake来完成各种自动化任务(比如单元测试,数据库迁移等),但是你可能并不清楚该如何添加一个新的Rake任务,或 者是从头写一个新的Rakefile,下面就让我们来看看EarGTD是如何通过Rake来实现它的单元测试自动化的,实际上,并不负责:
require "rubygems"
require "rake"
require "rake/testtask"
task :default => [:test]
Rake::TestTask.new do |test|
  test.libs << "test"
  test.test_files = Dir[ "test/test_*.rb" ]
  test.verbose = true
end


这段代码应该不难理解,它新建了一个Test任务来运行所有test目录下的名为test_XXX.rb的文件,并将test任务设为默认任务,也就是你只需要通过简单的rake命令,而不需要指定参数就可以执行test任务了,

使用module来组织你的代码

虽然只是一个简单的控制台程序,但为了易于维护,我们还是应该尽量保持代码的简洁明了,处于对面向对象的景仰,你可能首先想到的是要定义一个类,就像下面这样:

module A
  def b
    puts "this is b"
  end
end
class C
  include A
end
d = C.new
d.b #=> "this is b"


这看起来不错,但是如果你的应用很简单,并不需要维护状态(就像EarGTD),那就没有必要使用类,你可以直接使用module:

module A
  # module_function
  def b
    puts “this is b”
  end
end

A.b #=> “this is b”


这样使代码看起来更简洁一些,如果你看过根目录下的earGTD文件,那么你就会发现,它只有那么短短的几行:

#!/usr/bin/env ruby
require "lib/ear_gtd"
EarGTD.connect
EarGTD.process_command(ARGV)


我们可以看到,大部分工作都是在process_command中完成的。

处理命令行

对于EarGTD来讲,它的很大一部分工作就是处理命令行,因此,为了保证代码的整洁,有必要将命令行处理放到一个单独的函数中去,Ruby默认将所有的 命令行参数存放在一个名为ARGV的变量中,EarGTD对命令行的处理策略是取出第一个参数,然后将剩余的参数放在一个数组中:

def process_command(cmd)
  args = Array(cmd)
  command = args.shift
  case(command)
  when "+"
    add_task(args[0])
  when "@"
    t = tasks
    puts t.empty? ? "Looks like you have nothing to do.\n" : t
  # ... other commands omitted
  else
    puts "Que?"
  end
end


这样的好处是可以将你其余的代码同用户界面分离开来,但是命令行处理器需要知道其他接口要操作的数据格式。
分享到:
评论

相关推荐

    Swift-使用ShellscriptMakefile或Rakefile设置iOS项目环境

    总结来说,Swift开发者通过Shellscript、Makefile或Rakefile可以实现项目的自动化管理,提高开发效率,减少手动操作的错误。这些工具不仅简化了构建流程,还能帮助团队保持一致性,从而更好地协作开发和维护iOS应用...

    本项目已移至httpgithub.comcontinuoustestsAutoTest.Net_C#_Ruby_下载.zip

    Ruby版本的AutoTest.Net支持自动测试发现,这意味着只要代码发生变化,相关的测试就会自动执行,无需手动触发。 在AutoTest.Net-master这个压缩包中,可能包含了以下内容: 1. 项目源代码:包括C#和Ruby的实现,...

    facter-1.5.9

    在Puppet环境中,Facter通常是自动安装和管理的,但有时也需要手动升级到特定版本以获取新功能或解决兼容性问题。 总的来说,Facter 1.5.9是Puppet生态系统中的一个重要组件,它为系统管理提供了强大的洞察力,并...

    makegem:Ruby gems的基本模板

    2. `Rakefile`: Rake是Ruby的一个任务管理工具,`Rakefile`定义了各种自动化任务,比如创建gem、打包和测试。 3. `lib`: 这个目录通常包含你的Gem的核心代码,如`lib/makegem.rb`,这是Gem的主模块或类。 4. `spec`:...

    Simple-shopping-Place

    Rails的生成器可以自动生成控制器、模型、迁移、视图等文件,大大减少了开发者手动编写代码的工作量。 在标签中提到了“Ruby”,这是Rails的基础,Ruby是一种动态、面向对象的编程语言,以其简洁、优雅的语法和强大...

    git-action-test

    4. **Rakefile**:Ruby的构建文件,可以定义任务,如运行测试、打包应用等。 5. **spec** 或 **test** 目录:存放测试代码的地方,使用RSpec或其他测试框架编写。 6. **app** 目录(如果是个Web应用):包含业务逻辑...

    鱼:鱼是Watir周围的包装引擎

    在Ruby社区中,Watir非常受欢迎,因为它使得编写自动化测试脚本变得简单而直观。 鱼项目的目标是扩展Watir的功能,提高其可扩展性和灵活性,同时也简化了与Web元素的交互。通过鱼,开发者可以更轻松地处理复杂的...

    automation-test

    Cucumber则进一步将测试用例编写成可读性极高的“特性”文件,非技术人员也能理解测试的目的。 自动化测试的主要目标是减少手动测试的工作量,提高测试覆盖率,以及确保每次代码更改后都能快速验证软件功能的正确性...

    control_repo

    总的来说,"control_repo"在 Puppet 环境中扮演着至关重要的角色,它确保了基础设施的标准化和自动化管理,降低了手动配置错误的可能性,提升了运维效率。理解并熟练掌握 Puppet 控制仓库的构建和管理,对于任何负责...

    sitebuilder

    在深入研究这个项目时,你可能需要了解Ruby和Rails的基本知识,以及如何管理和运行Ruby项目,包括使用 Bundler 管理依赖、Rakefile 运行任务,以及通过Ruby的测试框架(如RSpec或Minitest)进行测试。 总之,"site...

Global site tag (gtag.js) - Google Analytics