snarl-snp 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
File without changes
@@ -3,7 +3,7 @@
3
3
  = Snarl-SNP
4
4
 
5
5
  snarl/snp(snarl-snp)は、Snarl を LAN 越しに操作するための SNP プロトコルクライアントを提供します。
6
- Ruby スクリプトの結果(の30字くらい)を Snarl に送ることができます。
6
+ Ruby スクリプトの結果の文字列や好きな文字列を Snarl に送ることができます。
7
7
 
8
8
  Snarl は Windows で動作する、Growl っぽい通知ポップアップを行うソフトウェアです。
9
9
  http://www.fullphat.net/
@@ -21,7 +21,7 @@ http://www.fullphat.net/dev/snp/index.htm
21
21
 
22
22
  gem install snarl-snp
23
23
 
24
- 内部では Rubygems を使用してないので、lib/snarl/snp.rb と lib/snarl/snp/ だけあればたぶん動きます。
24
+ 内部では Rubygems を使用してないので、インストールされたディレクトリごとどこかにコピーしてもたぶん動きます。
25
25
 
26
26
  == Contact
27
27
 
@@ -36,19 +36,90 @@ MIT License です。使用改変配布商用等を無制限に許可し、ソ
36
36
 
37
37
  == Usage
38
38
 
39
- require 'rubygems'
40
- require 'snarl/snp'
41
- require 'kconv' # on Ruby 1.8
42
-
43
- Snalr::SNP.open(Snarlが動いてるホスト) do |snp|
44
- snp.register(設定区別用アプリケーション名)
45
- snp.notification(メッセージ.tosjis) # toutf8かもしれない
46
- end
47
- # メッセージ表示をメッセージ種別ごとに分けたい場合は add_class(種別用クラス名) でクラスを追加したあとでクラス指定つきの notification をする
48
- # こちらの環境では日本語文字は Shift_JIS にする必要があるが世間様では UTF-8 で通るらしい(たぶんWindowsのバージョン依存)
39
+ バージョン 0.2.0 から動作の一部を YAML で設定できるようになりました。
40
+
41
+ require 'rubygems'
42
+ require 'snarl/snp'
43
+ Snarl::SNP.load(<<YAML)
44
+ host : 192.168.0.2
45
+ app : Ruby-Snarl
46
+ title : popup title
47
+ text : hello!
48
+ timeout : 5
49
+ unregister : false
50
+ YAML
51
+
52
+ require 'rubygems'
53
+ require 'snarl/snp'
54
+ yaml = <<YAML
55
+ host : 192.168.0.2
56
+ app : Ruby-Snarl
57
+ class :
58
+ - [class1, name1]
59
+ - [class2, name2]
60
+ YAML
61
+ Snarl::SNP.load(yaml) do |snp|
62
+ snp.notification(:title => 'title', :text => 'text', :class => 'class1')
63
+ end
64
+
65
+ require 'rubygems'
66
+ require 'snarl/snp'
67
+ Snarl::SNP.load(<<YAML)
68
+ host : 192.168.0.2
69
+ app : Ruby-Snarl
70
+ class :
71
+ - [class1, name1]
72
+ - [class2, name2]
73
+ notification :
74
+ title : title
75
+ text : text
76
+ class : class1
77
+ logfile : $stdout
78
+ YAML
79
+
80
+ require 'rubygems'
81
+ require 'snarl/snp'
82
+ Snarl::SNP.load(<<YAML)
83
+ host : 192.168.0.2
84
+ app : Ruby-Snarl
85
+ notification :
86
+ -
87
+ title : 1st post!
88
+ text : message1
89
+ -
90
+ title : 2nd post!
91
+ text : message2
92
+ YAML
93
+
94
+ 根性入れて書くとRubyスクリプトを最低限にできるので、これはこれでけっこうわかりやすいかと思います。
95
+ なお、YAMLヒアドキュメントとRdocは相性が悪く、このまま irb とかにコピペしてもインデントの関係で動作しません。お手数ですが行頭のスペースを4つだけ取ってください(4つ以上取ってはいけません)。
96
+ YAML の書式については YAML.rdoc.ja を見てください。
97
+
98
+ == SNP on command line
99
+
100
+ snarl_snp コマンドが付属しています。
101
+ snarl_snp -H host -a app -t title -m message などとして使用します。
102
+ Snarl::SNP.load('./snp.yml') のように使える YAML ファイルを snarl_snp --yaml=./snp.yml のようにして指定できます。
103
+
104
+ [-H host, --host=host] Snarl の動作しているホスト名 host を指定(デフォルト127.0.0.1)、-h ではないので注意
105
+ [-p port, --port=port] Snarl の待ち受けているポート番号 port を指定(デフォルト9887)
106
+ [-a app, --app=app] Snarl に登録するアプリケーション名 app を指定(デフォルトなし)、SNP#register で使用
107
+ [-c class, --class=class] Snarl で使用するクラス名 class を1つ指定(デフォルトなし)、SNP#add_class と notification で共用
108
+ [-t title, --title=title] ポップアップのタイトルを指定(デフォルトは 'Ruby-Snarl')、日本語はShift_JISかUTF-8
109
+ [-m msg, --text=msg] ポップアップの本文 msg を指定(たぶん必須)、日本語はShift_JISかUTF-8、-t ではないので注意
110
+ [-s sec, --timeout=sec] ポップアップが sec 秒後に自動で消えるよう指定(デフォルト10秒)、-t ではないので注意
111
+ [--icon=icon_path] ポップアップに使用するアイコン画像をURLかSnarlマシン内のファイルパスで指定(デフォルトは無変化)
112
+ [--sticky] ポップアップがクリックされるまで自動では消えないよう設定(デフォルト無効)、--timeout=0 と同じ
113
+ [-u, --unregister] --app で指定した app を Snarl の設定から即消去するかどうか(デフォルト非消去)、使用注意
114
+ [--verbose] SNP の通信ログを標準出力に表示するかどうか(デフォルト非表示)
115
+ [-y yamlpath, --yaml=yamlpath] 自動で SNP 設定と送信を行う YAML ファイルのパスを指定(デフォルトなし)
116
+
117
+ t オプションは title 用です。text でも timeout でもありません。
49
118
 
