automatic 13.5.0 → 13.6.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.
Files changed (108) hide show
  1. data/Gemfile +11 -5
  2. data/README.md +4 -6
  3. data/VERSION +1 -1
  4. data/automatic.gemspec +61 -18
  5. data/doc/ChangeLog +25 -0
  6. data/doc/PLUGINS +202 -12
  7. data/doc/PLUGINS.ja +221 -30
  8. data/doc/README +1 -1
  9. data/doc/README.ja +1 -1
  10. data/lib/automatic.rb +3 -3
  11. data/lib/automatic/feed_parser.rb +2 -2
  12. data/lib/automatic/log.rb +12 -2
  13. data/lib/automatic/pipeline.rb +1 -1
  14. data/lib/automatic/recipe.rb +5 -2
  15. data/plugins/custom_feed/svn_log.rb +3 -3
  16. data/plugins/filter/absolute_uri.rb +8 -4
  17. data/plugins/filter/accept.rb +61 -0
  18. data/plugins/filter/full_feed.rb +4 -5
  19. data/plugins/filter/github_feed.rb +36 -0
  20. data/plugins/filter/ignore.rb +1 -1
  21. data/plugins/filter/image.rb +1 -1
  22. data/plugins/filter/image_source.rb +34 -10
  23. data/plugins/filter/one.rb +1 -1
  24. data/plugins/filter/rand.rb +1 -1
  25. data/plugins/filter/sanitize.rb +50 -0
  26. data/plugins/filter/sort.rb +1 -1
  27. data/plugins/filter/tumblr_resize.rb +1 -1
  28. data/plugins/publish/console.rb +3 -3
  29. data/plugins/publish/console_link.rb +30 -0
  30. data/plugins/publish/eject.rb +42 -0
  31. data/plugins/publish/fluentd.rb +42 -0
  32. data/plugins/publish/google_calendar.rb +3 -3
  33. data/plugins/publish/hatena_bookmark.rb +1 -1
  34. data/plugins/publish/hipchat.rb +45 -0
  35. data/plugins/publish/instapaper.rb +2 -1
  36. data/plugins/publish/memcached.rb +44 -0
  37. data/plugins/publish/pocket.rb +1 -1
  38. data/plugins/publish/twitter.rb +1 -1
  39. data/plugins/store/database.rb +3 -3
  40. data/plugins/store/full_text.rb +2 -2
  41. data/plugins/store/permalink.rb +1 -1
  42. data/plugins/store/target_link.rb +3 -2
  43. data/plugins/subscription/chan_toru.rb +56 -0
  44. data/plugins/subscription/feed.rb +1 -1
  45. data/plugins/subscription/g_guide.rb +48 -0
  46. data/plugins/subscription/google_reader_star.rb +3 -3
  47. data/plugins/subscription/link.rb +2 -2
  48. data/plugins/subscription/pocket.rb +49 -0
  49. data/plugins/subscription/text.rb +3 -12
  50. data/plugins/subscription/tumblr.rb +7 -1
  51. data/plugins/subscription/twitter.rb +1 -1
  52. data/plugins/subscription/twitter_search.rb +50 -0
  53. data/plugins/subscription/weather.rb +7 -41
  54. data/script/build +3 -0
  55. data/spec/fixtures/sampleRecipe.yml +1 -1
  56. data/spec/lib/automatic/log_spec.rb +31 -0
  57. data/spec/lib/automatic/pipeline_spec.rb +1 -1
  58. data/spec/lib/automatic/recipe_spec.rb +1 -1
  59. data/spec/lib/automatic_spec.rb +3 -3
  60. data/spec/plugins/custom_feed/svn_log_spec.rb +1 -1
  61. data/spec/plugins/filter/absolute_uri_spec.rb +1 -1
  62. data/spec/plugins/filter/accept_spec.rb +331 -0
  63. data/spec/plugins/filter/full_feed_spec.rb +4 -6
  64. data/spec/plugins/filter/github_feed_spec.rb +54 -0
  65. data/spec/plugins/filter/ignore_spec.rb +1 -1
  66. data/spec/plugins/filter/image_source_spec.rb +17 -3
  67. data/spec/plugins/filter/image_spec.rb +1 -1
  68. data/spec/plugins/filter/one_spec.rb +1 -1
  69. data/spec/plugins/filter/rand_spec.rb +1 -1
  70. data/spec/plugins/filter/sanitize_spec.rb +153 -0
  71. data/spec/plugins/filter/sort_spec.rb +1 -1
  72. data/spec/plugins/filter/tumblr_resize_spec.rb +1 -1
  73. data/spec/plugins/notify/ikachan_spec.rb +1 -1
  74. data/spec/plugins/publish/console_spec.rb +1 -1
  75. data/spec/plugins/publish/eject_spec.rb +40 -0
  76. data/spec/plugins/publish/fluentd_spec.rb +39 -0
  77. data/spec/plugins/publish/google_calendar_spec.rb +1 -1
  78. data/spec/plugins/publish/hatena_bookmark_spec.rb +1 -1
  79. data/spec/plugins/publish/hipchat_spec.rb +69 -0
  80. data/spec/plugins/publish/instapaper_spec.rb +42 -28
  81. data/spec/plugins/publish/memcached_spec.rb +63 -0
  82. data/spec/plugins/publish/pocket_spec.rb +33 -33
  83. data/spec/plugins/publish/twitter_spec.rb +57 -19
  84. data/spec/plugins/store/full_text_spec.rb +6 -1
  85. data/spec/plugins/store/permalink_spec.rb +18 -19
  86. data/spec/plugins/store/target_link_spec.rb +1 -1
  87. data/spec/plugins/subscription/chan_toru_spec.rb +56 -0
  88. data/spec/plugins/subscription/feed_spec.rb +1 -1
  89. data/spec/plugins/subscription/g_guide_spec.rb +76 -0
  90. data/spec/plugins/subscription/google_reader_star_spec.rb +1 -1
  91. data/spec/plugins/subscription/link_spec.rb +1 -1
  92. data/spec/plugins/subscription/pocket_spec.rb +57 -0
  93. data/spec/plugins/subscription/text_spec.rb +1 -14
  94. data/spec/plugins/subscription/tumblr_spec.rb +3 -2
  95. data/spec/plugins/subscription/twitter_search_spec.rb +57 -0
  96. data/spec/plugins/subscription/twitter_spec.rb +3 -2
  97. data/spec/plugins/subscription/weather_spec.rb +2 -15
  98. data/spec/spec_helper.rb +1 -0
  99. data/test/integration/test_chan_toru.yml +19 -0
  100. data/test/integration/test_fluentd.yml +20 -0
  101. data/test/integration/test_pocket.yml +21 -0
  102. data/test/integration/test_sanitize.yml +22 -0
  103. data/test/integration/test_twitter_search.yml +21 -0
  104. metadata +145 -24
  105. data/plugins/publish/mail.rb +0 -64
  106. data/plugins/publish/smtp.rb +0 -48
  107. data/spec/plugins/publish/mail_spec.rb +0 -53
  108. data/spec/plugins/publish/smtp_spec.rb +0 -49
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Jun 20, 2012
5
5
  # Updated:: Apr 5, 2013
