search_engine_submitter 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,6 +16,10 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install search_engine_submitter
18
18
 
19
+ ## Changes
20
+
21
+ The latest update introduced a breaking change by switching from class methods to object methods. The new changes will make it much easier to test, use, and maintain. Sorry for any inconvience! See Usage below for details on the new syntax.
22
+
19
23
  ## Usage
20
24
 
21
25
  To submit a sitemap or RSS feed url to all three major search engines:
@@ -23,23 +27,23 @@ To submit a sitemap or RSS feed url to all three major search engines:
23
27
  ```ruby
24
28
  require 'search_engine_submitter'
25
29
  my_sitemap = 'http://testdomain.com/sitemap.xml'
26
- SearchEngineSubmitter.submit_sitemap_url my_sitemap
30
+ submitter = SearchEngineSubmitter::Submitter.new
31
+ submitter.submit_sitemap_url my_sitemap
27
32
  ```
28
33
 
29
- Use the `:to` option to specify which search engines you want for submittal. You can choose from `:google`, `:yahoo`, or `:bing`.
34
+ You can also specify the search engines you want. Choose from any combination of `:google`, `:yahoo`, and `:bing`. You can even submit a URI:
30
35
 
31
36
  ```ruby
32
- SearchEngineSubmitter.submit_sitemap_url my_sitemap, :to => [:google, :yahoo]
33
- ```
37
+ submitter = SearchEngineSubmitter::Submitter.new(:engines => [:google, :yahoo])
38
+ submitter.submit_sitemap_url my_sitemap
34
39
 
35
- You can also submit a URI:
40
+ # or...
36
41
 
37
- ```ruby
38
- my_sitemap_uri = URI(my_sitemap)
39
- SearchEngineSubmitter.submit_sitemap_url my_sitemap_uri
42
+ submitter.engines = [:bing]
43
+ submitter.submit_sitemap_url URI(my_sitemap)
40
44
  ```
41
45
 
42
- Or even submit a URI directly:
46
+ You can also submit a URI directly. Use the `:to` option to specify your preferred engines.
43
47
 
44
48
  ```ruby
45
49
  my_sitemap_uri.submit_sitemap :to => :google
@@ -49,8 +53,8 @@ All search engines consider RSS or Atom feeds to be acceptable formats for sitem
49
53
 
50
54
  ```ruby
51
55
  my_rss_feed = 'http://testdomain.com/rss'
