Из RubyMine в Mac приложение для командной строки?

Я довольно опытный разработчик и знаю достаточно Ruby, чтобы стрелять по ногам с нескольких полиморфных направлений. Честно говоря, я не интересуюсь Rails и хочу работать с Ruby строго как сценарий командной строки Mac, альтернативный php или Python. Я озадачен тем, с чего начать даже с RubyMine. Я хотел бы использовать RubyMine для всех его функций, и я использую AppBode и IntelliJ для JetBrains, поэтому RubyMine кажется легким делом. Но ограничен ли я записью файлов.rb и простым запуском их из командной строки терминала? Я хотел бы иметь возможность отлаживать код, не ожидая исключения.

Итак, я думаю, что я прошу простой контрольный список, чтобы добраться до приложения командной строки. Какой тип проекта, как его организовать, как тестировать и как запускать из RubyMine? Заранее спасибо. (Мы все были новичками однажды...)

2 ответа

Решение

TLDR; Просто код, используйте RubyMine, когда вы можете, и все будет в порядке. Я привожу здесь свой собственный процесс, но только в качестве примера.

Создание инструментов командной строки в Ruby

Я использую RubyMine без каких-либо рельсов и делать то, что вы просите. Я пишу много простых скриптов и больших приложений, которые часто можно использовать из командной строки.

Я все еще организую свой код в "каталог проекта". И укажите RM на этот каталог. Вместо того, чтобы просто работать полностью в файле и пытаться указать RM только на файл. Кажется, это то, что предпочитают IDE. Это позволяет RM создавать свои .idea каталог для хранения всех его настроек, связанных с проектом.

Это может означать, что некоторые проекты состоят из не более чем каталога (для проекта) и одного файла в этом каталоге (единственный скрипт, который действительно является единственным содержимым в этом проекте).

Преимущества каталога проектов

Вскоре вы обнаружите, что добавляете больше файлов в любой проект. Как дополнительное кодирование, так и различные утилиты, которые являются частью большого преимущества ruby.

  • драгоценный камень
  • грабли
  • тесты

project directory pattern, также позволяет вам создавать версии кода с помощью популярных VCS, таких как git, и даже загружать их на сайты социальных сетей, такие как github.

Настройка проекта

Я не беспокоюсь ни о каком "типе проекта". На самом деле я вообще не создаю проекты с RubyMine. Я просто создаю каталог, а затем открываю этот каталог с помощью RM (либо из меню "Файл", либо с помощью инструмента командной строки "mine", который устанавливает RM).

project/

Конечно project это не настоящее имя проекта или каталог, который я создаю, я просто использую его как общее имя. Я бы на самом деле назвал каталог (и проект) после сценариев или предмета работы, которую они делают.

ПРИМЕЧАНИЕ: в настоящее время есть ошибка в mine команда в RM 5, где он не будет открывать второе окно проекта.

Очевидно, что если это проект, который включает в себя какие-либо сценарии командной строки, я помещу их в bin каталог, только для организационных целей. Я не люблю загромождать корневую директорию проекта всевозможными вещами. Слишком много инструментов, которым требуются файлы настроек в корне проекта, поэтому чем меньше, тем лучше.

project/bin/

Как я уже сказал, различные другие утилиты предпочитают свои файлы настроек в корне проекта, поэтому вы можете использовать некоторые из них.

project/Gemfile
project/Rakefile
project/project.gemspec
project/README.md
project/.rdoc_options
...

Как только у меня будет автоматическое тестирование сценариев (которое, я признаю, не является немедленным), я помещаю весь тестовый код под test каталог, но я также классифицирую их в соответствии с объемом тестов или частотой их запуска во время разработки. И я зайду так далеко, что добавлю задачи quck Rake, которые являются просто псевдонимами для команд, необходимых для запуска тестов. Поэтому мне не нужно помнить, какой тестовый бегун, или каждый раз вводить полные пути.

project/test/
project/test/unit/
project/test/unit/some_component_test.rb
project/test/integration/

Наконец, по мере роста проекта, и я добавляю больше скриптов или хочу повторно использовать часть кода во внешних проектах, я добавлю lib каталог, и использовать некоторые стандартные методы для того, как организовать это.

project/lib/
project/lib/project.rb

А поскольку проект продолжает расти и усложняться, требуется дополнительная организация контента после небольшого рефакторинга. Обратите внимание cmd каталог, содержащий фактический код верхнего уровня различных рабочих процессов, через которые может пройти конкретный скрипт.

project/lib/project/
project/lib/project/other_stuff.rb
project/lib/project/cmd/
project/lib/project/cmd/one_command.rb
project/lib/project/cmd/another_command.rb