50
119
  == Short Exsamples
51
120
 
121
+ NOTE: YAML で完全に置き換わる、古いタイプの例がいくつかあります。
122
+
52
123
  @host は Snarl の動作している Windows マシンのホスト名か IP アドレスです(TCPSocket.open で使えるもの)。Snarl 本体の仕様上、LAN 内限定です。
53
124
  irb 上でコピペするときに便利なように、対象ホストは @host としか書いてません。事前に設定しておいてください。
54
125
 
@@ -57,6 +128,7 @@ irb 上でコピペするときに便利なように、対象ホストは @host
57
128
  Snarl が動作しているマシン上でスクリプトを動作させる場合は無設定の nil か "127.0.0.1" で OK です。
58
129
  何らかの理由で接続できない場合は Errno::ECONNREFUSED が出ます。
59
130
 
131
+
60
132
  === Popup Application (anonymous class)
61
133
 
62
134
  require 'rubygems'
@@ -80,10 +152,10 @@ Snarl の設定画面では「Ruby-Snarl」と名づけられます。
80
152
  end
81
153
 
82
154
  unregister は Snarl のポップアップ動作設定画面からアプリケーションを一旦削除します。
83
- register -> unregister という流れ的には使うべきっぽいんですが意外と不便なので多用しないことをお勧めします。
84
- 設定された内容自体は Snarl のユーザーファイルに保存されており、register コマンドが来たときに再度ロードされます。
155
+ 削除するとユーザーがスタイル設定などを行えなくなるので、使用には注意してください(通常、毎回 unregister する必要はありません)。
156
+ 設定された内容自体は unregister された後も Snarl のユーザー設定ファイルに保存されており、register コマンドが来たときに再度ロードされます。
85
157
 
86
- アプリケーションは Snarl を再起動すると画面からは一旦消えます(unregister と同じ動作)。設定完全消去はファイルを編集します。
158
+ アプリケーションは Snarl を再起動したときも画面から一旦消えます(unregister と同じ動作、よって register は送信時毎回行うのを推奨)。設定を完全消去したい場合はユーザー設定ファイルを直接手で編集します。
87
159
 
