Вопрос

Я начинаю изучать рубин.Я также являюсь ежедневным разработчиком 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, не Merb) вы бы предложили, чтобы он был чистым, простым и удобным в обслуживании?

Это было полезно?

Решение

Бандлер включает в себя необходимую инфраструктуру для создания драгоценного камня:

$ bundle gem --coc --mit --test=minitest --exe spider
Creating gem 'spider'...
MIT License enabled in config
Code of conduct enabled in config
      create  spider/Gemfile
      create  spider/lib/spider.rb
      create  spider/lib/spider/version.rb
      create  spider/spider.gemspec
      create  spider/Rakefile
      create  spider/README.md
      create  spider/bin/console
      create  spider/bin/setup
      create  spider/.gitignore
      create  spider/.travis.yml
      create  spider/test/test_helper.rb
      create  spider/test/spider_test.rb
      create  spider/LICENSE.txt
      create  spider/CODE_OF_CONDUCT.md
      create  spider/exe/spider
Initializing git repo in /Users/francois/Projects/spider
Gem 'spider' was successfully created. For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html

Затем в lib/ вы создаете модули по мере необходимости:

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

Прочитайте страницу руководства для связка драгоценных камней для получения подробной информации о --coc, --exe и --mit параметры.

Другие советы

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

Основная структура стандартного проекта 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/ вместо.Это файлы общего назначения, не относящиеся к Ruby.Большинству проектов это не нужно, но даже когда они нужны много раз, все просто сохраняется. lib/, хотя это, вероятно, не лучшая практика.

А test/ каталог может называться spec/ если вместо TDD используется BDD, хотя вы также можете увидеть features/ если используется огурец, или 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) содержит список файлов, которые будут включены в файл(ы) пакета проекта (например,пакет драгоценных камней).

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

  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») и часто имеет work каталог, что-то вроде:

  work/
    NOTES.md
    consider/
    reference/
    sandbox/

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

@Дентарг:ваше «включить одну, чтобы включить все подчасти» - это распространенный шаблон.Как и у всего, у него есть свои преимущества (легко получить то, что вы хотите) и свои недостатки (множество включений может загрязнять пространства имен, и вы не можете их контролировать).Ваш шаблон выглядит следующим образом:

- 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

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

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

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

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

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

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

Поэтому я выбрал NewGem.Я удалил все ненужные вещи RubyForge/gem (мотыга, настройка и т. д.), создал репозиторий git, импортировал проект в NetBeans.Все заняло 20 минут и все горит зеленым.Это даже дало мне базовую задачу по сбору спецификационных файлов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top