52
- SearchEngineSubmitter.submit_rss_url my_rss_feed, :to => :yahoo
53
- URI(my_rss_feed).submit_rss :to => [:google, :bing]
56
+ submitter.submit_rss_url my_rss_feed
57
+ URI(my_rss_feed).submit_rss
54
58
  ```
55
59
 
56
60
  The return value of all of these methods is an array of [OpenURI::Meta](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI/Meta.html) objects containing the response of each search engine submittal.
@@ -2,53 +2,68 @@ require 'search_engine_submitter/version'
2
2
  require 'open-uri'
3
3
 
4
4
  module SearchEngineSubmitter
5
+ InvalidSitemapError = Class.new StandardError
6
+
5
7
  SEARCH_ENGINE_URL = {
6
8
  :google => 'http://www.google.com/webmasters/sitemaps/ping?sitemap=',
7
9
  :bing => 'http://www.bing.com/webmaster/ping.aspx?siteMap='
8
10
  # Note - :yahoo uses :bing for webmaster tools now.
9
11
  }
12
+ DEFAULT_ENGINES = [:google, :bing]
10
13
 
11
- DEFAULT_OPTIONS = { :to => [:google, :bing] }
14
+ class Submitter
15
+ attr_reader :engines
12
16
 
13
- class << self
14
- def submit_sitemap_url(url, options = DEFAULT_OPTIONS)
15
- engines = get_engines_from options
16
- engines.map { |engine| submit_url_to_search_engine url, engine }
17
+ def initialize(options={})
18
+ engine_list = options[:engines] || []
19
+ @engines = get_engines_from engine_list
17
20
  end
18
- alias_method :submit_rss_url, :submit_sitemap_url
19
- end
20
21
 
21
- # Mixin for HTTP URIs
22
- module SubmitURI
23
- def submit_sitemap(options = DEFAULT_OPTIONS)
24
- SearchEngineSubmitter.submit_sitemap_url(self, options)
22
+ def engines=(engine_list)
23
+ @engines = get_engines_from engine_list
25
24
  end
26
- alias_method :submit_rss, :submit_sitemap
27
- end
28
25
 
29
- class InvalidSitemapError < Exception
30
- end
26
+ def submit_sitemap_url(url)
27
+ engines.map { |engine| submit_url_to_search_engine url, engine }
28
+ end
29
+ alias_method :submit_rss_url, :submit_sitemap_url
31
30
 
32
- private
31
+ private
33
32
 
34
- class << self
35
- def get_engines_from(options)
36
- engines = Array(options[:to]).map(&:to_sym)
37
- engines.map{ |to| to == :yahoo ? :bing : to }.uniq
33
+ def get_engines_from(engine_list)
34
+ engine_list = Array(engine_list)
35
+ return DEFAULT_ENGINES if engine_list.empty?
36
+ engine_list.map(&:to_sym).map{ |engine| engine == :yahoo ? :bing : engine }.uniq
38
37
  end
39
38
 
40
39
  def submit_url_to_search_engine(url, engine)
41
40
  begin
42
41
  return URI(SEARCH_ENGINE_URL[engine] + url.to_s).read
43
- rescue OpenURI::HTTPError
44
- raise SearchEngineSubmitter::InvalidSitemapError
42
+ rescue OpenURI::HTTPError => e
43
+ raise InvalidSitemapError.new(e.message)
45
44
  end
46
45
  end
46
+ end
47
+
48
+ # Mixin for HTTP URIs
49
+ module URISubmitter
50
+ def submit_sitemap(options={})
51
+ submitter(options).submit_sitemap_url self
47
52
  end
53
+ alias_method :submit_rss, :submit_sitemap
54
+
55
+ private
56
+
57
+ def submitter(options={})
58
+ @submitter ||= Submitter.new
59
+ @submitter.engines = options[:to] if options[:to]
60
+ @submitter
61
+ end
62
+ end
48
63
  end
49
64
 
50
65
  module URI
51
66
  class HTTP
52
- include SearchEngineSubmitter::SubmitURI
67
+ include SearchEngineSubmitter::URISubmitter
53
68
  end
54
69
  end
@@ -1,3 +1,3 @@
1
1
  module SearchEngineSubmitter
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,64 +1,80 @@
1
1
  require 'search_engine_submitter'
2
2
 
3
+ RSpec::Matchers.define :be_ok do
4
+ match do |responses|
5
+ responses.each { |r| r.status == ["200", "OK"] }
6
+ end
7
+ end
8
+
3
9
  describe SearchEngineSubmitter do
4
10
 
5
11
  let(:sitemap_url) { 'http://testdomain.com/sitemap.xml' }
6
12
  let(:bad_url) { 'htt://somedomain.a' }
7
13
 
8
- shared_examples "a submitter" do
14
+ before(:all) do
15
+ @submitter = SearchEngineSubmitter::Submitter.new
16
+ @uri = URI(sitemap_url)
17
+ end
18
+
19
+ shared_examples "a Submitter object" do
9
20
  it "should submit a good url" do
10
- responses = subject.submit_sitemap_url sitemap_url, :to => search_engine
11
- responses.each { |r| r.status.should eq ["200", "OK"] }
21
+ responses = @submitter.submit_sitemap_url sitemap_url
22
+ responses.should be_ok
12
23
  end
13
24
 
14
25
  it "should submit a good URI" do
15
- responses = URI(sitemap_url).submit_sitemap :to => search_engine
16
- responses.each { |r| r.status.should eq ["200", "OK"] }
26
+ responses = @submitter.submit_sitemap_url @uri
27
+ responses.should be_ok
17
28
  end
18
29
  end
19
-
20
- describe "submit sitemap url" do
30
+
31
+ describe "with object methods" do
21
32
  engines = [:google, :yahoo, :bing]
33
+ describe "to all three engines" do
34
+ before { @submitter = SearchEngineSubmitter::Submitter.new(:engines => engines) }
35
+ it_should_behave_like 'a Submitter object'
36
+ end
37
+
22
38
  engines.each do |engine|
23
39
  describe "to only #{engine.to_s}" do
24
- let(:search_engine) { engine }
25
- it_should_behave_like 'a submitter'
40
+ before { @submitter.engines = engine }
41
+ it_should_behave_like 'a Submitter object'
26
42
 
27
43
  if engine == :google
28
44
  it "should raise error for bad url" do
29
- expect { subject.submit_sitemap_url bad_url, :to => search_engine }.to raise_error(SearchEngineSubmitter::InvalidSitemapError)
45
+ expect { @submitter.submit_sitemap_url bad_url }.to raise_error(SearchEngineSubmitter::InvalidSitemapError)
30
46
  end
31
47
  end
32
48
  end
33
49
  end
34
50
 
35
- describe "to all three search engines" do
36
- let(:search_engine) { engines }
37
- it_should_behave_like 'a submitter'
51
+ it "should work with RSS alias method" do
52
+ responses = @submitter.submit_rss_url sitemap_url
53
+ responses.should be_ok
38
54
  end
55
+ end
39
56
 
40
- describe "with no :to option" do
41
- it "should submit a good url" do
42
- responses = subject.submit_sitemap_url sitemap_url
43
- responses.each { |r| r.status.should eq ["200", "OK"] }
44
- end
45
-
57
+ describe "with URI mixin methods" do
58
+ describe "to all three engines" do
46
59
  it "should submit a good URI" do
47
- responses = URI(sitemap_url).submit_sitemap
48
- responses.each { |r| r.status.should eq ["200", "OK"] }
60
+ responses = @uri.submit_sitemap
61
+ responses.should be_ok
49
62
  end
50
63
  end
51
64
 
52
- describe "with RSS alias methods" do
53
- it "should submit a good url" do
54
- responses = subject.submit_rss_url sitemap_url
55
- responses.each { |r| r.status.should eq ["200", "OK"] }
65
+ engines = [:google, :yahoo, :bing]
66
+ engines.each do |engine|
67
+ describe "to only #{engine.to_s}" do
68
+ it "should submit a good URI" do
69
+ responses = @uri.submit_sitemap :to => engine
70
+ responses.should be_ok
71
+ end
56
72
  end
73
+ end
57
74
 
58
- it "should submit a good URI" do
59
- responses = URI(sitemap_url).submit_rss
60
- responses.each { |r| r.status.should eq ["200", "OK"] }
61
- end
75
+ it "should work with RSS alias method" do
76
+ responses = @uri.submit_rss
77
+ responses.should be_ok
62
78
  end
63
79
  end
64
80
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: search_engine_submitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-10 00:00:00.000000000 Z
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -60,7 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
60
60
  version: '0'
61
61
  segments:
62
62
  - 0
63
- hash: -1444840707988511149
63
+ hash: -2439904746061039351
64
64
  required_rubygems_version: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  version: '0'
70
70
  segments:
71
71
  - 0
72
- hash: -1444840707988511149
72
+ hash: -2439904746061039351
73
73
  requirements: []
74
74
  rubyforge_project:
75
75
  rubygems_version: 1.8.24