yapra 0.1.0 → 0.1.1

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 (42) hide show
  1. data/History.txt +12 -0
  2. data/Manifest.txt +11 -2
  3. data/PostInstall.txt +0 -7
  4. data/README.txt +2 -1
  5. data/bin/yapra +35 -21
  6. data/fixtures/config/habu_like.yml +43 -0
  7. data/fixtures/config/mixed_type.yml +18 -0
  8. data/fixtures/config/pragger_like.yml +12 -0
  9. data/fixtures/legacy_plugin/legacy_test_plugin.rb +4 -0
  10. data/lib/yapra/config.rb +5 -3
  11. data/lib/yapra/legacy_plugin/advance_mode_registry.rb +14 -3
  12. data/lib/yapra/legacy_plugin/base.rb +1 -0
  13. data/lib/yapra/legacy_plugin/compatible_mode_registry.rb +12 -2
  14. data/lib/yapra/legacy_plugin/registry_factory.rb +7 -0
  15. data/lib/yapra/pipeline.rb +21 -0
  16. data/lib/yapra/plugin/base.rb +4 -0
  17. data/lib/yapra/plugin/erb_applier.rb +1 -1
  18. data/lib/yapra/plugin/mechanize_base.rb +4 -4
  19. data/lib/yapra/runtime.rb +16 -0
  20. data/lib/yapra/version.rb +1 -1
  21. data/lib/yapra.rb +2 -0
  22. data/lib-plugins/yapra/plugin/config/agent.rb +13 -13
  23. data/lib-plugins/yapra/plugin/config/basic_auth.rb +9 -9
  24. data/lib-plugins/yapra/plugin/config/web_post.rb +11 -11
  25. data/lib-plugins/yapra/plugin/feed/custom.rb +17 -12
  26. data/lib-plugins/yapra/plugin/feed/load.rb +10 -0
  27. data/lib-plugins/yapra/plugin/filter/apply_template.rb +52 -0
  28. data/lib-plugins/yapra/plugin/filter/entry_full_text.rb +16 -16
  29. data/lib-plugins/yapra/plugin/publish/file_download.rb +28 -77
  30. data/lib-plugins/yapra/plugin/publish/gmail.rb +16 -16
  31. data/lib-plugins/yapra/plugin/publish/imap.rb +88 -34
  32. data/lib-plugins/yapra/plugin/publish/on_memory_download.rb +86 -0
  33. data/lib-plugins/yapra/plugin/test/append_entry.rb +11 -11
  34. data/plugins/Filter/grep.rb +24 -0
  35. data/spec/spec_helper.rb +2 -0
  36. data/spec/yapra/config_spec.rb +72 -0
  37. data/spec/yapra/legacy_plugin/base_spec.rb +33 -0
  38. data/spec/yapra/legacy_plugin/registry_factory_spec.rb +19 -0
  39. data/spec/yapra_spec.rb +7 -3
  40. data/website/index.txt +3 -3
  41. metadata +15 -13
  42. data/website/index.html +0 -115