88
160
  === Popup Application (full)
89
161
 
@@ -119,7 +191,7 @@ Snarl の設定画面では「Ruby-Snarl の中のクラス type1」という区
119
191
  # Snarl::SNP.new(@host).request("type=SNP#?version=1.1#?action=unregister#?app=Ruby-Snarl\r\n")
120
192
 
121
193
  本来の SNP のコマンドを直接送ります。デバッグ用途などお好みで。Fatal なエラーはふつうに例外になります。
122
- 終端の \r\n は必須です。自動で付加することはありません。本文に \r が入っていると Snarl がそこでコマンド文字列を切ってしまうので改行は \n だけにしてください。なお、notification などでは内部処理されて取り除かれています。
194
+ 終端の \r\n は必須です。自動で付加することはありません。本文に \r が入っていると Snarl がそこでコマンド文字列を切ってしまうので改行は \n だけにしてください。なお、notification などでは内部処理されて "\r" は置換されています。
123
195
 
124
196
  === Multibyte Popup
125
197
 
@@ -128,13 +200,13 @@ Snarl の設定画面では「Ruby-Snarl の中のクラス type1」という区
128
200
  require 'kconv'
129
201
  Snarl::SNP.open(@host){|snp| snp.notification('タイトル'.tosjis, '日本語'.tosjis)}
130
202
 
131
- 対象の Snarl が動作している Windows で使用されているエンコーディングに変換して文字列を送ってください。
203
+ 対象の Snarl が動作している Windows で使用されているエンコーディングに変換して文字列を送ってください。Shift_JIS(Windows-31J、iconv では CP932)か UTF-8 になると思われます。
132
204
 
133
205
  == FAQ
134
206
 
135
207
  === autotest または autospec がポップアップを出さずに普通に終了してしまう
136
208
 
137
- Snarl::SNP が接続できなくてエラーを返しているのだと思われます。
209
+ Snarl::SNP が接続できなくてエラーを返しているのだと思われます(ひょっとしたらautosnp.rbが不具合起こしてるのかもしれませんが)。
138
210
  ホームディレクトリなどにある .autotest ファイルに Autotest::Snarl.host = '192.168.0.2' などと書いてください。
139
211
 
140
212
  require 'snarl/autotest'
@@ -146,19 +218,12 @@ autotest コマンドを環境変数 SNARL_HOST つきで起動しても構い
146
218
 
147
219
  などとすることでうまくいきます。
148
220
 
149
- === Snarl::SNP.show_message で日本語が化ける
221
+ === Snarl::SNP.show_message で日本語が中途半端に化ける
150
222
 
151
- 化ける場合は SNPSnarl の仕様かもしれません。適当に register してから notification(title, text) を使ってください。
223
+ 日本語は UTF-8Shift_JIS(古いWindows)で送ってください。
224
+ 中途半端に化ける場合は適当に register してから notification(title, text) すればだいたい大丈夫です。
152
225
  app コマンドの指定がない notification アクションはなぜか日本語が化けます。
153
- 事前に register されている場合、メッセージが ascii 文字だけの場合は問題ありません。
154
-
155
- show_message のウリは「Snarlの設定ファイルを汚さない匿名アプリケーションメッセージ」ですが、無論 register してしまうと Snarl に記録されます。
156
- 引数なしで register とだけ書くとデフォルトの Snarl::SNP::DEFAULT_APP が使用されますので、アプリケーション名をいちいち考えるのが煩雑な雑多なメッセージの場合はこれで代用するとやや簡便です。
157
-
158
- Snarl::SNP.open(@host) do |snp|
159
- snp.register
160
- snp.notification('ごはんが炊けたよ')
161
- end
226
+ 事前に register されている場合や、メッセージが ascii 文字だけの場合は問題ありません。
162
227
 
163
228
  === SNP.open はいつ TCP ソケットを使用している?
164
229
 
