automatic 12.4.0 → 12.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 (81) hide show
  1. data/Gemfile +1 -0
  2. data/README.md +8 -5
  3. data/Rakefile +1 -1
  4. data/VERSION +1 -1
  5. data/automatic.gemspec +32 -9
  6. data/bin/automatic +3 -3
  7. data/bin/automatic-config +34 -17
  8. data/config/feed2console.yml +1 -2
  9. data/config/html2console.yml +16 -0
  10. data/doc/ChangeLog +38 -3
  11. data/doc/PLUGINS +191 -14
  12. data/doc/PLUGINS.ja +187 -10
  13. data/doc/README +70 -42
  14. data/doc/README.ja +64 -58
  15. data/lib/automatic/opml.rb +2 -1
  16. data/lib/automatic/pipeline.rb +3 -3
  17. data/lib/automatic/recipe.rb +6 -1
  18. data/lib/automatic.rb +6 -6
  19. data/plugins/extract/link.rb +32 -0
  20. data/plugins/filter/ignore.rb +7 -16
  21. data/plugins/filter/image_link.rb +37 -0
  22. data/plugins/filter/{image.rb → image_source.rb} +6 -7
  23. data/plugins/filter/reverse.rb +3 -4
  24. data/plugins/filter/tumblr_resize.rb +3 -4
  25. data/plugins/notify/ikachan.rb +1 -2
  26. data/plugins/publish/console.rb +0 -1
  27. data/plugins/publish/dump.rb +24 -0
  28. data/plugins/publish/google_calendar.rb +0 -2
  29. data/plugins/publish/hatena_bookmark.rb +2 -3
  30. data/plugins/store/{store_database.rb → database.rb} +32 -7
  31. data/plugins/store/full_text.rb +5 -5
  32. data/plugins/store/link.rb +47 -0
  33. data/plugins/store/permalink.rb +7 -7
  34. data/plugins/store/target.rb +41 -0
  35. data/plugins/subscription/feed.rb +0 -1
  36. data/plugins/subscription/uri.rb +31 -0
  37. data/script/build +18 -4
  38. data/spec/fixtures/extractLink.html +14 -0
  39. data/spec/fixtures/filterImageLink.html +34 -0
  40. data/spec/fixtures/publishDump.html +14 -0
  41. data/{config/default.yml → spec/fixtures/sampleRecipe.yml} +8 -10
  42. data/spec/fixtures/storeLink.html +34 -0
  43. data/spec/fixtures/storeLink2.html +36 -0
  44. data/spec/fixtures/storeTarget.html +11 -0
  45. data/spec/fixtures/storeTarget2.html +11 -0
  46. data/spec/lib/automatic/pipeline_spec.rb +27 -14
  47. data/spec/lib/automatic/recipe_spec.rb +35 -0
  48. data/spec/lib/automatic_spec.rb +21 -14
  49. data/spec/plugins/extract/link_spec.rb +38 -0
  50. data/spec/plugins/filter/ignore_spec.rb +59 -3
  51. data/spec/plugins/filter/image_link_spec.rb +51 -0
  52. data/spec/plugins/filter/{image_spec.rb → image_source_spec.rb} +29 -9
  53. data/spec/plugins/filter/reverse_spec.rb +0 -1
  54. data/spec/plugins/filter/tumblr_resize_spec.rb +7 -0
  55. data/spec/plugins/publish/console_spec.rb +9 -2
  56. data/spec/plugins/publish/dump_spec.rb +32 -0
  57. data/spec/plugins/publish/google_calendar_spec.rb +2 -1
  58. data/spec/plugins/publish/hatena_bookmark_spec.rb +2 -1
  59. data/spec/plugins/publish/mail_spec.rb +9 -1
  60. data/spec/plugins/publish/smtp_spec.rb +9 -1
  61. data/spec/plugins/store/full_text_spec.rb +15 -5
  62. data/spec/plugins/store/link_spec.rb +47 -0
  63. data/spec/plugins/store/permalink_spec.rb +9 -2
  64. data/spec/plugins/store/target_link_spec.rb +17 -3
  65. data/spec/plugins/store/target_spec.rb +41 -0
  66. data/spec/plugins/subscription/feed_spec.rb +14 -4
  67. data/spec/plugins/subscription/uri_spec.rb +43 -0
  68. data/spec/spec_helper.rb +31 -8
  69. data/spec/user_dir/plugins/store/mock.rb +4 -0
  70. data/test/integration/test_activerecord.yml +1 -1
  71. data/test/integration/test_fulltext.yml +1 -1
  72. data/test/integration/test_get_image.yml +26 -0
  73. data/test/integration/test_hatenabookmark.yml +1 -1
  74. data/test/integration/test_ignore.yml +1 -1
  75. data/test/integration/test_ignore2.yml +1 -1
  76. data/test/integration/test_image2local.yml +1 -1
  77. data/test/integration/test_reverse.yml +1 -1
  78. data/test/integration/test_tumblr2local.yml +1 -1
  79. metadata +45 -9
  80. data/spec/lib/pipeline_spec.rb +0 -67
  81. data/test/integration/test_mail.yml +0 -21
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ gem 'actionmailer', '~>3'
11
11
  gem 'gcalapi'
