Подтвердить что ты не робот

Раскладка каталога для чистого Ruby-проекта

Я начинаю изучать рубин. Я также являюсь ежедневным разработчиком С++. Для проектов С++ я обычно использую следующую структуру dir

/
 -/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 (non-Rails, non-Merb) вы предложите сохранить в чистоте, простоте и обслуживании?

4b9b3361

Ответ 1

Вы можете установить 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"

Ответ 2

По состоянию на 2011 год обычно используется jeweler вместо newgem, поскольку последний фактически отменяется.

Ответ 3

Основная структура стандартного проекта Ruby в основном:

  lib/
    foo.rb
    foo/
  share/
    foo/
  test/
    helper.rb
    test_foo.rb
  HISTORY.md (or CHANGELOG.md)
  LICENSE.txt
  README.md
  foo.gemspec

share/ встречается редко и иногда называется data/. Это для нерубинных файлов общего назначения. Большинство проектов им не нужны, но даже когда они делают много раз, все просто сохраняется в lib/, хотя это, вероятно, не самая лучшая практика.

Каталог test/ может быть вызван spec/, если вместо TDD используется BDD, хотя вы можете также видеть features/, если используется Cucumber, или demo/, если используется QED.

В наши дни foo.gemspec может быть только .gemspec - особенно если он не поддерживается вручную.

Если в вашем проекте есть исполняемые файлы командной строки, добавьте:

  bin/
    foo
  man/
    foo.1
    foo.1.md or foo.1.ronn

Кроме того, в большинстве проектов Ruby есть:

  Gemfile
  Rakefile

Gemfile предназначен для использования Bundler, а Rakefile - для инструмента построения Rake. Но есть и другие варианты, если вы хотите использовать разные инструменты.

Несколько других не очень редких файлов:

  VERSION
  MANIFEST

Файл VERSION содержит только текущий номер версии. И MANIFEST (или Manifest.txt) содержит список файлов, которые должны быть включены в файл (-ы) пакета проекта (например, gem-пакет).

Что еще вы можете увидеть, но использование является спорадическим:

  config/
  doc/ (or docs/)
  script/
  log/
  pkg/
  task/ (or tasks/)
  vendor/
  web/ (or site/)

Где config/ содержит различные файлы конфигурации; doc/ содержит либо сгенерированную документацию, например. RDoc, а иногда и вручную поддерживаемую документацию; script/ содержит сценарии оболочки для использования проектом; log/ содержит сгенерированные журналы проектов, например. отчеты по охвату тестированием; pkg/ содержит сгенерированные файлы пакетов, например. foo-1.0.0.gem; task/ может содержать различные файлы задач, такие как foo.rake или foo.watchr; vendor/ содержит копии других проектов, например. git подмодули; и, наконец, web/ содержит файлы веб-сайта проекта.

Затем некоторые файлы конкретных инструментов, которые также являются относительно распространенными:

  .document
  .gitignore
  .yardopts
  .travis.yml

Они довольно понятны.

Наконец, я добавлю, что лично добавляю файл .index и каталог var/ для создания этого файла (поиск по "Rubyworks Indexer" для получения дополнительной информации об этом) и часто имеет каталог work, что-то вроде

  work/
    NOTES.md
    consider/
    reference/
    sandbox/

Просто свалка для целей развития.

Ответ 4

@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

Ответ 5

Почему бы не использовать один и тот же макет? Обычно вам не нужно строить, потому что нет этапа компиляции, но остальное мне кажется хорошо.

Я не уверен, что вы подразумеваете под модулем, но если это просто один класс, отдельная папка не понадобится, и если там более одного файла, вы обычно пишете файл module-1.rb(по имени уровень как папка module-1), которая делает не что иное, как требование всего в модуле-1/.

О, и я бы предложил использовать Rake для задач управления (вместо make).

Ответ 6

Я бы придерживался чего-то похожего на то, с чем вы знакомы: нет никакого смысла быть незнакомцем в вашем собственном каталоге проекта.: -)

Типичные вещи, которые у меня всегда есть: lib | src, bin, test.

(Мне не нравятся эти генераторы-монстры: первое, что я хочу сделать с новым проектом, - получить код вниз, а не писать README, docs и т.д.!)

Ответ 7

Итак, я пошел с newgem. Я удалил все ненужные вещи RubyForge/gem (мотыги, настройки и т.д.), Создал git repo, импортировал проект в NetBeans. Все заняли 20 минут и все на зеленом. Это даже дало мне основную задачу рейка для файлов спецификаций.

Спасибо всем.