cartographer 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/.gemtest +0 -0
- data/History.txt +6 -0
- data/Manifest.txt +8 -0
- data/README.txt +85 -0
- data/Rakefile +32 -0
- data/lib/cartographer.rb +172 -0
- data/lib/xml/sitemap.haml +4 -0
- data/lib/xml/sitemap_uri.haml +7 -0
- data/test/test_cartographer.rb +74 -0
- metadata +149 -0
data/.gemtest
ADDED
File without changes
|
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
= Cartographer
|
2
|
+
|
3
|
+
http://github.com/erikh/cartographer/
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Assists in the creation of sitemaps that google, yahoo, etc, use. Has finding,
|
8
|
+
rewriting, and attribute manipulation before generation. Does not require any
|
9
|
+
external dependency other than haml.
|
10
|
+
|
11
|
+
== FEATURES/PROBLEMS:
|
12
|
+
|
13
|
+
* Does not require rails or any web framework.
|
14
|
+
* Works with static generators.
|
15
|
+
* Is able to transform a subtree of documents into a proper sitemap.
|
16
|
+
|
17
|
+
== SYNOPSIS:
|
18
|
+
|
19
|
+
sm = Cartographer.new("http://example.org")
|
20
|
+
sm.add(Cartographer::URL.new(:location => URI.parse("http://example.org/ethereal")))
|
21
|
+
sm.add_tree("/some/doc/root") #=> adds all the files in the docroot
|
22
|
+
puts sm.to_xml #=> outputs your sitemap.
|
23
|
+
|
24
|
+
#
|
25
|
+
# filtering and remapping
|
26
|
+
#
|
27
|
+
sm = Cartographer.new("http://example.org")
|
28
|
+
# pass a block to get the paths found and rewrite them.
|
29
|
+
# return nil if you want that path (and sub-paths) to be omitted.
|
30
|
+
sm.add_tree("/some/doc/root") { |x| x.sub(/.html$/, '/') }
|
31
|
+
File.open('sitemap.xml', 'w') { |f| f << sm.to_xml }
|
32
|
+
|
33
|
+
See Cartographer and Cartographer::URL RDoc for more information.
|
34
|
+
|
35
|
+
If you need more information about the sitemap format:
|
36
|
+
http://en.wikipedia.org/wiki/Sitemaps
|
37
|
+
|
38
|
+
== REQUIREMENTS:
|
39
|
+
|
40
|
+
Users:: haml
|
41
|
+
Developers:: minitest, hoe-roodi, hoe-git, hoe-reek, nokogiri
|
42
|
+
|
43
|
+
== INSTALL:
|
44
|
+
|
45
|
+
* gem install cartographer
|
46
|
+
|
47
|
+
== DEVELOPERS:
|
48
|
+
|
49
|
+
For developers that use rvm, a 'rake install' task has been provided that will
|
50
|
+
avoid using sudo. You will still need to install the dependencies manually
|
51
|
+
instead of using 'rake newb'.
|
52
|
+
|
53
|
+
For everyone else..
|
54
|
+
|
55
|
+
After checking out the source, run:
|
56
|
+
|
57
|
+
$ rake newb
|
58
|
+
|
59
|
+
This task will install any missing dependencies, run the tests/specs,
|
60
|
+
and generate the RDoc.
|
61
|
+
|
62
|
+
== LICENSE:
|
63
|
+
|
64
|
+
(The MIT License)
|
65
|
+
|
66
|
+
Copyright (c) 2011 Erik Hollensbe and Zetetic, LLC.
|
67
|
+
|
68
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
69
|
+
a copy of this software and associated documentation files (the
|
70
|
+
'Software'), to deal in the Software without restriction, including
|
71
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
72
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
73
|
+
permit persons to whom the Software is furnished to do so, subject to
|
74
|
+
the following conditions:
|
75
|
+
|
76
|
+
The above copyright notice and this permission notice shall be
|
77
|
+
included in all copies or substantial portions of the Software.
|
78
|
+
|
79
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
80
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
81
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
82
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
83
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
84
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
85
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
|
6
|
+
Hoe.plugins.delete :rubyforge
|
7
|
+
Hoe.plugin :git
|
8
|
+
Hoe.plugin :rcov
|
9
|
+
Hoe.plugin :roodi
|
10
|
+
Hoe.plugin :reek
|
11
|
+
Hoe.plugin :minitest
|
12
|
+
|
13
|
+
spec = Hoe.spec 'cartographer' do
|
14
|
+
developer('Erik Hollensbe', 'erik@hollensbe.org')
|
15
|
+
developer('Team Zetetic', 'support@zetetic.net')
|
16
|
+
|
17
|
+
self.rubyforge_name = nil
|
18
|
+
|
19
|
+
extra_deps << ['haml', '>= 0']
|
20
|
+
|
21
|
+
extra_dev_deps << ['minitest', '>= 0']
|
22
|
+
extra_dev_deps << ['hoe-roodi', '>= 0']
|
23
|
+
extra_dev_deps << ['hoe-reek', '>= 0']
|
24
|
+
extra_dev_deps << ['hoe-git', '>= 0']
|
25
|
+
extra_dev_deps << ['nokogiri', '>= 0']
|
26
|
+
end
|
27
|
+
|
28
|
+
task :install => [:gem] do
|
29
|
+
sh "gem install pkg/#{spec.name}-#{spec.version}.gem"
|
30
|
+
end
|
31
|
+
|
32
|
+
# vim: syntax=ruby
|
data/lib/cartographer.rb
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'haml'
|
3
|
+
require 'uri'
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
#
|
7
|
+
# Cartographer is a sitemap manipulation library.
|
8
|
+
#
|
9
|
+
#
|
10
|
+
# sm = Cartographer.new("http://example.org")
|
11
|
+
# sm.add(Cartographer::URL.new(:location => URI.parse("http://example.org/ethereal")))
|
12
|
+
# sm.add_tree("/some/doc/root") #=> adds all the files in the docroot
|
13
|
+
# puts sm.to_xml #=> outputs your sitemap.
|
14
|
+
#
|
15
|
+
#
|
16
|
+
# # filtering and remapping
|
17
|
+
# sm = Cartographer.new("http://example.org")
|
18
|
+
# # pass a block to get the paths found and rewrite them.
|
19
|
+
# # return nil if you want that path (and sub-paths) to be omitted.
|
20
|
+
# sm.add_tree("/some/doc/root") { |x| x.sub(/.html$/, '/') }
|
21
|
+
# File.open('sitemap.xml', 'w') { |f| f << sm.to_xml }
|
22
|
+
#
|
23
|
+
# See Cartographer and Cartographer::URL RDoc for more information.
|
24
|
+
#
|
25
|
+
class Cartographer
|
26
|
+
VERSION = '1.0.0'
|
27
|
+
|
28
|
+
##
|
29
|
+
# List of Cartographer::URL objects
|
30
|
+
attr_reader :urls
|
31
|
+
|
32
|
+
##
|
33
|
+
# Your site's root path.
|
34
|
+
attr_reader :root_uri
|
35
|
+
|
36
|
+
##
|
37
|
+
# The default change frequency for all URLs.
|
38
|
+
attr_accessor :default_changefreq
|
39
|
+
|
40
|
+
XML_TEMPLATE = File.expand_path("xml/sitemap.haml", File.dirname(File.expand_path(__FILE__)))
|
41
|
+
|
42
|
+
##
|
43
|
+
# Constructor.
|
44
|
+
#
|
45
|
+
# Takes a root_uri which can be anything resolvable as a string, or URI::HTTP.
|
46
|
+
#
|
47
|
+
# Also takes a default change frequency which is just a string corresponding
|
48
|
+
# to the different types.
|
49
|
+
def initialize(root_uri, default_changefreq=nil)
|
50
|
+
@urls = []
|
51
|
+
@root_uri = root_uri.kind_of?(URI::HTTP) ? root_uri : URI.parse(root_uri.to_s)
|
52
|
+
@default_changefreq = default_changefreq
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
#
|
57
|
+
# Adds a Cartographer::URL to the list of URLs for processing.
|
58
|
+
#
|
59
|
+
def add(url)
|
60
|
+
raise ArgumentError, "Please pass Cartographer::URL objects to this method" unless url.kind_of?(URL)
|
61
|
+
@urls.push(url)
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
#
|
66
|
+
# Given a path, walks the path and transforms all the files and directories
|
67
|
+
# in it into Cartographer::URL objects.
|
68
|
+
#
|
69
|
+
# If given a block, it will yield each relative path to this block as the
|
70
|
+
# first argument. The return value of this block is used as the path, making
|
71
|
+
# them transformable. If you return nil, this path (and any sub-paths) are
|
72
|
+
# pruned from the find.
|
73
|
+
#
|
74
|
+
# See the Constructor for examples or README.txt.
|
75
|
+
#
|
76
|
+
def add_tree(base_path)
|
77
|
+
Find.find(base_path) do |path|
|
78
|
+
new_path = path.sub %r!^#{Regexp.escape base_path}!, ''
|
79
|
+
uri = root_uri.dup
|
80
|
+
stat = File.stat(path)
|
81
|
+
|
82
|
+
if File.directory?(path)
|
83
|
+
new_path += "/"
|
84
|
+
end
|
85
|
+
|
86
|
+
if block_given?
|
87
|
+
new_path = yield new_path
|
88
|
+
unless new_path
|
89
|
+
Find.prune
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
uri.path = new_path
|
94
|
+
add URL.new(:location => uri, :lastmod => stat.mtime, :changefreq => @default_changefreq)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
#
|
100
|
+
# Transforms the given Cartographer::URL list to the sitemap XML format.
|
101
|
+
#
|
102
|
+
def to_xml
|
103
|
+
Haml::Engine.new(File.read(XML_TEMPLATE)).render(self)
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Cartographer::URL is a structure to enforce the sitemap format.
|
108
|
+
#
|
109
|
+
class URL
|
110
|
+
XML_TEMPLATE = File.expand_path("xml/sitemap_uri.haml", File.dirname(File.expand_path(__FILE__)))
|
111
|
+
|
112
|
+
##
|
113
|
+
# Location of item, stored as a kind of URI::Generic. Required.
|
114
|
+
attr_accessor :location
|
115
|
+
|
116
|
+
##
|
117
|
+
# Last modification time of this item.
|
118
|
+
attr_accessor :lastmod
|
119
|
+
|
120
|
+
##
|
121
|
+
# Change frequency, stored as a string.
|
122
|
+
attr_accessor :changefreq
|
123
|
+
|
124
|
+
##
|
125
|
+
# Priority, stored as a Numeric object, from 0 to 1 with decimal values included.
|
126
|
+
attr_accessor :priority
|
127
|
+
|
128
|
+
|
129
|
+
##
|
130
|
+
#
|
131
|
+
# Constructor. Takes a hash of arguments:
|
132
|
+
#
|
133
|
+
# location:: A kind of URI::Generic
|
134
|
+
# lastmod:: A Time object which represents the last modification time.
|
135
|
+
# changefreq:: A string which contains the frequency.
|
136
|
+
# priority:: A decimal value (any kind of Numeric will do) from 0 - 1.
|
137
|
+
#
|
138
|
+
def initialize(args)
|
139
|
+
args.each do |key, value|
|
140
|
+
send(key.to_s + "=", value)
|
141
|
+
end
|
142
|
+
|
143
|
+
unless self.location
|
144
|
+
raise ArgumentError, "the location argument is required."
|
145
|
+
end
|
146
|
+
|
147
|
+
unless self.location.kind_of?(URI::Generic)
|
148
|
+
raise ArgumentError, "location must be a kind of URI::Generic"
|
149
|
+
end
|
150
|
+
|
151
|
+
if self.lastmod and !self.lastmod.kind_of?(Time)
|
152
|
+
raise ArgumentError, "lastmod must be a kind of Time."
|
153
|
+
end
|
154
|
+
|
155
|
+
if self.changefreq and !self.changefreq.kind_of?(String)
|
156
|
+
raise ArgumentError, "changefreq must be a kind of String"
|
157
|
+
end
|
158
|
+
|
159
|
+
if self.priority and !self.priority.kind_of?(Numeric)
|
160
|
+
raise ArgumentError, "priority must be a kind of Numeric"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
##
|
165
|
+
#
|
166
|
+
# Convert this object to the <url>...</url> representation.
|
167
|
+
#
|
168
|
+
def to_xml
|
169
|
+
Haml::Engine.new(File.read(XML_TEMPLATE)).render(self)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "minitest/unit"
|
2
|
+
require "cartographer"
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class TestCartographer < MiniTest::Unit::TestCase
|
6
|
+
def test_constructor
|
7
|
+
sm = Cartographer.new("http://example.org")
|
8
|
+
assert_equal [], sm.urls
|
9
|
+
assert_kind_of URI::HTTP, sm.root_uri
|
10
|
+
assert_equal "http://example.org", sm.root_uri.to_s
|
11
|
+
refute sm.default_changefreq
|
12
|
+
|
13
|
+
sm = Cartographer.new("http://example.org", "always")
|
14
|
+
assert_equal "always", sm.default_changefreq
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_add
|
18
|
+
sm = Cartographer.new("http://example.org")
|
19
|
+
assert_raises(ArgumentError) { sm.add("fart") }
|
20
|
+
sm.add(Cartographer::URL.new(:location => URI.parse("http://example.org/fart")))
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_add_tree
|
24
|
+
sm = Cartographer.new("http://example.org")
|
25
|
+
sm.add_tree(File.expand_path("test"))
|
26
|
+
|
27
|
+
assert_includes(
|
28
|
+
sm.urls.map(&:location),
|
29
|
+
URI.parse("http://example.org/test_cartographer.rb")
|
30
|
+
)
|
31
|
+
|
32
|
+
sm = Cartographer.new("http://example.org", "always")
|
33
|
+
sm.add_tree(File.expand_path("test"))
|
34
|
+
|
35
|
+
url = sm.urls.select { |x| x.location.to_s == "http://example.org/test_cartographer.rb" }[0]
|
36
|
+
|
37
|
+
assert_equal "always", url.changefreq
|
38
|
+
assert_equal File.stat(__FILE__).mtime, url.lastmod
|
39
|
+
|
40
|
+
sm = Cartographer.new("http://example.org")
|
41
|
+
sm.add_tree(File.expand_path("test")) { |x| x.sub(/\.rb$/, '/') }
|
42
|
+
|
43
|
+
assert_includes(
|
44
|
+
sm.urls.map(&:location),
|
45
|
+
URI.parse("http://example.org/test_cartographer/")
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_to_xml
|
50
|
+
sm = Cartographer.new("http://example.org")
|
51
|
+
sm.add_tree(File.expand_path("test"))
|
52
|
+
|
53
|
+
xml = Nokogiri::XML.parse(sm.to_xml)
|
54
|
+
assert_equal [ "http://example.org/", "http://example.org/test_cartographer.rb" ],
|
55
|
+
xml.root.xpath('//xmlns:loc', xml.root.namespaces).map(&:content)
|
56
|
+
|
57
|
+
sm = Cartographer.new("http://example.org", "always")
|
58
|
+
sm.add_tree(File.expand_path("test"))
|
59
|
+
|
60
|
+
xml = Nokogiri::XML.parse(sm.to_xml)
|
61
|
+
assert_equal [ "http://example.org/", "http://example.org/test_cartographer.rb" ],
|
62
|
+
xml.root.xpath('//xmlns:loc', xml.root.namespaces).map(&:content)
|
63
|
+
|
64
|
+
assert_equal [ "always", "always" ],
|
65
|
+
xml.root.xpath('//xmlns:changefreq', xml.root.namespaces).map(&:content)
|
66
|
+
|
67
|
+
sm = Cartographer.new("http://example.org")
|
68
|
+
sm.add_tree(File.expand_path("test")) { |x| x.sub(/\.rb$/, '/') }
|
69
|
+
|
70
|
+
xml = Nokogiri::XML.parse(sm.to_xml)
|
71
|
+
assert_equal [ "http://example.org/", "http://example.org/test_cartographer/" ],
|
72
|
+
xml.root.xpath('//xmlns:loc', xml.root.namespaces).map(&:content)
|
73
|
+
end
|
74
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cartographer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Erik Hollensbe
|
9
|
+
- Team Zetetic
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2011-03-26 00:00:00 -04:00
|
15
|
+
default_executable:
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: haml
|
19
|
+
prerelease: false
|
20
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
none: false
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "0"
|
26
|
+
type: :runtime
|
27
|
+
version_requirements: *id001
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: minitest
|
30
|
+
prerelease: false
|
31
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: "0"
|
37
|
+
type: :development
|
38
|
+
version_requirements: *id002
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: hoe-roodi
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id003
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: hoe-reek
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id004
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: hoe-git
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "0"
|
70
|
+
type: :development
|
71
|
+
version_requirements: *id005
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: nokogiri
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: "0"
|
81
|
+
type: :development
|
82
|
+
version_requirements: *id006
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: hoe
|
85
|
+
prerelease: false
|
86
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 2.9.1
|
92
|
+
type: :development
|
93
|
+
version_requirements: *id007
|
94
|
+
description: |-
|
95
|
+
Assists in the creation of sitemaps that google, yahoo, etc, use. Has finding,
|
96
|
+
rewriting, and attribute manipulation before generation. Does not require any
|
97
|
+
external dependency other than haml.
|
98
|
+
email:
|
99
|
+
- erik@hollensbe.org
|
100
|
+
- support@zetetic.net
|
101
|
+
executables: []
|
102
|
+
|
103
|
+
extensions: []
|
104
|
+
|
105
|
+
extra_rdoc_files:
|
106
|
+
- History.txt
|
107
|
+
- Manifest.txt
|
108
|
+
- README.txt
|
109
|
+
files:
|
110
|
+
- History.txt
|
111
|
+
- Manifest.txt
|
112
|
+
- README.txt
|
113
|
+
- Rakefile
|
114
|
+
- lib/cartographer.rb
|
115
|
+
- lib/xml/sitemap.haml
|
116
|
+
- lib/xml/sitemap_uri.haml
|
117
|
+
- test/test_cartographer.rb
|
118
|
+
- .gemtest
|
119
|
+
has_rdoc: true
|
120
|
+
homepage: http://github.com/erikh/cartographer/
|
121
|
+
licenses: []
|
122
|
+
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options:
|
125
|
+
- --main
|
126
|
+
- README.txt
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: "0"
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: "0"
|
141
|
+
requirements: []
|
142
|
+
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 1.6.2
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: Assists in the creation of sitemaps that google, yahoo, etc, use
|
148
|
+
test_files:
|
149
|
+
- test/test_cartographer.rb
|