12
12
  gem 'xml-simple'
13
13
  gem 'feedbag'
14
+ gem 'nokogiri'
14
15
 
15
16
  group :test do
16
17
  gem 'rspec'
data/README.md CHANGED
@@ -21,6 +21,7 @@ Installation.
21
21
 
22
22
  ``` html
23
23
  gem install automatic
24
+ automatic-config scaffold
24
25
  ```
25
26
 
26
27
  Specify any recipe with -c option.
@@ -32,7 +33,7 @@ automatic -c <recipe>
32
33
  Example.
33
34
 
34
35
  ``` html
35
- $ automatic -c config/feed2console.yml
36
+ $ automatic -c ~/.automatic/config/example/feed2console.yml
36
37
  ```
37
38
 
38
39
 
@@ -45,9 +46,7 @@ of associated plug-ins.
45
46
 
46
47
  This YAML file is called "Recipe".
47
48
 
48
- When you start automatic ruby without argument -c option,
49
- the config/default.yml is called. You can use -c option for
50
- specify a file name.
49
+ You can use -c option for specify a file name.
51
50
 
52
51
  The Recipe has an implicit naming convention.
53
52
 
@@ -84,6 +83,10 @@ We need your help.
84
83
 
85
84
  + http://rubyforge.org/projects/automatic/
86
85
 
86
+ **RubyGems.org**
87
+
88
+ + https://rubygems.org/gems/automatic
89
+
87
90
  **CI**
88
91
 
89
92
  + http://jenkins.id774.net/jenkins/
@@ -102,7 +105,7 @@ Releases will be numbered with the follow format:
102
105
 
103
106
  `<year>.<month>`
104
107
 
105
- This naming convention is to mimic the Ubuntu.
108
+ This naming convention is to mimic Ubuntu.
106
109
 
107
110
 
108
111
  Developers
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
9
9
  spec.pattern = FileList['spec/**/*_spec.rb']
10
10
  end
11
11
 
12
- namespace :spec do
12
+ namespace :spec do
13
13
  desc "Run RSpec for plugins"
14
14
  RSpec::Core::RakeTask.new(:plugins) do |spec|
