Class: Sake
- Inherits:
-
Object
- Object
- Sake
- Defined in:
- lib/sake.rb,
lib/help.rb,
lib/server.rb
Overview
Show all Sake tasks (but no local Rake tasks), optionally only those matching a pattern.
$ sake -T
$ sake -T db
Show tasks in a Rakefile, optionally only those matching a pattern.
$ sake -T file.rake
$ sake -T file.rake db
Install tasks from a Rakefile, optionally specifying specific tasks.
$ sake -i Rakefile
$ sake -i Rakefile db:remigrate
$ sake -i Rakefile db:remigrate routes
Examine the source of a Rake task.
$ sake -e routes
You can also examine the source of a task not yet installed.
$ sake -e Rakefile db:remigrate
Uninstall an installed task.
$ sake -u db:remigrate
Stores the source of a task into a pastie (pastie.caboo.se). Returns the url of the pastie to stdout.
$ sake -P routes
Can be passed one or more tasks.
Invoke a Sake task.
$ sake <taskname>
Some Sake tasks may depend on tasks which exist only locally.
For instance, you may have a db:version sake task which depends on the ‘environment’ Rake task. The ‘environment’ Rake task is one defined by Rails to load its environment. This db:version task will work when your current directory is within a Rails app because Sake knows how to find Rake tasks. This task will not work, however, in any other directory (unless a task named ‘environment’ indeed exists).
Sake can also serve its tasks over a network by launching a Mongrel handler. Pass the -S switch to start Sake in server mode.
$ sake -S
You can, of course, specify a port.
$ sake -S -p 1111
You can also daemonize your server for long term serving fun.
$ sake -S -d
Defined Under Namespace
Modules: Help, Server, Store, Version Classes: Task, TasksArray, TasksFile
Instance Method Summary collapse
-
#initialize(args) ⇒ Sake
constructor
The ‘application’ class, this is basically the controller which decides what to do then executes.
-
#run ⇒ Object
This method figures out what to do and does it.
Constructor Details
Instance Method Details
#run ⇒ Object
This method figures out what to do and does it. Basically a big switch. Note the seemingly random return statements: return if you don’t want run_rake invoked. Some actions do want it invoked, however, so they don’t return (like version, which prints a Sake version then trusts Rake to do likewise).
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/sake.rb', line 100 def run ## # Show Sake tasks in the store or in a file, optionally searching for a pattern. # $ sake -T # $ sake -T db # $ sake -T file.rake # $ sake -T file.rake db # Show all Sake tasks in the store or in a file, optionally searching for a pattern. # $ sake -Tv # $ sake -Tv db # $ sake -Tv file.rake # $ sake -Tv file.rake db if (index = @args.index('-T') || @args.index('-Tv')) || @args.empty? display_hidden = true if @args.index('-Tv') begin tasks = TasksFile.parse(@args[index + 1]).tasks pattern = @args[index + 2] rescue => parse_error tasks = Store.tasks.sort pattern = index ? @args[index + 1] : nil end output = show_tasks(tasks, pattern, display_hidden) if output.empty? and @args.size > 1 # show_tasks didn't show any tasks case parse_error when Errno::ENOENT, OpenURI::HTTPError die "# Can't find file (or task) `#{@args[index + 1]}'" when SecurityError die "# SecurityError parsing `#{@args[index + 1]}'" else die "# No matching tasks for `#{pattern}'" if pattern end end return output ## # Install a Rakefile or a single Rake task # $ sake -i Rakefile # $ sake -i Rakefile db:migrate elsif index = @args.index('-i') return install(index) ## # Uninstall one or more Rake tasks from the Sake store. elsif index = @args.index('-u') return uninstall(index) ## # Examine a Rake task # $ sake -e routes # $ sake -e Rakefile db:remigrate elsif index = @args.index('-e') die examine(index) ## # Save one or more tasks to Pastie (http://pastie.caboos.se) # then return the new Pastie's url # $ sake -P routes # $ sake -P Rakefile db:remigrate elsif index = @args.index('-P') die Pastie.paste(examine(index)) ## # Start a Mongrel handler which will serve local Rake tasks # to anyone who wants them. # # $ sake -S # # Set a port # $ sake -S -p 1111 # # Daemonize # $ sake -S -d elsif @args.include? '-S' return serve_tasks ## # Prints Sake and Rake versions. elsif @args.include? '--version' version ## # Prints out the help screen. elsif @args.include? '-h' or @args.include? '--help' return Help.display end ## # Runs Rake proper, including our ~/.sake tasks. run_rake end |