纯Ruby项目的目录布局

时间:2020-03-05 18:51:23  来源:igfitidea点击:

我开始学习红宝石。我也是日常C ++开发人员。
对于C ++项目,我通常使用以下目录结构

/
 -/bin <- built binaries
 -/build <- build time temporary object (eg. .obj, cmake intermediates)
 -/doc <- manuals and/or Doxygen docs
 -/src
 --/module-1
 --/module-2
 -- non module specific sources, like main.cpp
 - IDE project files (.sln), etc.

我们会建议Ruby的哪种目录布局(非Rails,non-Merb)来保持其干净,简单和可维护?

解决方案

回答

为什么不使用相同的布局?通常,我们不需要构建,因为没有编译步骤,但是其余的对我来说似乎还可以。

我不确定模块的含义,但是如果只是一个类,则不需要单独的文件夹,并且如果有多个文件,通常可以编写module-1.rb文件(名称级别为module-1文件夹)仅需要module-1 /中的所有功能。

哦,我建议使用Rake来执行管理任务(而不是make)。

回答

@Dentharg:"包括一个包括所有子部分"是一种常见的模式。像其他任何东西一样,它具有优点(容易获得所需的东西)和缺点(许多包含项可能会污染名称空间,我们无法控制它们)。模式如下所示:

- src/
    some_ruby_file.rb:
      require 'spider'
      Spider.do_something

+ doc/

- lib/
  - spider/
      spider.rb:
        $: << File.expand_path(File.dirname(__FILE__))
        module Spider
          # anything that needs to be done before including submodules
        end

        require 'spider/some_helper'
        require 'spider/some/other_helper'
        ...

我可能会建议这样做以允许更多控制:

- src/
    some_ruby_file.rb:
      require 'spider'
      Spider.include_all
      Spider.do_something

+ doc/

- lib
  - spider/
      spider.rb:
        $: << File.expand_path(File.dirname(__FILE__))
        module Spider
          def self.include_all
            require 'spider/some_helper'
            require 'spider/some/other_helper'
            ...
          end
        end

回答

我们可以安装newgem RubyGem并让它为我们生成布局。

$ gem install newgem
$ newgem spider
      create  
      create  config
      create  doc
      create  lib
      create  script
      create  tasks
      create  lib/spider
      create  History.txt
      create  License.txt
      create  Rakefile
      create  README.txt
      create  PostInstall.txt
      create  setup.rb
      create  lib/spider.rb
      create  lib/spider/version.rb
      create  config/hoe.rb
      create  config/requirements.rb
      create  tasks/deployment.rake
      create  tasks/environment.rake
      create  tasks/website.rake
  dependency  install_test_unit
      create    test
      create    test/test_helper.rb
      create    test/test_spider.rb
  dependency  install_website
      create    website/javascripts
      create    website/stylesheets
      exists    script
      exists    tasks
      create    website/index.txt
      create    website/index.html
      create    script/txt2html
       force    tasks/website.rake
  dependency    plain_theme
      exists      website/javascripts
      exists      website/stylesheets
      create      website/template.html.erb
      create      website/stylesheets/screen.css
      create      website/javascripts/rounded_corners_lite.inc.js
  dependency  install_rubigen_scripts
      exists    script
      create    script/generate
      create    script/destroy
      create  script/console
      create  Manifest.txt
      readme  readme
Important
=========

* Open config/hoe.rb
* Update missing details (gem description, dependent gems, etc.)

然后,在lib /中,根据需要创建模块:

lib/
  spider/
    base.rb
  crawler/
    base.rb
  spider.rb
    require "spider/base"
    require "crawler/base"

回答

我会坚持与我们熟悉的类似的东西:在我们自​​己的项目目录中成为陌生人是没有意义的。 :-)

我经常拥有的典型东西是lib | src,bin,test。

(我不喜欢这些怪物生成器:我要对一个新项目做的第一件事是记下一些代码,而不是编写自述文件,文档等!)

回答

所以我选择了newgem。
我删除了所有不必要的RubyForge / gem内容(hoe,设置等),创建了git repo,将项目导入了NetBeans。整个过程耗时20分钟,所有内容都呈绿色。
这甚至给了我一个针对spec文件的基本rake任务。

谢谢你们。