gryphon_sitemap 0.0.1 → 1.0.0
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/README.md +202 -0
- data/lib/gryphon_sitemap/version.rb +1 -1
- data/spec/dummy/log/test.log +7 -5
- metadata +10 -5
- data/README.rdoc +0 -3
data/README.md
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
# GryphonSitemap
|
2
|
+
|
3
|
+
Adds a very simple sitemap generator for well-behaved classes.
|
4
|
+
|
5
|
+
[](http://travis-ci.org/skandragon/gryphon_sitemap)
|
6
|
+
|
7
|
+
Generate Rails sitemaps and sitemap indexes for well-behaved models quickly and mostly painlessly. In this context, a "sitemap" is what a search engine uses to find content on your site, and is required for "hidden" content. For example, if you have a search field, indexing won't reach past that. You could use GryphonSitemap to provide direct links to each item that could be returned in a search.
|
8
|
+
|
9
|
+
GryphonSitemap generates a sitemap index (usually at /sitemap.xml) which contains pointers to all the other sitemaps for the static and dynamic content.
|
10
|
+
|
11
|
+
In the default index, no last-modified times are provided. In each sitemap page for actual items, the updated_at value is used to provide the timestamp, and a standard link is made for each item.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'gryphon_sitemap'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install gryphon_sitemap
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
In your models:
|
30
|
+
|
31
|
+
has_sitemap
|
32
|
+
|
33
|
+
By default, 5,000 items are included in each page.
|
34
|
+
You may choose to change this if this puts too much load on your server,
|
35
|
+
or you just wish to have more pages with less on each. You may customize
|
36
|
+
this with:
|
37
|
+
|
38
|
+
has_sitemap :per_page => 50
|
39
|
+
|
40
|
+
To minimize database load, only :id and :updated_at are retrieved.
|
41
|
+
In some cases, these are not sufficient when a custom to_param method
|
42
|
+
is used. In these cases, you may add additional fields to fetch for
|
43
|
+
each item:
|
44
|
+
|
45
|
+
has_sitemap :fields => [ :first_name, :last_name ]
|
46
|
+
|
47
|
+
This would be useful for a to_param such as:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
def to_param
|
51
|
+
"#{id}-#{first_name.downcase.parameterize}-#{last_name.downcase.parameterize}"
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
### Routing
|
56
|
+
|
57
|
+
You must add a route manually. For the sample SitemapController shown below, you
|
58
|
+
would use:
|
59
|
+
|
60
|
+
resources :sitemap
|
61
|
+
|
62
|
+
### Controller
|
63
|
+
|
64
|
+
Currently, a fair bit of code is required in a controller you must provide.
|
65
|
+
Here is an example which handles some static content (see below for the XML used),
|
66
|
+
two models with custom XML templates (see below), and several "automatic" models.
|
67
|
+
|
68
|
+
The hash key, if dynamic, should map to a class name: "sony_characters" would
|
69
|
+
be "SonyCharacter", etc. There is currently no way to override the automatic
|
70
|
+
class name discovery.
|
71
|
+
|
72
|
+
The method indexed_pages returns a hash with keys being page names. The
|
73
|
+
configuration of number of pages can be set, which is common for static templates,
|
74
|
+
or marked as dynamic. If it is dynamic, the page count provided is ignored, and
|
75
|
+
each time the sitemap index is retrieved, the model is counted.
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
class SitemapController < ApplicationController
|
79
|
+
include GryphonSitemap::SitemapController
|
80
|
+
|
81
|
+
respond_to :xml
|
82
|
+
|
83
|
+
def static
|
84
|
+
end
|
85
|
+
|
86
|
+
def classes
|
87
|
+
@classes = Character::ADVENTURE_CLASS_NAMES
|
88
|
+
end
|
89
|
+
|
90
|
+
def zones
|
91
|
+
@items = Zone.all
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def indexed_pages
|
97
|
+
{
|
98
|
+
static: { pages: 1 },
|
99
|
+
classes: { pages: 1 },
|
100
|
+
zones: { pages: 1 },
|
101
|
+
sony_characters: { dynamic: true },
|
102
|
+
sony_guilds: { dynamic: true },
|
103
|
+
sony_items: { dynamic: true }
|
104
|
+
}
|
105
|
+
end
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
109
|
+
A static template could look like:
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
xml.instruct!
|
113
|
+
xml.urlset :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
|
114
|
+
xml.url do
|
115
|
+
xml.loc root_url
|
116
|
+
xml.changefreq 'daily'
|
117
|
+
end
|
118
|
+
|
119
|
+
for url in [ changelog_about_index_url, contact_about_index_url, developer_about_index_url ]
|
120
|
+
xml.url do
|
121
|
+
xml.loc url
|
122
|
+
xml.changefreq 'weekly'
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
The custom template for Zones just uses a different URL:
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
xml.instruct!
|
132
|
+
xml.urlset :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
|
133
|
+
#
|
134
|
+
# Zone Mobs
|
135
|
+
#
|
136
|
+
for item in @items
|
137
|
+
xml.url do
|
138
|
+
xml.loc zone_mobs_url(item)
|
139
|
+
xml.lastmod item.updated_at.to_s(:w3c)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
And the one for "classes" is just iterating through fixed values:
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
xml.instruct!
|
149
|
+
xml.urlset :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
|
150
|
+
#
|
151
|
+
# adventure class main index page
|
152
|
+
#
|
153
|
+
xml.url do
|
154
|
+
xml.loc adventure_classes_url
|
155
|
+
end
|
156
|
+
|
157
|
+
#
|
158
|
+
# spells for classes
|
159
|
+
#
|
160
|
+
@classes.each do |adventure_class_name|
|
161
|
+
xml.url do
|
162
|
+
xml.loc adventure_class_spells_url(adventure_class_name)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
```
|
167
|
+
|
168
|
+
### Error Pages
|
169
|
+
|
170
|
+
It is important to provide a good error page which returns status
|
171
|
+
404 for items that do not exist. The default behavior of Model.find
|
172
|
+
will return a server error (500) if the record is not found.
|
173
|
+
|
174
|
+
I use this in my controllers, coupled with a pleasing to the end user
|
175
|
+
(who will see the page if they follow a link) error page:
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
def show
|
179
|
+
@user = User.where(:id => params[:id].to_i).first
|
180
|
+
if @user.blank?
|
181
|
+
render "not_found", :status => 404
|
182
|
+
return
|
183
|
+
end
|
184
|
+
end
|
185
|
+
```
|
186
|
+
|
187
|
+
### robots.txt
|
188
|
+
|
189
|
+
You will want to add some content to your robots.txt to allow for automatic sitemap
|
190
|
+
discovery.
|
191
|
+
|
192
|
+
```text
|
193
|
+
User-Agent: *
|
194
|
+
Disallow: /auth
|
195
|
+
Sitemap: http://eq2mission.flame.org/sitemap.xml
|
196
|
+
```
|
197
|
+
|
198
|
+
## Authors
|
199
|
+
|
200
|
+
Michael Graff
|
201
|
+
[twitter](https://twitter.com/skandragon)
|
202
|
+
[github](https://github.com/skandragon)
|
data/spec/dummy/log/test.log
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
Connecting to database specified by database.yml
|
2
|
-
|
2
|
+
Connecting to database specified by database.yml
|
3
|
+
Connecting to database specified by database.yml
|
4
|
+
[1m[36m (4.5ms)[0m [1mCREATE TABLE "foos" ("id" serial primary key, "name" character varying(255)) [0m
|
3
5
|
[1m[35m (0.2ms)[0m BEGIN
|
4
6
|
[1m[36m (0.1ms)[0m [1mROLLBACK[0m
|
5
7
|
[1m[35m (0.1ms)[0m BEGIN
|
@@ -7,11 +9,11 @@ Connecting to database specified by database.yml
|
|
7
9
|
[1m[35m (0.0ms)[0m BEGIN
|
8
10
|
[1m[36m (0.1ms)[0m [1mROLLBACK[0m
|
9
11
|
[1m[35m (0.0ms)[0m BEGIN
|
10
|
-
[1m[36m (0.
|
12
|
+
[1m[36m (0.0ms)[0m [1mROLLBACK[0m
|
11
13
|
[1m[35m (0.0ms)[0m BEGIN
|
12
14
|
[1m[36m (0.1ms)[0m [1mROLLBACK[0m
|
13
|
-
[1m[35m (0.
|
15
|
+
[1m[35m (0.0ms)[0m BEGIN
|
14
16
|
[1m[36m (0.1ms)[0m [1mROLLBACK[0m
|
15
|
-
[1m[35m (0.
|
17
|
+
[1m[35m (0.0ms)[0m BEGIN
|
16
18
|
[1m[36m (0.2ms)[0m [1mROLLBACK[0m
|
17
|
-
[1m[35m (
|
19
|
+
[1m[35m (1.8ms)[0m DROP TABLE "foos"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gryphon_sitemap
|
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:
|
12
|
+
date: 2013-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -109,7 +109,7 @@ files:
|
|
109
109
|
- lib/tasks/gryphon_sitemap_tasks.rake
|
110
110
|
- MIT-LICENSE
|
111
111
|
- Rakefile
|
112
|
-
- README.
|
112
|
+
- README.md
|
113
113
|
- spec/dummy/app/assets/javascripts/application.js
|
114
114
|
- spec/dummy/app/assets/stylesheets/application.css
|
115
115
|
- spec/dummy/app/controllers/application_controller.rb
|
@@ -155,15 +155,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
155
|
- - ! '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
hash: 2211880127869497148
|
158
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
162
|
none: false
|
160
163
|
requirements:
|
161
164
|
- - ! '>='
|
162
165
|
- !ruby/object:Gem::Version
|
163
166
|
version: '0'
|
167
|
+
segments:
|
168
|
+
- 0
|
169
|
+
hash: 2211880127869497148
|
164
170
|
requirements: []
|
165
171
|
rubyforge_project:
|
166
|
-
rubygems_version: 1.8.
|
172
|
+
rubygems_version: 1.8.25
|
167
173
|
signing_key:
|
168
174
|
specification_version: 3
|
169
175
|
summary: Simple sitemaps for rails.
|
@@ -201,4 +207,3 @@ test_files:
|
|
201
207
|
- spec/gryphon_sitemap_test.rb
|
202
208
|
- spec/pager/pager_spec.rb
|
203
209
|
- spec/spec_helper.rb
|
204
|
-
has_rdoc:
|
data/README.rdoc
DELETED