@@ -0,0 +1,200 @@
1
+ == YAML for Snarl::SNP.load(yaml)
2
+
3
+ yaml で指定された値は、Snarl::SNP の各メソッドの引数で上書きすることができます。
4
+ yaml で(キーごと)何も指定しなかった場合、nil という文字列、空の配列 [] を値に指定した場合は yaml としての初期値はないものとして扱います。
5
+
6
+ # クラスは指定しませんの図
7
+ - class : nil
8
+ - class : []
9
+ ('- class' 自体を書かない )
10
+
11
+ yaml で指定しなかった場合に動作がどうなるかは、Snarl::SNP の通常のメソッド引数と初期値に依ります。
12
+
13
+ なお、YAML は行頭の空白に意味を持たせているので、コピペには注意してください。
14
+ RDoc の制限でこのドキュメントの記述の先頭に空白4つが置かれていますが、これを入力してはいけません。
15
+
16
+ class :
17
+ - [classname1, classtitle1]
18
+ - [classname2, classtitle2]
19
+
20
+ は実際には、Rdoc で表現できませんが、「class:」「 - [classname1, classtitle1]」「 - [classname2, classtitle2]」の3行で構成されています。インデントは後ろ2行のみです。
21
+
22
+ === host
23
+
24
+ host : 192.168.0.2
25
+
26
+ Snarl の動作している Windows マシンのホスト名またはIPアドレスを指定します。TCPSocket.open が解釈できるならなんでも構いません。
27
+ yaml でもメソッド引数でも無指定だった時の最終的なデフォルト値は 127.0.0.1 です。
28
+
29
+ === port
30
+
31
+ port : 9887
32
+
33
+ Snarl が待ち受けているポート番号を指定します。通常は 9887 です。文字列は内部で整数に変換されます。
34
+ yaml でもメソッド引数でも無指定だった時の最終的なデフォルト値は 9887 です。
35
+
36
+ === app, name, register
37
+
38
+ app : Ruby-Snarl
39
+
40
+ Snarl に登録するアプリケーション名を指定します。SNP#register に渡され、SNP#add_class や SNP#notification で使用されます。
41
+ yaml でもメソッド引数でも無指定だった時の最終的なデフォルト値は nil で、いわゆる anonymous-app なメッセージとなります。
42
+
43
+ === class, add_class
44
+
45
+ class :
46
+ - [classname1, classtitle1]
47
+ - [classname2, classtitle2]
48
+
49
+ Snarl に登録するクラス名を指定します。SNP#add_class に渡され、SNP#notification で引数に使用することができます。
50
+ yaml でもメソッド引数でも無指定だった時の最終的なデフォルト値は nil で、クラス名登録は行われません。
51
+
52
+ 登録したいクラスがひとつで、Snarlの設定欄での表示用別名が必要ない場合は文字列ひとつでも動作します。
53
+
54
+ class : classname1
55
+
56
+ 表示用別名が必要なくて、クラス名を複数指定したい場合はクラス名の配列を渡します。
57
+
58
+ class : [classname1, classname2, classname3]
59
+
60
+ 表示用別名が必要な場合、[クラス名, 別名] という「要素2の配列」を登録したいぶんだけ持った配列を指定します。
61
+
62
+ class :
63
+ - [classname1, classtitle1]
64
+ or
65
+ class : [[classname1, classtitle1]]
66
+
67
+ "class : [classname1, classtitle1]" と書くと classtitle1 が2番目のクラス名として解釈されてしまうので、必ず配列の配列になるように書いてください。
68
+
69
+ === title
70
+
71
+ title : message title
72
+
73
+ message 項を1回送信した際にポップアップで表示されるメッセージタイトルを指定します。
74
+ notification 項が存在しなかったときに、SNP#notification で使用されます。notification 項に title 項が含まれていなかった場合にも使用されます。
75
+ YAML からのメッセージの送信には、なるべく notification 項を使ってください。
76
+ 日本語でも動作します。UTF-8 が動作するはずですが、Snarl が動作している Windows が Windows2000 の場合は Shift_JIS とかの文字列を指定します。変換は行わないので、YAML ファイルの時点で該当エンコーディングにしておいてください。
77
+ yaml でもメソッド引数でも無指定だった時は、Ruby-Snarl という文字列になります。
78
+
79
+ === text, message
80
+
81
+ text : 日本語があるときはyamlファイル自体をShift_JISかUTF-8にしてね!
82
+
83
+ message 項を1回送信した際にポップアップで表示されるメッセージ本文を指定します。
84
+ notification 項が存在しなかったときに、SNP#notification で使用されます。notification 項に text 項が含まれていなかった場合にも使用されます。
85
+ YAML からのメッセージの送信には、なるべく notification 項を使ってください。
86
+ 日本語でも動作します(改行は内部で "\n" に置換)。UTF-8 が動作するはずですが、Snarl が動作している Windows が Windows2000 の場合は Shift_JIS とかの文字列を指定します。変換は行わないので、YAML ファイルの時点で該当エンコーディングにしておいてください。
87
+ Snarl 本体での本文の長さの制限は2048文字です。2048バイトではなく、2048文字です。
88
+ yaml でもメソッド引数でも無指定だった時は、空っぽのメッセージ本文が送られます。
89
+
90
+ === timeout, sec
91
+
92
+ timeout : 30
93
+
94
+ 表示されるポップアップが、何秒後に自動で消えるかを整数文字列で指定します。
95
+ notification 項が存在しなかったときに、SNP#notification で使用されます。notification 項に timeout 項が含まれていなかった場合にも使用されます。
96
+ Snarl 本体の個々のアプリケーションへの設定(Apps)で Duration が AppDecides か Default だったときに有効です。
97
+ 0 を指定した場合はクリックされるまで消えません。
98
+ yaml でもメソッド引数でも無指定だった時は、10 秒でメッセージが消えます。
99
+
100
+ === sticky
101
+
102
+ sticky : true
103
+
104
+ 表示されるポップアップを、クリックされるまで消えないようにします。
105
+ snarl_snp コマンドの関係で残ってます。 timeout : 0 という記述に同じです。notification 項では sticky は無効です。
106
+ yaml でもメソッド引数でも無指定だった時は、false になります。timeout の秒数によります。
107
+
108
+ === icon
109
+
110
+ icon : http://exsample.com/good.png
111
+
112
+ ポップアップに表示されるアイコン画像のパスを指定します。
113
+ notification 項が存在しなかったときに、SNP#notification で使用されます。notification 項に icon 項が含まれていなかった場合にも使用されます。
114
+ URL が指定された場合は Snarl 本体がアクセスして使用します。絶対ファイルパスだった場合は Snarl が動作しているマシンのそのファイルを、相対パスを指定された場合は、たぶん Snarl が動作しているカレントディレクトリからの位置から計算された場所のファイルをアイコンとして使用するんじゃないかと思われます。
115
+ 幅の大きな画像は Snarl が自動で縮小します。対応フォーマットは Jpeg や GIF や PNG などのようです。
116
+ (Snarl 本体でのスタイル指定にもよりますが)適当な存在しないパスを指定すると、アイコンだけが抜けたポップアップになります。
117
+ yaml でもメソッド引数でも無指定だった時は、Snarl 本体でメッセージ表示に指定されているスタイルのデフォルトになります。
118
+
119
+ === notification
120
+
121
+ notifitation : [title, text, icon.jpg, 9, classname]
122
+ or
123
+ notifitation :
124
+ title : title
125
+ text : text
126
+ icon : icon.jpg
127
+ timeout : 9
128
+ class : classname
129
+ or
130
+ notifitation :
131
+ -
132
+ title : 1st message
133
+ text : one
134
+ -
135
+ title : 2nd message
136
+ text : two
137
+ - { title : 3rd message, title : three }
138
+
139
+ 送信するポップアップメッセージの設定を行います。Snarl::SNP#notifitation にそのまま渡されます。
140
+ notifitation 項に title 小項がなかった場合、外部の単体の title 項が、icon 小項、timeout 小項が無かった場合もそれぞれ外部の同項が参照されます。
141
+
142
+ # 結果的に一緒
143
+ notifitation :
144
+ title : title
145
+ text : text
146
+ timeout : 9
147
+
148
+ timeout : 9
149
+ notifitation :
150
+ title : title
151
+ text : text
152
+
153
+ [タイトル, 本文, アイコン, タイムアウト秒, クラス名] の配列か、title、text、icon、timeout、class をキーとした Hash になるように記述してください。
154
+ 不要なものは nil を指定するか、Hash の場合は記述しないでおきます。
155
+ 配列の場合は [タイトル, 本文] と [本文] という略記が動作可能です。
156
+ yaml でもメソッド引数でも無指定だった時は、notifitation 自体を行いません。
157
+
158
+ === unregister
159
+
160
+ unregister : true
161
+
162
+ 一連の送信動作の最後に Snarl::SNP#unregister を行うかどうかを設定します。
163
+ true を指定した場合、Snarl の設定画面から app 項で設定したアプリケーションが削除されます。
164
+ ユーザーがスタイル設定などを行えなくなるので、使用には注意をしてください(通常、unregister を毎回行う必要はありません)。
165
+ yaml でもメソッド引数でも無指定や false だった時は、unregister を行いません。
166
+
167
+ === logfile
168
+
169
+ logfile : $stdout
170
+
171
+ 通信ログの出力先のファイルパスを指定します。
172
+ $stdout や $stderr という文字列を指定すると、Ruby の $stdout(標準出力)や $stderr(標準エラー出力)に出力するようになります。
173
+ 出力フォーマットは Logger ライブラリの標準です。これを yaml から変えることは今はできません。Ruby スクリプトを書いてください。
174
+ load メソッドの第2引数で Logger オブジェクトが指定されたときは、Loggerオブジェクトの設定「で」上書きされてしまいます。
175
+ yaml でもメソッド引数でも無指定だった時は、ログ出力を行いません。
176
+
177
+ === loglevel
178
+
179
+ loglevel : INFO
180
+
181
+ 通信ログの出力レベルを指定します。必ず logfile 項でログ出力先を設定してください。
182
+ DEBUG、INFO、WARN、ERROR、FATAL の文字列(大文字小文字問わず)か整数文字列 0、1、2、3、4 で指定します。
183
+ ERROR の場合は通信エラーや Snarl 本体絡みでのエラーが、INFO の場合はさらにレスポンスコード(とverbose項が有効なときには無視エラー)が、DEBUG の場合はさらに送信文字列が出力されます。WARN と FATAL に相当するログは今のところありません。
184
+ yaml でもメソッド引数でも無指定だった(そして logfile 項がある)時は、DEBUG とみなしてすべてのログ出力を行います。
185
+
186
+ === iconset
187
+
188
+ iconset :
189
+ ok : ./green.jpg
190
+ fail : ./red.jpg
191
+ notification :
192
+ title : Good!
193
+ text : no errors.
194
+ icon : ok
195
+
196
+ notification の icon 小項で指定するアイコンのペアを指定します。
197
+ 上記の例は "icon : ./green.jpg" と直に書いたのと同じことで、処理としては
198
+ snp.notification(:title => title, :text => text, :icon => iconset['ok'])
199
+ です。
200
+ スクリプト上で Hash を書かなくていいあたりにちょっぴりメリットがあります。
@@ -6,7 +6,17 @@ $LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)), '/../lib/
6
6
  require 'snarl/snp'
