snarl-snp 0.1.1 → 0.2.0
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.rdoc +86 -4
- data/Rakefile +4 -3
- data/VERSION +1 -1
- data/YAML.rdoc +197 -0
- data/bin/snarl_snp +112 -0
- data/{GUIDE.rdoc.ja → doc-ja/GUIDE.rdoc.ja} +0 -0
- data/{README.rdoc.ja → doc-ja/README.rdoc.ja} +94 -29
- data/doc-ja/YAML.rdoc.ja +200 -0
- data/exsample/yahoo_weather.rb +18 -4
- data/lib/snarl/autotest.rb +7 -77
- data/lib/snarl/snp.rb +4 -4
- data/lib/snarl/snp/action.rb +15 -11
- data/lib/snarl/snp/autosnp.rb +69 -0
- data/lib/snarl/snp/config.rb +109 -17
- data/lib/snarl/snp/error.rb +7 -6
- data/lib/snarl/snp/request.rb +31 -21
- data/lib/snarl/snp/response.rb +1 -0
- data/lib/snarl/snp/snp.rb +56 -41
- data/lib/snarl/snp/snp_procedure.rb +105 -0
- data/snarl-snp.gemspec +21 -15
- data/spec/bin/snarl_snp_spec.rb +91 -0
- data/spec/snp/action_spec.rb +149 -86
- data/spec/snp/config_spec.rb +181 -37
- data/spec/snp/real_connection_spec.rb +295 -0
- data/spec/snp/request_spec.rb +40 -10
- data/spec/snp/snp_procedure_spec.rb +226 -0
- data/spec/snp/snp_spec.rb +216 -193
- data/spec/spec_helper.rb +6 -4
- metadata +22 -27
- data/spec/exsample/data/weather_yahoo_co_jp.html +0 -608
- data/spec/exsample/yahoo_weather_spec.rb +0 -22
File without changes
|
@@ -3,7 +3,7 @@
|
|
3
3
|
= Snarl-SNP
|
4
4
|
|
5
5
|
snarl/snp(snarl-snp)は、Snarl を LAN 越しに操作するための SNP プロトコルクライアントを提供します。
|
6
|
-
Ruby
|
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
|
24
|
+
内部では Rubygems を使用してないので、インストールされたディレクトリごとどこかにコピーしてもたぶん動きます。
|
25
25
|
|
26
26
|
== Contact
|
27
27
|
|
@@ -36,19 +36,90 @@ MIT License です。使用改変配布商用等を無制限に許可し、ソ
|
|
36
36
|
|
37
37
|
== Usage
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
84
|
-
設定された内容自体は Snarl
|
155
|
+
削除するとユーザーがスタイル設定などを行えなくなるので、使用には注意してください(通常、毎回 unregister する必要はありません)。
|
156
|
+
設定された内容自体は unregister された後も Snarl のユーザー設定ファイルに保存されており、register コマンドが来たときに再度ロードされます。
|
85
157
|
|
86
|
-
アプリケーションは Snarl
|
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
|
-
|
223
|
+
日本語は UTF-8 か Shift_JIS(古いWindows)で送ってください。
|
224
|
+
中途半端に化ける場合は適当に register してから notification(title, text) すればだいたい大丈夫です。
|
152
225
|
app コマンドの指定がない notification アクションはなぜか日本語が化けます。
|
153
|
-
事前に register
|
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
|
|
data/doc-ja/YAML.rdoc.ja
ADDED
@@ -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 を書かなくていいあたりにちょっぴりメリットがあります。
|
data/exsample/yahoo_weather.rb
CHANGED
@@ -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 =
|
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.
|
33
|
-
snp.
|
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
|
data/lib/snarl/autotest.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|