automatic 12.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +23 -0
- data/README.md +109 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/app.rb +15 -0
- data/automatic.gemspec +122 -0
- data/bin/automatic +15 -0
- data/config/default.yml +29 -0
- data/config/feed2console.yml +15 -0
- data/db/.gitkeep +0 -0
- data/doc/COPYING +674 -0
- data/doc/ChangeLog +17 -0
- data/doc/PLUGINS.ja +205 -0
- data/doc/README.ja +449 -0
- data/lib/automatic.rb +60 -0
- data/lib/automatic/environment.rb +8 -0
- data/lib/automatic/feed_parser.rb +36 -0
- data/lib/automatic/log.rb +24 -0
- data/lib/automatic/pipeline.rb +36 -0
- data/lib/automatic/recipe.rb +31 -0
- data/lib/config/validator.rb +83 -0
- data/plugins/custom_feed/svn_log.rb +56 -0
- data/plugins/filter/ignore.rb +60 -0
- data/plugins/filter/image.rb +47 -0
- data/plugins/filter/tumblr_resize.rb +40 -0
- data/plugins/notify/ikachan.rb +85 -0
- data/plugins/publish/console.rb +31 -0
- data/plugins/publish/google_calendar.rb +86 -0
- data/plugins/publish/hatena_bookmark.rb +103 -0
- data/plugins/store/full_text.rb +57 -0
- data/plugins/store/permalink.rb +47 -0
- data/plugins/store/store_database.rb +53 -0
- data/plugins/store/target_link.rb +47 -0
- data/plugins/subscription/feed.rb +30 -0
- data/script/bootstrap +117 -0
- data/spec/plugins/custom_feed/svn_log_spec.rb +31 -0
- data/spec/plugins/filter/ignore_spec.rb +37 -0
- data/spec/plugins/filter/image_spec.rb +55 -0
- data/spec/plugins/filter/tumblr_resize_spec.rb +102 -0
- data/spec/plugins/notify/ikachan_spec.rb +28 -0
- data/spec/plugins/publish/console_spec.rb +24 -0
- data/spec/plugins/publish/google_calendar_spec.rb +82 -0
- data/spec/plugins/publish/hatena_bookmark_spec.rb +36 -0
- data/spec/plugins/store/full_text_spec.rb +39 -0
- data/spec/plugins/store/permalink_spec.rb +39 -0
- data/spec/plugins/store/target_link_spec.rb +30 -0
- data/spec/plugins/subscription/feed_spec.rb +36 -0
- data/spec/spec_helper.rb +82 -0
- data/test/integration/test_activerecord.yml +24 -0
- data/test/integration/test_fulltext.yml +24 -0
- data/test/integration/test_hatenabookmark.yml +26 -0
- data/test/integration/test_ignore.yml +22 -0
- data/test/integration/test_ignore2.yml +25 -0
- data/test/integration/test_image2local.yml +26 -0
- data/test/integration/test_svnlog.yml +14 -0
- data/test/integration/test_tumblr2local.yml +26 -0
- data/utils/auto_discovery.rb +18 -0
- data/utils/opml_parser.rb +247 -0
- data/vendor/.gitkeep +0 -0
- metadata +205 -0
data/doc/ChangeLog
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
=== 12.02.1 / 2012-02-25
|
2
|
+
|
3
|
+
* Point release
|
4
|
+
|
5
|
+
* Big Refactoring for core.
|
6
|
+
* Reorganization of the namespace.
|
7
|
+
* A few plugins added.
|
8
|
+
|
9
|
+
|
10
|
+
=== 12.02 / 2012-02-18
|
11
|
+
|
12
|
+
* First release
|
13
|
+
|
14
|
+
* Scratch of this script.
|
15
|
+
* Plugin existing only for hatenabookmark.
|
16
|
+
|
17
|
+
|
data/doc/PLUGINS.ja
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
================
|
2
|
+
プラグインの説明
|
3
|
+
================
|
4
|
+
|
5
|
+
SubscriptionFeed
|
6
|
+
----------------
|
7
|
+
[パス]
|
8
|
+
/plugins/subscription/feed.rb
|
9
|
+
|
10
|
+
[概要]
|
11
|
+
フィードを購読する
|
12
|
+
|
13
|
+
[レシピ記法]
|
14
|
+
- module: SubscriptionFeed
|
15
|
+
config:
|
16
|
+
feeds:
|
17
|
+
- フィード名
|
18
|
+
- フィード名 ...
|
19
|
+
|
20
|
+
|
21
|
+
FilterIgnore
|
22
|
+
------------
|
23
|
+
[パス]
|
24
|
+
/plugins/filter/ignore.rb
|
25
|
+
|
26
|
+
[概要]
|
27
|
+
NG ワードを除外する
|
28
|
+
|
29
|
+
[レシピ記法]
|
30
|
+
- module: FilterIgnore
|
31
|
+
config:
|
32
|
+
exclude:
|
33
|
+
- 無視キーワード
|
34
|
+
- 無視キーワード ...
|
35
|
+
|
36
|
+
|
37
|
+
FilterImage
|
38
|
+
------------
|
39
|
+
[パス]
|
40
|
+
/plugins/filter/image.rb
|
41
|
+
|
42
|
+
[概要]
|
43
|
+
パーマリンクを本文中の画像のリンクに書き換える
|
44
|
+
画像のリンクが無い場合は nil にする
|
45
|
+
|
46
|
+
[レシピ記法]
|
47
|
+
- module: FilterImage
|
48
|
+
|
49
|
+
|
50
|
+
FilterTumblrResize
|
51
|
+
--------------------
|
52
|
+
[パス]
|
53
|
+
/plugins/filter/tumblr_resize.rb
|
54
|
+
|
55
|
+
[概要]
|
56
|
+
パーマリンクを Tumblr の最大サイズ
|
57
|
+
(High Res) に書き換える
|
58
|
+
|
59
|
+
[前提]
|
60
|
+
パーマリンクが画像リンクに書き換え済であること
|
61
|
+
|
62
|
+
[レシピ記法]
|
63
|
+
- module: FilterTumblrResize
|
64
|
+
|
65
|
+
|
66
|
+
StorePermalink
|
67
|
+
--------------
|
68
|
+
[パス]
|
69
|
+
/plugins/store/permalink.rb
|
70
|
+
|
71
|
+
[概要]
|
72
|
+
パーマリンクを保存する
|
73
|
+
重複したパーマリンクは破棄する
|
74
|
+
|
75
|
+
[レシピ記法]
|
76
|
+
- module: StoreBookmark
|
77
|
+
config:
|
78
|
+
db: ブックマークを保存する SQLite3 DB 名
|
79
|
+
|
80
|
+
|
81
|
+
StoreFullText
|
82
|
+
-------------
|
83
|
+
[パス]
|
84
|
+
/plugins/store/full_text.rb
|
85
|
+
|
86
|
+
[概要]
|
87
|
+
フィード全文を DB に保存する
|
88
|
+
|
89
|
+
保存した DB は以下のビューワでも閲覧できる
|
90
|
+
https://github.com/id774/blog_viewer
|
91
|
+
|
92
|
+
[レシピ記法]
|
93
|
+
- module: StoreFullText
|
94
|
+
config:
|
95
|
+
db: SQLite3 DB 名
|
96
|
+
|
97
|
+
|
98
|
+
StoreTargetLink
|
99
|
+
--------------
|
100
|
+
[パス]
|
101
|
+
/plugins/store/target_link.rb
|
102
|
+
|
103
|
+
[概要]
|
104
|
+
リンク先のコンテンツをローカルに保存する
|
105
|
+
|
106
|
+
[レシピ記法]
|
107
|
+
- module: StoreTargetLink
|
108
|
+
config:
|
109
|
+
path: 保存先のフォルダ
|
110
|
+
interval: 保存する間隔 (秒)
|
111
|
+
|
112
|
+
|
113
|
+
PublishConsole
|
114
|
+
------------
|
115
|
+
[パス]
|
116
|
+
/plugins/publish/console.rb
|
117
|
+
|
118
|
+
[概要]
|
119
|
+
パイプラインをコンソールに出力する
|
120
|
+
|
121
|
+
[レシピ記法]
|
122
|
+
- module: PublishConsole
|
123
|
+
|
124
|
+
|
125
|
+
PublishHatenaBookmark
|
126
|
+
---------------------
|
127
|
+
[パス]
|
128
|
+
/plugins/publish/hatenabookmark.rb
|
129
|
+
|
130
|
+
[概要]
|
131
|
+
はてなブックマークをする
|
132
|
+
|
133
|
+
[説明]
|
134
|
+
はてなブックマーク API への投稿用 XML を生成し
|
135
|
+
送信する
|
136
|
+
|
137
|
+
[レシピ記法]
|
138
|
+
- module: AutoBookmark
|
139
|
+
config:
|
140
|
+
username: はてな ID
|
141
|
+
passowrd: パスワード
|
142
|
+
interval: はてブする間隔 (秒)
|
143
|
+
|
144
|
+
|
145
|
+
PublishGoogleCalendar
|
146
|
+
---------------------
|
147
|
+
[パス]
|
148
|
+
/plugins/publish/google_calendar.rb
|
149
|
+
|
150
|
+
[概要]
|
151
|
+
Google Calendar に予定を登録する
|
152
|
+
|
153
|
+
[説明]
|
154
|
+
item.title を当日の Google カレンダーに
|
155
|
+
登録する
|
156
|
+
|
157
|
+
[レシピ記法]
|
158
|
+
- module: PublishGoogleCalendar
|
159
|
+
config:
|
160
|
+
username: Google メールアドレス
|
161
|
+
password: パスワード
|
162
|
+
interval: 複数の予定の投稿間隔 (秒)
|
163
|
+
|
164
|
+
|
165
|
+
NotifyIkachan
|
166
|
+
-------------
|
167
|
+
[パス]
|
168
|
+
/plugins/notify/ikachan.rb
|
169
|
+
|
170
|
+
[概要]
|
171
|
+
ikachan へメッセージを送信する
|
172
|
+
|
173
|
+
[説明]
|
174
|
+
ikachan へ HTTP 経由で POST する
|
175
|
+
ikachan とは: http://blog.yappo.jp/yappo/archives/000760.html
|
176
|
+
|
177
|
+
[レシピ記法]
|
178
|
+
- module: NotifyIkachan
|
179
|
+
config:
|
180
|
+
url: http://sample.com
|
181
|
+
port: 4979 # ポート番号、デフォルトは 4979
|
182
|
+
channels: foo,bar,#baz # '#' はあってもなくても自動的につけられる、複数は','で指定
|
183
|
+
command: notice # privmsg や notice など
|
184
|
+
interval: 5 # ポストする間隔 (秒)
|
185
|
+
|
186
|
+
|
187
|
+
CustomFeedSVNLog
|
188
|
+
----------------
|
189
|
+
[パス]
|
190
|
+
/plugins/custom/feed_svn_log.rb
|
191
|
+
|
192
|
+
[概要]
|
193
|
+
SVN から新しいリビジョン情報を取得する
|
194
|
+
|
195
|
+
[説明]
|
196
|
+
target で指定された URL から SVN のコミット情報を
|
197
|
+
fetch_items で指定された数だけ取得する
|
198
|
+
|
199
|
+
[レシピ記法]
|
200
|
+
- module: CustomFeedSVNLog
|
201
|
+
config:
|
202
|
+
target: http://redmine.rubyforge.org/svn
|
203
|
+
fetch_items: 2 # 指定されない場合は 30
|
204
|
+
|
205
|
+
|
data/doc/README.ja
ADDED
@@ -0,0 +1,449 @@
|
|
1
|
+
automaticruby
|
2
|
+
|
3
|
+
名前
|
4
|
+
automaticruby - Ruby による汎用的な自動処理フレームワーク
|
5
|
+
|
6
|
+
書式
|
7
|
+
$ bin/automatic
|
8
|
+
|
9
|
+
任意のレシピを指定して起動する
|
10
|
+
$ bin/automatic -c <recipe>
|
11
|
+
|
12
|
+
バージョン番号を表示する
|
13
|
+
$ bin/automatic -v
|
14
|
+
|
15
|
+
説明
|
16
|
+
このソフトウェアは、プラガブルに機能を拡張可能な Ruby
|
17
|
+
による汎用自動処理フレームワークである。
|
18
|
+
プラグインによってさまざまな情報を収集加工し、任意の
|
19
|
+
形で出力することができる。
|
20
|
+
|
21
|
+
|
22
|
+
============
|
23
|
+
インストール
|
24
|
+
============
|
25
|
+
|
26
|
+
本ソフトウェアを GitHub がらダウンロードする。
|
27
|
+
$ git clone git://github.com/id774/automaticruby.git
|
28
|
+
|
29
|
+
|
30
|
+
ruby 1.9 の場合
|
31
|
+
$ script/bootstrap
|
32
|
+
|
33
|
+
ruby 1.8 の場合
|
34
|
+
Gemfile にある必要な gem を手動でインストールする
|
35
|
+
|
36
|
+
|
37
|
+
任意のレシピ (後述) を作成する。
|
38
|
+
$ bin/automatic -c your_recipe.yml
|
39
|
+
|
40
|
+
-c オプション付きで手動実行し、問題がなければ
|
41
|
+
cron に登録するなどして自動化する。
|
42
|
+
|
43
|
+
|
44
|
+
============
|
45
|
+
実行してみる
|
46
|
+
============
|
47
|
+
|
48
|
+
試しに実行するなら config/feed2console.yml
|
49
|
+
を利用すると良い。
|
50
|
+
|
51
|
+
$ bin/automatic -c config/feed2console.yml
|
52
|
+
|
53
|
+
これは、ブログのフィードを単純にコンソール出力するだけの
|
54
|
+
簡単なレシピである。
|
55
|
+
本ソフトウェアの動作確認に使うことができる。
|
56
|
+
|
57
|
+
|
58
|
+
==========================
|
59
|
+
ディレクトリとファイル構成
|
60
|
+
==========================
|
61
|
+
.
|
62
|
+
|
|
63
|
+
+- bin
|
64
|
+
| |
|
65
|
+
| +- automatic
|
66
|
+
| 実行ファイル本体
|
67
|
+
|
|
68
|
+
+- config
|
69
|
+
| |
|
70
|
+
| +- default.yml
|
71
|
+
| デフォルトでロードされるレシピ
|
72
|
+
| YAML 形式でプラグインの情報を記述する
|
73
|
+
| automatic.rb の -c オプションの引数で
|
74
|
+
| 任意のファイル名をレシピとして指定できる
|
75
|
+
|
|
76
|
+
| 新しくレシピを書いた場合は config ディレクトリに置く
|
77
|
+
|
|
78
|
+
|
|
79
|
+
+- plugins
|
80
|
+
| |
|
81
|
+
| +- subscription フィードを購読するプラグイン
|
82
|
+
| |
|
83
|
+
| +- filter 情報をフィルタリングするプラグイン
|
84
|
+
| |
|
85
|
+
| +- store 情報を内部に保存するプラグイン
|
86
|
+
| |
|
87
|
+
| +- publish 外部に情報を送信するプラグイン
|
88
|
+
|
|
89
|
+
| プラグインを開発した場合は plugins ディレクトリに置く
|
90
|
+
|
|
91
|
+
|
|
92
|
+
+- lib
|
93
|
+
| |
|
94
|
+
| +- automatic.rb
|
95
|
+
| | Automatic モジュールの定義をする
|
96
|
+
| |
|
97
|
+
| +- automatic
|
98
|
+
| | |
|
99
|
+
| | +- environment.rb
|
100
|
+
| | | 環境情報を読み込む
|
101
|
+
| | |
|
102
|
+
| | +- pipeline.rb
|
103
|
+
| | | パイプラインと呼ばれるオブジェクトを利用し
|
104
|
+
| | | レシピに書かれたプラグインに処理を順次受け渡す
|
105
|
+
| | |
|
106
|
+
| | +- feed_parser.rb
|
107
|
+
| | | フィードを解析する
|
108
|
+
| | |
|
109
|
+
| | +- log.rb
|
110
|
+
| | | ログを出力する
|
111
|
+
| | |
|
112
|
+
| | +- recipe.rb
|
113
|
+
| | レシピを読み込む
|
114
|
+
| |
|
115
|
+
| +- config
|
116
|
+
|
|
117
|
+
+- db
|
118
|
+
| |
|
119
|
+
| +- permalink.db
|
120
|
+
| Store::Permalink プラグインで収集された
|
121
|
+
| ブックマークが保存される
|
122
|
+
|
|
123
|
+
+- script
|
124
|
+
| |
|
125
|
+
| +- bootstrap
|
126
|
+
| bundle install 等の環境設定をおこなう
|
127
|
+
| (ruby 1.9 以上のみ)
|
128
|
+
|
|
129
|
+
+- utils
|
130
|
+
| 補助的なツールのためのディレクトリ
|
131
|
+
|
|
132
|
+
+- spec
|
133
|
+
| ユニットテスト用ディレクトリ
|
134
|
+
|
|
135
|
+
+- test
|
136
|
+
| |
|
137
|
+
| +- integration
|
138
|
+
| インテグレーションテスト用ディレクトリ
|
139
|
+
|
|
140
|
+
+- vendor
|
141
|
+
| |
|
142
|
+
| +- gems
|
143
|
+
| bundle install された gem パッケージ
|
144
|
+
|
|
145
|
+
+- doc
|
146
|
+
|
|
147
|
+
+- COPYING
|
148
|
+
| 本ソフトウェアのライセンス
|
149
|
+
|
|
150
|
+
+- PLUGINS.ja
|
151
|
+
| プラグインについてのドキュメント
|
152
|
+
|
|
153
|
+
+- README.ja
|
154
|
+
本ドキュメント
|
155
|
+
|
156
|
+
|
157
|
+
==========
|
158
|
+
レシピとは
|
159
|
+
==========
|
160
|
+
|
161
|
+
Automatic Ruby では YAML 形式で書かれた設定ファイル
|
162
|
+
を解析し、呼び出すプラグインの情報とそれに伴う様々な
|
163
|
+
情報を読み込む。
|
164
|
+
|
165
|
+
この YAML ファイルをレシピと呼ぶ。
|
166
|
+
|
167
|
+
automatic.rb 起動時に -c オプションの引数にレシピの
|
168
|
+
ファイル名を指定することができる。オプションが省略
|
169
|
+
された場合は config/default.yml が呼ばれる。
|
170
|
+
|
171
|
+
[起動例]
|
172
|
+
$ bin/automatic -c ~/recipes/your_recipe.yml
|
173
|
+
|
174
|
+
|
175
|
+
================
|
176
|
+
レシピの記述方法
|
177
|
+
================
|
178
|
+
|
179
|
+
レシピには暗黙的な命名規則がある。
|
180
|
+
以下はレシピのサンプルとなる YAML ファイルである。
|
181
|
+
|
182
|
+
global:
|
183
|
+
timezone: Asia/Tokyo
|
184
|
+
cache:
|
185
|
+
base: /tmp
|
186
|
+
log:
|
187
|
+
level: info
|
188
|
+
|
189
|
+
plugins:
|
190
|
+
- module: SubscriptionFeed
|
191
|
+
config:
|
192
|
+
feeds:
|
193
|
+
- http://example.com/rss2
|
194
|
+
- http://hogefuga.com/feed
|
195
|
+
|
196
|
+
- module: FilterIgnore
|
197
|
+
config:
|
198
|
+
link:
|
199
|
+
- hoge
|
200
|
+
- fuga
|
201
|
+
|
202
|
+
- module: StorePermalink
|
203
|
+
config:
|
204
|
+
db: permalink.db
|
205
|
+
|
206
|
+
- module: PublishHatenaBookmark
|
207
|
+
config:
|
208
|
+
username: your_hatena_id
|
209
|
+
password: your_password
|
210
|
+
interval: 5
|
211
|
+
|
212
|
+
このサンプルレシピの例では
|
213
|
+
1. フィードを購読し
|
214
|
+
2. 無視キーワードを含む URL を除外し
|
215
|
+
3. パーマリンクをデータベースに保存し
|
216
|
+
4. はてなブックマークをする
|
217
|
+
という一連の処理をプラグインの組み合わせで実現している。
|
218
|
+
|
219
|
+
このように、プラグインと設定情報をレシピに記述するだけで
|
220
|
+
複数のプラグインの組み合わせにより自由な処理を実現できる。
|
221
|
+
|
222
|
+
たとえば Twitter に投稿する Publish::Twitter プラグインを
|
223
|
+
作成し上記のレシピに記述すれば、自動的に記事を Twitter に
|
224
|
+
投稿する自動処理が完成する。
|
225
|
+
|
226
|
+
Gmail に送信する Publish::Gmail プラグインを作成しレシピ
|
227
|
+
に追加すれば、フィードの記事を Gmail で読めるようになる。
|
228
|
+
|
229
|
+
他にもリンクを元にブログ記事全文を取得したり、電子書籍の
|
230
|
+
形式にして Kindle で読めるようにしたり、データベースに
|
231
|
+
ブログ記事全文を保存してローカルのアプリで読めるように
|
232
|
+
したりなど、プラグインの組み合わせ次第で無限の可能性を
|
233
|
+
実現することができる。
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
==============
|
238
|
+
開発に参加する
|
239
|
+
==============
|
240
|
+
|
241
|
+
リポジトリ
|
242
|
+
https://github.com/id774/automaticruby
|
243
|
+
|
244
|
+
課題
|
245
|
+
https://github.com/id774/automaticruby/issues
|
246
|
+
|
247
|
+
CI
|
248
|
+
http://id774.net/jenkins/
|
249
|
+
|
250
|
+
|
251
|
+
プラグインを新しく作ったり、あるいはフレームワークを
|
252
|
+
改善してくれるなら、以下の手順で開発に参加できる。
|
253
|
+
|
254
|
+
1. GitHub でリポジトリをフォークする。
|
255
|
+
2. プラグインを新しく作ったりする。
|
256
|
+
3. Pull Request を送信する。
|
257
|
+
|
258
|
+
なんらかの貢献があった場合、少しの修正を迅速におこなうために
|
259
|
+
コミット権を配布する。
|
260
|
+
|
261
|
+
|
262
|
+
================
|
263
|
+
コーディング規約
|
264
|
+
================
|
265
|
+
|
266
|
+
2 タブ (ソフトタブ)
|
267
|
+
末尾のスペースは除去
|
268
|
+
名前空間は既存のコードを参照
|
269
|
+
{} は do end より推奨される
|
270
|
+
RDoc ヘッダはファイルの作者によって書かれる
|
271
|
+
RSPec でテストを書く
|
272
|
+
カバレッジ 100% を目指す
|
273
|
+
|
274
|
+
|
275
|
+
==================
|
276
|
+
プラグインの作り方
|
277
|
+
==================
|
278
|
+
|
279
|
+
たとえば自動処理した何らかの情報を Twitter に投稿したい。
|
280
|
+
|
281
|
+
このようなときは Publish::Twitter プラグインを作れば良い。
|
282
|
+
|
283
|
+
実装方法については後述するが、基本的には Twitter の API に
|
284
|
+
投稿するだけの簡単な Ruby スクリプトを作るだけである。
|
285
|
+
|
286
|
+
レシピはこのようになるだろう。
|
287
|
+
|
288
|
+
- module: PublishTwitter
|
289
|
+
config:
|
290
|
+
username: your_mail_address
|
291
|
+
password: your_password
|
292
|
+
|
293
|
+
この場合、ファイルを plugins/publish 配下に置き、クラス名
|
294
|
+
はレシピで指定した PublishTwitter とする。あとは後述する
|
295
|
+
Automatic::Pipeline の機能により自動的に処理される。
|
296
|
+
|
297
|
+
|
298
|
+
========================
|
299
|
+
Automatic::Pipeline とは
|
300
|
+
========================
|
301
|
+
|
302
|
+
本フレームワークはレシピを YAML で解析し、プラグインを
|
303
|
+
順次読み込む。このとき pipeline がインスタンス生成時の
|
304
|
+
引数として渡され、戻り値は pipeline に戻る。
|
305
|
+
|
306
|
+
コードは以下の通りである。
|
307
|
+
|
308
|
+
pipeline = []
|
309
|
+
recipe.each_plugin { |plugin|
|
310
|
+
load_plugin(plugin.module)
|
311
|
+
klass = Automatic::Plugin.const_get(plugin.module)
|
312
|
+
pipeline = klass.new(plugin.config, pipeline).run
|
313
|
+
}
|
314
|
+
|
315
|
+
プラグイン間での連続した pipeline の受け渡しにより
|
316
|
+
処理要素を直列に連結し、あるプラグインの出力が次の
|
317
|
+
プラグインの入力となるパイプライン処理を実現する。
|
318
|
+
|
319
|
+
この機構を本フレームワークでは Automatic::Pipeline と呼ぶ。
|
320
|
+
|
321
|
+
|
322
|
+
====================
|
323
|
+
プラグインの実装規約
|
324
|
+
====================
|
325
|
+
|
326
|
+
プラグインのコンストラクタは YAML.load によってロード
|
327
|
+
されたハッシュの配列、及びパイプラインと呼ばれる
|
328
|
+
インスタンス変数のオブジェクトを引数に取る。
|
329
|
+
|
330
|
+
推奨されるコンストラクタの実装例は以下の通りである。
|
331
|
+
|
332
|
+
def initialize(config, pipeline=[])
|
333
|
+
@config = config
|
334
|
+
@pipeline = pipeline
|
335
|
+
end
|
336
|
+
|
337
|
+
インスタンスメソッド run が自動的に呼ばれる。
|
338
|
+
戻り値はインスタンス変数 @pipeline に渡り、レシピで
|
339
|
+
定義された次のプラグインに引き渡される。
|
340
|
+
|
341
|
+
|
342
|
+
==============
|
343
|
+
ユニットテスト
|
344
|
+
==============
|
345
|
+
|
346
|
+
ユニットテストは RSpec でおこなう。
|
347
|
+
|
348
|
+
プラグインのテストは、引数となるパイプラインを渡し
|
349
|
+
戻り値を検査する。
|
350
|
+
|
351
|
+
|
352
|
+
========================
|
353
|
+
継続的インテグレーション
|
354
|
+
========================
|
355
|
+
|
356
|
+
CI は Jenkins でおこなう。
|
357
|
+
http://id774.net/jenkins/
|
358
|
+
|
359
|
+
|
360
|
+
========
|
361
|
+
結合試験
|
362
|
+
========
|
363
|
+
|
364
|
+
test/integration 配下に複数のレシピを結合して
|
365
|
+
テストをおこなうためのレシピを置く。
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
================
|
370
|
+
プラグインの説明
|
371
|
+
================
|
372
|
+
|
373
|
+
doc/PLUGINS.ja を参照
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
====================
|
378
|
+
その他のツールの説明
|
379
|
+
====================
|
380
|
+
|
381
|
+
utils の下にはフィードを扱うための補助的なツールが
|
382
|
+
置かれる。内容は以下のとおりである。
|
383
|
+
|
384
|
+
|
385
|
+
名前
|
386
|
+
utils/opml_parser.rb
|
387
|
+
|
388
|
+
説明
|
389
|
+
既存の RSS Reader の OPML から登録済みフィードの
|
390
|
+
URL リストを抽出するのに使う。
|
391
|
+
|
392
|
+
$ ruby opml_parser.rb > feeds.txt
|
393
|
+
|
394
|
+
|
395
|
+
名前
|
396
|
+
utils/auto_discovery.rb
|
397
|
+
|
398
|
+
説明
|
399
|
+
引数に指定した URL から購読対象のフィードを
|
400
|
+
オートディスカバリで抽出する。
|
401
|
+
|
402
|
+
$ ruby auto_discovery.rb "https://twitter.com/twitt"
|
403
|
+
["https://twitter.com/statuses/user_timeline/4441691.rss",
|
404
|
+
"https://twitter.com/favorites/4441691.rss"]
|
405
|
+
|
406
|
+
|
407
|
+
|
408
|
+
========
|
409
|
+
更新履歴
|
410
|
+
========
|
411
|
+
|
412
|
+
doc/ChangeLog を参照
|
413
|
+
|
414
|
+
|
415
|
+
====
|
416
|
+
TODO
|
417
|
+
====
|
418
|
+
|
419
|
+
GitHub の issues を参照
|
420
|
+
https://github.com/id774/automaticruby/issues
|
421
|
+
|
422
|
+
|
423
|
+
========
|
424
|
+
動作環境
|
425
|
+
========
|
426
|
+
|
427
|
+
Ruby 1.8 以降
|
428
|
+
|
429
|
+
|
430
|
+
以下の gem パッケージに依存
|
431
|
+
|
432
|
+
sqlite3
|
433
|
+
activesupport
|
434
|
+
hashie
|
435
|
+
activerecord
|
436
|
+
gcalapi
|
437
|
+
xml-simple
|
438
|
+
|
439
|
+
詳細は Gemfile を参照
|
440
|
+
|
441
|
+
|
442
|
+
========
|
443
|
+
注意事項
|
444
|
+
========
|
445
|
+
|
446
|
+
過剰なスクレイピング等を避け、常識の範囲の利用に留める。
|
447
|
+
本ソフトウェアは GPLv3 ライセンスである。
|
448
|
+
|
449
|
+
|