15
15
  spec.rspec_opts = ["-c"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 12.4.0
1
+ 12.6.0
data/automatic.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "automatic"
8
- s.version = "12.4.0"
8
+ s.version = "12.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["id774"]
12
- s.date = "2012-04-30"
12
+ s.date = "2012-06-17"
13
13
  s.description = "Ruby General Automation Framework"
14
14
  s.email = "idnanashi@gmail.com"
15
15
  s.executables = ["automatic", "automatic-config"]
@@ -24,8 +24,8 @@ Gem::Specification.new do |s|
24
24
  "automatic.gemspec",
25
25
  "bin/automatic",
26
26
  "bin/automatic-config",
27
- "config/default.yml",
28
27
  "config/feed2console.yml",
28
+ "config/html2console.yml",
29
29
  "db/.gitkeep",
30
30
  "doc/AUTHORS",
31
31
  "doc/COPYING",
@@ -42,52 +42,72 @@ Gem::Specification.new do |s|
42
42
  "lib/automatic/pipeline.rb",
43
43
  "lib/automatic/recipe.rb",
44
44
  "plugins/custom_feed/svn_log.rb",
45
+ "plugins/extract/link.rb",
45
46
  "plugins/filter/ignore.rb",
46
- "plugins/filter/image.rb",
47
+ "plugins/filter/image_link.rb",
48
+ "plugins/filter/image_source.rb",
47
49
  "plugins/filter/reverse.rb",
48
50
  "plugins/filter/tumblr_resize.rb",
49
51
  "plugins/notify/ikachan.rb",
50
52
  "plugins/publish/console.rb",
53
+ "plugins/publish/dump.rb",
51
54
  "plugins/publish/google_calendar.rb",
52
55
  "plugins/publish/hatena_bookmark.rb",
53
56
  "plugins/publish/mail.rb",
54
57
  "plugins/publish/smtp.rb",
58
+ "plugins/store/database.rb",
55
59
  "plugins/store/full_text.rb",
60
+ "plugins/store/link.rb",
56
61
  "plugins/store/permalink.rb",
57
- "plugins/store/store_database.rb",
62
+ "plugins/store/target.rb",
58
63
  "plugins/store/target_link.rb",
59
64
  "plugins/subscription/feed.rb",
65
+ "plugins/subscription/uri.rb",
60
66
  "script/bootstrap",
61
67
  "script/build",
68
+ "spec/fixtures/extractLink.html",
69
+ "spec/fixtures/filterImageLink.html",
70
+ "spec/fixtures/publishDump.html",
71
+ "spec/fixtures/sampleRecipe.yml",
72
+ "spec/fixtures/storeLink.html",
73
+ "spec/fixtures/storeLink2.html",
74
+ "spec/fixtures/storeTarget.html",
75
+ "spec/fixtures/storeTarget2.html",
62
76
  "spec/lib/automatic/pipeline_spec.rb",
77
+ "spec/lib/automatic/recipe_spec.rb",
63
78
  "spec/lib/automatic_spec.rb",
64
- "spec/lib/pipeline_spec.rb",
65
79
  "spec/plugins/custom_feed/svn_log_spec.rb",
80
+ "spec/plugins/extract/link_spec.rb",
66
81
  "spec/plugins/filter/ignore_spec.rb",
67
- "spec/plugins/filter/image_spec.rb",
82
+ "spec/plugins/filter/image_link_spec.rb",
83
+ "spec/plugins/filter/image_source_spec.rb",
68
84
  "spec/plugins/filter/reverse_spec.rb",
69
85
  "spec/plugins/filter/tumblr_resize_spec.rb",
70
86
  "spec/plugins/notify/ikachan_spec.rb",
71
87
  "spec/plugins/publish/console_spec.rb",
88
+ "spec/plugins/publish/dump_spec.rb",
72
89
  "spec/plugins/publish/google_calendar_spec.rb",
73
90
  "spec/plugins/publish/hatena_bookmark_spec.rb",
74
91
  "spec/plugins/publish/mail_spec.rb",
75
92
  "spec/plugins/publish/smtp_spec.rb",
76
93
  "spec/plugins/store/full_text_spec.rb",
94
+ "spec/plugins/store/link_spec.rb",
77
95
  "spec/plugins/store/permalink_spec.rb",
78
96
  "spec/plugins/store/target_link_spec.rb",
97
+ "spec/plugins/store/target_spec.rb",
79
98
  "spec/plugins/subscription/feed_spec.rb",
99
+ "spec/plugins/subscription/uri_spec.rb",
80
100
  "spec/spec_helper.rb",
81
101
  "spec/user_dir/plugins/store/mock.rb",
82
102
  "test/fixtures/sampleOPML.xml",
83
103
  "test/integration/test_activerecord.yml",
84
104
  "test/integration/test_fulltext.yml",
105
+ "test/integration/test_get_image.yml",
85
106
  "test/integration/test_googlealert.yml",
86
107
  "test/integration/test_hatenabookmark.yml",
87
108
  "test/integration/test_ignore.yml",
88
109
  "test/integration/test_ignore2.yml",
89
110
  "test/integration/test_image2local.yml",
90
- "test/integration/test_mail.yml",
91
111
  "test/integration/test_reverse.yml",
92
112
  "test/integration/test_svnlog.yml",
93
113
  "test/integration/test_tumblr2local.yml",
@@ -96,7 +116,7 @@ Gem::Specification.new do |s|
96
116
  s.homepage = "http://github.com/id774/automaticruby"
97
117
  s.licenses = ["GPL"]
98
118
  s.require_paths = ["lib"]
99
- s.rubygems_version = "1.8.19"
119
+ s.rubygems_version = "1.8.24"
100
120
  s.summary = "Automatic Ruby"
101
121
 
102
122
  if s.respond_to? :specification_version then
@@ -111,6 +131,7 @@ Gem::Specification.new do |s|
111
131
  s.add_runtime_dependency(%q<gcalapi>, [">= 0"])
112
132
  s.add_runtime_dependency(%q<xml-simple>, [">= 0"])
113
133
  s.add_runtime_dependency(%q<feedbag>, [">= 0"])
134
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
114
135
  s.add_development_dependency(%q<cucumber>, [">= 0"])
115
136
  s.add_development_dependency(%q<bundler>, [">= 0"])
116
137
  s.add_development_dependency(%q<jeweler>, [">= 0"])
@@ -123,6 +144,7 @@ Gem::Specification.new do |s|
123
144
  s.add_dependency(%q<gcalapi>, [">= 0"])
124
145
  s.add_dependency(%q<xml-simple>, [">= 0"])
125
146
  s.add_dependency(%q<feedbag>, [">= 0"])
147
+ s.add_dependency(%q<nokogiri>, [">= 0"])
126
148
  s.add_dependency(%q<cucumber>, [">= 0"])
127
149
  s.add_dependency(%q<bundler>, [">= 0"])
128
150
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -136,6 +158,7 @@ Gem::Specification.new do |s|
136
158
  s.add_dependency(%q<gcalapi>, [">= 0"])
137
159
  s.add_dependency(%q<xml-simple>, [">= 0"])
138
160
  s.add_dependency(%q<feedbag>, [">= 0"])
161
+ s.add_dependency(%q<nokogiri>, [">= 0"])
139
162
  s.add_dependency(%q<cucumber>, [">= 0"])
140
163
  s.add_dependency(%q<bundler>, [">= 0"])
141
164
  s.add_dependency(%q<jeweler>, [">= 0"])
data/bin/automatic CHANGED
@@ -20,7 +20,7 @@ parser = OptionParser.new { |parser|
20
20
  parser.separator "options:"
21
21
  parser.on('-c', '--config FILE', String,
22
22
  "recipe YAML file"){|c| recipe_path = c}
23
- parser.on('-h', '--help', "show this message") {
23
+ parser.on('-h', '--help', "show this message") {
24
24
  puts parser
25
25
  exit
26
26
  }
@@ -35,9 +35,9 @@ rescue OptionParser::ParseError => err
35
35
  exit 1
36
36
  end
37
37
 
38
- if recipe_path.to_s.empty?
38
+ if recipe_path.to_s.empty?
39
39
  if ENV["AUTOMATIC_RUBY_ENV"] == "test"
40
- recpie_path = File.join(root_dir, 'config/default.yml')
40
+ recpie_path = File.join(root_dir, 'config/default.yml')
41
41
  else
42
42
  puts parser
43
43
  exit 0
data/bin/automatic-config CHANGED
@@ -2,8 +2,9 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  # Name:: Automatic::Ruby
4
4
  # Author:: kzgs
5
+ # 774 <http://id774.net>
5
6
  # Created:: Mar 11, 2012
6
- # Updated:: Mar 11, 2012
7
+ # Updated:: Jun 17, 2012
7
8
  # Copyright:: kzgs Copyright (c) 2012
8
9
  # License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
9
10
 
@@ -13,6 +14,9 @@ $:.unshift root_dir + '/lib'
13
14
  require 'automatic'
14
15
  require 'rubygems'
15
16
  require 'optparse'
17
+ require 'fileutils'
18
+ require 'feedbag'
19
+ require 'pp'
16
20
 
17
21
  parser = OptionParser.new { |opt|
18
22
  }
@@ -26,33 +30,36 @@ end
26
30
  subparsers = {
27
31
  'scaffold' => lambda { |argv|
28
32
  Dir::entries(root_dir + '/plugins').sort.each { |path|
29
- require 'fileutils'
30
33
  dir = (File.expand_path('~/.automatic/plugins/' + path))
31
34
  unless File.exist?(dir)
32
35
  FileUtils.mkdir_p(dir)
33
36
  puts "Create Directory #{dir}"
34
37
  end
35
38
  }
39
+ dir = (File.expand_path('~/.automatic/config'))
40
+ unless File.exist?(dir)
41
+ FileUtils.mkdir_p(dir)
42
+ FileUtils.cp_r(root_dir + '/config', dir + '/example')
43
+ puts "Create Directory #{dir}"
44
+ end
45
+ dir = (File.expand_path('~/.automatic/db'))
46
+ unless File.exist?(dir)
47
+ FileUtils.mkdir_p(dir)
48
+ puts "Create Directory #{dir}"
49
+ end
50
+ },
51
+ 'unscaffold' => lambda { |argv|
52
+ dir = (File.expand_path('~/.automatic'))
53
+ if File.directory?(dir)
54
+ puts "Remove Directory #{dir}"
55
+ FileUtils.rm_r(dir)
56
+ end
36
57
  },
37
58
  'autodiscovery' => lambda { |argv|
38
- require 'pp'
39
- require 'feedbag'
40
59
  url = argv.shift || abort_with_usage("autodiscovery", "<url>")
41
60
  pp Feedbag.find(url)
42
61
  },
43
- 'opmlparser' => lambda { |argv|
44
- require 'automatic/opml'
45
- path = argv.shift
46
- if path.nil?
47
- abort_with_usage("opmlparser", "<opml path>")
48
- end
49
- parser = Automatic::OPML::Parser.new(File.read(path))
50
- parser.each_outline {|opml, o|
51
- puts "#{o.xmlUrl}"
52
- }
53
- },
54
62
  'feedparser' => lambda { |argv|
55
- require 'pp'
56
63
  require 'automatic/feed_parser'
57
64
  url = argv.shift || abort_with_usage("feedparser", "<url>")
58
65
  rss_results = Automatic::FeedParser.get_rss(url)
@@ -60,13 +67,23 @@ subparsers = {
60
67
  },
61
68
  'inspect' => lambda { |argv|
62
69
  require 'automatic/feed_parser'
63
- require 'feedbag'
64
70
  url = argv.shift || abort_with_usage("inspect", "<url>")
65
71
  feeds = Feedbag.find(url)
66
72
  pp feeds
67
73
  rss_results = Automatic::FeedParser.get_rss(feeds.pop)
68
74
  pp rss_results
69
75
  },
76
+ 'opmlparser' => lambda { |argv|
77
+ require 'automatic/opml'
78
+ path = argv.shift
79
+ if path.nil?
80
+ abort_with_usage("opmlparser", "<opml path>")
81
+ end
82
+ parser = Automatic::OPML::Parser.new(File.read(path))
83
+ parser.each_outline {|opml, o|
84
+ puts "#{o.xmlUrl}"
85
+ }
86
+ },
70
87
  'log' => lambda { |argv|
71
88
  require 'automatic/log'
72
89
  level = argv.shift || abort_with_usage("log", "<level> <message>")
@@ -9,7 +9,6 @@ plugins:
9
9
  - module: SubscriptionFeed
10
10
  config:
11
11
  feeds:
12
- - http://blog.id774.net/blogs/feed/
12
+ - http://blog.id774.net/post/feed/
13
13
 
14
14
  - module: PublishConsole
15
-
@@ -0,0 +1,16 @@
1
+ global:
2
+ timezone: Asia/Tokyo
3
+ cache:
4
+ base: /tmp
5
+ log:
6
+ level: info
7
+
8
+ plugins:
9
+ - module: SubscriptionURI
10
+ config:
11
+ urls:
12
+ - http://id774.net/
13
+
14
+ - module: ExtractLink
15
+
16
+ - module: PublishDump
data/doc/ChangeLog CHANGED
@@ -1,12 +1,47 @@
1
+ === 12.6.0 / 2012-06-18
2
+
3
+ * Added plug-ins.
4
+
5
+ * Subscription::URI
6
+ * Extract::Link
7
+ * Filter::Image
8
+ * Store::Link
9
+ * Store::Target
10
+
11
+ * Improvement automatic-config.
12
+
13
+ * Scaffold makes config and db directory.
14
+ * Unscaffold SubCommand added to automatic-config.
15
+
16
+ * Improvement search path.
17
+
18
+ * Search user_dir's config when order -c option with simple filename.
19
+ * If user's db directory exist, use it.
20
+
21
+ * Improvement log.
22
+
23
+ * Show recipe and db name on log.
24
+
25
+ * Refactoring.
26
+
27
+ * Refactoring plug-in names.
28
+ * Header fields.
29
+
30
+ * Add tests.
31
+
32
+ * RSpec code coverage over 99%.
33
+ * Add all option script/build.
34
+
35
+
1
36
  === 12.4.0 / 2012-04-30
2
37
 
3
38
  * Inspect SubCommand added to automatic-config.
4
39
 
5
- * Added Plugins.
40
+ * Added plug-ins.
6
41
 
7
42
  * Filter::Reverse
8
- * Publish::SMTP
9
- * Publish::Mail
43
+ * Publish::SMTP
44
+ * Publish::Mail
10
45
 
11
46
  * Running all Integration Tests with CI.
12
47