Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/taq/sitemapper

Creates a sitemap
https://github.com/taq/sitemapper

Last synced: 1 day ago
JSON representation

Creates a sitemap

Awesome Lists containing this project

README

        

This is a simple class to write a website sitemap file.
You can use it on two ways:

As a class

You can create a class and tell it to write the sitemap file when needed,
sending it a collection with the data to be written and optionally another one
with extra data. The extra data can be used, for example, to send static urls
that are not part of the first collection.

require "rubygems"
require "taq-sitemapper"

data = [{url: "One" , lastmod: Time.now, freq: "monthly", priority: 1},
{url: "Two" , lastmod: Time.now, freq: "monthly", priority: 1},
{url: "Three", lastmod: Time.now, freq: "monthly", priority: 1}]

extra= [{url: "Four" , lastmod: Time.now, freq: "yearly", priority: 0.5},
{url: "Five" , lastmod: Time.now, freq: "yearly", priority: 0.5},
{url: "Six" , lastmod: Time.now, freq: "yearly", priority: 0.5}]

sitemapper = SiteMapper::SiteMapper.new
sitemapper.loc = :url
sitemapper.changefreq = :freq
sitemapper.priority = :priority
sitemapper.file = "/tmp/sitemap_class.xml"
sitemapper.url = "http://localhost.com/sitemap.xml"
sitemapper.write_sitemap(data.entries)

# extra data
sitemapper.file = "/tmp/sitemap_class_extra.xml"
sitemapper.write_sitemap(data.entries,extra.entries)

The default values for the attributes are:

url = nil
loc = :loc
lastmod = :lastmod
changefreq = "daily"
priority = 1.00
file = nil

The can be changed (as above) to point to some method, attribute or static
value. For example, if your collection has an attribute called url and you
want to use it as the loc attribute, you can point that using
sitemapper.loc = :url and on the example above. It's important that the extra
collection have the same attributes as the main collection.

If the file attribute is null, no sitemap file will be written.

If the url attribute is not null, you can use the ping method to send a ping
to search engines, pointing to the sitemap on the url.

As a module

You can use it also as a module. Of course the main use for this kind of
behaviour was thinking about the use with ActiveRecord, but will (hopefully)
work on other type of collections:

require "rubygems"
require "active_record"
require "taq-sitemapper"

ActiveRecord::Base.establish_connection({
adapter: "sqlite3",
database: "../test/taq-sitemapper.sqlite"
})

class SitemapperTestAR < ActiveRecord::Base
include SiteMapper
sitemap[:file] = "/tmp/sitemap_module.xml"
sitemap[:changefreq] = :freq
sitemap[:priority] = :priority

after_save :write_sitemap

def self.sitemap_extra
[{loc: "Four", lastmod: Time.now, freq: "yearly", priority: 0.5},
{loc: "Five", lastmod: Time.now, freq: "yearly", priority: 0.5},
{loc: "Six" , lastmod: Time.now, freq: "yearly", priority: 0.5}]
end

def loc
url
end

def write_sitemap
self.class.write_sitemap
end
end
SitemapperTestAR.write_sitemap

# extra data
SitemapperTestAR.sitemap[:extra] = :sitemap_extra
SitemapperTestAR.sitemap[:file] = "/tmp/sitemap_module_extra.xml"
SitemapperTestAR.write_sitemap

SitemapperTestAR.sitemap[:file] = "/tmp/sitemap_module_extra_after_save.xml"
first = SitemapperTestAR.first
first.save

Some points here:

1 - Is inserted an attribute accessor called sitemap on the object. The same
class attributes described above are accessible there, as a hash. For
example, Object.sitemap[:file]
2 - The default for collections is the all method. If need to change it, set the
sitemap[:collection] attribute to point to the desired method.
3 - The extra collection is pointed to sitemap[:extra]. There is no need to
use these attributes if calling directly the write_sitemap method with the
collections. The extra collection method, if set, needs to be a class
method.
4 - You can use some hooks like after_save to create the sitemap after an object
is saved, see the example above.