sidekick 0.2.0 → 0.2.1
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/.sidekick +2 -6
- data/README.textile +19 -23
- data/VERSION +1 -1
- data/lib/sidekick/helpers.rb +3 -2
- data/lib/sidekick/triggers/watch.rb +12 -10
- data/sidekick.gemspec +1 -1
- metadata +2 -2
data/.sidekick
CHANGED
@@ -3,15 +3,11 @@
|
|
3
3
|
# by doing. Proper tests are welcome.
|
4
4
|
|
5
5
|
watch '**/*.rb' do |paths|
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
every(5) do
|
10
|
-
log 'Five seconds passed!'
|
6
|
+
log 'files updated'
|
11
7
|
end
|
12
8
|
|
13
9
|
every(20) do
|
14
|
-
notify '
|
10
|
+
notify sh('fortune')
|
15
11
|
end
|
16
12
|
|
17
13
|
# vim:ft=ruby
|
data/README.textile
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
h1. Sidekick
|
1
|
+
h1. Sidekick
|
2
2
|
|
3
3
|
Sidekick is a command line tool to automatically trigger certain tasks following certain events, as defined in a @.sidekick@ file in your project folder.
|
4
4
|
|
5
5
|
You would typically run it in the background while coding, to automatize things like restarting development servers on file changes, recompiling assets, continously running tests or periodically running commands.
|
6
6
|
|
7
|
-
It is very easy to set up and extend.
|
8
|
-
|
9
7
|
|
10
8
|
h2. Basic usage
|
11
9
|
|
12
|
-
Install with @gem install sidekick@ and invoke it using the @sidekick@ shell command in your project folder. You should have a @.sidekick@ file in
|
10
|
+
Install with @gem install sidekick@ and invoke it using the @sidekick@ shell command in your project folder. You should have a @.sidekick@ file in it. Here is a sample:
|
13
11
|
|
14
12
|
<pre>
|
15
13
|
<code lang='ruby'>
|
@@ -21,34 +19,32 @@ watch '**/*.rb' do |paths|
|
|
21
19
|
notify 'Are you tired of being notified yet?'
|
22
20
|
end
|
23
21
|
|
24
|
-
#
|
25
|
-
every(10) do
|
26
|
-
sh
|
22
|
+
# keeps the developers mind agile
|
23
|
+
every(10) do
|
24
|
+
notify sh('fortune')
|
27
25
|
end
|
28
26
|
|
29
27
|
</code>
|
30
28
|
</pre>
|
31
29
|
|
32
|
-
The @watch@ and @every@ commands are are triggers, while @notify@, @sh@, and @restart_passenger@ are helper methods.
|
30
|
+
The @watch@ and @every@ commands above are are triggers, while @notify@, @sh@, and @restart_passenger@ are helper methods.
|
33
31
|
|
34
|
-
|
32
|
+
h3. Currently available triggers:
|
35
33
|
|
36
|
-
|@watch@|run on file changes|
|
37
|
-
|@every(duration)@|run every @duration@
|
34
|
+
|@watch(glob)@|run on file changes matching @glob@. Globs like Dir[]. |
|
35
|
+
|@every(duration)@|run every @duration@ seconds|
|
38
36
|
|
39
|
-
|
37
|
+
h3. Currently available helpers:
|
40
38
|
|
41
39
|
|@sh@|run shell command, showing output, like in rake|
|
42
40
|
|@log@|log events to screen. cleaner than puts.|
|
43
41
|
|@notify@|notify user via growl, libnotify etc|
|
44
42
|
|@running?(platform)@|os can be one of @[:linux, :darwin, :other]@|
|
45
|
-
|@load_gem?(name)@|tries to load gem, true if success. otherwise false. informs user that more functions are available
|
43
|
+
|@load_gem?(name)@|tries to load gem, true if success. otherwise false. informs user that more functions are available if they make it available|
|
46
44
|
|@restart_passenger@|restart passenger based environments by touching tmp/restart.txt|
|
47
45
|
|
48
46
|
h2. Writing extensions
|
49
47
|
|
50
|
-
Sidekick is very easy to extend.
|
51
|
-
|
52
48
|
h3. Writing new helpers
|
53
49
|
|
54
50
|
To add more helpers, simply add methods to @Sidekick::Helpers@, like this:
|
@@ -63,7 +59,7 @@ To add more helpers, simply add methods to @Sidekick::Helpers@, like this:
|
|
63
59
|
</code>
|
64
60
|
</pre>
|
65
61
|
|
66
|
-
When adding a group it
|
62
|
+
When adding a group of methods it may be cleaner to use a separate module under @Sidekick::Helpers@, and then include it.
|
67
63
|
|
68
64
|
|
69
65
|
h3. Writing new triggers
|
@@ -82,7 +78,7 @@ end
|
|
82
78
|
</code>
|
83
79
|
</pre>
|
84
80
|
|
85
|
-
This is the implementation of the @every@ function mentioned earlier. The @timeshare@ method is provided by Sidekick, and will call the supplied block
|
81
|
+
This is the internal implementation of the @every@ function mentioned earlier. The @timeshare@ method is provided by Sidekick to all extensions, and will call the supplied block each @duration@ seconds. This is also useful for polling something without blocking or forking.
|
86
82
|
|
87
83
|
Triggers can also be written as a class interface. Here is an example of the above, translated as a class:
|
88
84
|
|
@@ -105,18 +101,18 @@ class Sidekick::Triggers::Every
|
|
105
101
|
end
|
106
102
|
end
|
107
103
|
|
104
|
+
Sidekick::Triggers.register_class(:watch, Watch)
|
105
|
+
|
108
106
|
</code>
|
109
107
|
</pre>
|
110
108
|
|
111
|
-
Here, the optional @poll@ method functions like the callback block in the previous example. The @poll_freq@ method is also optional, and determines the frequency in seconds with which to call @poll@.
|
112
|
-
|
113
|
-
h3. When writing your own extensions
|
109
|
+
Here, the optional @poll@ method functions like the callback block in the previous example. The @poll_freq@ method is also optional, and determines the frequency in seconds with which to call @poll@. Finally, notice the last statement, which registers the class.
|
114
110
|
|
115
|
-
|
111
|
+
h2. Final lines...
|
116
112
|
|
117
|
-
|
113
|
+
The main code chunk is just under 100 lines including documentation, excluding the default triggers and helpers. Why not read it..?
|
118
114
|
|
119
|
-
|
115
|
+
You can keep your extensions in the @.sidekick@ file itself, or package in a separate gem, or ask me to merge them into the main repository.
|
120
116
|
|
121
117
|
I got a bit of inspiration from the somewhat similar project "Guard":http://github.com/guard/guard
|
122
118
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/sidekick/helpers.rb
CHANGED
@@ -3,14 +3,20 @@
|
|
3
3
|
module Sidekick::Triggers::Watch
|
4
4
|
|
5
5
|
def self.new(*args)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
|
7
|
+
name, adapter_class = {
|
8
|
+
:linux => [nil, Polling], # Ready to implement fs-event
|
9
|
+
:darwin => [nil, Polling], # and libnotify. Polling seems
|
10
|
+
:other => [nil, Polling] # to work perfectly though.
|
11
|
+
}[::Sidekick::Helpers.platform]
|
12
|
+
|
13
|
+
unless name.nil?
|
14
|
+
adapter_class = Polling unless Sidekick::Helpers.load_gem?(name)
|
15
|
+
end
|
16
|
+
adapter_class.new(*args)
|
11
17
|
end
|
12
18
|
|
13
|
-
class Polling
|
19
|
+
class Polling # todo: check for deletion
|
14
20
|
|
15
21
|
def initialize(callback, glob, ignore_first=false)
|
16
22
|
::Sidekick::Triggers.log "polling #{glob} for file changes.."
|
@@ -46,8 +52,4 @@ module Sidekick::Triggers::Watch
|
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
|
-
# TODO inotify and mac support
|
50
|
-
|
51
|
-
|
52
|
-
|
53
55
|
end
|
data/sidekick.gemspec
CHANGED