7
7
 
8
8
  @uri = 'http://weather.yahoo.co.jp/weather/jp/1b/1400.html'
9
- @host = ENV['SNARL_HOST'] || ARGV[0] || (if ARGV[0] == '-H' then ARGV[1] else nil end)
9
+ @host = ARGV[0] || (if ARGV[0] == '-H' then ARGV[1] else nil end)
10
+ @config = <<YAML
11
+ host : #{@host}
12
+ app : Ruby-Snarl
13
+ class :
14
+ - [yahoo_weather, "Yahoo! Japan Weather"]
15
+ unregister : false
16
+ notification:
17
+ default_class : yahoo_weather
18
+ default_timeout : 20
19
+ YAML
10
20
 
11
21
  def encode_win(s)
12
22
  if s.respond_to?(:encode) then
@@ -29,7 +39,11 @@ title = encode_win("Yahoo! Weather\n#{place}")
29
39
  text = encode_win(table.at('table').inner_text.gsub(/\s+/){''})
30
40
  icon = weather['src']
31
41
 
32
- Snarl::SNP.open(@host) do |snp|
33
- snp.register('Ruby-Snarl')
34
- snp.notification(title, text, icon, 20)
42
+ Snarl::SNP.load(@config) do |snp|
43
+ snp.notification(title, text, icon, 20, 'yahoo_weather')
35
44
  end
