summaryrefslogtreecommitdiff
path: root/plugins/rails
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2022-04-02 13:24:35 -0500
committerTuowen Zhao <ztuowen@gmail.com>2022-04-02 13:24:35 -0500
commit2023d3ab658fe8ed4dd4ca33cd5974ab8f0ad945 (patch)
tree99add95300f57806b89bd885a5f5322ce9f9ac1a /plugins/rails
parentcae9a2b797649379e865e6bd73bc67e294e4ac77 (diff)
parent53863e7b3ff0c2e2816e90dab3d870adebdf49c7 (diff)
downloadzsh-2023d3ab658fe8ed4dd4ca33cd5974ab8f0ad945.tar.gz
zsh-2023d3ab658fe8ed4dd4ca33cd5974ab8f0ad945.tar.bz2
zsh-2023d3ab658fe8ed4dd4ca33cd5974ab8f0ad945.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'plugins/rails')
-rw-r--r--plugins/rails/README.md122
-rw-r--r--plugins/rails/_rails688
-rw-r--r--plugins/rails/rails.plugin.zsh84
3 files changed, 757 insertions, 137 deletions
diff --git a/plugins/rails/README.md b/plugins/rails/README.md
index efdb8f8ba..fa66750f0 100644
--- a/plugins/rails/README.md
+++ b/plugins/rails/README.md
@@ -1,6 +1,7 @@
# Rails
-This plugin adds completion for [Ruby On Rails Framework](https://rubyonrails.org/) and [Rake](https://ruby.github.io/rake/) commands, as well as some aliases for logs and environment variables.
+This plugin adds completion for [Ruby On Rails Framework](https://rubyonrails.org/) and
+[Rake](https://ruby.github.io/rake/) commands, as well as some aliases for logs and environment variables.
To use it, add `rails` to the plugins array in your zshrc file:
@@ -12,47 +13,52 @@ plugins=(... rails)
### Rails aliases
-| Alias | Command | Description |
-|-------|----------------------------|----------------------------------------------------|
-| `rc` | `rails console` | Interact with your Rails app from the CLI |
-| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data |
-| `rd` | `rails destroy` | Undo a generate operation |
-| `rdb` | `rails dbconsole` | Interact with your db from the console |
-| `rgen`| `rails generate` | Generate boilerplate code |
-| `rgm` | `rails generate migration` | Generate a db migration |
-| `rp` | `rails plugin` | Run a Rails plugin command |
-| `rr` | `rails routes` | List all defined routes |
-| `rrg` | `rails routes \| grep` | List and filter the defined routes |
-| `ru` | `rails runner` | Run Ruby code in the context of Rails |
-| `rs` | `rails server` | Launch a web server |
-| `rsd` | `rails server --debugger` | Launch a web server with debugger |
-| `rsp` | `rails server --port` | Launch a web server and specify the listening port |
+| Alias | Command | Description |
+| ------- | -------------------------------- | ------------------------------------------------------ |
+| `rc` | `rails console` | Interact with your Rails app from the CLI |
+| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data |
+| `rd` | `rails destroy` | Undo a generate operation |
+| `rdb` | `rails dbconsole` | Interact with your db from the console |
+| `rdc` | `rails db:create` | Create the database |
+| `rdd` | `rails db:drop` | Delete the database |
+| `rdm` | `rails db:migrate` | Run pending db migrations |
+| `rdmd` | `rails db:migrate:down` | Undo specific db migration |
+| `rdmr` | `rails db:migrate:redo` | Redo specific db migration |
+| `rdms` | `rails db:migrate:status` | Show current db migration status |
+| `rdmtc` | `rails db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rdmu` | `rails db:migrate:up` | Run specific db migration |
+| `rdr` | `rails db:rollback` | Roll back the last migration |
+| `rdrs` | `rails db:reset` | Delete the database and set it up again |
+| `rds` | `rails db:seed` | Seed the database |
+| `rdsl` | `rails db:schema:load` | Load the database schema |
+| `rdtc` | `rails db:test:clone` | Clone the database into the test database |
+| `rdtp` | `rails db:test:prepare` | Duplicate the db schema into your test database |
+| `rgen` | `rails generate` | Generate boilerplate code |
+| `rgm` | `rails generate migration` | Generate a db migration |
+| `rlc` | `rails log:clear` | Clear Rails logs |
+| `rmd` | `rails middleware` | Interact with Rails middlewares |
+| `rn` | `rails notes` | Search for notes (`FIXME`, `TODO`) in code comments |
+| `rp` | `rails plugin` | Run a Rails plugin command |
+| `rr` | `rails routes` | List all defined routes |
+| `rrg` | `rails routes \| grep` | List and filter the defined routes |
+| `rs` | `rails server` | Launch a web server |
+| `rsb` | `rails server --bind` | Launch a web server binding it to a specific IP |
+| `rsd` | `rails server --debugger` | Launch a web server with debugger |
+| `rsp` | `rails server --port` | Launch a web server and specify the listening port |
+| `rsts` | `rails stats` | Print code statistics |
+| `rt` | `rails test` | Run Rails tests |
+| `ru` | `rails runner` | Run Ruby code in the context of Rails |
-### Rake aliases
+### Foreman
-| Alias | Command | Description |
-|---------|---------------------------------|--------------------------------------------------------|
-| `rdm` | `rake db:migrate` | Run pending db migrations |
-| `rdms` | `rake db:migrate:status` | Show current db migration status |
-| `rdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
-| `rdr` | `rake db:rollback` | Roll back the last migration |
-| `rdc` | `rake db:create` | Create the database |
-| `rds` | `rake db:seed` | Seed the database |
-| `rdd` | `rake db:drop` | Delete the database |
-| `rdrs` | `rake db:reset` | Delete the database and set it up again |
-| `rdtc` | `rake db:test:clone` | Clone the database into the test database |
-| `rdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database |
-| `rdsl` | `rake db:schema:load` | Load the database schema |
-| `rlc` | `rake log:clear` | Clear Rails logs |
-| `rn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments |
-| `rt` | `rake test` | Run Rails tests |
-| `rmd` | `rake middleware` | Interact with Rails middlewares |
-| `rsts` | `rake stats` | Print code statistics |
+| Alias | Command | Description |
+| ------ | --------------- | ----------------------------------------- |
+| `fmns` | `foreman start` | Interact with your Rails app from the CLI |
### Utility aliases
| Alias | Command | Description |
-|-----------|-------------------------------|------------------------------------------------|
+| --------- | ----------------------------- | ---------------------------------------------- |
| `devlog` | `tail -f log/development.log` | Show and follow changes to the development log |
| `prodlog` | `tail -f log/production.log` | Show and follow changes to the production log |
| `testlog` | `tail -f log/test.log` | Show and follow changes to the test log |
@@ -60,7 +66,7 @@ plugins=(... rails)
### Environment settings
| Alias | Command | Description |
-|-------|-------------------------|---------------------------------|
+| ----- | ----------------------- | ------------------------------- |
| `RED` | `RAILS_ENV=development` | Sets `RAILS_ENV` to development |
| `REP` | `RAILS_ENV=production` | Sets `RAILS_ENV` to production |
| `RET` | `RAILS_ENV=test` | Sets `RAILS_ENV` to test |
@@ -68,15 +74,45 @@ plugins=(... rails)
These are global aliases. Use in combination with a command or just run them
separately. For example: `REP rake db:migrate` will migrate the production db.
-### Legacy stuff
+## Legacy
+
+### Rake aliases
+
+The following commands are run [using `rails` instead of `rake` since Rails v5][1], but are preserved under the
+prefix `rk` for backwards compatibility.
+
+[1]: https://guides.rubyonrails.org/v5.2/command_line.html#bin-rails
+
+| Alias | Command | Description |
+| -------- | ------------------------------- | ------------------------------------------------------ |
+| `rkdc` | `rake db:create` | Create the database |
+| `rkdd` | `rake db:drop` | Delete the database |
+| `rkdm` | `rake db:migrate` | Run pending db migrations |
+| `rkdms` | `rake db:migrate:status` | Show current db migration status |
+| `rkdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rkdr` | `rake db:rollback` | Roll back the last migration |
+| `rkdrs` | `rake db:reset` | Delete the database and set it up again |
+| `rkds` | `rake db:seed` | Seed the database |
+| `rkdsl` | `rake db:schema:load` | Load the database schema |
+| `rkdtc` | `rake db:test:clone` | Clone the database into the test database |
+| `rkdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database |
+| `rklc` | `rake log:clear` | Clear Rails logs |
+| `rkmd` | `rake middleware` | Interact with Rails middlewares |
+| `rkn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments |
+| `rksts` | `rake stats` | Print code statistics |
+| `rkt` | `rake test` | Run Rails tests |
+
+### Other
| Alias | Command |
-|---------|------------------------------------|
-| `sstat` | `thin --stats "/thin/stats" start` |
-| `sg` | `ruby script/generate` |
+| ------- | ---------------------------------- |
+| `sc` | `ruby script/console` |
| `sd` | `ruby script/destroy` |
+| `sd` | `ruby script/server --debugger` |
+| `sg` | `ruby script/generate` |
| `sp` | `ruby script/plugin` |
| `sr` | `ruby script/runner` |
| `ssp` | `ruby script/spec` |
-| `sc` | `ruby script/console` |
-| `sd` | `ruby script/server --debugger` |
+| `sstat` | `thin --stats "/thin/stats" start` |
+
+- `remote_console <server> <directory>`: runs `ruby script/console production` on a remote server.
diff --git a/plugins/rails/_rails b/plugins/rails/_rails
index ad7505506..6dc85d458 100644
--- a/plugins/rails/_rails
+++ b/plugins/rails/_rails
@@ -1,66 +1,624 @@
#compdef rails
-#autoload
-
-local -a _1st_arguments
-_1st_arguments=(
- 'generate:Generate new code (short-cut alias: "g")'
- 'console:Start the Rails console (short-cut alias: "c")'
- 'server:Start the Rails server (short-cut alias: "s")'
- 'dbconsole:Start a console for the database specified in config/database.yml (short-cut alias: "db")'
- 'new:Create a new Rails application. "rails new my_app" creates a new application called MyApp in "./my_app"'
- 'application:Generate the Rails application code'
- 'destroy:Undo code generated with "generate"'
-
- 'benchmarker:See how fast a piece of code runs'
- 'profiler:Get profile information from a piece of code'
- 'plugin:Install a plugin'
-
- 'plugin new:Generates skeleton for developing a Rails plugin'
- 'runner:Run a piece of code in the application environment (short-cut alias: "r")'
-)
-
-_rails_generate_arguments() {
- generate_arguments=(
- assets
- controller
- decorator
- generator
- helper
- integration_test
- mailer
- migration
- model
- observer
- performance_test
- plugin
- resource
- scaffold
- scaffold_controller
- session_migration
- stylesheets
- task
- )
-}
-
-
-_arguments \
- '(--version)--version[show version]' \
- '(--help)--help[show help]' \
- '*:: :->subcmds' && return 0
-
-if (( CURRENT == 1 )); then
- _describe -t commands "rails subcommand" _1st_arguments
- return
-else
- _files
- return
-fi
-
-case "$words[1]" in
- g|generate)
- _rails_generate_arguments
- _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
- d|destroy)
- _rails_generate_arguments
- _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
-esac
+# ------------------------------------------------------------------------------
+# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for Ruby on Rails (http://rubyonrails.org/).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Kazuya Takeshima (https://github.com/mitukiii)
+#
+# ------------------------------------------------------------------------------
+
+
+_rails() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_${words[1]}" || _nothing
+ else
+ __rails_commands
+ fi
+}
+
+__rails_commands() {
+ local context state line curcontext="$curcontext"
+
+ local -a rails_options
+ __rails_setup_rails_options
+
+ _arguments -C \
+ $rails_options \
+ ': :->command'
+
+ case "$state" in
+ command)
+ local -a commands
+ local application_directory
+ __rails_setup_application_directory
+
+ if [ -n "$application_directory" ]; then
+ commands=(
+ {generate,g}'[Generate new code]'
+ {console,c}'[Start the Rails console]'
+ {server,s}'[Start the Rails server]'
+ {dbconsole,db}'[Start a console for the database specified in config/database.yml]'
+ application'[Generate the Rails application code]'
+ {destroy,d}'[Undo code generated with "generate"]'
+ benchmarker'[See how fast a piece of code runs]'
+ profiler'[Get profile information from a piece of code]'
+ plugin'[Install a plugin]'
+ {runner,r}'[Run a piece of code in the application environment]'
+ {test,t}'[Run tests]'
+ )
+ else
+ commands=(
+ new'[Create a new Rails application]'
+ )
+ fi
+
+ _values 'command' $commands
+ ;;
+ esac
+}
+
+__rails_setup_application_directory() {
+ application_directory="$(pwd)"
+
+ while [ -n "$application_directory" ]; do
+ if [ -f "${application_directory}/script/rails" -o -f "${application_directory}/bin/rails" ]; then
+ return
+ fi
+ application_directory="${application_directory%/*}"
+ done
+
+ application_directory=
+}
+
+__rails_setup_rails_options() {
+ rails_options=(
+ {-h,--help}'[Show this help message and quit]'
+ {-v,--version}'[Show Rails version number and quit]'
+ )
+}
+
+__rails_setup_runtime_options() {
+ runtime_options=(
+ '(-f --force)'{-f,--force}'[Overwrite files that already exist]'
+ '(-p --pretend)'{-p,--pretend}'[Run but do not make any changes]'
+ '(-q --quiet)'{-q,--quiet}'[Suppress status output]'
+ '(-s --skip)'{-s,--skip}'[Skip files that already exist]'
+ )
+}
+
+__rails_setup_generators_options() {
+ local -a runtime_options
+ __rails_setup_runtime_options
+
+ generators_options=(
+ $runtime_options
+ --skip-namespace'[Skip namespace (affects only isolated applications)]'
+ --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]"
+ )
+}
+
+__rails_setup_model_generators_options() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ model_generators_options=(
+ $generators_options
+ '(-o --orm)'{-o,--orm=}'[Orm to be invoked]:orm'
+ )
+}
+
+__rails_setup_resource_generators_options() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ resource_generators_options=(
+ $model_generators_options
+ --force-plural'[Forces the use of a plural ModelName]'
+ --resource-route'[Indicates when to generate resource route]: :__rails_boolean'
+ )
+}
+
+__rails_boolean() {
+ _values 'boolean' 'true' 'false'
+}
+
+__rails_migration_fields() {
+ if compset -P '*:*:'; then
+ _values 'index' 'index' 'uniq'
+ else
+ if compset -P '*:'; then
+ _values -s ':' 'type' 'string' 'text' 'integer' 'float' 'decimal' 'datetime' 'timestamp' 'time' 'date' 'binary' 'boolean' 'references'
+ else
+ _guard '[[:alnum:]_]#' 'field'
+ fi
+ fi
+}
+
+_rails_generate() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_generate_${words[1]}" || _rails_generate_default
+ else
+ __rails_generate_commands
+ fi
+}
+
+_rails_g() {
+ _rails_generate
+}
+
+__rails_generate_commands() {
+ local context curcontext="$curcontext" update_policy
+
+ zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+ if [ -z "$update_policy" ]; then
+ zstyle ":completion:${curcontext}:" cache-policy _rails_generate_commands_caching_policy
+ fi
+
+ local application_directory
+ __rails_setup_application_directory
+ local cache_name
+ cache_name="rails/${application_directory##*/}/all_generators"
+ if ! _retrieve_cache ${cache_name}; then
+ local -a all_generators
+ all_generators=($(_call_program rails_generators rails generate 2> /dev/null | awk '/^ [a-zA-Z_]+/{ print $1 }'))
+ _store_cache ${cache_name} all_generators
+ fi
+
+ local -a rails_generators
+ rails_generators=(${all_generators:#*:*})
+ _describe -t rails_generators 'rails generator' rails_generators
+
+ local -a -U namespaces
+ local namespace
+ local -a generators
+ namespaces=(${(R)${(M)all_generators:#*:*}%:*})
+ for namespace in $namespaces; do
+ generators=(${${(M)all_generators:#${namespace}:*}/:/\\:})
+ _describe -t ${namespace}_generators "${namespace/_/ } generator" generators
+ done
+}
+
+_rails_generate_commands_caching_policy() {
+ local application_directory
+ __rails_setup_application_directory
+
+ if [ "${application_directory}/Gemfile" -nt "$1" ]; then
+ return 0
+ fi
+
+ local -a oldp
+ oldp=( "$1"(Nmw+1) )
+ (( $#oldp ))
+}
+
+_rails_generate_default() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '*:argument'
+}
+
+_rails_generate_assets() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-j --javascripts)'{-j,--javascripts}'[Generate JavaScripts]: :__rails_boolean' \
+ '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+ '(-je --javascript-engine)'{-je,--javascript-engine=}'[Engine for JavaScripts]:javascript engine' \
+ '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_controller() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ --helper'[Indicates when to generate helper]: :__rails_boolean' \
+ --assets'[Indicates when to generate assets]: :__rails_boolean' \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "action"'
+}
+
+_rails_generate_generator() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --namespace'[Namespace generator under lib/generators/name]: :__rails_boolean' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_helper() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_integration_test() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --integration-tool='[Integration tool to be invoke]:integration tool' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_jbuilder() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_mailer() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "method"'
+}
+
+_rails_generate_migration() {
+ local -a modelgenerators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_model() {
+ _rails_generate_migration
+}
+
+_rails_generate_observer() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_performance_test() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --performance-tool='[Performance tool to be invoked]:performance tool' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_resource() {
+ local context state line curcontext="$curcontext"
+
+ local -a resource_generators_options
+ __rails_setup_resource_generators_options
+
+ _arguments -C \
+ $resource_generators_options \
+ '(-c --resource-controller)'{-c,--resource-controller=}'[Resource controller to be invoked]:name' \
+ '(-a --actions)'{-a,--actions=}'[Actions for the resource controller]: :->actions' \
+ ': :->name' \
+ '*: :->fields'
+
+ if (( words[(I)(--actions=*|-a)] > 0 && words[(I)(--actions=*|-a)] == words[(I)-*] )); then
+ state=actions
+ fi
+
+ case "$state" in
+ actions)
+ _guard "[[:alnum:]_]#" "actions"
+ ;;
+ name)
+ _guard "^-*" "name"
+ ;;
+ fields)
+ __rails_migration_fields
+ ;;
+ esac
+}
+
+_rails_generate_scaffold() {
+ local -a resource_generators_options
+ __rails_setup_resource_generators_options
+
+ _arguments \
+ $resource_generators_options \
+ '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+ '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+ '(-c --scaffold-controller)'{-c,--scaffold-controller=}'[Scaffold controller to be invoked]:name' \
+ --assets'[Indicates when to generate assets]:boolean:(true false)' \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_scaffold_controller() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ --helper'[Indicates when to generate helper]: :__rails_boolean' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_session_migration() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_task() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "action"'
+}
+
+_rails_console() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-s --sandbox)'{-s,--sandbox}'[Rollback database modifications on exit]' \
+ --debugger'[Enable ruby-debugging for the console]'
+}
+
+_rails_c() {
+ _rails_console
+}
+
+_rails_server() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-p --port)'{-p,--port=}'[Runs Rails on the specified port]: :_guard "[[\:digit\:]]#" "port"' \
+ '(-b --binding)'{-b,--binding=}'[Binds Rails to the specified ip]:ip:_hosts' \
+ '(-c --config)'{-c,--config=}'[Use custom rackup configuration file]:file:_files -g "*.ru"' \
+ '(-d --daemon)'{-d,--daemon}'[Make server run as a Daemon]' \
+ '(-u --debugger)'{-u,--debugger}'[Enable ruby-debugging for the server]' \
+ '(-e --environment)'{-e,--environment=}'[Specifies the environment to run this server under (test/development/production)]:name:(test development production)' \
+ '(-P --pid)'{-P,--pid=}'[Specifies the PID file]:pid:_files -g "*.pid"'
+}
+
+_rails_s() {
+ _rails_server
+}
+
+_rails_dbconsole() {
+ _arguments \
+ '(- *)'--help'[Show this help message]' \
+ '(-p --include-password)'{-p,--include-password}'[Automatically provide the password from database.yml]' \
+ --mode'[Automatically put the sqlite3 database in the specified mode (html, list, line, column)]:mode:(html list line column)' \
+ --header
+}
+
+_rails_new() {
+ local context state line curcontext="$curcontext"
+
+ local _a rails_options runtime_options
+ __rails_setup_rails_options
+ __rails_setup_runtime_options
+
+ _arguments -C \
+ $rails_options \
+ $runtime_options \
+ '(-r --ruby)'{-r,--ruby=}'[Path to the Ruby binary of your choice]:path' \
+ '(-b --builder)'{-b,--builder=}'[Path to a application builder (can be a filesystem path or URL)]: :->path_or_url' \
+ '(-m --template)'{-m,--template=}'[Path to an application template (can be a filesystem path or URL)]: :->path_or_url' \
+ --skip-gemfile"[Don't create a Gemfile]" \
+ --skip-bundle"[Don't run bundle install]" \
+ '(-G --skip-git)'{-G,--skip-git}'[Skip Git ignores and keeps]' \
+ '(-O --skip-active-record)'{-O,--skip-active-record}'[Skip Active Record files]' \
+ '(-S --skip-sprockets)'{-S,--skip-sprockets}'[Skip Sprockets files]' \
+ '(-d --database)'{-d,--database=}'[Preconfigure for selected database]:database:(mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc)' \
+ '(-j --javascript)'{-j,--javascript=}'[Preconfigure for selected JavaScript library]:javascript' \
+ '(-J --skip-javascript)'{-J,--skip-javascript}'[Skip JavaScript files]' \
+ --dev'[Setup the application with Gemfile pointing to your Rails checkout]' \
+ --edge'[Setup the application with Gemfile pointing to Rails repository]' \
+ '(-T --skip-test-unit)'{-T,--skip-test-unit}'[Skip Test::Unit files]' \
+ --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" \
+ ':app path:_directories'
+
+ case "$state" in
+ path_or_url)
+ _alternative \
+ 'files:path:_files -g "*.rb"' \
+ 'url:url:_urls'
+ ;;
+ esac
+}
+
+_rails_application() {
+ _rails_new
+}
+
+_rails_db() {
+ _rails_dbconsole
+}
+
+_rails_destroy() {
+ _rails_generate
+}
+
+_rails_d() {
+ _rails_destroy
+}
+
+_rails_benchmarker() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+ '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+ '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "wall_time" "memory" "objects" "gc_runs" "gc_time"' \
+ '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_profiler() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+ '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+ '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "process_time" "memory" "objects"' \
+ '(-f --formats)'{-f,--formats}'[Formats to output to]: :_values -s "," "formats" "flat" "graph" "html" "call_tree" "call_stack"' \
+ '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_plugin() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_plugin_${words[1]}" || _nothing
+ else
+ __rails_plugin_commands
+ fi
+}
+
+__rails_plugin_commands() {
+ _values 'plugin command' \
+ install'[Install plugin(s) from known repositories or URLs]' \
+ remove'[Uninstall plugins]' \
+ new
+}
+
+_rails_plugin_install() {
+ _arguments \
+ '(-x --externals)'{-x,--externals}'[Use svn:externals to grab the plugin. Enables plugin updates and plugin versioning]' \
+ '(-o --checkout)'{-o,--checkout}'[Use svn checkout to grab the plugin. Enables updating but does not add a svn:externals entry]' \
+ '(-e --export)'{-e,--export}'[Use svn export to grab the plugin. Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry]' \
+ '(-q --quiet)'{-q,--quiet}'[Suppresses the output from installation. Ignored if -v is passed (rails plugin -v install ...)]' \
+ '(-r --revision)'{-r,--revision=}'[Checks out the given revision from subversion or git. Ignored if subversion/git is not used]:revision' \
+ '(-f --force)'{-f,--force}"[Reinstalls a plugin if it's already installed]" \
+ '*:plugin:_urls'
+}
+
+_rails_plugin_remove() {
+ local -a plugins
+
+ plugins=($(_call_program rails_plugins ls -1 vendor/plugins))
+
+ _describe -t plugins 'plugin' plugins
+}
+
+_rails_plugin_new() {
+ _rails_new
+}
+
+_rails_runner() {
+ local context state line curcontext="$curcontext"
+
+ _arguments -C \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-e --environment)'{-e,--environment=}'[Specifies the environment for the runner to operate under (test/development/production)]:name:(test development production)' \
+ ': :->code_or_path'
+
+ case "$state" in
+ code_or_path)
+ _alternative \
+ 'files:filename:_files -g "*.rb"' \
+ 'codes:ruby code:_guard "^-*" "ruby code"'
+ ;;
+ esac
+}
+
+_rails_r() {
+ _rails_runner
+}
+
+_rails_test() {
+ local context state line curcontext="$curcontext"
+
+ _arguments -C \
+ ': :->path'
+
+ case "$state" in
+ path)
+ _alternative \
+ 'files:filename:_files -g "*.rb"'
+ ;;
+ esac
+}
+
+_rails_t() {
+ _rails_test
+}
+
+_rails "$@"
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 2
+# indent-tabs-mode: nil
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index 29b413434..b11cbb5c7 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -1,3 +1,4 @@
+# rails command wrapper
function _rails_command () {
if [ -e "bin/stubs/rails" ]; then
bin/stubs/rails $@
@@ -12,28 +13,31 @@ function _rails_command () {
fi
}
+alias rails='_rails_command'
+compdef _rails_command=rails
+
+# rake command wrapper
function _rake_command () {
if [ -e "bin/stubs/rake" ]; then
bin/stubs/rake $@
elif [ -e "bin/rake" ]; then
bin/rake $@
- elif type bundle &> /dev/null && ([ -e "Gemfile" ] || [ -e "gems.rb" ]); then
+ elif type bundle &> /dev/null && [[ -e "Gemfile" || -e "gems.rb" ]]; then
bundle exec rake $@
else
command rake $@
fi
}
-alias rails='_rails_command'
-compdef _rails_command=rails
-
alias rake='_rake_command'
compdef _rake_command=rake
+# Log aliases
alias devlog='tail -f log/development.log'
alias prodlog='tail -f log/production.log'
alias testlog='tail -f log/test.log'
+# Environment settings
alias -g RED='RAILS_ENV=development'
alias -g REP='RAILS_ENV=production'
alias -g RET='RAILS_ENV=test'
@@ -43,47 +47,69 @@ alias rc='rails console'
alias rcs='rails console --sandbox'
alias rd='rails destroy'
alias rdb='rails dbconsole'
+alias rdc='rails db:create'
+alias rdd='rails db:drop'
+alias rdm='rails db:migrate'
+alias rdmd='rails db:migrate:down'
+alias rdmr='rails db:migrate:redo'
+alias rdms='rails db:migrate:status'
+alias rdmtc='rails db:migrate db:test:clone'
+alias rdmu='rails db:migrate:up'
+alias rdr='rails db:rollback'
+alias rdrs='rails db:reset'
+alias rds='rails db:seed'
+alias rdsl='rails db:schema:load'
+alias rdtc='rails db:test:clone'
+alias rdtp='rails db:test:prepare'
alias rgen='rails generate'
alias rgm='rails generate migration'
+alias rlc='rails log:clear'
+alias rmd='rails middleware'
+alias rn='rails notes'
alias rp='rails plugin'
alias rr='rails routes'
alias rrg='rails routes | grep'
-alias ru='rails runner'
alias rs='rails server'
+alias rsb='rails server --bind'
alias rsd='rails server --debugger'
alias rsp='rails server --port'
-alias rsb='rails server --bind'
+alias rsts='rails stats'
+alias rt='rails test'
+alias ru='rails runner'
+
+# Foreman aliases
+alias fmns='foreman start'
# Rake aliases
-alias rdm='rake db:migrate'
-alias rdmr='rake db:migrate:redo'
-alias rdmd='rake db:migrate:down'
-alias rdms='rake db:migrate:status'
-alias rdmu='rake db:migrate:up'
-alias rdr='rake db:rollback'
-alias rdc='rake db:create'
-alias rds='rake db:seed'
-alias rdd='rake db:drop'
-alias rdrs='rake db:reset'
-alias rdtc='rake db:test:clone'
-alias rdtp='rake db:test:prepare'
-alias rdmtc='rake db:migrate db:test:clone'
-alias rdsl='rake db:schema:load'
-alias rlc='rake log:clear'
-alias rn='rake notes'
-alias rt='rake test'
-alias rmd='rake middleware'
-alias rsts='rake stats'
+alias rkdc='rake db:create'
+alias rkdd='rake db:drop'
+alias rkdm='rake db:migrate'
+alias rkdmd='rake db:migrate:down'
+alias rkdmr='rake db:migrate:redo'
+alias rkdms='rake db:migrate:status'
+alias rkdmtc='rake db:migrate db:test:clone'
+alias rkdmu='rake db:migrate:up'
+alias rkdr='rake db:rollback'
+alias rkdrs='rake db:reset'
+alias rkds='rake db:seed'
+alias rkdsl='rake db:schema:load'
+alias rkdtc='rake db:test:clone'
+alias rkdtp='rake db:test:prepare'
+alias rklc='rake log:clear'
+alias rkmd='rake middleware'
+alias rkn='rake notes'
+alias rksts='rake stats'
+alias rkt='rake test'
# legacy stuff
-alias sstat='thin --stats "/thin/stats" start'
-alias sg='ruby script/generate'
+alias sc='ruby script/console'
alias sd='ruby script/destroy'
+alias sd='ruby script/server --debugger'
+alias sg='ruby script/generate'
alias sp='ruby script/plugin'
alias sr='ruby script/runner'
alias ssp='ruby script/spec'
-alias sc='ruby script/console'
-alias sd='ruby script/server --debugger'
+alias sstat='thin --stats "/thin/stats" start'
function remote_console() {
/usr/bin/env ssh $1 "( cd $2 && ruby script/console production )"