@@ -0,0 +1,52 @@
1
+ require 'yapra/plugin/base'
2
+
3
+ module Yapra::Plugin::Filter
4
+ # = Filter::ApplyTemplate -- Yuanying
5
+ #
6
+ # apply template and set to attribute.
7
+ #
8
+ # example:
9
+ #
10
+ # - module: Filter::ApplyTemplate
11
+ # config:
12
+ # content_encoded: '<div><%= title %></div>'
13
+ #
14
+ class ApplyTemplate < Yapra::Plugin::Base
15
+ def run(data)
16
+ regexp = nil
17
+ if config['regexp']
18
+ regexp = Regexp.new(config['regexp'])
19
+ else
20
+ regexp = /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/
21
+ end
22
+
23
+ data.map! do |item|
24
+ url = item
25
+ if item.respond_to?('link')
26
+ url = item.link
27
+ end
28
+
29
+ if regexp =~ url
30
+ unless(item.instance_of?(RSS::RDF::Item))
31
+ new_item = RSS::RDF::Item.new
32
+ new_item.title = item.title rescue item.to_s
33
+ new_item.date = item.date rescue Time.now
34
+ new_item.description = item.description rescue item.to_s
35
+ new_item.link = item.link rescue '#'
36
+ item = new_item
37
+ end
38
+
39
+ if plugin_config
40
+ plugin_config.each do |k, template|
41
+ value = apply_template template, binding
42
+ set_attribute_to item, k, value
43
+ end
44
+ end
45
+ end
46
+ item
47
+ end
48
+
49
+ data
50
+ end
51
+ end
52
+ end
@@ -1,21 +1,21 @@
1
- ## Filter::EntryFullText -- Yuanying
2
- ##
3
- ## get the entry full text from page with WWW::Mechanize.
4
- ##
5
- ## - module: Filter::EntryFullText
6
- ## config:
7
- ## regexp: http://www\.pixiv\.net/*
8
- ## extract_xpath:
9
- ## title: '//title/text()'
10
- ## dc_creator: "//div[@id='profile']/div/text()"
11
- ## author: "//div[@id='profile']/div/text()"
12
- ## description: "//div[@id='content2']"
13
- ## apply_template_after_extracted:
14
- ## content_encoded: '<div><%= title %></div>'
15
- ##
16
1
  require 'yapra/plugin/mechanize_base'
17
2
 
18
3
  module Yapra::Plugin::Filter
4
+ # Filter::EntryFullText -- Yuanying
5
+ #
6
+ # get the entry full text from page with WWW::Mechanize.
7
+ #
8
+ # - module: Filter::EntryFullText
9
+ # config:
10
+ # regexp: http://www\.pixiv\.net/*
11
+ # extract_xpath:
12
+ # title: '//title/text()'
13
+ # dc_creator: "//div[@id='profile']/div/text()"
14
+ # author: "//div[@id='profile']/div/text()"
15
+ # description: "//div[@id='content2']"
16
+ # apply_template_after_extracted:
17
+ # content_encoded: '<div><%= title %></div>'
18
+
19
19
  class EntryFullText < Yapra::Plugin::MechanizeBase
20
20
  def run(data)
21
21
  regexp = nil
@@ -34,9 +34,9 @@ module Yapra::Plugin::Filter
34
34
  end
35
35
 
36
36
  if regexp =~ url
37
+ logger.debug "Process: #{url}"
37
38
  page = agent.get(url)
38
39
  sleep wait
39
- logger.info "Process: #{url}"
40
40
 
41
41
  unless(item.instance_of?(RSS::RDF::Item))
42
42
  new_item = RSS::RDF::Item.new
@@ -1,72 +1,34 @@
1
- ## Publish::FileDownload -- Yuanying
2
- ##
3
- ## download file with WWW::Mechanize.
4
- ##
5
- ## example:
6
- ##
7
- ## - module: Publish::FileDownload
8
- ## config:
9
- ## regexp: http://www\.yahoo\.co\.jp/*
10
- ## dir: '/Users/yuanying/Downloads/'
11
- ## auto_suffix: true
12
- ## before_hook: "agent.get('http://www.yahoo.co.jp/'); sleep 1"
13
- ## url:
14
- ## attribute: link
15
- ## replace: index(\d*?)\.html
16
- ## to: file\1.zip
17
- ## filename:
18
- ## attribute: title
19
- ## replace: 'Yahoo'
20
- ## to: ''
21
- ## referrer:
22
- ## attribute: link
23
- ## replace: 'zip'
24
- ## to: 'html'
25
- ##
26
- require 'yapra/plugin/mechanize_base'
1
+ require 'yapra/plugin/publish/on_memory_download'
27
2
 
28
3
  module Yapra::Plugin::Publish
