sitemap_notifier 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ class SitemapNotifierGenerator < Rails::Generators::NamedBase
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def create_initializer
5
+ copy_file "initializer.rb", "config/initializers/#{file_name}.rb"
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ # replace this with your own url
2
+ SitemapNotifier::Notifier.sitemap_url = "http://example.com/sitemap.xml"
3
+
4
+ # source models – default is :all for all models
5
+ # SitemapNotifier::Notifier.sources = [:articles, :categories]
6
+
7
+ # enabled in which environments – default is [:production]
8
+ # SitemapNotifier::Notifier.environments = [:development, :production]
9
+ # SitemapNotifier::Notifier.environments = :all
10
+
11
+ # delay to wait between notifications – default is 600 seconds
12
+ # SitemapNotifier::Notifier.delay = 30
13
+
14
+ # additional urls – be sure to call this after setting sitemap_url
15
+ # SitemapNotifier::Notifier.urls << "http://localhost:3000/ping"
@@ -0,0 +1,15 @@
1
+ module SitemapNotifier
2
+ module ActiveRecord
3
+ def notify_sitemap
4
+ notifier = ::SitemapNotifier::Notifier
5
+
6
+ if notifier.sources == :all || notifier.sources.include?(self.class.name.tableize.to_sym)
7
+ notifier.notify!
8
+ end
9
+ end
10
+
11
+ def self.included(base)
12
+ base.after_save :notify_sitemap
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,85 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'cgi'
4
+
5
+ module SitemapNotifier
6
+ class Notifier
7
+ class << self
8
+ # sitemap url
9
+ attr_accessor :sitemap_url
10
+
11
+ # source
12
+ attr_writer :sources
13
+ def sources
14
+ @sources ||= :all
15
+ end
16
+
17
+ # delay
18
+ attr_writer :delay
19
+ def delay
20
+ @delay ||= 600
21
+ end
22
+
23
+ # environments
24
+ attr_writer :environments
25
+ def environments
26
+ @environments ||= [:production]
27
+ end
28
+
29
+ # urls
30
+ attr_writer :urls
31
+ def urls
32
+ @urls ||= ["http://www.google.com/webmasters/sitemaps/ping?sitemap=#{CGI::escape(sitemap_url)}",
33
+ "http://www.bing.com/webmaster/ping.aspx?siteMap=#{CGI::escape(sitemap_url)}",
34
+ "http://submissions.ask.com/ping?sitemap=#{CGI::escape(sitemap_url)}"]
35
+ # no Yahoo here, as they will be using Bing from september 15th, 2011
36
+ end
37
+
38
+ # running pid
39
+ attr_accessor :running_pid
40
+
41
+ def notify!
42
+ raise "sitemap_url not set – use SitemapNotifier::Notifier.sitemap_url = 'xx'" unless sitemap_url
43
+
44
+ if (environments == :all || environments.include?(Rails.env.to_sym)) && !running?
45
+ self.running_pid = fork do
46
+ Rails.logger.info "Notifying search engines of changes to sitemap..."
47
+
48
+ urls.each do |url|
49
+ if get_url(url)
50
+ Rails.logger.info "#{url} – ok"
51
+ else
52
+ Rails.logger.info "#{url} – failed"
53
+ end
54
+ end
55
+
56
+ sleep delay
57
+ exit
58
+ end
59
+ end
60
+ end
61
+
62
+ protected
63
+
64
+ def get_url(url)
65
+ uri = URI.parse(url)
66
+ begin
67
+ return Net::HTTPSuccess === Net::HTTP.get_response(uri)
68
+ rescue Exception
69
+ return false
70
+ end
71
+ end
72
+
73
+ def running?
74
+ return false unless running_pid
75
+
76
+ begin
77
+ Process.getpgid(running_pid)
78
+ true
79
+ rescue Errno::ESRCH
80
+ false
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,4 @@
1
+ require 'sitemap_notifier/active_record'
2
+ require 'sitemap_notifier/notifier'
3
+
4
+ ActiveRecord::Base.send :include, SitemapNotifier::ActiveRecord
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sitemap_notifier
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Lasse Bunk
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-09-20 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: Ruby on Rails plugin that automatically notifies Google, Bing, Yahoo, and Ask.com of changes to your models, i.e. changes to your sitemap.
22
+ email: lassebunk@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/generators/sitemap_notifier/sitemap_notifier_generator.rb
31
+ - lib/generators/sitemap_notifier/templates/initializer.rb
32
+ - lib/sitemap_notifier/active_record.rb
33
+ - lib/sitemap_notifier/notifier.rb
34
+ - lib/sitemap_notifier.rb
35
+ homepage: http://github.com/lassebunk/sitemap_notifier
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.10
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Automatically notify search engines when your models are updated.
68
+ test_files: []
69
+