automatic 13.4.1 → 13.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  }