29
- class FileDownload < Yapra::Plugin::MechanizeBase
30
- def run(data)
31
- regexp = nil
32
- if config['regexp']
33
- regexp = Regexp.new(config['regexp'])
34
- else
35
- regexp = /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/
36
- end
37
-
38
- wait = config['wait'] || 3
39
-
40
- data.each do |item|
41
- url = construct_data(config['url'], item, item.respond_to?('link') ? item.link : item)
42
-
43
- if regexp =~ url
44
- referrer = construct_data(config['referrer'], item)
45
- download(item, url, referrer)
46
- sleep wait
47
- end
48
- end
49
-
50
- data
51
- end
4
+ # = Publish::FileDownload -- Yuanying
5
+ #
6
+ # download file with WWW::Mechanize.
7
+ #
8
+ # example:
9
+ #
10
+ # - module: Publish::FileDownload
11
+ # config:
12
+ # regexp: http://www\.yahoo\.co\.jp/*
13
+ # dir: '/Users/yuanying/Downloads/'
14
+ # auto_suffix: true
15
+ # before_hook: "agent.get('http://www.yahoo.co.jp/'); sleep 1"
16
+ # url:
17
+ # attribute: link
18
+ # replace: index(\d*?)\.html
19
+ # to: file\1.zip
20
+ # filename:
21
+ # attribute: title
22
+ # replace: 'Yahoo'
23
+ # to: ''
24
+ # referrer:
25
+ # attribute: link
26
+ # replace: 'zip'
27
+ # to: 'html'
28
+ #
29
+ class FileDownload < Yapra::Plugin::Publish::OnMemoryDownload
52
30
 
53
31
  protected
54
- def construct_data(config, item, original=nil)
55
- if config && config['attribute']
56
- if item.respond_to?(config['attribute'])
57
- original = item.__send__(config['attribute'])
58
- end
59
- elsif config
60
- original = item
61
- end
62
-
63
- if original && config && config['replace']
64
- original = original.gsub(config['replace'], config['to'] || Time.now.to_s)
65
- end
66
-
67
- original
68
- end
69
-
70
32
  def discover_extensions page
71
33
  require 'mime/types'
72
34
  types = MIME::Types[page.content_type]
@@ -80,19 +42,8 @@ module Yapra::Plugin::Publish
80
42
  logger.warn 'require mime-types is failed.'
81
43
  end
82
44
 
83
- def download(item, url, referrer)
84
- dir = config['dir']
45
+ def save config, item, page
85
46
  filename = construct_data(config['filename'], item)
86
-
87
- if config['before_hook']
88
- eval(config['before_hook'])
89
- end
90
- page = agent.get(url, referrer)
91
- logger.info "Download: #{url}"
92
- if config['after_hook']
93
- eval(config['after_hook'])
94
- end
95
-
96
47
  filename = page.filename unless filename
97
48
 
98
49
  if config['auto_suffix']
@@ -1,23 +1,23 @@
1
- # module: Publish::Gmail -- Yuanying
2
- #
3
- # publish entry to imap mail.
4
- #
5
- # example:
6
- #
7
- # - module: Publish::Gmail
8
- # config:
9
- # username: username
10
- # password: password
11
- # wait: 1
12
- # mail:
13
- # subject_prefix: '[Yapra]'
14
- # from: 'test@example.com'
15
- # to: 'test2@example.com'
16
- #
17
1
  require 'net/imap'
18
2
  require 'yapra/plugin/publish/imap'
19
3
 
20
4
  module Yapra::Plugin::Publish
5
+ # = module: Publish::Gmail -- Yuanying
6
+ #
7
+ # publish entry to imap mail.
8
+ #
9
+ # example:
10
+ #
11
+ # - module: Publish::Gmail
12
+ # config:
13
+ # username: username
14
+ # password: password
15
+ # wait: 1
16
+ # mail:
17
+ # subject_prefix: '[Yapra]'
18
+ # from: 'test@example.com'
19
+ # to: 'test2@example.com'
20
+ #
21
21
  class Gmail < Yapra::Plugin::Publish::Imap
