automatic 13.4.1 → 13.5.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.
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Pocket
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 15, 2013
5
+ # Updated:: May 15, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class PublishPocket
11
+ require 'pocket'
12
+
13
+ def initialize(config, pipeline=[])
14
+ @config = config
15
+ @pipeline = pipeline
16
+ Pocket.configure do |c|
17
+ c.consumer_key = @config['consumer_key']
18
+ c.access_token = @config['access_token']
19
+ end
20
+ @client = Pocket.client
21
+ end
22
+
23
+ def run
24
+ @pipeline.each {|feeds|
25
+ unless feeds.nil?
26
+ feeds.items.each {|feed|
27
+ retries = 0
28
+ begin
29
+ @client.add(:url => feed.link)
30
+ Automatic::Log.puts("info", "add: #{feed.link}")
31
+ rescue
32
+ retries += 1
33
+ Automatic::Log.puts("error", "ErrorCount: #{retries}, Fault in publish to pocket.")
34
+ sleep @config['interval'].to_i unless @config['interval'].nil?
35
+ retry if retries <= @config['retry'].to_i unless @config['retry'].nil?
36
+ end
37
+ sleep @config['interval'].to_i unless @config['interval'].nil?
38
+ }
39
+ end
40
+ }
41
+ @pipeline
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Twitter
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 5, 2013
5
+ # Updated:: May 5, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class PublishTwitter
11
+ require 'twitter'
12
+
13
+ def initialize(config, pipeline=[])
14
+ @config = config
15
+ @pipeline = pipeline
16
+
17
+ Twitter.configure do |conf|
18
+ conf.consumer_key = @config['consumer_key']
19
+ conf.consumer_secret = @config['consumer_secret']
20
+ conf.oauth_token = @config['oauth_token']
21
+ conf.oauth_token_secret = @config['oauth_token_secret']
22
+ end
23
+ @twitter = Twitter
24
+
25
+ if @config['tweet_tmp'] == nil
26
+ @tweet_tmp = '{title} {link}'
27
+ else
28
+ @tweet_tmp = @config['tweet_tmp']
29
+ end
30
+
31
+ end
32
+
33
+ def run
34
+ @pipeline.each {|feeds|
35
+ unless feeds.nil?
36
+ feeds.items.each {|feed|
37
+ Automatic::Log.puts("info", "tweet: #{feed.link}")
38
+ retries = 0
39
+ begin
40
+ tweet = @tweet_tmp.gsub(/\{(.+?)\}/) do |text|
41
+ feed.__send__($1)
42
+ end
43
+ @twitter.update(tweet)
44
+ rescue
45
+ retries += 1
46
+ Automatic::Log.puts("error", "ErrorCount: #{retries}, Fault in publish to twitter.")
47
+ sleep @config['interval'].to_i unless @config['interval'].nil?
48
+ retry if retries <= @config['retry'].to_i unless @config['retry'].nil?
49
+ end
50
+ sleep @config['interval'].to_i unless @config['interval'].nil?
51
+ }
52
+ end
53
+ }
54
+ @pipeline
55
+ end
56
+ end
57
+ end
@@ -17,15 +17,6 @@ module Automatic::Plugin
17
17
  @pipeline = pipeline
18
18
  end
19
19
 