6
- # Copyright:: 774 Copyright (c) 2012-2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -17,7 +17,6 @@ module Automatic::Plugin
17
17
  def run
18
18
  @return_feeds = []
19
19
  @pipeline.each {|feeds|
20
- return_feed_items = []
21
20
  unless feeds.nil?
22
21
  feeds.items.each {|feed|
23
22
  feed.link = rewrite(feed.link) unless feed.link.nil?
@@ -32,9 +31,14 @@ module Automatic::Plugin
32
31
  def rewrite(string)
33
32
  if /^http:\/\/.*$/ =~ string
34
33
  return string
35
- else
36
- return @config['url'] + string
37
34
  end
35
+
36
+ if /[^\/]$/ =~ @config['url']
37
+ @config['url'] = @config['url'] + '/'
38
+ end
39
+ string = @config['url'] + string.sub(/^\./,'').sub(/^\//,'')
40
+ string = URI.encode(string)
41
+ return string
38
42
  end
39
43
  end
40
44
  end
@@ -0,0 +1,61 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Filter::Accept
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: Jun 4, 2013
5
+ # Updated:: Jun 4, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class FilterAccept
11
+ def initialize(config, pipeline=[])
12
+ @config = config
13
+ @pipeline = pipeline
14
+ end
15
+
16
+ def run
17
+ @return_feeds = []
18
+ @pipeline.each {|feeds|
19
+ new_feeds = []
20
+ unless feeds.nil?
21
+ feeds.items.each {|items|
22
+ new_feeds << items if contain(items) == true
23
+ }
24
+ end
25
+ @return_feeds << Automatic::FeedParser.create(new_feeds) if new_feeds.length > 0
26
+ }
27
+ @return_feeds
28
+ end
29
+
30
+ private
31
+
32
+ def contain(items)
33
+ detection = false
34
+ unless @config['title'].nil?
35
+ @config['title'].each {|e|
36
+ if items.title.include?(e.chomp)
37
+ detection = true
38
+ Automatic::Log.puts("info", "Contain by title: #{items.link}")
39
+ end
40
+ }
41
+ end
42
+ unless @config['link'].nil?
43
+ @config['link'].each {|e|
44
+ if items.link.include?(e.chomp)
45
+ detection = true
46
+ Automatic::Log.puts("info", "Contain by link: #{items.link}")
47
+ end
48
+ }
49
+ end
50
+ unless @config['description'].nil?
51
+ @config['description'].each {|e|
52
+ if items.description.include?(e.chomp)
53
+ detection = true
54
+ Automatic::Log.puts("info", "Contain by description: #{items.link}")
55
+ end
56
+ }
57
+ end
58
+ detection
59
+ end
60
+ end
61
+ end
@@ -3,9 +3,8 @@
3
3
  # Author:: progd <http://d.hatena.ne.jp/progd/20120429/automatic_ruby_filter_full_feed>
4
4
  # 774 <http://id774.net>
5
5
  # Created:: Apr 29, 2012
6
- # Updated:: Apr 5, 2013
7
- # Copyright:: progd
8
- # 774 Copyright (c) 2012-2013
6
+ # Updated:: Jun 23, 2013
7
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
9
8
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
10
9
 
11
10
  module Automatic::Plugin
@@ -38,7 +37,7 @@ module Automatic::Plugin
38
37
 
39
38
  def get_siteinfo
40
39
  Automatic::Log.puts(:info, "Loading siteinfo from #{@config['siteinfo']}")
41
- siteinfo = JSON.load(open(File.join(assets_dir, @config['siteinfo'])).read)
40
+ siteinfo = JSON.load(open(File.join(assets_dir, @config['siteinfo'])).read.force_encoding("UTF-8"))
42
41
  siteinfo.select! { |info| SITEINFO_TYPES.include? (info['data']['type']) }
43
42
  siteinfo.sort! { |a, b|
44
43
  atype, btype = a['data']['type'], b['data']['type']
@@ -58,7 +57,7 @@ module Automatic::Plugin
58
57
 
59
58
  def fulltext(feed)
60
59
  return feed unless feed.link
61
- @siteinfo.each { |info|
60
+ @siteinfo.each {|info|
62
61
  begin
63
62
  if feed.link.match(info['data']['url'])
64
63
  Automatic::Log.puts(:info, "Siteinfo matched: #{info['data']['url']}")
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Filter::GithubFeed
3
+ # Author:: Kohei Hasegawa <http://github.com/banyan>
4
+ # Created:: Jun 6, 2013
5
+ # Updated:: Jun 6, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class FilterGithubFeed
11
+
12
+ def initialize(config, pipeline=[])
13
+ @config = config
14
+ @pipeline = pipeline
15
+ end
16
+
17
+ def run
18
+ @return_feeds = []
19
+ @pipeline.each {|feeds|
20
+ dummyFeeds = []
21
+ unless feeds.nil?
22
+ feeds.items.each {|feed|
23
+ Automatic::Log.puts("info", "Invoked: FilterGithubFeed")
24
+ dummy = Hashie::Mash.new
25
+ dummy.title = feed.title.content
26
+ dummy.link = feed.id.content
27
+ dummy.description = feed.content.content
28
+ dummyFeeds << dummy
29
+ }
30
+ end
31
+ @return_feeds << Automatic::FeedParser.create(dummyFeeds)
32
+ }
33
+ @pipeline = @return_feeds
34
+ end
35
+ end
36
+ end
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Feb 22, 2012
5
5
  # Updated:: Apr 5, 2013
6
- # Copyright:: 774 Copyright (c) 2012-2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Sep 18, 2012
5
5
  # Updated:: Apr 5, 2013
6
- # Copyright:: 774 Copyright (c) 2012-2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Feb 28, 2012
5
5
  # Updated:: Apr 5, 2013
6
- # Copyright:: 774 Copyright (c) 2012-2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -19,29 +19,53 @@ module Automatic::Plugin
19
19
  def run
20
20
  @return_feeds = []
21
21
  @pipeline.each {|feeds|
22
- img_url = ""
22
+ dummyFeeds = Array.new
23
23
  unless feeds.nil?
24
24
  feeds.items.each {|feed|
25
- arr = rewrite_link(feed.description)
25
+ arr = rewrite_link(feed)
26
26
  if arr.length > 0
27
- feed.link = arr[0]
28
- else
29
- feed.link = nil
27
+ arr.each {|link|
28
+ Automatic::Log.puts("info", "Parsing: #{link}")
29
+ dummy = Hashie::Mash.new
30
+ dummy.title = 'FilterImageSource'
31
+ dummy.link = link
32
+ dummyFeeds << dummy
33
+ }
30
34
  end
31
35
  }
32
36
  end
33
- @return_feeds << feeds
37
+ @return_feeds << Automatic::FeedParser.create(dummyFeeds)
34
38
  }
35
- @return_feeds
39
+ @pipeline = @return_feeds
36
40
  end
37
41
 
38
42
  private
39
- def rewrite_link(string)
43
+
44
+ def rewrite_link(feed)
40
45
  array = Array.new
41
- string.scan(/<img src="(.*?)"/) { |matched|
46
+ feed.description.scan(/<img src="(.*?)"/) {|matched|
42
47
  array = array | matched
43
48
  }
49
+ if array.length === 0 && feed.link != nil
50
+ array = imgs(feed.link)
51
+ end
44
52
  array
45
53
  end
54
+
55
+ def imgs(link)
56
+ images = Array.new
57
+ html = open(link).read
58
+ unless html.nil?
59
+ doc = Nokogiri::HTML(html)
60
+ (doc/:img).each {|img|
61
+ image = img[:src]
62
+ unless /^http/ =~ image
63
+ image = link.sub(/\/([^\/]+)$/, image.sub(/^\./,''))
64
+ end
65
+ images << image
66
+ }
67
+ end
68
+ images
69
+ end
46
70
  end
47
71
  end
@@ -3,7 +3,7 @@
3
3
  # Author:: soramugi <http://soramugi.net>
4
4
  # Created:: May 8, 2013
5
5
  # Updated:: May 8, 2013
6
- # Copyright:: soramugi Copyright (c) 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -4,7 +4,7 @@
4
4
  # 774 <http://id774.net>
5
5
  # Created:: Mar 6, 2013
6
6
  # Updated:: Mar 7, 2013
7
- # Copyright:: soramugi Copyright (c) 2013
7
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
8
8
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
9
9
 
10
10
  module Automatic::Plugin
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Filter::Sanitize
3
+ # Author:: 774 <http://id774.net>
4
+ # Created:: Jun 20, 2013
5
+ # Updated:: Jun 24, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class FilterSanitize
11
+ require 'sanitize'
12
+
13
+ def initialize(config, pipeline=[])
14
+ @config = config
15
+ @pipeline = pipeline
16
+ case @config['mode']
17
+ when "basic"
18
+ @mode = Sanitize::Config::BASIC
19
+ when "relaxed"
20
+ @mode = Sanitize::Config::RELAXED
21
+ else
22
+ @mode = Sanitize::Config::RESTRICTED
23
+ end
24
+ end
25
+
26
+ def run
27
+ @return_feeds = []
28
+ @pipeline.each {|feeds|
29
+ return_feed_items = []
30
+ unless feeds.nil?
31
+ feeds.items.each {|feed|
32
+ feed = sanitize(feed)
33
+ }
34
+ @return_feeds << feeds
35
+ end
36
+ }
37
+ @return_feeds
38
+ end
39
+
40
+ private
41
+ def sanitize(feed)
42
+ begin
43
+ feed.description = Sanitize.clean(feed.description, @mode) unless feed.description.nil?
44
+ rescue
45
+ Automatic::Log.puts("warn", "Undefined field detected in feed.")
46
+ end
47
+ feed
48
+ end
49
+ end
50
+ end
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Mar 23, 2012
5
5
  # Updated:: Jan 23, 2013
6
- # Copyright:: 774 Copyright (c) 2012
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Feb 28, 2012
5
5
  # Updated:: Apr 5, 2013
6
- # Copyright:: 774 Copyright (c) 2012-2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -3,7 +3,7 @@
3
3
  # Author:: 774 <http://id774.net>
4
4
  # Created:: Feb 23, 2012
5
5
  # Updated:: Feb 24, 2012
6
- # Copyright:: 774 Copyright (c) 2012
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
7
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
8
 
9
9
  module Automatic::Plugin
@@ -17,9 +17,9 @@ module Automatic::Plugin
17
17
  end
18
18
 
19
19
  def run
20
- @pipeline.each { |feeds|
20
+ @pipeline.each {|feeds|
21
21
  unless feeds.nil?
22
- feeds.items.each { |feed|
22
+ feeds.items.each {|feed|
23
23
  @output.puts("info", feed.pretty_inspect)
24
24
  }
25
25
  end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::ConsoleLink
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: Jun 02, 2013
5
+ # Updated:: Jun 02, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class PublishConsoleLink
11
+ require 'pp'
12
+
13
+ def initialize(config, pipeline=[])
14
+ @config = config
15
+ @pipeline = pipeline
16
+ @output = STDOUT
17
+ end
18
+
19
+ def run
20
+ @pipeline.each {|feeds|
21
+ unless feeds.nil?
22
+ feeds.items.each {|feed|
23
+ @output.puts("info", feed.link)
24
+ }
25
+ end
26
+ }
27
+ @pipeline
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Eject
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: Jun 9, 2013
5
+ # Updated:: Jun 9, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class PublishEject
11
+
12
+ def initialize(config, pipeline=[])
13
+ @config = config
14
+ @pipeline = pipeline
15
+ end
16
+
17
+ def run
18
+ @pipeline.each {|feeds|
19
+ unless feeds.nil?
20
+ feeds.items.each {|feed|
21
+ unless feed.link.nil?
22
+ `#{eject_cmd}`
23
+ Automatic::Log.puts('info', "Eject: #{feed.link}")
24
+
25
+ interval = @config['interval'].to_i unless @config['interval'].nil? unless @config.nil?
26
+ sleep 3 if interval.nil?
27
+ end
28
+ }
29
+ end
30
+ }
31
+ @pipeline
32
+ end
33
+
34
+ def eject_cmd
35
+ if `type -P eject` != '' # linux
36
+ 'eject ; eject -t'
37
+ elsif `type -P drutil` != '' # mac
38
+ 'drutil tray eject ; drutil tray close'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Fluentd
3
+ # Author:: 774 <http://id774.net>
4
+ # Created:: Jun 21, 2013
5
+ # Updated:: Jun 25, 2013
6
+ # Copyright:: Copyright (c) 2012-2013 Automatic Ruby Developers.
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class PublishFluentd
11
+ require 'fluent-logger'
12
+
13
+ def initialize(config, pipeline=[])
14
+ @config = config
15
+ @pipeline = pipeline
16
+ @fluentd = Fluent::Logger::FluentLogger.open(nil,
17
+ host = @config['host'],
18
+ port = @config['port'])
19
+ end
20
+
21
+ def run
22
+ @pipeline.each {|feeds|
23
+ unless feeds.nil?
24
+ feeds.items.each {|feed|
25
+ begin
26
+ @fluentd.post(@config['tag'], {
27
+ :title => feed.title,
28
+ :link => feed.link,
29
+ :description => feed.description,
30
+ :content => feed.content_encoded,
31
+ :created_at => Time.now.strftime("%Y/%m/%d %X")
32
+ })
33
+ rescue
34
+ Automatic::Log.puts("warn", "Skip feed due to fault in forward.")
35
+ end
36
+ }
37
+ end
38
+ }
39
+ @pipeline
40
+ end
41
+ end
42
+ end