22
22
  protected
23
23
  def create_imap server, port, usessl
@@ -1,26 +1,28 @@
1
- # module: Publish::Imap -- Yuanying
2
- #
3
- # publish entry to imap mail.
4
- #
5
- # example:
6
- #
7
- # - module: Publish::Imap
8
- # config:
9
- # username: username
10
- # password: password
11
- # imap_server: imap.gmail.com
12
- # port: 993
13
- # ssl: on
14
- # wait: 1
15
- # mail:
16
- # subject_prefix: '[Yapra]'
17
- # from: 'test@example.com'
18
- # to: 'test2@example.com'
19
- #
20
1
  require 'net/imap'
2
+ require 'yapra/version'
21
3
  require 'yapra/plugin/base'
22
4
 
23
5
  module Yapra::Plugin::Publish
6
+ # = module: Publish::Imap -- Yuanying
7
+ #
8
+ # publish entry to imap mail.
9
+ #
10
+ # example:
11
+ #
12
+ # - module: Publish::Imap
13
+ # config:
14
+ # username: username
15
+ # password: password
16
+ # imap_server: imap.gmail.com
17
+ # port: 993
18
+ # ssl: on
19
+ # wait: 1
20
+ # mail:
21
+ # subject_prefix: '[Yapra]'
22
+ # from_template: <%=item.author%> <test@example.com>
23
+ # #from: 'test@example.com'
24
+ # to: 'test2@example.com'
25
+ #
24
26
  class Imap < Yapra::Plugin::Base
25
27
  def run(data)
26
28
  username = config['username']
@@ -39,26 +41,28 @@ module Yapra::Plugin::Publish
39
41
  to = config['mail']['to'] || 'me@localhost'
40
42
 
41
43
  imap = create_imap server, port, usessl
42
- logger.info(imap.greeting)
44
+ logger.debug(imap.greeting)
43
45
 
44
46
  imap.login(username, password)
47
+ logger.info('imap login was succeed.')
45
48
  imap.examine(mailbox)
46
49
  data.each do |item|
47
50
  date = item.date || item.dc_date || Time.now
48
51
  content = item.content_encoded || item.description || 'from Yapra.'
49
52
  content = [content].pack('m')
50
- imap.append("inbox", <<EOF.gsub(/¥n/, "¥r¥n"), nil, date)
51
- From: #{from}
52
- To: #{to}
53
- Date: #{date.rfc2822}
54
- MIME-Version: 1.0
55
- Content-type: text/html; charset=UTF-8
56
- Content-transfer-encoding: base64
57
- X-Mailer: Yapra 0.1
58
- Subject: #{encode_field(subject_prefix + item.title)}
53
+ if config['mail']['from_template']
54
+ from = apply_template(config['mail']['from_template'], binding)
55
+ end
56
+ if config['mail']['to_template']
57
+ to = apply_template(config['mail']['to_template'], binding)
58
+ end
59
+ subject = (subject_prefix + item.title).gsub(/\n/, '').chomp
60
+ logger.debug("try append item: #{subject}")
61
+ boundary = "----_____====#{Time.now.to_i}--BOUDARY"
62
+ attachments = create_attachments(item, config)
63
+ imap.append(mailbox, apply_template(mail_template, binding), nil, date)
64
+ # puts apply_template(mail_template, binding)
59
65
 
60
- #{content}
61
- EOF
62
66
  sleep wait
63
67
  end
64
68
  imap.disconnect
@@ -71,12 +75,62 @@ EOF
71
75
  logger.debug("server: #{server}:#{port}, usessl = #{usessl}")
72
76
  Net::IMAP.new(server, port, usessl)
73
77
  end
78
+
74
79
  def encode_field field
