sidekick 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +39 -34
- data/VERSION +1 -1
- data/lib/sidekick/helpers.rb +2 -2
- data/lib/template +1 -1
- data/sidekick.gemspec +2 -2
- metadata +3 -3
data/README.textile
CHANGED
@@ -1,48 +1,45 @@
|
|
1
1
|
h1. Sidekick
|
2
2
|
|
3
3
|
|
4
|
-
Sidekick is a command line tool to automatically trigger
|
4
|
+
"Sidekick":http://ibuildlegobricks.tumblr.com/post/1398895151/automate-common-tasks-with-sidekick is a command line tool to automatically trigger actions on certain events, as defined per project, in a local @.sidekick@ file in your project folder.
|
5
5
|
|
6
|
-
h3. Features
|
7
|
-
|
8
|
-
* Simple, powerful dsl. "Examples here.":http://github.com/jbe/sidekick/blob/master/lib/template
|
9
|
-
* Pre-defined triggers.
|
10
|
-
* Pre-defined helpers for common tasks.
|
11
|
-
* Easy to write new triggers and helpers.
|
12
|
-
* Esily compiles most languages thanks to "Tilt":http://github.com/rtomayko/tilt.
|
13
|
-
|
14
6
|
h3. Use cases
|
15
7
|
|
16
|
-
*
|
17
|
-
*
|
18
|
-
* Continuous testing with notifications
|
8
|
+
* Restart server when code is changed
|
9
|
+
* Compile Sass and CoffeeScript templates when they are updated
|
10
|
+
* Continuous testing, with notifications and flexible hooks
|
19
11
|
* Periodically running commands
|
20
12
|
|
13
|
+
You typically run Sidekick in the background while coding, to automate all this.
|
21
14
|
|
22
|
-
|
15
|
+
h3. Features
|
23
16
|
|
17
|
+
* Simple and powerful DSL. "Examples here.":http://github.com/jbe/sidekick/blob/master/lib/template
|
18
|
+
* Use triggers to watch files etc.
|
19
|
+
* Use helpers to compile templates etc.
|
20
|
+
* Easy to write new triggers and helpers.
|
21
|
+
* Already compiles many languages, thanks to "Tilt":http://github.com/rtomayko/tilt.
|
24
22
|
|
25
|
-
h2. Basic usage
|
26
23
|
|
27
|
-
Install with @gem install sidekick@ and invoke it using the @sidekick@ shell command in your project folder. If you do not have a @.sidekick@ file, you will be offered a template.
|
28
24
|
|
29
|
-
|
25
|
+
h2. Basic usage
|
30
26
|
|
31
|
-
|
27
|
+
Install with @gem install sidekick@ and invoke using the @sidekick@ command in your project folder. If you do not have a @.sidekick@ file, you will be offered a template.
|
32
28
|
|
33
29
|
h3. Currently available triggers:
|
34
30
|
|
35
|
-
|@watch(glob)@|run on file changes matching @glob@. Globs like
|
36
|
-
|@every(duration)@|run every @duration@ seconds|
|
31
|
+
|@watch(glob) { ... }@|run on file changes matching @glob@. Globs like "Dir[]":http://ruby-doc.org/core/classes/Dir.html#M002323. |
|
32
|
+
|@every(duration) { ... }@|run every @duration@ seconds|
|
37
33
|
|
38
34
|
h3. Currently available helpers:
|
39
35
|
|
40
|
-
|@sh(cmd)@|run shell command,
|
41
|
-
|@log(str)@|log events to
|
42
|
-
|@notify@|notify user via growl, libnotify etc
|
43
|
-
|@auto_compile(source_glob, target_path)@|compile
|
36
|
+
|@sh(cmd)@|run shell command, printing and returning output|
|
37
|
+
|@log(str)@|log events to @STDOUT@.|
|
38
|
+
|@notify(message, title='sidekick')@|notify user via growl, libnotify etc.|
|
39
|
+
|@auto_compile(source_glob, target_path)@|compile on file changes using tilt (language automatically detected -- see example usage in template, and tilt documentation)|
|
44
40
|
|@restart_passenger@|restart passenger based environments by touching tmp/restart.txt|
|
45
|
-
|
41
|
+
|
42
|
+
Note how some helpers, like @auto_compile@ set up both triggers and actions for you.
|
46
43
|
|
47
44
|
h2. Writing extensions
|
48
45
|
|
@@ -60,17 +57,25 @@ To add more helpers, simply add methods to @Sidekick::Helpers@, like this:
|
|
60
57
|
</code>
|
61
58
|
</pre>
|
62
59
|
|
63
|
-
|
60
|
+
They will be available to other helpers and to @.sidekick@ files. Also, if adding a group of methods it may be cleaner to use a separate module under @Sidekick::Helpers@, and then including it.
|
64
61
|
|
65
62
|
|
66
63
|
h3. Writing new triggers
|
67
64
|
|
68
|
-
To add new triggers, you have two options: blocks, and classes. Blocks are best for simple stuff, while classes are good for more complex code.
|
65
|
+
To add new triggers, you have two options: blocks, and classes. Blocks are best for simple stuff, while classes are good for more complex code. Here are some examples of how you set up a new trigger using a block:
|
69
66
|
|
70
67
|
<pre>
|
71
68
|
<code lang='ruby'>
|
72
69
|
|
73
|
-
register
|
70
|
+
Sidekick::Triggers.register(:never) {|callback| }
|
71
|
+
# available in .sidekick like:
|
72
|
+
# never { puts 'nobody listens to me' }
|
73
|
+
|
74
|
+
Sidekick::Triggers.register(:on_startup) {|callback| callback.call }
|
75
|
+
# available like:
|
76
|
+
# on_startup { puts 'better to do this in the main scope than here' }
|
77
|
+
|
78
|
+
Sidekick::Triggers.register(:every) do |callback, duration|
|
74
79
|
timeshare(duration) do
|
75
80
|
callback.call
|
76
81
|
end
|
@@ -79,9 +84,9 @@ end
|
|
79
84
|
</code>
|
80
85
|
</pre>
|
81
86
|
|
82
|
-
|
87
|
+
The last example is the internal implementation of the @every@ trigger seen earlier, which calls the block periodically. @callback@ is the block given to the trigger in the @.sidekick@ file. @timeshare@ is a special method provided by Sidekick to all extensions, to register the supplied block to be called every @duration@ seconds. This is useful for polling something without blocking or doing something out of this world.
|
83
88
|
|
84
|
-
|
89
|
+
Now, here is the last example written as a class:
|
85
90
|
|
86
91
|
<pre>
|
87
92
|
<code lang='ruby'>
|
@@ -107,17 +112,17 @@ Sidekick::Triggers.register_class(:watch, Watch)
|
|
107
112
|
</code>
|
108
113
|
</pre>
|
109
114
|
|
110
|
-
The @poll@ and @poll_freq@ methods are optional. @poll@ functions like the callback block in the previous example, while @poll_freq@ functions like the @duration@ argument, specifying how often to call @poll
|
115
|
+
The @poll@ and @poll_freq@ methods are optional. @poll@ functions like the callback block in the previous example, while @poll_freq@ functions like the @duration@ argument, specifying how often to call @poll@. Only integers (whole seconds) are accepted. Finally, notice the last statement, which registers the class.
|
111
116
|
|
112
|
-
h2.
|
117
|
+
h2. Fun facts
|
113
118
|
|
114
|
-
The main code chunk of Sidekick is just under 100 lines, including documentation, excluding the default triggers and helpers.
|
119
|
+
The main code chunk of Sidekick is just under 100 lines, including documentation, excluding the default triggers and helpers.
|
115
120
|
|
116
|
-
You can keep your extensions in the @.sidekick@ file itself, or package them in gems, or ask me to merge them into the main repository.
|
121
|
+
You can keep your extensions in the @.sidekick@ file itself, or package them in gems, or (better) ask me to merge them into the main repository.
|
117
122
|
|
118
123
|
Similar projects:
|
119
124
|
|
120
|
-
* "Guard":http://github.com/guard/guard (too enterprisey
|
125
|
+
* "Guard":http://github.com/guard/guard (too enterprisey imho)
|
121
126
|
|
122
127
|
|
123
128
|
h3. Copyright
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/sidekick/helpers.rb
CHANGED
@@ -79,8 +79,8 @@ module Sidekick::Helpers
|
|
79
79
|
watch(source) do |files|
|
80
80
|
files.each do |file|
|
81
81
|
begin
|
82
|
-
target.gsub
|
83
|
-
File.open(
|
82
|
+
t = target.gsub ':name', File.basename(file, '.*')
|
83
|
+
File.open(t, 'w') do |f|
|
84
84
|
f.write(Tilt.new(file).render)
|
85
85
|
end
|
86
86
|
log "rendered #{file} => #{target}"
|
data/lib/template
CHANGED
data/sidekick.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sidekick}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jostein Berre Eliassen,"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-26}
|
13
13
|
s.default_executable = %q{sidekick}
|
14
14
|
s.description = %q{Automatically run common development tasks on events, as defined by a local .sidekick file. Easy, powerful dsl. Several pre-defined triggers. Helper methods for common tasks. Easy to extend with new triggers and helpers.}
|
15
15
|
s.email = %q{post@jostein.be}
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 2
|
9
|
+
version: 0.4.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jostein Berre Eliassen,
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-26 00:00:00 +02:00
|
18
18
|
default_executable: sidekick
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|