dynamic_sitemaps 1.0.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.
- data/app/controllers/sitemaps_controller.rb +89 -0
- data/app/views/sitemaps/index.builder +11 -0
- data/app/views/sitemaps/sitemap.builder +20 -0
- data/lib/dynamic_sitemaps/page.rb +21 -0
- data/lib/dynamic_sitemaps/sitemap.rb +11 -0
- data/lib/dynamic_sitemaps/url.rb +9 -0
- data/lib/generators/dynamic_sitemaps/dynamic_sitemaps_generator.rb +11 -0
- data/lib/generators/dynamic_sitemaps/templates/initializer.rb +28 -0
- metadata +72 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
class SitemapsController < ApplicationController
|
2
|
+
def sitemap
|
3
|
+
new_page!
|
4
|
+
instance_eval &DynamicSitemaps::Sitemap.draw_block
|
5
|
+
|
6
|
+
if params[:page]
|
7
|
+
if pages.count > 1
|
8
|
+
page = pages[params[:page].to_i - 1]
|
9
|
+
|
10
|
+
if page
|
11
|
+
@urls = page.urls
|
12
|
+
else
|
13
|
+
@urls = []
|
14
|
+
end
|
15
|
+
else
|
16
|
+
@urls = []
|
17
|
+
end
|
18
|
+
elsif pages.count > 1
|
19
|
+
@pages = pages
|
20
|
+
render :index
|
21
|
+
else
|
22
|
+
@urls = pages.last.urls
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def pages
|
29
|
+
@pages ||= []
|
30
|
+
end
|
31
|
+
|
32
|
+
def new_page!
|
33
|
+
pages << DynamicSitemaps::Page.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def current_page
|
37
|
+
pages.last
|
38
|
+
end
|
39
|
+
|
40
|
+
def per_page(size = nil)
|
41
|
+
@per_page ||= size || 50000
|
42
|
+
end
|
43
|
+
|
44
|
+
def url(loc, options = {})
|
45
|
+
if current_page.urls.count >= per_page
|
46
|
+
new_page!
|
47
|
+
end
|
48
|
+
|
49
|
+
loc = polymorphic_url(loc) unless loc.is_a?(String)
|
50
|
+
|
51
|
+
current_page.urls << DynamicSitemaps::Url.new(loc, options)
|
52
|
+
end
|
53
|
+
|
54
|
+
def autogenerate(*args)
|
55
|
+
options = args.extract_options!
|
56
|
+
|
57
|
+
args.flatten.each do |sym|
|
58
|
+
sym.to_s.singularize.camelize.constantize.send(:all).each do |obj|
|
59
|
+
url obj, convert_options(options, obj)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def convert_options(options, obj)
|
65
|
+
options.each do |key, value|
|
66
|
+
if value.is_a?(Symbol)
|
67
|
+
value = obj.send(value)
|
68
|
+
elsif value.is_a?(Proc)
|
69
|
+
value = value.call(obj)
|
70
|
+
end
|
71
|
+
options[key] = value
|
72
|
+
end
|
73
|
+
options
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
xml.sitemapindex "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
|
3
|
+
@pages.each_with_index do |page, i|
|
4
|
+
xml.sitemap do
|
5
|
+
xml.loc url_for(:host => request.host, :page => i + 1, :format => :xml)
|
6
|
+
if page.last_mod
|
7
|
+
xml.lastmod page.last_mod.to_date
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
|
3
|
+
@urls.each do |url|
|
4
|
+
xml.url do
|
5
|
+
xml.loc url.loc
|
6
|
+
|
7
|
+
if url.last_mod
|
8
|
+
xml.lastmod url.last_mod.to_date
|
9
|
+
end
|
10
|
+
|
11
|
+
if url.change_freq
|
12
|
+
xml.changefreq url.change_freq
|
13
|
+
end
|
14
|
+
|
15
|
+
if url.priority
|
16
|
+
xml.priority url.priority
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DynamicSitemaps
|
2
|
+
class Page
|
3
|
+
def urls
|
4
|
+
@urls ||= []
|
5
|
+
end
|
6
|
+
|
7
|
+
def last_mod
|
8
|
+
mod = nil
|
9
|
+
|
10
|
+
urls.each do |url|
|
11
|
+
unless url.last_mod.nil?
|
12
|
+
if mod.nil? || url.last_mod > mod
|
13
|
+
mod = url.last_mod
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
mod
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class DynamicSitemapsGenerator < 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
|
+
|
8
|
+
def create_route
|
9
|
+
route "match 'sitemap.xml' => 'sitemaps#sitemap'"
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
DynamicSitemaps::Sitemap.draw do
|
2
|
+
|
3
|
+
# default per_page is 50.000 which is the specified maximum.
|
4
|
+
# per_page 10
|
5
|
+
|
6
|
+
# url root_url, :last_mod => DateTime.now, :change_freq => 'daily', :priority => 1
|
7
|
+
|
8
|
+
# new_page!
|
9
|
+
|
10
|
+
# Product.all.each do |product|
|
11
|
+
# url product_url(product), :last_mod => product.updated_at, :change_freq => 'monthly', :priority => 0.8
|
12
|
+
# end
|
13
|
+
|
14
|
+
# new_page!
|
15
|
+
|
16
|
+
# autogenerate :products, :categories,
|
17
|
+
# :last_mod => :updated_at,
|
18
|
+
# :change_freq => 'monthly',
|
19
|
+
# :priority => 0.8
|
20
|
+
|
21
|
+
# new_page!
|
22
|
+
|
23
|
+
# autogenerate :users,
|
24
|
+
# :last_mod => :updated_at,
|
25
|
+
# :change_freq => lambda { |user| user.very_active? ? 'weekly' : 'monthly' },
|
26
|
+
# :priority => 0.5
|
27
|
+
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dynamic_sitemaps
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 21
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
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: Dynamic Sitemaps is a plugin for Ruby on Rails that enables you to easily create flexible, dynamic sitemaps.
|
22
|
+
email: lassebunk@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/dynamic_sitemaps/page.rb
|
31
|
+
- lib/dynamic_sitemaps/sitemap.rb
|
32
|
+
- lib/dynamic_sitemaps/url.rb
|
33
|
+
- lib/generators/dynamic_sitemaps/dynamic_sitemaps_generator.rb
|
34
|
+
- lib/generators/dynamic_sitemaps/templates/initializer.rb
|
35
|
+
- app/controllers/sitemaps_controller.rb
|
36
|
+
- app/views/sitemaps/index.builder
|
37
|
+
- app/views/sitemaps/sitemap.builder
|
38
|
+
homepage: http://github.com/lassebunk/dynamic_sitemaps
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
hash: 3
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.8.10
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Dynamic sitemap generation plugin for Ruby on Rails.
|
71
|
+
test_files: []
|
72
|
+
|