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 +15 -11
- data/lib/search_engine_submitter.rb +38 -23
- data/lib/search_engine_submitter/version.rb +1 -1
- data/spec/lib/search_engine_submitter_spec.rb +45 -29
- metadata +4 -4
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.
|
30
|
+
submitter = SearchEngineSubmitter::Submitter.new
|
31
|
+
submitter.submit_sitemap_url my_sitemap
|
27
32
|
```
|
28
33
|
|
29
|
-
|
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.
|
33
|
-
|
37
|
+
submitter = SearchEngineSubmitter::Submitter.new(:engines => [:google, :yahoo])
|
38
|
+
submitter.submit_sitemap_url my_sitemap
|
34
39
|
|
35
|
-
|
40
|
+
# or...
|
36
41
|
|
37
|
-
|
38
|
-
|
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
|
-
|
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
|
-
|
53
|
-
URI(my_rss_feed).submit_rss
|
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
|
-
|
14
|
+
class Submitter
|
15
|
+
attr_reader :engines
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
engines = get_engines_from
|
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
|
-
|
22
|
-
|
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
|
-
|
30
|
-
|
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
|
-
|
31
|
+
private
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
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::
|
67
|
+
include SearchEngineSubmitter::URISubmitter
|
53
68
|
end
|
54
69
|
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
|
-
|
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 =
|
11
|
-
responses.
|
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 =
|
16
|
-
responses.
|
26
|
+
responses = @submitter.submit_sitemap_url @uri
|
27
|
+
responses.should be_ok
|
17
28
|
end
|
18
29
|
end
|
19
|
-
|
20
|
-
describe "
|
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
|
-
|
25
|
-
it_should_behave_like 'a
|
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 {
|
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
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
41
|
-
|
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 =
|
48
|
-
responses.
|
60
|
+
responses = @uri.submit_sitemap
|
61
|
+
responses.should be_ok
|
49
62
|
end
|
50
63
|
end
|
51
64
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
59
|
-
|
60
|
-
|
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
|
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-
|
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: -
|
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: -
|
72
|
+
hash: -2439904746061039351
|
73
73
|
requirements: []
|
74
74
|
rubyforge_project:
|
75
75
|
rubygems_version: 1.8.24
|