automatic 14.5.0 → 14.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/automatic.gemspec +11 -3
- data/doc/ChangeLog +15 -0
- data/doc/PLUGINS +40 -0
- data/doc/PLUGINS.ja +42 -0
- data/lib/automatic/log.rb +11 -6
- data/lib/automatic/version.rb +1 -1
- data/plugins/filter/clear.rb +20 -0
- data/plugins/filter/description_link.rb +74 -0
- data/plugins/filter/google_news.rb +50 -0
- data/plugins/store/database.rb +7 -2
- data/plugins/store/full_text.rb +4 -4
- data/plugins/store/permalink.rb +4 -4
- data/spec/lib/automatic/log_spec.rb +3 -2
- data/spec/lib/automatic_spec.rb +2 -2
- data/spec/plugins/filter/clear_spec.rb +49 -0
- data/spec/plugins/filter/description_link_spec.rb +138 -0
- data/spec/plugins/filter/google_news_spec.rb +69 -0
- data/spec/plugins/store/full_text_spec.rb +104 -3
- data/test/integration/test_descriptionlink.yml +21 -0
- data/test/integration/test_google_news.yml +21 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4f4a46d1a0cd3682792e621973c10dc7c537bd2
|
4
|
+
data.tar.gz: e33c52947ef78c95c46ccf3a32df3153ee37606c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6540fcf48d19633a23ef3e0a56da11482c9be88a3a97225f4103547f783e68fc9a5313780269c82d492aad8327876e2f7f280d73d67e05a9c940a42812eae73
|
7
|
+
data.tar.gz: 764359815342acb9cdc60b7fa927ef3b84981333f8c064f64a2a663b72cdfa0a9183df8972d1062161839f27f6807855324e806754c6a80491dbc8cb76cae1ed
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
14.
|
1
|
+
14.10.1
|
data/automatic.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: automatic 14.
|
5
|
+
# stub: automatic 14.10.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "automatic"
|
9
|
-
s.version = "14.
|
9
|
+
s.version = "14.10.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["id774"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-10-23"
|
15
15
|
s.description = "Ruby framework for the general-purpose automatic processing"
|
16
16
|
s.email = "idnanashi@gmail.com"
|
17
17
|
s.executables = ["automatic"]
|
@@ -47,8 +47,11 @@ Gem::Specification.new do |s|
|
|
47
47
|
"plugins/custom_feed/svn_log.rb",
|
48
48
|
"plugins/filter/absolute_uri.rb",
|
49
49
|
"plugins/filter/accept.rb",
|
50
|
+
"plugins/filter/clear.rb",
|
51
|
+
"plugins/filter/description_link.rb",
|
50
52
|
"plugins/filter/full_feed.rb",
|
51
53
|
"plugins/filter/github_feed.rb",
|
54
|
+
"plugins/filter/google_news.rb",
|
52
55
|
"plugins/filter/ignore.rb",
|
53
56
|
"plugins/filter/image.rb",
|
54
57
|
"plugins/filter/image_source.rb",
|
@@ -97,8 +100,11 @@ Gem::Specification.new do |s|
|
|
97
100
|
"spec/plugins/custom_feed/svn_log_spec.rb",
|
98
101
|
"spec/plugins/filter/absolute_uri_spec.rb",
|
99
102
|
"spec/plugins/filter/accept_spec.rb",
|
103
|
+
"spec/plugins/filter/clear_spec.rb",
|
104
|
+
"spec/plugins/filter/description_link_spec.rb",
|
100
105
|
"spec/plugins/filter/full_feed_spec.rb",
|
101
106
|
"spec/plugins/filter/github_feed_spec.rb",
|
107
|
+
"spec/plugins/filter/google_news_spec.rb",
|
102
108
|
"spec/plugins/filter/ignore_spec.rb",
|
103
109
|
"spec/plugins/filter/image_source_spec.rb",
|
104
110
|
"spec/plugins/filter/image_spec.rb",
|
@@ -141,8 +147,10 @@ Gem::Specification.new do |s|
|
|
141
147
|
"test/integration/test_activerecord.yml",
|
142
148
|
"test/integration/test_add_pocket.yml",
|
143
149
|
"test/integration/test_chan_toru.yml",
|
150
|
+
"test/integration/test_descriptionlink.yml",
|
144
151
|
"test/integration/test_fluentd.yml",
|
145
152
|
"test/integration/test_fulltext.yml",
|
153
|
+
"test/integration/test_google_news.yml",
|
146
154
|
"test/integration/test_googlealert.yml",
|
147
155
|
"test/integration/test_hatenabookmark.yml",
|
148
156
|
"test/integration/test_ignore.yml",
|
data/doc/ChangeLog
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
=== 14.10.0 / 2014-10-23
|
2
|
+
|
3
|
+
* Using Logger
|
4
|
+
|
5
|
+
* Improvement File Saving Plugin
|
6
|
+
|
7
|
+
* Store::FullText will ignore duplicated titled entry.
|
8
|
+
|
9
|
+
* Added new plugins.
|
10
|
+
|
11
|
+
* Filter::Clear
|
12
|
+
* Filter::GoogleNews
|
13
|
+
* Filter::DescriptionLink
|
14
|
+
|
15
|
+
|
1
16
|
=== 14.5.0 / 2014-05-31
|
2
17
|
|
3
18
|
* Update to activesupport/record 4.1.
|
data/doc/PLUGINS
CHANGED
@@ -216,6 +216,18 @@ SubscriptionChanToru
|
|
216
216
|
retry: RETRY_COUNT
|
217
217
|
|
218
218
|
|
219
|
+
FilterClear
|
220
|
+
-----------
|
221
|
+
[Path]
|
222
|
+
/plugins/filter/clear.rb
|
223
|
+
|
224
|
+
[Abstract]
|
225
|
+
Clear Pipeline.
|
226
|
+
|
227
|
+
[Syntax]
|
228
|
+
- module: FilterClear
|
229
|
+
|
230
|
+
|
219
231
|
FilterSort
|
220
232
|
----------
|
221
233
|
[Path]
|
@@ -381,6 +393,34 @@ FilterTumblrResize
|
|
381
393
|
- module: FilterTumblrResize
|
382
394
|
|
383
395
|
|
396
|
+
FilterDescriptionLink
|
397
|
+
---------------------
|
398
|
+
[Path]
|
399
|
+
/plugins/filter/description_link.rb
|
400
|
+
|
401
|
+
[Abstract]
|
402
|
+
Pickup http or https URL from description.
|
403
|
+
Re-write link to the URL.
|
404
|
+
|
405
|
+
[Syntax]
|
406
|
+
- module: FilterDescriptionLink
|
407
|
+
config:
|
408
|
+
clear_description: 1 # Set empty to description.
|
409
|
+
get_title: 1 # Get title after re-write link.
|
410
|
+
|
411
|
+
|
412
|
+
FilterGoogleNews
|
413
|
+
----------------
|
414
|
+
[Path]
|
415
|
+
/plugins/filter/google_news.rb
|
416
|
+
|
417
|
+
[Abstract]
|
418
|
+
Re-write Google News link to a new link of the redirect.
|
419
|
+
|
420
|
+
[Syntax]
|
421
|
+
- module: FilterGoogleNews
|
422
|
+
|
423
|
+
|
384
424
|
StorePermalink
|
385
425
|
--------------
|
386
426
|
[Path]
|
data/doc/PLUGINS.ja
CHANGED
@@ -216,6 +216,18 @@ SubscriptionChanToru
|
|
216
216
|
retry: エラー時のリトライ回数 (回数, 省略時 0)
|
217
217
|
|
218
218
|
|
219
|
+
FilterClear
|
220
|
+
-----------
|
221
|
+
[パス]
|
222
|
+
/plugins/filter/clear.rb
|
223
|
+
|
224
|
+
[概要]
|
225
|
+
パイプラインをカラにする
|
226
|
+
|
227
|
+
[レシピ記法]
|
228
|
+
- module: FilterClear
|
229
|
+
|
230
|
+
|
219
231
|
FilterSort
|
220
232
|
----------
|
221
233
|
[パス]
|
@@ -382,6 +394,36 @@ FilterTumblrResize
|
|
382
394
|
- module: FilterTumblrResize
|
383
395
|
|
384
396
|
|
397
|
+
FilterDescriptionLink
|
398
|
+
---------------------
|
399
|
+
[パス]
|
400
|
+
/plugins/filter/description_link.rb
|
401
|
+
|
402
|
+
[概要]
|
403
|
+
日付の昇順にソートする
|
404
|
+
もし config で sort に desc が指定されると
|
405
|
+
昇順ではなく降順にソートする
|
406
|
+
|
407
|
+
[レシピ記法]
|
408
|
+
- module: FilterDescriptionLink
|
409
|
+
config:
|
410
|
+
clear_description: 1 # Set empty to description.
|
411
|
+
get_title: 1 # Get title after re-write link.
|
412
|
+
|
413
|
+
|
414
|
+
FilterGoogleNews
|
415
|
+
----------------
|
416
|
+
[パス]
|
417
|
+
/plugins/filter/google_news.rb
|
418
|
+
|
419
|
+
[概要]
|
420
|
+
Google News のリンクを
|
421
|
+
リダイレクト先のものに書き換える
|
422
|
+
|
423
|
+
[レシピ記法]
|
424
|
+
- module: FilterGoogleNews
|
425
|
+
|
426
|
+
|
385
427
|
StorePermalink
|
386
428
|
--------------
|
387
429
|
[パス]
|
data/lib/automatic/log.rb
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
# Name:: Automatic::Log
|
3
3
|
# Author:: 774 <http://id774.net>
|
4
4
|
# Created:: Feb 20, 2012
|
5
|
-
# Updated::
|
6
|
-
# Copyright:: Copyright (c) 2012-
|
5
|
+
# Updated:: Oct 09, 2014
|
6
|
+
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
7
7
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
8
|
|
9
|
+
require 'logger'
|
10
|
+
|
9
11
|
module Automatic
|
10
12
|
module Log
|
11
13
|
LOG_LEVELS = ['info', 'warn', 'error', 'none']
|
@@ -14,13 +16,16 @@ module Automatic
|
|
14
16
|
@level = level
|
15
17
|
end
|
16
18
|
|
17
|
-
def self.
|
19
|
+
def self.logger
|
20
|
+
@logger ||= Logger.new(STDOUT)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.puts(level = :info, message)
|
18
24
|
if LOG_LEVELS.index(@level).to_i > LOG_LEVELS.index(level).to_i
|
19
25
|
return
|
20
26
|
end
|
21
|
-
|
22
|
-
print log = "#{t} [#{level}] #{message}\n"
|
23
|
-
return log
|
27
|
+
logger.send(level, message)
|
24
28
|
end
|
29
|
+
|
25
30
|
end
|
26
31
|
end
|
data/lib/automatic/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::Clear
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 20, 2014
|
5
|
+
# Updated:: Oct 20, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
module Automatic::Plugin
|
10
|
+
class FilterClear
|
11
|
+
def initialize(config, pipeline=[])
|
12
|
+
@config = config
|
13
|
+
@pipeline = pipeline
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::DescriptionLink
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 03, 2014
|
5
|
+
# Updated:: Oct 16, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
module Automatic::Plugin
|
10
|
+
class FilterDescriptionLink
|
11
|
+
require 'uri'
|
12
|
+
require 'nkf'
|
13
|
+
|
14
|
+
def initialize(config, pipeline=[])
|
15
|
+
@config = config
|
16
|
+
@pipeline = pipeline
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
@return_feeds = []
|
21
|
+
@pipeline.each {|feeds|
|
22
|
+
new_feeds = []
|
23
|
+
unless feeds.nil?
|
24
|
+
feeds.items.each {|feed|
|
25
|
+
new_feeds << rewrite_link(feed)
|
26
|
+
}
|
27
|
+
end
|
28
|
+
@return_feeds << Automatic::FeedMaker.create_pipeline(new_feeds)
|
29
|
+
}
|
30
|
+
@return_feeds
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def get_title(url)
|
36
|
+
new_title = nil
|
37
|
+
if url.class == String
|
38
|
+
url.gsub!(Regexp.new("[^#{URI::PATTERN::ALNUM}\/\:\?\=&~,\.\(\)#]")) {|match| ERB::Util.url_encode(match)}
|
39
|
+
begin
|
40
|
+
read_data = NKF.nkf("--utf8", open(url).read)
|
41
|
+
get_text = Nokogiri::HTML.parse(read_data, nil, 'utf8').xpath('//title').text
|
42
|
+
new_title = get_text if get_text.class == String
|
43
|
+
rescue
|
44
|
+
Automatic::Log.puts("warn", "Failed in get title for: #{url}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
new_title
|
49
|
+
end
|
50
|
+
|
51
|
+
def rewrite_link(feed)
|
52
|
+
new_link = URI.extract(feed.description, %w{http https}).uniq.last
|
53
|
+
feed.link = new_link unless new_link.nil?
|
54
|
+
|
55
|
+
if @config.class == Hash
|
56
|
+
if @config['clear_description'] == 1
|
57
|
+
feed.description = ""
|
58
|
+
end
|
59
|
+
|
60
|
+
if @config['get_title'] == 1
|
61
|
+
begin
|
62
|
+
new_title = get_title(feed.link)
|
63
|
+
feed.title = new_title unless new_title.nil?
|
64
|
+
rescue OpenURI::HTTPError
|
65
|
+
Automatic::Log.puts("warn", "404 Not Found in get title process.")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
feed
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::GoogleNews
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 12, 2014
|
5
|
+
# Updated:: Oct 14, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
module Automatic::Plugin
|
10
|
+
class FilterGoogleNews
|
11
|
+
require 'uri'
|
12
|
+
require 'nkf'
|
13
|
+
|
14
|
+
def initialize(config, pipeline=[])
|
15
|
+
@config = config
|
16
|
+
@pipeline = pipeline
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
@return_feeds = []
|
21
|
+
@pipeline.each {|feeds|
|
22
|
+
new_feeds = []
|
23
|
+
unless feeds.nil?
|
24
|
+
feeds.items.each {|feed|
|
25
|
+
new_feeds << rewrite_link(feed) unless feed.link.nil?
|
26
|
+
}
|
27
|
+
end
|
28
|
+
@return_feeds << Automatic::FeedMaker.create_pipeline(new_feeds)
|
29
|
+
}
|
30
|
+
@return_feeds
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def rewrite_link(feed)
|
36
|
+
if feed.link.class == String
|
37
|
+
if feed.link.index("http://news.google.com")
|
38
|
+
matched = feed.link.match(/(&url=)/)
|
39
|
+
unless matched.nil?
|
40
|
+
new_link = matched.post_match
|
41
|
+
feed.link = new_link unless new_link.nil?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
feed
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
data/plugins/store/database.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# 774 <http://id774.net>
|
5
5
|
# soramugi <http://soramugi.net>
|
6
6
|
# Created:: Feb 27, 2012
|
7
|
-
# Updated::
|
7
|
+
# Updated:: Oct 09, 2014
|
8
8
|
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
9
9
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
10
10
|
|
@@ -21,7 +21,12 @@ module Automatic::Plugin
|
|
21
21
|
new_feeds = []
|
22
22
|
feeds.items.each {|feed|
|
23
23
|
unless feed.link.nil?
|
24
|
-
|
24
|
+
if unique_keys.length > 1
|
25
|
+
detection = existing_records.detect {|b| b.try(unique_keys[0]) == feed.link || b.try(unique_keys[1]) == feed.title }
|
26
|
+
else
|
27
|
+
detection = existing_records.detect {|b| b.try(unique_keys[0]) == feed.link }
|
28
|
+
end
|
29
|
+
unless detection
|
25
30
|
yield(feed)
|
26
31
|
new_feeds << feed
|
27
32
|
end
|
data/plugins/store/full_text.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
# Name:: Automatic::Plugin::Store::FullText
|
3
3
|
# Author:: 774 <http://id774.net>
|
4
4
|
# Created:: Feb 26, 2012
|
5
|
-
# Updated::
|
6
|
-
# Copyright:: Copyright (c) 2012-
|
5
|
+
# Updated:: Oct 09, 2014
|
6
|
+
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
7
7
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
8
|
|
9
9
|
require 'plugins/store/database'
|
@@ -30,8 +30,8 @@ module Automatic::Plugin
|
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
:link
|
33
|
+
def unique_keys
|
34
|
+
[:link, :title]
|
35
35
|
end
|
36
36
|
|
37
37
|
def model_class
|
data/plugins/store/permalink.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
# Name:: Automatic::Plugin::Store::Permalink
|
4
4
|
# Author:: 774 <http://id774.net>
|
5
5
|
# Created:: Feb 22, 2012
|
6
|
-
# Updated::
|
7
|
-
# Copyright:: Copyright (c) 2012-
|
6
|
+
# Updated:: Oct 09, 2014
|
7
|
+
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
8
8
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
9
9
|
|
10
10
|
require 'plugins/store/database'
|
@@ -28,8 +28,8 @@ module Automatic::Plugin
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
:url
|
31
|
+
def unique_keys
|
32
|
+
[:url]
|
33
33
|
end
|
34
34
|
|
35
35
|
def model_class
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# Name:: Auaotmatic::Log
|
3
3
|
# Author:: soramugi
|
4
|
+
# 774 <http://id774.net>
|
4
5
|
# Created:: May 19, 2013
|
5
|
-
# Updated::
|
6
|
-
# Copyright:: Copyright (c) 2012-
|
6
|
+
# Updated:: Oct 09, 2014
|
7
|
+
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
7
8
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
9
|
|
9
10
|
require File.expand_path(File.join(File.dirname(__FILE__) ,'../../spec_helper'))
|
data/spec/lib/automatic_spec.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Author:: kzgs
|
4
4
|
# 774 <http://id774.net>
|
5
5
|
# Created:: Mar 9, 2012
|
6
|
-
# Updated::
|
6
|
+
# Updated:: Oct 23, 2014
|
7
7
|
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
8
8
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
9
9
|
|
@@ -27,7 +27,7 @@ describe Automatic do
|
|
27
27
|
describe "#version" do
|
28
28
|
subject { Automatic.const_get(:VERSION) }
|
29
29
|
|
30
|
-
it { expect(subject).to eq "14.
|
30
|
+
it { expect(subject).to eq "14.10.1" }
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#(root)_dir" do
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::Clear
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 20, 2014
|
5
|
+
# Updated:: Oct 20, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
10
|
+
|
11
|
+
require 'filter/clear'
|
12
|
+
|
13
|
+
describe Automatic::Plugin::FilterClear do
|
14
|
+
|
15
|
+
context "should be cleared" do
|
16
|
+
subject {
|
17
|
+
Automatic::Plugin::FilterClear.new({
|
18
|
+
},
|
19
|
+
AutomaticSpec.generate_pipeline {
|
20
|
+
feed {
|
21
|
+
item "http://hogefuga.com", "",
|
22
|
+
"aaaabbbccc"
|
23
|
+
}
|
24
|
+
feed {
|
25
|
+
item "http://aaaabbbccc.com", "",
|
26
|
+
"hogefugahoge"
|
27
|
+
}
|
28
|
+
feed {
|
29
|
+
item "http://aaabbbccc.com", "",
|
30
|
+
"aaaaaaaaaacccdd"
|
31
|
+
}
|
32
|
+
feed {
|
33
|
+
item "http://aaccc.com", "",
|
34
|
+
"aaaabbbccc"
|
35
|
+
item "http://aabbccc.com", "",
|
36
|
+
"aabbbccc"
|
37
|
+
}
|
38
|
+
feed {
|
39
|
+
item "http://cccddd.com", "",
|
40
|
+
"aabbbcccdd"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
)}
|
44
|
+
|
45
|
+
describe "#run" do
|
46
|
+
its(:run) { should have(0).feeds }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::DescriptionLink
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 03, 2014
|
5
|
+
# Updated:: Oct 03, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
10
|
+
|
11
|
+
require 'filter/description_link'
|
12
|
+
|
13
|
+
describe Automatic::Plugin::FilterDescriptionLink do
|
14
|
+
|
15
|
+
context "It should be rewrite link based on the description" do
|
16
|
+
|
17
|
+
subject {
|
18
|
+
Automatic::Plugin::FilterDescriptionLink.new(
|
19
|
+
{},
|
20
|
+
AutomaticSpec.generate_pipeline {
|
21
|
+
feed {
|
22
|
+
item "http://test1.id774.net",
|
23
|
+
"dummy title",
|
24
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
25
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
)
|
29
|
+
}
|
30
|
+
|
31
|
+
describe "#run" do
|
32
|
+
its(:run) { should have(1).feeds }
|
33
|
+
|
34
|
+
specify {
|
35
|
+
subject.run
|
36
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
37
|
+
should == "http://test2.id774.net"
|
38
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].description.
|
39
|
+
should == "aaa bbb ccc http://test2.id774.net ddd eee"
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "It should be empty description if clear_description specified" do
|
45
|
+
|
46
|
+
subject {
|
47
|
+
Automatic::Plugin::FilterDescriptionLink.new({
|
48
|
+
'clear_description' => 1,
|
49
|
+
},
|
50
|
+
AutomaticSpec.generate_pipeline {
|
51
|
+
feed {
|
52
|
+
item "http://test1.id774.net",
|
53
|
+
"dummy title",
|
54
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
55
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
)
|
59
|
+
}
|
60
|
+
|
61
|
+
describe "#run" do
|
62
|
+
its(:run) { should have(1).feeds }
|
63
|
+
|
64
|
+
specify {
|
65
|
+
subject.run
|
66
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
67
|
+
should == "http://test2.id774.net"
|
68
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].description.
|
69
|
+
should == ""
|
70
|
+
}
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "It should be got title if get_title specified" do
|
75
|
+
|
76
|
+
subject {
|
77
|
+
Automatic::Plugin::FilterDescriptionLink.new({
|
78
|
+
'get_title' => 1,
|
79
|
+
},
|
80
|
+
AutomaticSpec.generate_pipeline {
|
81
|
+
feed {
|
82
|
+
item "http://test1.id774.net",
|
83
|
+
"dummy title",
|
84
|
+
"aaa bbb ccc http://blog.id774.net/post/2014/10/01/531/ ddd eee",
|
85
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
86
|
+
}
|
87
|
+
}
|
88
|
+
)
|
89
|
+
}
|
90
|
+
|
91
|
+
describe "#run" do
|
92
|
+
its(:run) { should have(1).feeds }
|
93
|
+
|
94
|
+
specify {
|
95
|
+
subject.run
|
96
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
97
|
+
should == "http://blog.id774.net/post/2014/10/01/531/"
|
98
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].title.
|
99
|
+
should == "二穂様は俺の嫁 | 774::Blog"
|
100
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].description.
|
101
|
+
should == "aaa bbb ccc http://blog.id774.net/post/2014/10/01/531/ ddd eee"
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context "It should be handling error if 404 Not Found" do
|
107
|
+
|
108
|
+
subject {
|
109
|
+
Automatic::Plugin::FilterDescriptionLink.new({
|
110
|
+
'get_title' => 1,
|
111
|
+
},
|
112
|
+
AutomaticSpec.generate_pipeline {
|
113
|
+
feed {
|
114
|
+
item "http://test1.id774.net",
|
115
|
+
"dummy title",
|
116
|
+
"aaa bbb ccc http://blog.id774.net/post/2014/10/01/532/ ddd eee",
|
117
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
118
|
+
}
|
119
|
+
}
|
120
|
+
)
|
121
|
+
}
|
122
|
+
|
123
|
+
describe "#run" do
|
124
|
+
its(:run) { should have(1).feeds }
|
125
|
+
|
126
|
+
specify {
|
127
|
+
subject.run
|
128
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
129
|
+
should == "http://blog.id774.net/post/2014/10/01/532/"
|
130
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].title.
|
131
|
+
should == "dummy title"
|
132
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].description.
|
133
|
+
should == "aaa bbb ccc http://blog.id774.net/post/2014/10/01/532/ ddd eee"
|
134
|
+
}
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Name:: Automatic::Plugin::Filter::GoogleNews
|
3
|
+
# Author:: 774 <http://id774.net>
|
4
|
+
# Created:: Oct 12, 2014
|
5
|
+
# Updated:: Oct 12, 2014
|
6
|
+
# Copyright:: Copyright (c) 2014 Automatic Ruby Developers.
|
7
|
+
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
8
|
+
|
9
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
10
|
+
|
11
|
+
require 'filter/google_news'
|
12
|
+
|
13
|
+
describe Automatic::Plugin::FilterGoogleNews do
|
14
|
+
|
15
|
+
context "It should be not rewrite link other urls" do
|
16
|
+
|
17
|
+
subject {
|
18
|
+
Automatic::Plugin::FilterGoogleNews.new(
|
19
|
+
{},
|
20
|
+
AutomaticSpec.generate_pipeline {
|
21
|
+
feed {
|
22
|
+
item "http://test1.id774.net",
|
23
|
+
"dummy title",
|
24
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
25
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
)
|
29
|
+
}
|
30
|
+
|
31
|
+
describe "#run" do
|
32
|
+
its(:run) { should have(1).feeds }
|
33
|
+
|
34
|
+
specify {
|
35
|
+
subject.run
|
36
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
37
|
+
should == "http://test1.id774.net"
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "It should be rewrite link for google news urls" do
|
43
|
+
|
44
|
+
subject {
|
45
|
+
Automatic::Plugin::FilterGoogleNews.new(
|
46
|
+
{},
|
47
|
+
AutomaticSpec.generate_pipeline {
|
48
|
+
feed {
|
49
|
+
item "http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=AFQjCNGhIFo1illQ6jFyVGPZtfkttFaJYQ&clid=c3a7d30bb8a4878e06b80cf16b898331&cid=52779138313507&ei=Pts3VLDAD4X7kgWO9oGIBg&url=http://www.yomiuri.co.jp/world/20141010-OYT1T50090.html",
|
50
|
+
"dummy title",
|
51
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
52
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
53
|
+
}
|
54
|
+
}
|
55
|
+
)
|
56
|
+
}
|
57
|
+
|
58
|
+
describe "#run" do
|
59
|
+
its(:run) { should have(1).feeds }
|
60
|
+
|
61
|
+
specify {
|
62
|
+
subject.run
|
63
|
+
subject.instance_variable_get(:@pipeline)[0].items[0].link.
|
64
|
+
should == "http://www.yomiuri.co.jp/world/20141010-OYT1T50090.html"
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# Name:: Automatic::Plugin::Store::FullText
|
3
3
|
# Author:: 774 <http://id774.net>
|
4
|
-
# Updated::
|
5
|
-
# Copyright:: Copyright (c) 2012-
|
4
|
+
# Updated:: Oct 16, 2014
|
5
|
+
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
|
6
6
|
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
|
7
7
|
|
8
8
|
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
@@ -26,13 +26,20 @@ describe Automatic::Plugin::StoreFullText do
|
|
26
26
|
it "should store 1 record for the new blog entry" do
|
27
27
|
instance = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
28
28
|
AutomaticSpec.generate_pipeline {
|
29
|
-
feed {
|
29
|
+
feed {
|
30
|
+
item "http://blog.id774.net/blogs/feed/",
|
31
|
+
"dummy title",
|
32
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
33
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
34
|
+
}
|
30
35
|
}
|
31
36
|
)
|
32
37
|
|
38
|
+
Automatic::Plugin::Blog.count.should eq 0
|
33
39
|
lambda {
|
34
40
|
instance.run.should have(1).feed
|
35
41
|
}.should change(Automatic::Plugin::Blog, :count).by(1)
|
42
|
+
Automatic::Plugin::Blog.count.should eq 1
|
36
43
|
end
|
37
44
|
|
38
45
|
it "should not store record for the existent blog entry" do
|
@@ -42,10 +49,104 @@ describe Automatic::Plugin::StoreFullText do
|
|
42
49
|
}
|
43
50
|
)
|
44
51
|
|
52
|
+
Automatic::Plugin::Blog.count.should eq 0
|
45
53
|
instance.run.should have(1).feed
|
46
54
|
lambda {
|
47
55
|
instance.run.should have(0).feed
|
48
56
|
}.should change(Automatic::Plugin::Blog, :count).by(0)
|
57
|
+
instance.run.should have(0).feed
|
58
|
+
Automatic::Plugin::Blog.count.should eq 1
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should not store record for the existent blog link" do
|
62
|
+
instance = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
63
|
+
AutomaticSpec.generate_pipeline {
|
64
|
+
feed {
|
65
|
+
item "http://blog.id774.net/post/100",
|
66
|
+
"dummy title 1",
|
67
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
68
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
69
|
+
}
|
70
|
+
}
|
71
|
+
)
|
72
|
+
instance2 = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
73
|
+
AutomaticSpec.generate_pipeline {
|
74
|
+
feed {
|
75
|
+
item "http://blog.id774.net/post/100",
|
76
|
+
"dummy title 2",
|
77
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
78
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
79
|
+
}
|
80
|
+
}
|
81
|
+
)
|
82
|
+
|
83
|
+
Automatic::Plugin::Blog.count.should eq 0
|
84
|
+
instance.run.should have(1).feed
|
85
|
+
lambda {
|
86
|
+
instance2.run.should have(0).feed
|
87
|
+
}.should change(Automatic::Plugin::Blog, :count).by(0)
|
88
|
+
instance2.run.should have(0).feed
|
89
|
+
Automatic::Plugin::Blog.count.should eq 1
|
49
90
|
end
|
50
91
|
|
92
|
+
it "should not store record for the existent blog title" do
|
93
|
+
instance = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
94
|
+
AutomaticSpec.generate_pipeline {
|
95
|
+
feed {
|
96
|
+
item "http://blog.id774.net/post/100",
|
97
|
+
"dummy title 1",
|
98
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
99
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
100
|
+
}
|
101
|
+
}
|
102
|
+
)
|
103
|
+
instance2 = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
104
|
+
AutomaticSpec.generate_pipeline {
|
105
|
+
feed {
|
106
|
+
item "http://blog.id774.net/post/200",
|
107
|
+
"dummy title 1",
|
108
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
109
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
110
|
+
}
|
111
|
+
}
|
112
|
+
)
|
113
|
+
|
114
|
+
Automatic::Plugin::Blog.count.should eq 0
|
115
|
+
instance.run.should have(1).feed
|
116
|
+
lambda {
|
117
|
+
instance2.run.should have(0).feed
|
118
|
+
}.should change(Automatic::Plugin::Blog, :count).by(0)
|
119
|
+
instance2.run.should have(0).feed
|
120
|
+
Automatic::Plugin::Blog.count.should eq 1
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should store 2 records for the independent entries" do
|
124
|
+
instance = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
125
|
+
AutomaticSpec.generate_pipeline {
|
126
|
+
feed {
|
127
|
+
item "http://blog.id774.net/post/100",
|
128
|
+
"dummy title 1",
|
129
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
130
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
131
|
+
}
|
132
|
+
}
|
133
|
+
)
|
134
|
+
instance2 = Automatic::Plugin::StoreFullText.new({"db" => @db_filename},
|
135
|
+
AutomaticSpec.generate_pipeline {
|
136
|
+
feed {
|
137
|
+
item "http://blog.id774.net/post/200",
|
138
|
+
"dummy title 2",
|
139
|
+
"aaa bbb ccc http://test2.id774.net ddd eee",
|
140
|
+
"Mon, 07 Mar 2011 15:54:11 +0900"
|
141
|
+
}
|
142
|
+
}
|
143
|
+
)
|
144
|
+
|
145
|
+
Automatic::Plugin::Blog.count.should eq 0
|
146
|
+
instance.run.should have(1).feed
|
147
|
+
lambda {
|
148
|
+
instance2.run.should have(1).feed
|
149
|
+
}.should change(Automatic::Plugin::Blog, :count).by(1)
|
150
|
+
Automatic::Plugin::Blog.count.should eq 2
|
151
|
+
end
|
51
152
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
global:
|
2
|
+
timezone: Asia/Tokyo
|
3
|
+
cache:
|
4
|
+
base: /tmp
|
5
|
+
log:
|
6
|
+
level: info
|
7
|
+
|
8
|
+
plugins:
|
9
|
+
- module: SubscriptionFeed
|
10
|
+
config:
|
11
|
+
feeds:
|
12
|
+
- http://reblog.id774.net/rss
|
13
|
+
|
14
|
+
- module: FilterDescriptionLink
|
15
|
+
|
16
|
+
- module: StorePermalink
|
17
|
+
config:
|
18
|
+
db: test_description_link.db
|
19
|
+
|
20
|
+
#- module: PublishConsole
|
21
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
global:
|
2
|
+
timezone: Asia/Tokyo
|
3
|
+
cache:
|
4
|
+
base: /tmp
|
5
|
+
log:
|
6
|
+
level: info
|
7
|
+
|
8
|
+
plugins:
|
9
|
+
- module: SubscriptionFeed
|
10
|
+
config:
|
11
|
+
feeds:
|
12
|
+
- http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss
|
13
|
+
|
14
|
+
- module: FilterGoogleNews
|
15
|
+
|
16
|
+
- module: StorePermalink
|
17
|
+
config:
|
18
|
+
db: test_google_news.db
|
19
|
+
|
20
|
+
- module: PublishConsole
|
21
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: automatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 14.
|
4
|
+
version: 14.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- id774
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -354,8 +354,11 @@ files:
|
|
354
354
|
- plugins/custom_feed/svn_log.rb
|
355
355
|
- plugins/filter/absolute_uri.rb
|
356
356
|
- plugins/filter/accept.rb
|
357
|
+
- plugins/filter/clear.rb
|
358
|
+
- plugins/filter/description_link.rb
|
357
359
|
- plugins/filter/full_feed.rb
|
358
360
|
- plugins/filter/github_feed.rb
|
361
|
+
- plugins/filter/google_news.rb
|
359
362
|
- plugins/filter/ignore.rb
|
360
363
|
- plugins/filter/image.rb
|
361
364
|
- plugins/filter/image_source.rb
|
@@ -404,8 +407,11 @@ files:
|
|
404
407
|
- spec/plugins/custom_feed/svn_log_spec.rb
|
405
408
|
- spec/plugins/filter/absolute_uri_spec.rb
|
406
409
|
- spec/plugins/filter/accept_spec.rb
|
410
|
+
- spec/plugins/filter/clear_spec.rb
|
411
|
+
- spec/plugins/filter/description_link_spec.rb
|
407
412
|
- spec/plugins/filter/full_feed_spec.rb
|
408
413
|
- spec/plugins/filter/github_feed_spec.rb
|
414
|
+
- spec/plugins/filter/google_news_spec.rb
|
409
415
|
- spec/plugins/filter/ignore_spec.rb
|
410
416
|
- spec/plugins/filter/image_source_spec.rb
|
411
417
|
- spec/plugins/filter/image_spec.rb
|
@@ -448,8 +454,10 @@ files:
|
|
448
454
|
- test/integration/test_activerecord.yml
|
449
455
|
- test/integration/test_add_pocket.yml
|
450
456
|
- test/integration/test_chan_toru.yml
|
457
|
+
- test/integration/test_descriptionlink.yml
|
451
458
|
- test/integration/test_fluentd.yml
|
452
459
|
- test/integration/test_fulltext.yml
|
460
|
+
- test/integration/test_google_news.yml
|
453
461
|
- test/integration/test_googlealert.yml
|
454
462
|
- test/integration/test_hatenabookmark.yml
|
455
463
|
- test/integration/test_ignore.yml
|