45
+
46
+ # Snarl::SNP.open(@host) do |snp|
47
+ # snp.register('Ruby-Snarl')
48
+ # snp.notification(title, text, icon, 20)
49
+ # end
@@ -1,83 +1,14 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
-
3
- require 'snp'
1
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
4
2
 
3
+ require 'snp/autosnp'
5
4
  # Usage:
6
5
  # On $HOME/.autotest.
7
6
  # require 'snarl/autotest'
8
7
  # Autotest::Snarl.host = '192.168.0.1'
9
- module Autotest::Snarl
10
-
11
- @snarl_host = '127.0.0.1'
12
- @snarl_port = 9887
13
-
14
- class << self
15
- attr_accessor :snarl_host, :snarl_port
16
- end
17
-
18
- def self.host
19
- ENV['SNARL_HOST'] || Autotest::Snarl.snarl_host
20
- end
21
- def self.host=(host)
22
- Autotest::Snarl.snarl_host = host
23
- end
24
- def self.port
25
- ENV['SNARL_PORT'] || Autotest::Snarl.snarl_port
26
- end
27
- def self.port=(port)
28
- Autotest::Snarl.snarl_port = port.to_i
29
- end
30
8
 
31
- # Windows Snarl shortcut's "working folder" (left click property)
32
- # %HOME%\Application Data\full phat\snarl\styles
33
- def self.hostdir
34
- "./"
35
- end
36
- def self.icon_ok
37
- # %HOME%\Application Data\full phat\snarl\styles\ok.png works fine
38
- "ok.png"
39
- end
40
- def self.icon_fail
41
- "fail.png"
42
- end
43
- def self.icon_pending
44
- "pending.png"
45
- end
46
- def self.app
47
- "Autotest::Snarl"
48
- end
49
-
50
- def self.iconset
51
- {
52
- :green => File.join(hostdir, icon_ok),
53
- :red => File.join(hostdir, icon_fail),
54
- :yellow => File.join(hostdir, icon_pending), # TODO:
55
- :info => nil
56
- }
57
- end
58
-
59
- def self.classes
60
- {
61
- 'green' => 'test ok',
62
- 'red' => 'test fail',
63
- 'yellow' => 'test pending',
64
- 'info' => 'system message'
65
- }
66
- end
9
+ module Autotest::Snarl
67
10
 
