Giter VIP home page Giter VIP logo

projectile-rails's Introduction

Projectile Rails Build Status

Synopsis

Projectile Rails is a minor mode for working with Ruby on Rails applications and engines in GNU Emacs. Internally it is based on Projectile.

It means that you can use Projectile's commands for greping (or acking) files, run tests, switch between projects, etc.

With Projectile Rails you are able to:

  • navigate through rails resources (controllers, views, helpers and so on)
  • jump to ruby classes and template files
  • run rake
  • run rails console
  • run rails dbconsole
  • run rails generate
  • run rails server
  • open log files with auto-revert-mode on
  • see rails keywords highlighted
  • take advantage of zeus and spring preloaders

It can be a replacement for rinari.

Setup

Installation

Melpa

Once you have setup Melpa you can use package-install command to install Projectile Rails. The package name is projectile-rails.

el-get

The package name for el-get is projectile-rails.

Usage

The global mode

Use the package as a global mode:

(projectile-rails-global-mode)

That will turn on the local projectile-rails-mode for the buffers which belong to a Rails project (either application or an engine).

Probably you should read Projectile's README on setting up the completion system, caching and indexing files. Although the default settings are quite sensible and you should be ready to go without much tweaking.

Customizing

The mode's buffers will have the Rails keywords highlighted. To turn it off:

(setq projectile-rails-add-keywords nil)

If you have yas-minor-mode or yas-global-mode enabled and you open a new file it will be filled with a skeleton class. To turn it off:

(setq projectile-rails-expand-snippet nil)

By default the buffer of the projectile-rails-server-mode is applying the ansi colors. If you find it slow you can disable it with:

(setq projectile-rails-server-mode-ansi-colors nil)

You can customize the way the rails, spring and zeus commands are invoked. For example if you want to use binstubs:

(setq projectile-rails-vanilla-command "bin/rails"
      projectile-rails-spring-command "bin/spring"
      projectile-rails-zeus-command "bin/zeus")

Interactive commands

Command Keybinding Description
projectile-rails-find-model C-c r m Find a model using projectile-completion-system.
projectile-rails-find-current-model C-c r M Go to a model connected with the current resource.
projectile-rails-find-controller C-c r c Find a controller using projectile-completion-system.
projectile-rails-find-current-controller C-c r C Go to a controller connected with the current resource.
projectile-rails-find-view C-c r v Find a template or partial using projectile-completion-system.
projectile-rails-find-current-view C-c r V Go to a view connected with the current resource.
projectile-rails-find-helper C-c r h Find a helper using projectile-completion-system.
projectile-rails-find-current-helper C-c r H Go to a helper connected with the current resource.
projectile-rails-find-lib C-c r l Find a lib using projectile-completion-system.
projectile-rails-find-feature C-c r f Find a feature using projectile-completion-system.
projectile-rails-find-spec C-c r p Find a spec using projectile-completion-system.
projectile-rails-find-current-spec C-c r P Go to a spec connected with the current resource.
projectile-rails-find-test C-c r t Find a test using projectile-completion-system.
projectile-rails-find-current-test C-c r T Go to a test connected with the current resource.
projectile-rails-find-migration C-c r n Find a migration using projectile-completion-system.
projectile-rails-find-current-migration C-c r N Go to a migration connected with the current resource.
projectile-rails-find-fixture C-c r u Find a fixture using projectile-completion-system.
projectile-rails-find-current-fixture C-c r U Go to a fixture connected with the current resource.
projectile-rails-find-javascript C-c r j Find a javascript using projectile-completion-system.
projectile-rails-find-stylesheet C-c r s Find a stylesheet using projectile-completion-system.
projectile-rails-find-log C-c r o Find a log file and enable auto-revert-tail-mode in its buffer.
projectile-rails-find-initializer C-c r i Find an initializer file using projectile-completion-system.
projectile-rails-find-environment C-c r e Find an environment file using projectile-completion-system.
projectile-rails-find-locale C-c r a Find a locale file using projectile-completion-system.
projectile-rails-find-mailer C-c r @ Find a mailer file using projectile-completion-system.
projectile-rails-find-validator C-c r ! Find a validator file using projectile-completion-system.
projectile-rails-find-layout C-c r y Find a layout file using projectile-completion-system.
projectile-rails-find-rake-task C-c r k Find a rake task file using rake-completion-system.
projectile-rails-find-job C-c r b Find a job file using projectile-completion-system.
projectile-rails-dbconsole C-c r ! b Run rails dbconsole command in sql-interactive-mode.
projectile-rails-console C-c r ! c, C-c r r Run rails console command in inf-ruby buffer.
projectile-rails-server C-c r ! s, C-c r R Run rails server.
projectile-rails-rake C-c r ! r Select a rake task to run using rake-completion-system.
projectile-rails-generate C-c r ! g Run rails generate command.
projectile-rails-extract-region C-c r x Extract the selected region to a partial.
projectile-rails-goto-file-at-point C-c r RET, C-c r g f Go to a file at point. Depending on the context that might be a constant, template or partial, or a gem.
projectile-rails-goto-gemfile C-c r g g Go to Gemfile file.
projectile-rails-goto-routes C-c r g r Go to config/routes.rb file.
projectile-rails-goto-schema C-c r g d Go to db/schema.rb file.
projectile-rails-goto-seeds C-c r g s Go to db/seeds.rb file.
projectile-rails-goto-spec-helper C-c r g h Go to spec/spec_helper.rb file.