75
- #field.gsub(/[ -瑤]\S*\s*/) {|x|
76
- field.scan(/.{1,10}/).map {|y|
80
+ field.gsub(/[^\x01-\x7f]*/) {|x|
81
+ x.scan(/.{1,10}/).map {|y|
77
82
  "=?UTF-8?B?" + y.to_a.pack('m').chomp + "?="
78
83
  }.join("\n ")
79
- #}
84
+ }
85
+ end
86
+
87
+ def create_attachments item, config
88
+ attachments = []
89
+ attachment_attributes = config['mail']['attachments']
90
+ if attachment_attributes.kind_of?(String)
91
+ file = item.__send__(attachment_attributes)
92
+ attachments << file if file.kind_of?(WWW::Mechanize::File)
93
+ elsif attachment_attributes.kind_of?(Array)
94
+ attachment_attributes.each do |atc|
95
+ file = item.__send__(atc)
96
+ attachments << file if file.kind_of?(WWW::Mechanize::File)
97
+ end
98
+ end
99
+ attachments
100
+ end
101
+
102
+ def mail_template
103
+ return <<EOT
104
+ From: <%=encode_field(from) %>
105
+ To: <%=encode_field(to) %>
106
+ Date: <%=date.rfc2822 %>
107
+ MIME-Version: 1.0
108
+ X-Mailer: Yapra <%=Yapra::VERSION::STRING %>
109
+ Subject: <%=encode_field(subject) %>
110
+ Content-Type: multipart/mixed; boundary="<%=boundary -%>"
111
+
112
+ This is a multi-part message in MIME format.
113
+
114
+ --<%=boundary %>
115
+ Content-type: text/html; charset=UTF-8
116
+ Content-transfer-encoding: base64
117
+
118
+ <%=content %>
119
+
120
+ --<%=boundary %>
121
+ <% attachments.each do |file| -%>
122
+ Content-Type: <%=file.header['Content-Type'] %>;
123
+ name="<%=encode_field(file.filename) %>"
124
+ Content-Disposition: attachment;
125
+ filename="<%=encode_field(file.filename) %>"
126
+ Content-Transfer-Encoding: base64
127
+
128
+ <%=[file.body].pack('m') -%>
129
+
130
+ --<%=boundary %>
131
+
132
+ <% end -%>
133
+ EOT
80
134
  end
81
135
  end
82
136
  end
@@ -0,0 +1,86 @@
1
+ require 'yapra/plugin/mechanize_base'
2
+
3
+ module Yapra::Plugin::Publish
4
+ # = Publish::OnMemoryDownload -- Yuanying
5
+ #
6
+ # download web resource and set to item attribute.
7
+ #
8
+ # example:
9
+ #
10
+ # - module: Publish::OnMemoryDownload
11
+ # config:
12
+ # regexp: http://www\.yahoo\.co\.jp/*
13
+ # attribute: binary_image
14
+ # before_hook: "agent.get('http://www.yahoo.co.jp/'); sleep 1"
15
+ # url:
16
+ # attribute: link
17
+ # replace: index(\d*?)\.html
18
+ # to: file\1.zip
19
+ # referrer:
20
+ # attribute: link
21
+ # replace: 'zip'
22
+ # to: 'html'
23
+ #
24
+ class OnMemoryDownload < Yapra::Plugin::MechanizeBase
25
+ def run(data)
26
+ regexp = nil
27
+ if config['regexp']
28
+ regexp = Regexp.new(config['regexp'])
29
+ else
30
+ regexp = /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/
31
+ end
32
+
33
+ wait = config['wait'] || 3
34
+
35
+ data.each do |item|
36
+ url = construct_data(config['url'], item, item.respond_to?('link') ? item.link : item)
37
+
38
+ if regexp =~ url
39
+ logger.debug "Download start: #{url}"
40
+ referrer = construct_data(config['referrer'], item)
41
+ download(item, url, referrer)
42
+ sleep wait
43
+ end
44
+ end
45
+
46
+ data
47
+ end
48
+
49
+ protected
50
+ def construct_data(config, item, original=nil)
51
+ if config && config['attribute']
52
+ if item.respond_to?(config['attribute'])
53
+ original = item.__send__(config['attribute'])
54
+ end
55
+ elsif config
56
+ original = item
57
+ end
58
+
59
+ if original && config && config['replace']
60
+ original = original.gsub(config['replace'], config['to'] || Time.now.to_s)
61
+ end
62
+
63
+ original
64
+ end
65
+
66
+ def save config, item, page
67
+ set_attribute_to item, config['attribute'], page
68
+ end
69
+
70
+ def download(item, url, referrer)
71
+ if config['before_hook']
72
+ eval(config['before_hook'])
73
+ end
74
+
75
+ dir = config['dir']
76
+
77
+ page = agent.get(url, referrer)
78
+
79
+ save(config, item, page)
80
+
81
+ if config['after_hook']
82
+ eval(config['after_hook'])
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,17 +1,17 @@
1
- # module: Test::AppendEntry -- Yuanying
2
- #
3
- # append entry to data array.
4
- #
5
- # example:
6
- #
7
- # - module: Test::AppendEntry
8
- # config:
9
- # title: 'title'
10
- # description: 'description.'
11
- #
12
1
  require 'yapra/plugin/base'
13
2
 
14
3
  module Yapra::Plugin::Test
4
+ # module: Test::AppendEntry -- Yuanying
5
+ #
6
+ # append entry to data array.
7
+ #
8
+ # example:
9
+ #
10
+ # - module: Test::AppendEntry
11
+ # config:
12
+ # title: 'title'
13
+ # description: 'description.'
14
+
15
15
  class AppendEntry < Yapra::Plugin::Base
16
16
  def run(data)
17
17
  item = RSS::RDF::Item.new
@@ -0,0 +1,24 @@
1
+ ## Filter input by given regular expression -- IKeJI
2
+ ##
3
+ ## Filter input by given regular expression.
4
+ ## The test will be done with the result of to_s method of the input.
5
+ ## invert option will invert results(-v option of UNIX grep command).
6
+ ##
7
+ ## - module: grep
8
+ ## config:
9
+ ## regex: "[あ-ん]"
10
+ ## invert: false
11
+
12
+ def grep(config,data)
13
+ regex = Regexp.new(config["regex"])
14
+ invert = config["invert"] || false
15
+ attribute = config['attribute']
16
+
17
+ data.select do |i|
18
+ if attribute
19
+ invert ^ (regex =~ i.__send__(attribute).to_s)
20
+ else
21
+ invert ^ (regex =~ i.to_s)
22
+ end
23
+ end
24
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,8 @@ rescue LoadError
6
6
  require 'spec'
7
7
  end
8
8
 
9
+ $fixture_dir = File.join(File.dirname(__FILE__), '..', 'fixtures') unless $fixture_dir
10
+
9
11
  $:.unshift(File.dirname(__FILE__) + '/../lib')
10
12
  $:.unshift(File.dirname(__FILE__) + '/../lib-plugins')
11
13
  require 'yapra'
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'yaml'
4
+ require 'yapra/config'
5
+
6
+ describe Yapra::Config do
7
+
8
+ it 'should create logger from env setting' do
9
+ config = Yapra::Config.new(YAML.load_file(File.join($fixture_dir, 'config', 'pragger_like.yml')))
10
+ config.env.update({
11
+ 'log' => {
12
+ 'out' => 'stderr',
13
+ 'level' => 'debug'
14
+ }
15
+ })
16
+ logger = config.create_logger
17
+ logger.should be_debug
18
+ end
19
+
20
+ describe 'which is initialized by pragger like config file' do
21
+ before do
22
+ @config = Yapra::Config.new(YAML.load_file(File.join($fixture_dir, 'config', 'pragger_like.yml')))
23
+ end
24
+
25
+ it 'should have empty env.' do
26
+ @config.env.should == {}
27
+ end
28
+
29
+ it 'should have one pipeline command which is named "default".' do
30
+ @config.should have(1).pipeline_commands
31
+ end
32
+
33
+ it 'should have pipeline command named "default"' do
34
+ @config.pipeline_commands.should have_key('default')
35
+ end
36
+ end
37
+
38
+ describe 'which is initialized by python habu like config file' do
39
+ before do
40
+ @habu_like_file = YAML.load_file(File.join($fixture_dir, 'config', 'habu_like.yml'))
41
+ @config = Yapra::Config.new(@habu_like_file)
42
+ end
43
+
44
+ it 'should have env hash from habu_like_config_file "global" section.' do
45
+ @config.env.should == @habu_like_file['global']
46
+ end
47
+
48
+ it 'should have pipeline_commands from habu_like_config_file "pipeline" section.' do
49
+ @config.pipeline_commands.should == @habu_like_file['pipeline']
50
+ end
51
+ end
52
+
53
+ describe 'which is initialized by mixed type config file' do
54
+ before do
55
+ @mixed_type_file = YAML.load_file(File.join($fixture_dir, 'config', 'mixed_type.yml'))
56
+ @config = Yapra::Config.new(@mixed_type_file)
57
+ end
58
+
59
+ it 'should have env hash from mixed_type "global" section.' do
60
+ @config.env.should == @mixed_type_file['global']
61
+ end
62
+
63
+ it 'should have one pipeline command which is named "default".' do
64
+ @config.should have(1).pipeline_commands
65
+ end
66
+
67
+ it 'should have pipeline command named "default"' do
68
+ @config.pipeline_commands.should have_key('default')
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'yapra/legacy_plugin/base'
4
+
5
+ describe Yapra::LegacyPlugin::Base do
6
+
7
+ before do
8
+ @pipeline = mock('pipeline', :null_object => true)
9
+ end
10
+
11
+ describe 'which is initialized by "fixtures/legacy_test_plugin.rb"' do
12
+ before do
13
+ @path = File.join($fixture_dir, 'legacy_plugin', 'legacy_test_plugin.rb')
14
+ @plugin = Yapra::LegacyPlugin::Base.new(@pipeline, @path)
15
+ end
16
+
17
+ it 'should have _yapra_run_method named "legacy_test_plugin".' do
18
+ @plugin._yapra_run_method.should == 'legacy_test_plugin'
19
+ end
20
+
21
+ it 'should have plugin source.' do
22
+ @plugin.source.should == File.read(@path)
23
+ end
24
+
25
+ it 'should recieve message "legacy_test_plugin" when _yapra_run_as_legacy_plugin is called.' do
26
+ config = mock('config')
27
+ data = []
28
+ @plugin.stub!(:legacy_test_plugin).and_return(:default_value)
29
+ @plugin.should_receive(:legacy_test_plugin).with(config, data)
30
+ @plugin._yapra_run_as_legacy_plugin(config, data)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'yapra/legacy_plugin/registry_factory'
4
+
5
+ describe Yapra::LegacyPlugin::RegistryFactory do
6
+ before do
7
+ @pipeline = mock('pipeline', :null_object => true)
8
+ end
9
+
10
+ it 'should create advance mode registry from string "advance"' do
11
+ factory = Yapra::LegacyPlugin::RegistryFactory.new([], 'advance')
12
+ factory.create(@pipeline).class.should == Yapra::LegacyPlugin::AdvanceModeRegistry
13
+ end
14
+
15
+ it 'should create compatible mode registry from string "compatible"' do
16
+ factory = Yapra::LegacyPlugin::RegistryFactory.new([], 'compatible')
17
+ factory.create(@pipeline).class.should == Yapra::LegacyPlugin::CompatibleModeRegistry
18
+ end
19
+ end