automatic 12.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/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
|
+
|