Конечно оригинал project.rb "требует" все эти файлы lib. Ruby загружается довольно быстро, поэтому я не слишком беспокоюсь об управлении зависимостями между файлами ruby ​​в рамках одного проекта. Это действительно все о читаемости кода.

Лучшие приложения командной строки

Нет ничего плохого в том, чтобы начать с одного файла сценария и написать минимальное кодирование котельной плиты. И это, пожалуй, лучший способ начать.

#!/usr/bin/env ruby

=begin

this is a script blah which does whatever

EXAMPLE

$ script <options> <arguments

=end

def main(args)
  whatever
end

main(ARGV)
exit(0)

Но написать еще лучшие приложения для командной строки в ruby ​​довольно легко. Есть популярные драгоценные камни, которые обрабатывают большую часть инфраструктуры для вас.

Вы можете начать с чего-то такого простого, как OptionParser

Затем, когда вы создаете больше кода в своих скриптах, вы можете перейти к немного большей инфраструктуре с таким гемом, как Methadone.

Наконец, когда вы пишете полноценные приложения командной строки со многими "внутренними" командами, такими как "git submodule init ", вы можете подняться к чему-то гораздо более тяжелому, например, GLI

Тестирование приложений командной строки

Модульное тестирование практически одинаково, независимо от типа приложения, которое вы пишете. Вы не используете реальные сервисы и не комбинируете компоненты, а просто изолируете внутренние компоненты и используете их чисто внутренним образом. Так что не так много изменений для инструментов командной строки.

Но когда дело доходит до интеграции или полного тестирования моих сценариев из командной строки, я на самом деле большой поклонник cucumber/aruba, Я не большой в TDD, я слишком прагматичен для этого. Но для инструментов командной строки ряд вариантов использования уже изложен довольно просто в наборе доступных опций. Даже для интерактивных команд это делает серию feature файлы удобно дублировать как документация для инструмента.

Feature:
  Create and manipulate notes in Evernote.

  Background:
    Given I am logged in as me
    And I have 0 notes

  Scenario: Show note
    Given that I have 1 note named "foo" with content "bar"
    When I run `rnote show note --title "foo"`
    Then the output should contain "bar"

  Scenario: Show note, from multiple notes
    Given that I have 2 notes named "foo"
    When I run `rnote show note --title "foo"` interactively
    And I type "1"
    Then the output should contain "foo"

Монтаж

Что касается установки и упаковки ваших сценариев, так что они могут быть использованы и использованы повторно остальным миром, не обращайте внимания на ту же утилиту 'gem', которую вы уже использовали в ruby ​​для зависимостей.

gemspec вы создаете при написании нового гема, которым можете поделиться, можете рассказать о ваших скриптах и ​​других утилитах командной строки. Затем он обернет их остальным кодом, установит их в хорошем месте и даже исправит PATH, чтобы пользователь мог найти их, когда придет время.

На самом деле это работает так хорошо, ваш драгоценный камень может состоять только из этих bin скрипты. Без другого кода для повторного использования.

кошка-собака - это безобидный маленький драгоценный камень, который я взяла в пример для чего-то другого. Он вообще не содержит директории lib и никакого другого ruby, кроме единственного сценария командной строки.

Рубин без рельсов

Я сталкивался со многими разработчиками Rails, которые не знают, что такое Rails и что такое ruby. то есть то, что у вас осталось, когда вы удалите Rails. Очевидно, что сервер и шаблонизатор, база данных, MVC ушли, как и часть удобных методов, добавляемых к повседневным объектам.

Новым является то, что у вас все еще остается достаточно много. И если вы обнаружите, что что-то упустили, легко добавить его обратно, добавив драгоценный камень или два. Например, если вам нравится использовать ORM-подобную активную запись, она может быть включена обратно в ваше приложение, без рельсов, без особых хлопот.

require 'activerecord'

Полнофункциональный RubyMine

Наконец, использование возможностей RubyMine более интенсивно во время разработки. Все доступное при работе с рельсами доступно для приложений командной строки.

Вы можете запускать свои команды из RM и использовать его отладчик так же, как и rails. Как и в любой IDE, вы можете настроить профили "run" с аргументами, на которых вы хотите протестировать скрипт, а также запустить или отладить скрипт через IDE. Лично я никогда не использую отладчик командной строки. Если мне нужно запустить отладчик для устранения какой-либо проблемы, я запусту программу в IDE. Преимущества IDE-отладчика с отображением всех важных деталей в режиме "один на один" и визуальным отслеживанием выполнения сценария просто незаменимы.

На панели инструментов перейдите в меню " Выполнить"> "Изменить конфигурацию", затем обновите ** Путь к рабочей директории ** применимо >> ОК

Другие вопросы по тегам