20
- def wget(url)
21
- filename = url.split(/\//).last
22
- open(url) { |source|
23
- open(File.join(@config['path'], filename), "w+b") { |o|
24
- o.print source.read
25
- }
26
- }
27
- end
28
-
29
20
  def run
30
21
  @pipeline.each {|feeds|
31
22
  unless feeds.nil?
@@ -48,5 +39,15 @@ module Automatic::Plugin
48
39
  }
49
40
  @pipeline
50
41
  end
42
+
43
+ private
44
+ def wget(url)
45
+ filename = url.split(/\//).last
46
+ open(url) { |source|
47
+ open(File.join(@config['path'], filename), "w+b") { |o|
48
+ o.print source.read
49
+ }
50
+ }
51
+ end
51
52
  end
52
53
  end
@@ -40,7 +40,7 @@ module Automatic::Plugin
40
40
  maker.xml_stylesheets.new_xml_stylesheet
41
41
  maker.channel.title = "Automatic Ruby"
42
42
  maker.channel.description = "Automatic Ruby"
43
- maker.channel.link = "https://github.com/id774/automaticruby"
43
+ maker.channel.link = "https://github.com/automaticruby/automaticruby"
44
44
  maker.items.do_sort = true
45
45
 
46
46
  unless feeds.nil?
@@ -0,0 +1,85 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Subscription::Text
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 6, 2013
5
+ # Updated:: May 6, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class TextFeed
11
+ def initialize
12
+ @link = 'http://dummy'
13
+ @title = 'dummy'
14
+ end
15
+
16
+ def link
17
+ @link
18
+ end
19
+
20
+ def title
21
+ @title
22
+ end
23
+
24
+ def set_link(link)
25
+ @link = link
26
+ end
27
+
28
+ def set_title(title)
29
+ @title = title
30
+ end
31
+ end
32
+
33
+ class SubscriptionText
34
+
35
+ def initialize(config, pipeline=[])
36
+ @config = config
37
+ @pipeline = pipeline
38
+
39
+ unless @config.nil?
40
+ @dummyfeeds = []
41
+ unless @config['titles'].nil?
42
+ @config['titles'].each {|title|
43
+ textFeed = TextFeed.new
44
+ textFeed.set_title(title)
45
+ @dummyfeeds << textFeed
46
+ }
47
+ end
48
+
49
+ unless @config['urls'].nil?
50
+ @config['urls'].each {|url|
51
+ textFeed = TextFeed.new
52
+ textFeed.set_link(url)
53
+ @dummyfeeds << textFeed
54
+ }
55
+ end
56
+
57
+ unless @config['feeds'].nil?
58
+ @config['feeds'].each {|feed|
59
+ textFeed = TextFeed.new
60
+ textFeed.set_title(feed['title']) unless feed['title'].nil?
61
+ textFeed.set_link(feed['url']) unless feed['url'].nil?
62
+ @dummyfeeds << textFeed
63
+ }
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ def run
70
+ retries = 0
71
+ begin
72
+ if @dummyfeeds != []
73
+ @pipeline << Automatic::FeedParser.create(@dummyfeeds)
74
+ end
75
+ rescue
76
+ retries += 1
77
+ Automatic::Log.puts("error", "ErrorCount: #{retries}, Fault in parsing: #{feed}")
78
+ sleep @config['interval'].to_i unless @config['interval'].nil?
79
+ retry if retries <= @config['retry'].to_i unless @config['retry'].nil?
80
+ end
81
+
82
+ @pipeline
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Subscription::Weather
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 12, 2013
5
+ # Updated:: May 12, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
7
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
8
+
9
+ module Automatic::Plugin
10
+ class WeatherFeed
11
+ def initialize
12
+ @link = 'http://weather.dummy'
13
+ @title = 'weather-dummy'
14
+ end
15
+
16
+ def link
17
+ @link
18
+ end
19
+
20
+ def title
21
+ @title
22
+ end
23
+
24
+ def set_link(link)
25
+ @link = link
26
+ end
27
+
28
+ def set_title(title)
29
+ @title = title
30
+ end
31
+ end
32
+
33
+ class SubscriptionWeather
34
+ require 'weather_hacker'
35
+
36
+ def initialize(config, pipeline=[])
37
+ @config = config
38
+ @pipeline = pipeline
39
+ @weather = WeatherHacker.new(@config['zipcode'])
40
+ @day = 'today'
41
+ @day = @config['day'] unless @config['day'].nil?
42
+ end
43
+
44
+ def run
45
+ retries = 0
46
+ begin
47
+ weather = @weather.send(@day)['weather'] unless @weather.send(@day).nil?
48
+ if weather != nil
49
+ dummyfeed = WeatherFeed.new
50
+ dummyfeed.set_title(weather)
51
+ dummyfeed.set_link(dummyfeed.link + '.' + @day)
52
+ dummyfeeds = []
53
+ dummyfeeds << dummyfeed
54
+ @pipeline << Automatic::FeedParser.create(dummyfeeds)
55
+ end
56
+ rescue
57
+ retries += 1
58
+ Automatic::Log.puts("error", "ErrorCount: #{retries}, Fault in parsing: #{dummyfeed}")
59
+ sleep @config['interval'].to_i unless @config['interval'].nil?
60
+ retry if retries <= @config['retry'].to_i unless @config['retry'].nil?
61
+ end
62
+
63
+ @pipeline
64
+ end
65
+ end
66
+ end
data/script/build CHANGED
@@ -6,6 +6,8 @@
6
6
  #
7
7
  # Maintainer: id774 <idnanashi@gmail.com>
8
8
  #
9
+ # v1.4 5/13,2013
10
+ # Fix bundler environment.
9
11
  # v1.3 2/26,2013
10
12
  # Remove script/bootstrap.
11
13
  # v1.2 6/16,2012
@@ -33,7 +35,7 @@ exec_rspec() {
33
35
  run_test() {
34
36
  while [ $# -gt 0 ]
35
37
  do
36
- $RACK_ROOT/bin/automatic -c $1
38
+ bundle exec $RACK_ROOT/bin/automatic -c $1
37
39
  test_subcommand log info $?
38
40
  shift
39
41
  done
@@ -3,7 +3,7 @@
3
3
  # Author:: kzgs
4
4
  # 774 <http://id774.net>
5
5
  # Created:: Mar 9, 2012
6
- # Updated:: Apr 10, 2013
6
+ # Updated:: May 18, 2013
7
7
  # Copyright:: kzgs Copyright (c) 2012-2013
8
8
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
9
9
 
@@ -26,7 +26,7 @@ describe Automatic do
26
26
 
27
27
  describe "#version" do
28
28
  specify {
29
- Automatic.const_get(:VERSION).should == "13.4.1"
29
+ Automatic.const_get(:VERSION).should == "13.5.0"
30
30
  }
31
31
  end
32
32
 
@@ -10,6 +10,55 @@ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
10
10
  require 'filter/ignore'
11
11
 
12
12
  describe Automatic::Plugin::FilterIgnore do
13
+
14
+ context "with exclusion by title" do
15
+ subject {
16
+ Automatic::Plugin::FilterIgnore.new({
17
+ 'title' => [""],
18
+ },
19
+ AutomaticSpec.generate_pipeline {
20
+ feed { item "http://github.com", "foo" }
21
+ feed { item "http://google.com", "hi" }
22
+ })
23
+ }
24
+
25
+ describe "#run" do
26
+ its(:run) { should have(0).feeds }
27
+ end
28
+ end
29
+
30
+ context "with exclusion by title" do
31
+ subject {
32
+ Automatic::Plugin::FilterIgnore.new({
33
+ 'title' => ["foo"],
34
+ },
35
+ AutomaticSpec.generate_pipeline {
36
+ feed { item "http://github.com", "foo" }
37
+ feed { item "http://google.com", "hi" }
38
+ })
39
+ }
40
+
41
+ describe "#run" do
42
+ its(:run) { should have(1).feeds }
43
+ end
44
+ end
45
+
46
+ context "with exclusion by title" do
47
+ subject {
48
+ Automatic::Plugin::FilterIgnore.new({
49
+ 'title' => ["o"],
50
+ },
51
+ AutomaticSpec.generate_pipeline {
52
+ feed { item "http://github.com", "foo" }
53
+ feed { item "http://google.com", "hi" }
54
+ })
55
+ }
56
+
57
+ describe "#run" do
58
+ its(:run) { should have(1).feeds }
59
+ end
60
+ end
61
+
13
62
  context "with exclusion by links" do
14
63
  subject {
15
64
  Automatic::Plugin::FilterIgnore.new({
@@ -0,0 +1,71 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Filter::One
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 8, 2013
5
+ # Updated:: May 8, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
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/one'
12
+
13
+ describe Automatic::Plugin::FilterOne do
14
+ context "It should be one" do
15
+ subject {
16
+ Automatic::Plugin::FilterOne.new(
17
+ {},
18
+ AutomaticSpec.generate_pipeline {
19
+ feed {
20
+ item "http://aaa.png"
21
+ item "http://bbb.png"
22
+ item "http://ccc.png"
23
+ item "http://ddd.png"
24
+ }
25
+ }
26
+ )
27
+ }
28
+
29
+ describe "#run" do
30
+ its(:run) { should have(1).feeds }
31
+
32
+ specify {
33
+ subject.run
34
+ subject.instance_variable_get(:@return_feeds)[0].items.
35
+ count.should == 1
36
+ subject.instance_variable_get(:@return_feeds)[0].items[0].link.
37
+ should == 'http://aaa.png'
38
+ }
39
+ end
40
+ end
41
+
42
+ context "It should be one last" do
43
+ subject {
44
+ Automatic::Plugin::FilterOne.new(
45
+ {
46
+ 'pick' => "last"
47
+ },
48
+ AutomaticSpec.generate_pipeline {
49
+ feed {
50
+ item "http://aaa.png"
51
+ item "http://bbb.png"
52
+ item "http://ccc.png"
53
+ item "http://ddd.png"
54
+ }
55
+ }
56
+ )
57
+ }
58
+
59
+ describe "#run" do
60
+ its(:run) { should have(1).feeds }
61
+
62
+ specify {
63
+ subject.run
64
+ subject.instance_variable_get(:@return_feeds)[0].items.
65
+ count.should == 1
66
+ subject.instance_variable_get(:@return_feeds)[0].items[0].link.
67
+ should == 'http://ddd.png'
68
+ }
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Filter::Rand
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # 774 <http://id774.net>
5
+ # Created:: May 6, 2013
6
+ # Updated:: Mar 7, 2013
7
+ # Copyright:: soramugi Copyright (c) 2013
8
+ # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
9
+
10
+ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
11
+
12
+ require 'filter/rand'
13
+
14
+ describe Automatic::Plugin::FilterRand do
15
+ context "It should be rand" do
16
+ subject {
17
+ Automatic::Plugin::FilterRand.new(
18
+ {},
19
+ AutomaticSpec.generate_pipeline {
20
+ feed {
21
+ item "http://aaa.png"
22
+ item "http://bbb.png"
23
+ item "http://ccc.png"
24
+ item "http://ddd.png"
25
+ }
26
+ }
27
+ )
28
+ }
29
+
30
+ describe "#run" do
31
+ its(:run) { should have(1).feeds }
32
+
33
+ specify {
34
+ subject.run
35
+ link0 = subject.instance_variable_get(:@return_feeds)[0].items[0].link
36
+ link1 = subject.instance_variable_get(:@return_feeds)[0].items[1].link
37
+ link2 = subject.instance_variable_get(:@return_feeds)[0].items[2].link
38
+ link3 = subject.instance_variable_get(:@return_feeds)[0].items[3].link
39
+ if link0 != "http://aaa.png"
40
+ link0.should_not == "http://aaa.png"
41
+ elsif link1 != "http://bbb.png"
42
+ link1.should_not == "http://bbb.png"
43
+ elsif link2 != "http://ccc.png"
44
+ link2.should_not == "http://ccc.png"
45
+ else
46
+ pending("Plugin returns the origin feed.")
47
+ link3.should == "http://ddd.png"
48
+ end
49
+ }
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Pocket
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 15, 2013
5
+ # Updated:: May 15, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
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 'publish/pocket'
12
+
13
+ describe Automatic::Plugin::PublishPocket do
14
+ subject {
15
+ Automatic::Plugin::PublishPocket.new(
16
+ { 'consumer_key' => "hugehuge",
17
+ 'access_token' => "hogehoge",
18
+ 'interval' => 1,
19
+ 'retry' => 1
20
+ },
21
+ AutomaticSpec.generate_pipeline{
22
+ feed { item "http://github.com" }
23
+ }
24
+ )
25
+ }
26
+
27
+ it "should post the link in the feed" do
28
+ client = mock("client")
29
+ client.should_receive(:add).with(:url => 'http://github.com')
30
+ subject.instance_variable_set(:@client, client)
31
+ subject.run.should have(1).feed
32
+ end
33
+ end
34
+
35
+ describe Automatic::Plugin::PublishPocket do
36
+ subject {
37
+ Automatic::Plugin::PublishPocket.new(
38
+ { 'consumer_key' => "hugehuge",
39
+ 'access_token' => "hogehoge",
40
+ 'interval' => 1,
41
+ 'retry' => 1
42
+ },
43
+ AutomaticSpec.generate_pipeline{
44
+ }
45
+ )
46
+ }
47
+
48
+ it "should un post" do
49
+ subject.run.should have(0).feed
50
+ end
51
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Name:: Automatic::Plugin::Publish::Twitter
3
+ # Author:: soramugi <http://soramugi.net>
4
+ # Created:: May 5, 2013
5
+ # Updated:: May 5, 2013
6
+ # Copyright:: soramugi Copyright (c) 2013
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 'publish/twitter'
12
+
13
+ describe Automatic::Plugin::PublishTwitter do
14
+ subject {
15
+ Automatic::Plugin::PublishTwitter.new(
16
+ { 'consumer_key' => 'your_consumer_key',
17
+ 'consumer_secret' => 'your_consumer_secret',
18
+ 'oauth_token' => 'your_oauth_token',
19
+ 'oauth_token_secret' => 'your_oauth_token_secret',
20
+ 'interval' => 5,
21
+ 'retry' => 5
22
+ },
23
+ AutomaticSpec.generate_pipeline{
24
+ feed { item "http://github.com" }
25
+ }
26
+ )
27
+ }
28
+
29
+ it "should post the link tweet" do
30
+ twitter = mock("twitter")
31
+ twitter.should_receive(:update).with(" http://github.com")
32
+ subject.instance_variable_set(:@twitter, twitter)
33
+ subject.run.should have(1).feed
34
+ end
35
+ end
@@ -3,7 +3,7 @@
3
3
  # Author:: kzgs
4
4
  # 774 <http://id774.net>
5
5
  # Created:: Mar 4, 2012
6
- # Updated:: Apr 3, 2013
6
+ # Updated:: May 1, 2013
7
7
  # Copyright:: kzgs Copyright (c) 2012-2013
8
8
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
9
9
 
@@ -34,7 +34,7 @@ describe Automatic::Plugin::SubscriptionFeed do
34
34
  subject {
35
35
  Automatic::Plugin::SubscriptionFeed.new(
36
36
  { 'feeds' => [
37
- "https://github.com/id774/automaticruby/commits/master.atom"]
37
+ "https://github.com/automaticruby/automaticruby/commits/master.atom"]
38
38
  }
39
39
  )
40
40
  }
@@ -46,7 +46,7 @@ describe Automatic::Plugin::SubscriptionFeed do
46
46
  subject {
47
47
  Automatic::Plugin::SubscriptionFeed.new(
48
48
  { 'feeds' => [
49
- "https://github.com/id774/automaticruby/commits/master.atom"],
49
+ "https://github.com/automaticruby/automaticruby/commits/master.atom"],
50
50
  'retry' => 3,
51
51
  'interval' => 5
52
52
  }