You might want to create your own keybinding for your favorite commands. For example:

(define-key projectile-rails-mode-map (kbd "s-m")   'projectile-rails-find-model)
(define-key projectile-rails-mode-map (kbd "s-c")   'projectile-rails-find-controller)
(define-key projectile-rails-mode-map (kbd "s-v")   'projectile-rails-find-view)
(define-key projectile-rails-mode-map (kbd "s-RET") 'projectile-rails-goto-file-at-point)
(define-key projectile-rails-mode-map (kbd "C-c g")  projectile-rails-mode-goto-map)

Defining the keymap prefix

Similar to Projectile Rails there is a variable exposed for defining the prefix for the mode's keymap. The name of the variable is projectile-rails-keymap-prefix. To attach the projectile-rails keymap to the projectiles keymap one can do:

(setq projectile-rails-keymap-prefix (kbd "C-c p C-r"))

Please note though that in order for this code to work it has to be called before the mode is required/loaded.

Discover

There's also integration with discover.el. The key that trigger the menu is s-r (the "s" stands for Win/Command key).

Screenshot

Hydra

There's also integration with hydra. The name of the hydra hydra-projectile-rails. In order to bind it you can something like this:

(define-key projectile-rails-mode-map (kbd "s-r") 'hydra-projectile-rails/body)

Beyond

Consider installing other Emacs packages that can help you working specifically with Rails projects.

Templates

Extension Alternatives
erb web-mode, mmm-mode, rhtml-mode
haml haml-mode
slim emacs-slim
yaml yaml-mode

Running ruby gems

Some of the Projectile Rails functions run rake or rails executables. If you are using a ruby version manager you might need to configure your Emacs to play nicely with it.

OS X users might want to look at exec-path-from-shell.

Miscellaneous

Caveat

Running pry instead of irb

  • Pry's paging is not working in emacs. It should be disabled with Pry.config.pager = false if ENV["INSIDE_EMACS"]. Reference.

  • When projectile-rails-console runs rails console using a pre-loader (zeus or spring) and pry's indent correction is enabled then pry will insert some ansi codes that are misinterpreted by comint-mode. A workaround is to disable the indentation correction with Pry.config.correct_indent = false. Reference. Issue.

Debugging

To use binding.pry or byebug, install inf-ruby and add this to your init file:

(add-hook 'after-init-hook 'inf-ruby-switch-setup)

Contributors

Here's a list of the people that contributed to the projects. Many thanks! :)

Contribution

Install cask if you haven't already, then:

$ cd /path/to/projectile-rails
$ cask

Run all tests with:

$ make test

For all of them to pass you will need the bundle executable in your path.

projectile-rails's People

Contributors

a3ammar avatar asok avatar caleb avatar chopmo avatar constantinexvi avatar dcluna avatar dgtized avatar edmz avatar ejoubaud avatar esjee avatar expez avatar fritzgrabo avatar hbin avatar imtayadeway avatar j3rn avatar jeizsm avatar keegnotrub avatar knu avatar mbreit avatar niku avatar purcell avatar shanavas786 avatar silex avatar smaximov avatar syohex avatar toctan avatar victorteokw avatar w11th avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.