ar_sitemapper 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Changelog.rdoc +28 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +98 -0
- data/LICENSE +24 -0
- data/README.rdoc +176 -0
- data/Rakefile +23 -0
- data/ar_sitemapper.gemspec +26 -0
- data/install.rb +5 -0
- data/lib/ar_sitemapper.rb +11 -0
- data/lib/sitemapper/active_record/builder.rb +54 -0
- data/lib/sitemapper/engine.rb +26 -0
- data/lib/sitemapper/generator.rb +100 -0
- data/lib/sitemapper/index.rb +84 -0
- data/lib/sitemapper/loader.rb +39 -0
- data/lib/sitemapper/pinger.rb +21 -0
- data/lib/sitemapper/sitemap.rb +22 -0
- data/lib/sitemapper/urlset.rb +76 -0
- data/lib/sitemapper/version.rb +5 -0
- data/lib/tasks/sitemapper.rake +26 -0
- data/templates/sitemaps.yml +34 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.gitkeep +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +24 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +50 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +24 -0
- data/test/dummy/config/environments/production.rb +69 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +2 -0
- data/test/dummy/config/sitemaps.yml +36 -0
- data/test/dummy/db/schema.rb +74 -0
- data/test/dummy/lib/assets/.gitkeep +0 -0
- data/test/dummy/log/.gitkeep +0 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/support/app/models/foo_bar.rb +24 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/engine_test.rb +19 -0
- data/test/unit/generator_test.rb +14 -0
- data/test/unit/loader_test.rb +21 -0
- data/test/unit/map_test.rb +9 -0
- data/test/unit/pinger_test.rb +11 -0
- data/test/unit/sitemapper_test.rb +22 -0
- data/test/unit/urlset_test.rb +9 -0
- metadata +221 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MmU4N2FhNWNmNjgxOWY5NzlkNmU2YTdkOGIxYTQ5N2U3MGRiYTk1Zg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MTUzMzE5OWU3YWRmZTI3YzBlY2I0OTE1YzkyMzU0MDA4OWIzYjI3ZQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NWU3Y2ZiOTE4Njg5NDA5NGUxN2IyODliYzg0ZWRlZTZkYTY4NmZkMDBiN2Ey
|
10
|
+
ZjhiNGU0YWQwOTM5ZjAxZTkyNTE0ODdiYWUxNjQwMThmMWNkOTgxZWY0NzY1
|
11
|
+
YTFkNzBhZjQwNmU5YjNhN2JiM2NiNGE2OTRjZmUyYjNhZDVkMWY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
N2NkMWQ2OWM3ZmFhMDY5MjhmNjkyNGQ3NzM1MWE0MWI4MWY3OThiYWZiZGQw
|
14
|
+
NmRiNzFmMWYzZGVkZDkxYmRiNDJjYzY2MjY0MDdhY2NlZTdkMWU2NzVhMzE4
|
15
|
+
ZDZjMWI1ODhkY2UyNmE1MjMwNzYyNmJjN2I5ZjE2MDQwZjk5YzY=
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ar_sitemapper
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3
|
data/Changelog.rdoc
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
== CHANGELOG
|
2
|
+
|
3
|
+
=== v1.0.0 // 2013-09-28
|
4
|
+
* Transformed into a gem (just for sport)
|
5
|
+
* Removed Rails 2'ism
|
6
|
+
* Splits sitemaps with over 50,000 entries
|
7
|
+
* Rails integration as engine
|
8
|
+
* Removed hardcoded sitemaps.yml configuration
|
9
|
+
|
10
|
+
=== v0.5 // 2010-10-25
|
11
|
+
* supports conditions and named scopes for build_sitemap via YML file
|
12
|
+
* documentation and samples
|
13
|
+
|
14
|
+
=== v0.4 // 2010-09-24
|
15
|
+
* supports Proc code in sitemap yaml for dynamic url generation based on model iteration
|
16
|
+
* additional files can now be added to the sitemap index file.
|
17
|
+
* last-modified for models' sitemaps within the sitemap index file is now based on :created_at when a corresponding column is found
|
18
|
+
* added barebone fake app for running tests
|
19
|
+
|
20
|
+
=== v0.3 // 2010-09-22
|
21
|
+
* classes restructured
|
22
|
+
|
23
|
+
=== v0.3 // 2010-07-20
|
24
|
+
* added Map class
|
25
|
+
* filename will be auto-derived by modelname by default now
|
26
|
+
|
27
|
+
=== v0.1 // 2010-07-16
|
28
|
+
* Initial version
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ar_sitemapper (1.0.0)
|
5
|
+
activesupport (>= 3.0, < 4.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionmailer (3.2.14)
|
11
|
+
actionpack (= 3.2.14)
|
12
|
+
mail (~> 2.5.4)
|
13
|
+
actionpack (3.2.14)
|
14
|
+
activemodel (= 3.2.14)
|
15
|
+
activesupport (= 3.2.14)
|
16
|
+
builder (~> 3.0.0)
|
17
|
+
erubis (~> 2.7.0)
|
18
|
+
journey (~> 1.0.4)
|
19
|
+
rack (~> 1.4.5)
|
20
|
+
rack-cache (~> 1.2)
|
21
|
+
rack-test (~> 0.6.1)
|
22
|
+
sprockets (~> 2.2.1)
|
23
|
+
activemodel (3.2.14)
|
24
|
+
activesupport (= 3.2.14)
|
25
|
+
builder (~> 3.0.0)
|
26
|
+
activerecord (3.2.14)
|
27
|
+
activemodel (= 3.2.14)
|
28
|
+
activesupport (= 3.2.14)
|
29
|
+
arel (~> 3.0.2)
|
30
|
+
tzinfo (~> 0.3.29)
|
31
|
+
activeresource (3.2.14)
|
32
|
+
activemodel (= 3.2.14)
|
33
|
+
activesupport (= 3.2.14)
|
34
|
+
activesupport (3.2.14)
|
35
|
+
i18n (~> 0.6, >= 0.6.4)
|
36
|
+
multi_json (~> 1.0)
|
37
|
+
arel (3.0.2)
|
38
|
+
builder (3.0.4)
|
39
|
+
erubis (2.7.0)
|
40
|
+
hike (1.2.3)
|
41
|
+
i18n (0.6.5)
|
42
|
+
journey (1.0.4)
|
43
|
+
json (1.8.0)
|
44
|
+
mail (2.5.4)
|
45
|
+
mime-types (~> 1.16)
|
46
|
+
treetop (~> 1.4.8)
|
47
|
+
metaclass (0.0.1)
|
48
|
+
mime-types (1.25)
|
49
|
+
mocha (0.14.0)
|
50
|
+
metaclass (~> 0.0.1)
|
51
|
+
multi_json (1.8.0)
|
52
|
+
polyglot (0.3.3)
|
53
|
+
rack (1.4.5)
|
54
|
+
rack-cache (1.2)
|
55
|
+
rack (>= 0.4)
|
56
|
+
rack-ssl (1.3.3)
|
57
|
+
rack
|
58
|
+
rack-test (0.6.2)
|
59
|
+
rack (>= 1.0)
|
60
|
+
rails (3.2.14)
|
61
|
+
actionmailer (= 3.2.14)
|
62
|
+
actionpack (= 3.2.14)
|
63
|
+
activerecord (= 3.2.14)
|
64
|
+
activeresource (= 3.2.14)
|
65
|
+
activesupport (= 3.2.14)
|
66
|
+
bundler (~> 1.0)
|
67
|
+
railties (= 3.2.14)
|
68
|
+
railties (3.2.14)
|
69
|
+
actionpack (= 3.2.14)
|
70
|
+
activesupport (= 3.2.14)
|
71
|
+
rack-ssl (~> 1.3.2)
|
72
|
+
rake (>= 0.8.7)
|
73
|
+
rdoc (~> 3.4)
|
74
|
+
thor (>= 0.14.6, < 2.0)
|
75
|
+
rake (10.1.0)
|
76
|
+
rdoc (3.12.2)
|
77
|
+
json (~> 1.4)
|
78
|
+
sprockets (2.2.2)
|
79
|
+
hike (~> 1.2)
|
80
|
+
multi_json (~> 1.0)
|
81
|
+
rack (~> 1.0)
|
82
|
+
tilt (~> 1.1, != 1.3.0)
|
83
|
+
sqlite3 (1.3.8)
|
84
|
+
thor (0.18.1)
|
85
|
+
tilt (1.4.1)
|
86
|
+
treetop (1.4.15)
|
87
|
+
polyglot
|
88
|
+
polyglot (>= 0.3.1)
|
89
|
+
tzinfo (0.3.37)
|
90
|
+
|
91
|
+
PLATFORMS
|
92
|
+
ruby
|
93
|
+
|
94
|
+
DEPENDENCIES
|
95
|
+
ar_sitemapper!
|
96
|
+
mocha
|
97
|
+
rails (>= 3.0, < 4.0)
|
98
|
+
sqlite3
|
data/LICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Copyright (c) 2010, Carsten Zimmermann
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
* Redistributions of source code must retain the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
8
|
+
* Redistributions in binary form must reproduce the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
10
|
+
documentation and/or other materials provided with the distribution.
|
11
|
+
* Neither the name of the original author / copyright holder nor the
|
12
|
+
names of its contributors may be used to endorse or promote products
|
13
|
+
derived from this software without specific prior written permission.
|
14
|
+
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
16
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
17
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
|
19
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
20
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
21
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
22
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
23
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
24
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
== ActiveRecord Sitemapper
|
2
|
+
=== Low-level sitemap-building
|
3
|
+
|
4
|
+
The standard approach to generate XML sitemaps for a Ruby on Rails application
|
5
|
+
seems to be creating a special SitemapsController with xml views and a bit
|
6
|
+
of routes.rb magic.
|
7
|
+
|
8
|
+
I used to generate sitemaps created thus via a nightly rake task to have them
|
9
|
+
cached and delivered statically by Apache. That felt wrong, I wanted a more
|
10
|
+
"low-level" approach. Actually, as low-level as possible and I ended up at
|
11
|
+
ActiveRecord::Base: this plugin enhances your ActiveRecord model to export
|
12
|
+
its data to a sitemap in an intuitive way.
|
13
|
+
|
14
|
+
Also yes, I know there are probably a gazillion projects covering this already.
|
15
|
+
|
16
|
+
== Installation
|
17
|
+
|
18
|
+
To add *ar_sitemapper* to your Rails 3 project, add it to your Gemfile:
|
19
|
+
|
20
|
+
gem 'ar_sitemapper', '~> 1.0.0'
|
21
|
+
|
22
|
+
== Usage
|
23
|
+
|
24
|
+
=== ActiveRecord drop-in
|
25
|
+
|
26
|
+
You can use +build_sitemap+ directly on any ActiveRecord model. The following
|
27
|
+
example will create a sitemap of all your Content objects as Rails.root/public/sitemap_contents.xml.gz:
|
28
|
+
|
29
|
+
Content.build_sitemap :all do |content, xml|
|
30
|
+
xml.loc content_url(content)
|
31
|
+
xml.changefreq 'weekly'
|
32
|
+
xml.lastmod content.updated_at.strftime("%Y-%m-%d")
|
33
|
+
xml.priority 0.5
|
34
|
+
end
|
35
|
+
|
36
|
+
You can pass ActiveRecord::Base.find options as arguments to +build_sitemap+
|
37
|
+
to fine-tune the selection of objects you want to extract:
|
38
|
+
|
39
|
+
Post.build_sitemap :all, :conditions => ["published IS TRUE"], :order => :name do |post, xml|
|
40
|
+
# do stuff here
|
41
|
+
end
|
42
|
+
|
43
|
+
*Note*: if you want to use your named route helpers in the block, be sure to have
|
44
|
+
ActionController::UrlWriter included. Setting default_url_options[:host]
|
45
|
+
is helpful, too.
|
46
|
+
|
47
|
+
=== Output
|
48
|
+
|
49
|
+
*ar_sitemapper* will derive its sitemap filename from the model's name and will
|
50
|
+
default to Gzip compressed output. If can write to +stdout+ as well if +file+
|
51
|
+
is explicitely set to +nil+ or +false+.
|
52
|
+
|
53
|
+
It will automatically compress your XML sitemap with Gzip if the
|
54
|
+
filename parameter suggests it (ie. ends with ".gz"). Alternatively, you can
|
55
|
+
enforce or disable Gzip compression by passing true or false to the +gzip+ option.
|
56
|
+
|
57
|
+
Both of the following examples will create a gzip'ed file named "test.xml.gz":
|
58
|
+
|
59
|
+
Content.build_sitemap :all, :file => "test.xml.gz" { |content, xml| ... }
|
60
|
+
Content.build_sitemap :all, :file => "test.xml", :gzip => true { |content, xml| ... }
|
61
|
+
|
62
|
+
=== Sitemaps for static data
|
63
|
+
|
64
|
+
Sitemap creation is done via a block, so you can do whatever you want in it.
|
65
|
+
For added flexibility, you can use *ar_sitemapper* with arbitrary data
|
66
|
+
collections (ie. generating sitemaps for static content). Future versions will
|
67
|
+
support YAML configuration of such static content.
|
68
|
+
|
69
|
+
sites = [
|
70
|
+
{ :url => "http://example.com/your/static/content1.html", :freq => "always", :prio => "1.0" },
|
71
|
+
{ :url => "http://example.com/your/static/content2.html", :freq => "monthly", :prio => "0.3" },
|
72
|
+
]
|
73
|
+
|
74
|
+
AegisNet::Sitemapper::Generator.create(sites) do |site, xml|
|
75
|
+
xml.loc site[:url]
|
76
|
+
xml.changefreq site[:freq]
|
77
|
+
xml.priority site[:prio]
|
78
|
+
end
|
79
|
+
|
80
|
+
=== YAML configuration
|
81
|
+
Sitemapper supports configuration via a YAML file which is expected to reside in
|
82
|
+
<tt>Rails.root/config/sitemaps.yml</tt>.
|
83
|
+
|
84
|
+
==== Supported top level configuration options
|
85
|
+
* +default_host+: base hostname used for url generation (mandatory).
|
86
|
+
* +local_path+: where to store the generated sitemaps on the local system (mandatory).
|
87
|
+
* +ping+: boolean whether or not to ping search engines on successful sitemap generation.
|
88
|
+
* +index+: options for the main sitemap index file, ie. the file that references all others.
|
89
|
+
* +static+: options for the sitemap that lists URLs to static content (ie. URLs not
|
90
|
+
necessarily related to AR models)
|
91
|
+
* +models+: options for model-related URLset sitemaps
|
92
|
+
* +ping+: a list of search engines' ping services.
|
93
|
+
|
94
|
+
==== The <tt>index</tt> option
|
95
|
+
* +sitemapfile+: the name of the the generated sitemap.
|
96
|
+
* +includes+: an array of sitemaps that should be included in the sitemap index but
|
97
|
+
are _not_ generated directly through AR:Sitemapper (eg. a KML-sitemap).
|
98
|
+
|
99
|
+
==== The <tt>static</tt> option
|
100
|
+
* +sitemapfile+: the name of the the generated sitemap.
|
101
|
+
* +urlset+: a list of static pages to include into the sitemap. Every item must
|
102
|
+
have a +loc+ element. A +changefreq+ and +priority+ element is optional and
|
103
|
+
defaults to _weekly_ and <i>0.5</i>, respectively.
|
104
|
+
|
105
|
+
==== The <tt>model</tt> option
|
106
|
+
A list of models to create sitemaps for. The key must be the downcased und
|
107
|
+
underscored name of the model. Supported / required options for every model-based
|
108
|
+
sitemap are:
|
109
|
+
* +sitemapfile+: the name of the the generated sitemap (mandatory).
|
110
|
+
* +loc+: a Proc definition to generate the URLs for each object with (mandatory).
|
111
|
+
* +changefreq+: optional, defaults to 'weekly'
|
112
|
+
* +priority+: optional, defaults to '0.5'
|
113
|
+
* +lastmod+: you can use ERB to insert the date you desire.
|
114
|
+
* +conditions+: conditions to be merged into the finder of +build_sitemap+ (optional).
|
115
|
+
* +scope+: a named scope to find objects with
|
116
|
+
|
117
|
+
==== Sample YAML file
|
118
|
+
|
119
|
+
default_host: "www.example.com"
|
120
|
+
local_path: <%= File.join Rails.root, "public", "sitemaps" %>
|
121
|
+
ping: true
|
122
|
+
index:
|
123
|
+
sitemapfile: "sitemap_index.xml"
|
124
|
+
includes:
|
125
|
+
-
|
126
|
+
loc: some_other_sitemap.xml
|
127
|
+
static:
|
128
|
+
sitemapfile: "sitemap_static.xml.gz"
|
129
|
+
urlset:
|
130
|
+
-
|
131
|
+
loc: "http://www.example.com/static/content"
|
132
|
+
changefreq: weekly
|
133
|
+
priority: 1.0
|
134
|
+
-
|
135
|
+
loc: "http://www.example.com/another/page"
|
136
|
+
changefreq: weekly
|
137
|
+
priority: 1.0
|
138
|
+
models:
|
139
|
+
foo_bar:
|
140
|
+
sitemapfile: sitemap_foo_bars.xml.gz
|
141
|
+
lastmod: <%= 2.days.ago %>
|
142
|
+
loc: Proc.new {|object| foo_bar_path(object) }
|
143
|
+
changefreq: weekly
|
144
|
+
priority: 0.7
|
145
|
+
conditions: "foo > 1"
|
146
|
+
acme:
|
147
|
+
sitemapfile: sitemap_proctests.xml.gz
|
148
|
+
scope: liquid
|
149
|
+
lastmod: <%= Acme.find(:last, :order => :updated_at).updated_at %>
|
150
|
+
loc: Proc.new {|object| acme_path(object) }
|
151
|
+
changefreq: weekly
|
152
|
+
priority: 0.8
|
153
|
+
pings:
|
154
|
+
- http://submissions.ask.com/ping?sitemap=
|
155
|
+
- http://www.google.com/webmasters/sitemaps/ping?sitemap=
|
156
|
+
- http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=YahooDemo&url=
|
157
|
+
- http://www.bing.com/webmaster/ping.aspx?siteMap=
|
158
|
+
|
159
|
+
|
160
|
+
=== Rake task
|
161
|
+
The gem provides a rake task to rebuild all sitemaps from its config file:
|
162
|
+
|
163
|
+
rake sitemapper:rebuild
|
164
|
+
|
165
|
+
|
166
|
+
== .plan
|
167
|
+
* support KML files
|
168
|
+
* allow for a custom iterator supplied as Proc for Generator::create (ie. to make use of ARs batch finding)
|
169
|
+
* cleanup
|
170
|
+
* more flexible syntax for conditions in yml file
|
171
|
+
* guess RESTful object path and make Proc object for loc in models optional
|
172
|
+
* Install a sample sitemap.yml file
|
173
|
+
|
174
|
+
---
|
175
|
+
|
176
|
+
Copyright (c) 2010-2013 Carsten Zimmermann, released under a BSD-type license
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rdoc/task'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the ar_sitemapper plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Generate documentation for the ar_sitemapper plugin.'
|
17
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
18
|
+
rdoc.rdoc_dir = 'rdoc'
|
19
|
+
rdoc.title = 'ActiveRecord Sitemapper'
|
20
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
21
|
+
rdoc.rdoc_files.include('README*')
|
22
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require "sitemapper/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ar_sitemapper"
|
8
|
+
spec.version = AegisNet::Sitemapper::VERSION
|
9
|
+
spec.authors = ["Carsten Zimmermann"]
|
10
|
+
spec.email = ["cz@aegisnet.de"]
|
11
|
+
spec.description = %q{Faciliates generating static sitemap XML files from ActiveRecord}
|
12
|
+
spec.summary = %q{Faciliates generating static sitemap XML files from ActiveRecord}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "BSD 3-Clause"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'activesupport', '>= 3.0', '< 4.0'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'sqlite3'
|
24
|
+
spec.add_development_dependency 'mocha'
|
25
|
+
spec.add_development_dependency 'rails', '>= 3.0', '< 4.0'
|
26
|
+
end
|
data/install.rb
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'config/environment'
|
4
|
+
FileUtils.cp File.join(File.dirname(__FILE__), "templates", "sitemapper.rake"), File.join(Rails.root, "tasks")
|
5
|
+
FileUtils.cp File.join(File.dirname(__FILE__), "templates", "sitemaps.yml"), File.join(Rails.root, "config")
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'sitemapper/loader'
|
2
|
+
|
3
|
+
module AegisNet
|
4
|
+
module Sitemapper
|
5
|
+
module ActiveRecord
|
6
|
+
module Builder
|
7
|
+
def self.included(base)
|
8
|
+
base.extend SingletonMethods
|
9
|
+
end
|
10
|
+
|
11
|
+
module SingletonMethods
|
12
|
+
# Adds sitemap building functionality to ActiveRecord models.
|
13
|
+
#
|
14
|
+
# The option +:filename+ is derived from the model name and will be set to
|
15
|
+
# Rails.root/public/sitemap_modelnames.xml.gz by default. Set +:filename+
|
16
|
+
# to +nil+ or +false+ explicitely if you don't want the filename to be
|
17
|
+
# guessed (ie. if you want output to stdout).
|
18
|
+
#
|
19
|
+
# === Parameters
|
20
|
+
# * +scope+: :all, :first, :last or a named scope
|
21
|
+
# * +options+: a Hash with options to pass to ActiveRecord::Base.find and AegisNet::Sitemapper::Generator
|
22
|
+
#
|
23
|
+
# === Supported Options
|
24
|
+
# * see AegisNet::Sitemapper::Generator::VALID_GENERATOR_OPTIONS
|
25
|
+
#
|
26
|
+
# === Example
|
27
|
+
# Content.build_sitemap :all, :file => "sitemap_content.xml" do |content, xml|
|
28
|
+
# xml.loc content_path(content)
|
29
|
+
# xml.changefreq "weekly"
|
30
|
+
# xml.priority 0.5
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
def build_sitemap scope, options = {}
|
34
|
+
scope = scope.to_sym
|
35
|
+
raise(ArgumentError, "Unknown ActiveRecord finder: #{scope}") unless self.respond_to?(scope)
|
36
|
+
valid_find_options = [ :conditions, :include, :joins, :limit, :offset,
|
37
|
+
:order, :select, :group, :having, :from ]
|
38
|
+
options = options.symbolize_keys!
|
39
|
+
options.assert_valid_keys(Generator::VALID_GENERATOR_OPTIONS, valid_find_options)
|
40
|
+
|
41
|
+
find_options = options.select{|option, value| valid_find_options.include?(option) }
|
42
|
+
sitemap_opts = options.delete_if{|k, v| find_options.keys.include?(k)}
|
43
|
+
|
44
|
+
# Extra treatment for the filename option
|
45
|
+
sitemap_opts[:file] = sitemap_opts.keys.include?(:file) ? sitemap_opts[:file] : AegisNet::Sitemapper::Generator.default_filename(self.class)
|
46
|
+
|
47
|
+
entries = self.send(scope, find_options).to_a # get an array for :first and :last, too
|
48
|
+
AegisNet::Sitemapper::Generator.create(entries, sitemap_opts) { |entry, xml| yield entry, xml }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|