68
- def self.snarl(title, text, status = :info, timeout = nil)
69
- Snarl::SNP.open(host, port){|c|
70
- c.iconset(iconset)
71
- c.register(app)
72
- c.add_classes(classes)
73
- c.notification(
74
- :title => title,
75
- :text => text,
76
- :class => status.to_s,
77
- :timeout => (timeout||10),
78
- :icon => status)
79
- }
80
- end
11
+ extend Snarl::SNP::AutoSNP
81
12
 
82
13
  Autotest.add_hook :run do |at|
83
14
  snarl("Run", "Run", :info)
@@ -94,19 +25,18 @@ module Autotest::Snarl
94
25
  end
95
26
 
96
27
  Autotest.add_hook :run do |at|
97
- snarl("autotest", "autotest was started", :info, 5) if $DEBUG
28
+ snarl("autotest", "autotest was started", :info) if $DEBUG
98
29
  end
99
30
 
100
31
  Autotest.add_hook :interrupt do |at|
101
- snarl("autotest", "autotest was reset", :info, 5) if $DEBUG
32
+ snarl("autotest", "autotest was reset", :info) if $DEBUG
102
33
  end
103
34
 
104
35
  Autotest.add_hook :quit do |at|
105
- snarl("autotest", "autotest is exiting", :info, 5) if $DEBUG
36
+ snarl("autotest", "autotest is exiting", :info) if $DEBUG
106
37
  end
107
38
 
108
39
  Autotest.add_hook :all do |at|_hook
109
40
  snarl("autotest", "Tests have fully passed", :green)
110
41
  end
111
-
112
42
  end