sitemap 0.2 → 0.3

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.
@@ -0,0 +1,77 @@
1
+ # Sitemap
2
+
3
+ A simple ruby on rails sitemap generator.
4
+
5
+ ## Instalation
6
+
7
+ Install the gem:
8
+
9
+ ```ruby
10
+ gem install sitemap
11
+ ```
12
+
13
+ Or as a plugin:
14
+
15
+ ```ruby
16
+ rails plugin install git://github.com/viseztrance/rails-sitemap.git
17
+ ```
18
+
19
+ Then create the initial config file:
20
+
21
+ ```ruby
22
+ rails g sitemap:install
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ In your sitemap config file, paths can be indexed as follows:
28
+
29
+ ```ruby
30
+ Sitemap::Generator.instance.load :host => "mywebsite.com" do
31
+ path :root, :priority => 1
32
+ path :faq, :priority => 0.5, :change_frequency => "weekly"
33
+ resources :activities, :params => { :format => "html" }
34
+ resources :articles, :objects => proc { Article.published }
35
+ end
36
+ ```
37
+
38
+ Please read the docs for a more comprehensive list of options.
39
+
40
+ Building the sitemap:
41
+
42
+ ```ruby
43
+ rake sitemap:generate
44
+ ```
45
+
46
+ Ping search engines:
47
+
48
+ ```ruby
49
+ rake sitemap:ping
50
+ ```
51
+
52
+ ## Setting defaults
53
+
54
+ You may change the defaults for either *params* or *search* options as follows:
55
+
56
+ ```ruby
57
+ Sitemap.configure do |config|
58
+ config.params_format = "html"
59
+ config.search_change_frequency = "monthly"
60
+ end
61
+ ```
62
+
63
+ ## Large sites
64
+
65
+ Google imposes a limit of 50000 entries per sitemap and maximum size of 10 MB. To comply with these rules,
66
+ sitemaps having over 10.000 urls are being split into multiple files. You can change this value by overriding the max urls value:
67
+
68
+ ```ruby
69
+ Sitemap.configure do |config|
70
+ config.max_urls = 50000
71
+ end
72
+ ```
73
+
74
+ ## License
75
+
76
+ This package is licensed under the MIT license and/or the Creative
77
+ Commons Attribution-ShareAlike.
data/Rakefile CHANGED
@@ -1,37 +1,9 @@
1
- require "rake/rdoctask"
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
2
3
  require "rake/testtask"
3
4
 
4
- spec = Gem::Specification.load(File.expand_path("sitemap.gemspec", File.dirname(__FILE__)))
5
-
6
- desc "Default: run sitemap unit tests."
7
5
  task :default => :test
8
6
 
9
- desc "Test the sitemap plugin."
10
- Rake::TestTask.new(:test) do |t|
11
- t.libs << "lib"
12
- t.pattern = "test/**/*_test.rb"
13
- t.verbose = true
14
- end
15
-
16
- # Create the documentation.
17
- Rake::RDocTask.new do |rdoc|
18
- rdoc.rdoc_files.include "README.rdoc", "lib/**/*.rb"
19
- rdoc.options = spec.rdoc_options
20
- end
21
-
22
- desc "Push new release to rubyforge and git tag"
23
- task :push do
24
- sh "git push"
25
- puts "Tagging version #{spec.version} .."
26
- sh "git tag v#{spec.version}"
27
- sh "git push --tag"
28
- puts "Building and pushing gem .."
29
- sh "gem build #{spec.name}.gemspec"
30
- sh "gem push #{spec.name}-#{spec.version}.gem"
31
- end
32
-
33
- desc "Install #{spec.name} locally"
34
- task :install do
35
- sh "gem build #{spec.name}.gemspec"
36
- sh "gem install #{spec.name}-#{spec.version}.gem"
7
+ Rake::TestTask.new do |t|
8
+ t.pattern = "spec/**/*_spec.rb"
37
9
  end
@@ -7,6 +7,8 @@
7
7
 
8
8
  require "singleton"
9
9
  require "builder"
10
+ require "sitemap/version"
11
+ require "sitemap/configuration"
10
12
  require "sitemap/railtie"
11
13
  require "sitemap/ping"
12
14
  require "sitemap/store"
@@ -14,19 +16,25 @@ require "sitemap/generator"
14
16
 
15
17
  module Sitemap
16
18
 
17
- VERSION = Gem::Specification.load(File.expand_path("../sitemap.gemspec", File.dirname(__FILE__))).version.to_s
19
+ def self.configuration
20
+ @configuration ||= Configuration.new
21
+ end
18
22
 
19
- mattr_accessor :defaults
23
+ def self.configure
24
+ yield configuration
25
+ end
20
26
 
21
- self.defaults = {
22
- :params => {},
23
- :search => {
24
- :updated_at => proc { |obj|
25
- obj.updated_at.strftime("%Y-%m-%d") if obj.respond_to?(:updated_at)
26
- }
27
- },
28
- :query_batch_size => 500,
29
- :max_urls => 10000
30
- }
27
+ # mattr_accessor :defaults
28
+
29
+ # self.defaults = {
30
+ # :params => {},
31
+ # :search => {
32
+ # :updated_at => proc { |obj|
33
+ # obj.updated_at.strftime("%Y-%m-%d") if obj.respond_to?(:updated_at)
34
+ # }
35
+ # },
36
+ # :query_batch_size => 500,
37
+ # :max_urls => 10000
38
+ # }
31
39
 
32
40
  end
@@ -0,0 +1,66 @@
1
+ module Sitemap
2
+
3
+ class Configuration
4
+
5
+ module Defaults
6
+
7
+ PARAMS = {}.freeze
8
+
9
+ SEARCH = {
10
+ :updated_at => proc { |obj|
11
+ obj.updated_at.strftime("%Y-%m-%d") if obj.respond_to?(:updated_at)
12
+ }
13
+ }.freeze
14
+
15
+ QUERY_BATCH_SIZE = 500
16
+
17
+ MAX_URLS = 10000
18
+
19
+ end
20
+
21
+ attr_accessor :data
22
+
23
+ def initialize
24
+ reset
25
+ end
26
+
27
+ def reset
28
+ self.data = {
29
+ :params => Defaults::PARAMS.dup,
30
+ :search => Defaults::SEARCH.dup,
31
+ :query_batch_size => Defaults::QUERY_BATCH_SIZE,
32
+ :max_urls => Defaults::MAX_URLS
33
+ }
34
+ end
35
+
36
+ def params
37
+ data[:params]
38
+ end
39
+
40
+ def search
41
+ data[:search]
42
+ end
43
+
44
+ def method_missing(method, *args, &block)
45
+ if /^(?<prefix>search|params)?_?(?<name>[a-z\_]+)(?<setter>=)?/ =~ method
46
+ if prefix
47
+ if setter
48
+ self.data[prefix.to_sym][name.to_sym] = args.first
49
+ else
50
+ data[prefix.to_sym][name.to_sym]
51
+ end
52
+ else
53
+ if setter
54
+ self.data[name.to_sym] = args.first
55
+ else
56
+ data[name.to_sym]
57
+ end
58
+ end
59
+ else
60
+ super(method, *args, &block)
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -17,7 +17,7 @@ module Sitemap
17
17
  def initialize
18
18
  self.class.send(:include, Rails.application.routes.url_helpers)
19
19
  self.fragments = []
20
- self.store = Store.new(:max_entries => Sitemap.defaults[:max_urls])
20
+ self.store = Store.new(:max_entries => Sitemap.configuration.max_urls)
21
21
  self.store.before_reset do |entries|
22
22
  self.process_fragment!
23
23
  end
@@ -72,11 +72,11 @@ module Sitemap
72
72
  # The resolved url would be <tt>http://mywebsite.com/frequent-questions?filter=recent</tt>.
73
73
  #
74
74
  def path(object, options = {})
75
- params = Sitemap.defaults[:params].clone.merge!(options[:params] || {})
75
+ params = Sitemap.configuration.params.clone.merge!(options[:params] || {})
76
76
  params[:host] ||= host # Use global host if none was specified.
77
77
  params.merge!(params) { |type, value| get_data(object, value) }
78
78
 
79
- search = Sitemap.defaults[:search].clone.merge!(options.select { |k, v| SEARCH_ATTRIBUTES.keys.include?(k) })
79
+ search = Sitemap.configuration.search.clone.merge!(options.select { |k, v| SEARCH_ATTRIBUTES.keys.include?(k) })
80
80
  search.merge!(search) { |type, value| get_data(object, value) }
81
81
 
82
82
  self.store << {
@@ -114,7 +114,7 @@ module Sitemap
114
114
  get_objects = lambda {
115
115
  options[:objects] ? options[:objects].call : type.to_s.classify.constantize
116
116
  }
117
- get_objects.call.find_each(:batch_size => Sitemap.defaults[:query_batch_size]) do |object|
117
+ get_objects.call.find_each(:batch_size => Sitemap.configuration.query_batch_size) do |object|
118
118
  path(object, link_params)
119
119
  end
120
120
  end
@@ -0,0 +1,5 @@
1
+ module Sitemap
2
+
3
+ VERSION = "0.3"
4
+
5
+ end
@@ -10,6 +10,7 @@ namespace :sitemap do
10
10
  path = File.join(Rails.public_path, "sitemap.xml")
11
11
  Sitemap::Generator.instance.build!
12
12
  Sitemap::Generator.instance.save path
13
+ File.chmod(0755,path)
13
14
  end
14
15
 
15
16
  desc "Ping engines."
@@ -1,8 +1,8 @@
1
- $LOAD_PATH << File.join(File.dirname(__FILE__), "lib")
1
+ require File.expand_path('../lib/sitemap/version', __FILE__)
2
2
 
3
3
  spec = Gem::Specification.new do |spec|
4
4
  spec.name = "sitemap"
5
- spec.version = "0.2"
5
+ spec.version = Sitemap::VERSION
6
6
  spec.summary = "Sitemap"
7
7
  spec.description = "A simple ruby on rails sitemap generator"
8
8
 
@@ -12,13 +12,12 @@ spec = Gem::Specification.new do |spec|
12
12
 
13
13
  spec.add_development_dependency "sqlite3"
14
14
  spec.add_development_dependency "nokogiri"
15
+ spec.add_development_dependency "minitest"
16
+ spec.add_development_dependency "rails", ">= 3.0.0"
17
+ spec.add_development_dependency "nokogiri"
15
18
 
16
- spec.files = Dir["{lib,docs}/**/*"] + ["README.rdoc", "LICENSE", "Rakefile", "sitemap.gemspec"]
19
+ spec.files = Dir["{lib,docs}/**/*"] + ["README.md", "LICENSE", "Rakefile", "sitemap.gemspec"]
17
20
  spec.test_files = Dir["test/**/*"]
18
21
  spec.require_paths = ["lib"]
19
22
 
20
- spec.has_rdoc = true
21
- spec.rdoc_options << "--main" << "README.rdoc" << "--title" << "Sitemap" << "--line-numbers"
22
- "--webcvs" << "http://github.com/viseztrance/rails-sitemap"
23
- spec.extra_rdoc_files = ["README.rdoc", "LICENSE"]
24
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitemap
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-08 00:00:00.000000000Z
12
+ date: 2012-05-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
16
- requirement: &18070900 !ruby/object:Gem::Requirement
16
+ requirement: &20303660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *18070900
24
+ version_requirements: *20303660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &18069960 !ruby/object:Gem::Requirement
27
+ requirement: &20303240 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,43 +32,67 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *18069960
35
+ version_requirements: *20303240
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest
38
+ requirement: &20302820 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *20302820
47
+ - !ruby/object:Gem::Dependency
48
+ name: rails
49
+ requirement: &20302320 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *20302320
58
+ - !ruby/object:Gem::Dependency
59
+ name: nokogiri
60
+ requirement: &20301900 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *20301900
36
69
  description: A simple ruby on rails sitemap generator
37
70
  email: daniel@viseztrance.com
38
71
  executables: []
39
72
  extensions: []
40
- extra_rdoc_files:
41
- - README.rdoc
42
- - LICENSE
73
+ extra_rdoc_files: []
43
74
  files:
44
75
  - lib/tasks/sitemap.rake
45
76
  - lib/sitemap/ping.rb
46
77
  - lib/sitemap/railtie.rb
47
78
  - lib/sitemap/store.rb
79
+ - lib/sitemap/configuration.rb
48
80
  - lib/sitemap/generator.rb
81
+ - lib/sitemap/version.rb
49
82
  - lib/views/index.xml.builder
50
83
  - lib/views/fragment.xml.builder
51
84
  - lib/sitemap.rb
52
85
  - lib/generators/sitemap/USAGE
53
86
  - lib/generators/sitemap/install_generator.rb
54
87
  - lib/generators/sitemap/templates/sitemap.rb
55
- - README.rdoc
88
+ - README.md
56
89
  - LICENSE
57
90
  - Rakefile
58
91
  - sitemap.gemspec
59
- - test/singleton.rb
60
- - test/setup.rb
61
- - test/store_test.rb
62
- - test/sitemap_test.rb
63
92
  homepage: http://github.com/viseztrance/rails-sitemap
64
93
  licenses: []
65
94
  post_install_message:
66
- rdoc_options:
67
- - --main
68
- - README.rdoc
69
- - --title
70
- - Sitemap
71
- - --line-numbers
95
+ rdoc_options: []
72
96
  require_paths:
73
97
  - lib
74
98
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -89,9 +113,5 @@ rubygems_version: 1.8.10
89
113
  signing_key:
90
114
  specification_version: 3
91
115
  summary: Sitemap
92
- test_files:
93
- - test/singleton.rb
94
- - test/setup.rb
95
- - test/store_test.rb
96
- - test/sitemap_test.rb
97
- has_rdoc: true
116
+ test_files: []
117
+ has_rdoc:
@@ -1,56 +0,0 @@
1
- = Sitemap
2
-
3
- A simple ruby on rails sitemap generator.
4
-
5
- == Instalation
6
-
7
- Install the gem:
8
-
9
- gem install sitemap
10
-
11
- Or as a plugin:
12
-
13
- rails plugin install git://github.com/viseztrance/rails-sitemap.git
14
-
15
- Then create the initial config file:
16
-
17
- rails g sitemap:install
18
-
19
- == Usage
20
-
21
- In your sitemap config file, paths can be indexed as follows:
22
-
23
- Sitemap::Generator.instance.load :host => "mywebsite.com" do
24
- path :root, :priority => 1
25
- path :faq, :priority => 0.5, :change_frequency => "weekly"
26
- resources :activities, :params => { :format => "html" }
27
- resources :articles, :objects => proc { Article.published }
28
- end
29
-
30
- Please read the docs for a more comprehensive list of options.
31
-
32
- Building the sitemap:
33
-
34
- rake sitemap:generate
35
-
36
- Ping search engines:
37
-
38
- rake sitemap:ping
39
-
40
- == Setting defaults
41
-
42
- You may change the defaults for either <tt>params</tt> or <tt>search</tt> options as follows:
43
-
44
- Sitemap.defaults[:params] = { :format => "html" }
45
-
46
- == Large sites
47
-
48
- Google imposes a limit of 50000 entries per sitemap and maximum size of 10 MB. To comply with these rules,
49
- sitemaps having over 10.000 urls are being split into multiple files. You can change this value by overriding the max urls value:
50
-
51
- Sitemap.defaults[:max_urls] = 50000
52
-
53
- == License
54
-
55
- This package is licensed under the MIT license and/or the Creative
56
- Commons Attribution-ShareAlike.
@@ -1,51 +0,0 @@
1
- module TestApp
2
-
3
- class Application < Rails::Application
4
- config.active_support.deprecation = :log
5
- end
6
-
7
- end
8
-
9
- TestApp::Application.initialize!
10
-
11
- TestApp::Application.routes.draw do
12
-
13
- root :to => "main#index"
14
-
15
- match "/questions" => "static#faq", :as => "faq"
16
-
17
- resources :activities
18
-
19
- end
20
-
21
- module SitemapTestSetup
22
-
23
- def create_db
24
- # Database
25
- ActiveRecord::Schema.define(:version => 1) do
26
- create_table :activities do |t|
27
- t.string :name
28
- t.text :contents
29
- t.string :location
30
- t.boolean :published, :default => true
31
- t.timestamps
32
- end
33
- end
34
- 1.upto(8) do |i|
35
- options = {
36
- :name => "Coding #{i}",
37
- :contents => "Lorem ipsum dolor sit",
38
- :location => "someplace-#{i}",
39
- :published => (i < 6)
40
- }
41
- Activity.create!(options)
42
- end
43
- end
44
-
45
- def drop_db
46
- ActiveRecord::Base.connection.tables.each do |table|
47
- ActiveRecord::Base.connection.drop_table(table)
48
- end
49
- end
50
-
51
- end
@@ -1,24 +0,0 @@
1
- # Reset singleton
2
- # http://blog.ardes.com/2006/12/11/testing-singletons-with-ruby
3
- class << Singleton
4
-
5
- def included_with_reset(klass)
6
-
7
- included_without_reset(klass)
8
-
9
- class << klass
10
-
11
- def reset_instance
12
- Singleton.send :__init__, self
13
- self
14
- end
15
-
16
- end
17
-
18
- end
19
-
20
- alias_method :included_without_reset, :included
21
-
22
- alias_method :included, :included_with_reset
23
-
24
- end
@@ -1,193 +0,0 @@
1
- require "test/unit"
2
- require "rubygems"
3
- require "rails"
4
- require "action_controller/railtie" # Rails 3.1
5
- require "active_record"
6
- require "nokogiri"
7
-
8
- require File.expand_path("singleton", File.dirname(__FILE__))
9
- require File.expand_path("setup", File.dirname(__FILE__))
10
- require File.expand_path("../lib/sitemap", File.dirname(__FILE__))
11
-
12
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
13
-
14
- class Activity < ActiveRecord::Base; end
15
-
16
- class SitemapTest < Test::Unit::TestCase
17
-
18
- include SitemapTestSetup
19
-
20
- def setup
21
- create_db
22
- Sitemap.defaults[:max_urls] = 10000
23
- Sitemap::Generator.reset_instance
24
- end
25
-
26
- def teardown
27
- drop_db
28
- end
29
-
30
- def test_xml_response
31
- Sitemap::Generator.instance.load(:host => "someplace.com") {}
32
- doc = Nokogiri::XML(Sitemap::Generator.instance.render)
33
- assert doc.errors.empty?
34
- assert_equal doc.root.name, "urlset"
35
- end
36
-
37
- def test_path_route
38
- urls = ["http://someplace.com/", "http://someplace.com/questions"]
39
- Sitemap::Generator.instance.load(:host => "someplace.com") do
40
- path :root
41
- path :faq
42
- end
43
- Sitemap::Generator.instance.build!
44
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
45
- elements = doc.xpath "//url/loc"
46
- assert_equal elements.length, urls.length
47
- elements.each_with_index do |element, i|
48
- assert_equal element.text, urls[i]
49
- end
50
- end
51
-
52
- def test_resources_route
53
- Sitemap::Generator.instance.load(:host => "someplace.com") do
54
- resources :activities
55
- end
56
- Sitemap::Generator.instance.build!
57
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
58
- elements = doc.xpath "//url/loc"
59
- assert_equal elements.length, Activity.count + 1
60
- assert_equal elements.first.text, "http://someplace.com/activities"
61
- elements[1..-1].each_with_index do |element, i|
62
- assert_equal element.text, "http://someplace.com/activities/#{i + 1}"
63
- end
64
- end
65
-
66
- def test_custom_resource_objects
67
- activities = proc { Activity.where(:published => true) }
68
- Sitemap::Generator.instance.load(:host => "someplace.com") do
69
- resources :activities, :objects => activities, :skip_index => true
70
- end
71
- Sitemap::Generator.instance.build!
72
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
73
- elements = doc.xpath "//url/loc"
74
- assert_equal elements.length, activities.call.length
75
- activities.call.each_with_index do |activity, i|
76
- assert_equal elements[i].text, "http://someplace.com/activities/%d" % activity.id
77
- end
78
- end
79
-
80
- def test_params_options
81
- Sitemap::Generator.instance.load(:host => "someplace.com") do
82
- path :faq, :params => { :host => "anotherplace.com", :format => "html", :filter => "recent" }
83
- end
84
- Sitemap::Generator.instance.build!
85
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
86
- elements = doc.xpath "//url/loc"
87
- assert_equal elements.first.text, "http://anotherplace.com/questions.html?filter=recent"
88
- end
89
-
90
- def test_params_blocks
91
- Sitemap::Generator.instance.load(:host => "someplace.com") do
92
- resources :activities, :skip_index => true, :params => { :host => proc { |obj| [obj.location, host].join(".") } }
93
- end
94
- activities = Activity.all
95
- Sitemap::Generator.instance.build!
96
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
97
- elements = doc.xpath "//url/loc"
98
- elements.each_with_index do |element, i|
99
- assert_equal element.text, "http://%s.someplace.com/activities/%d" % [activities[i].location, activities[i].id]
100
- end
101
- end
102
-
103
- def test_search_attribute_options
104
- Sitemap::Generator.instance.load(:host => "someplace.com") do
105
- path :faq, :priority => 1, :change_frequency => "always"
106
- resources :activities, :change_frequency => "weekly"
107
- end
108
- Sitemap::Generator.instance.build!
109
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
110
- assert_equal doc.xpath("//url/priority").first.text, "1"
111
- elements = doc.xpath "//url/changefreq"
112
- assert_equal elements[0].text, "always"
113
- elements[1..-1].each do |element|
114
- assert_equal element.text, "weekly"
115
- end
116
- end
117
-
118
- def test_search_attribute_blocks
119
- Sitemap::Generator.instance.load(:host => "someplace.com") do
120
- resources :activities, :priority => proc { |obj| obj.id <= 2 ? 1 : 0.5 }, :skip_index => true
121
- end
122
- activities = Activity.all
123
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
124
- elements = doc.xpath "//url/priority"
125
- elements.each_with_index do |element, i|
126
- value = activities[i].id <= 2 ? "1" : "0.5"
127
- assert_equal element.text, value
128
- end
129
- end
130
-
131
- def test_discards_empty_search_attributes # Empty or false (boolean).
132
- Sitemap::Generator.instance.load(:host => "someplace.com") do
133
- path :faq, :priority => "", :change_frequency => lambda { |e| return false}, :updated_at => Date.today
134
- end
135
- Sitemap::Generator.instance.build!
136
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render)
137
- assert_equal doc.xpath("//url/priority").count, 0
138
- assert_equal doc.xpath("//url/changefreq").count, 0
139
- assert_equal doc.xpath("//url/lastmod").text, Date.today.to_s
140
- end
141
-
142
- def test_file_url
143
- Sitemap::Generator.instance.load(:host => "someplace.com") {}
144
- assert_equal Sitemap::Generator.instance.file_url, "http://someplace.com/sitemap.xml"
145
- end
146
-
147
- def test_save_creates_file
148
- path = File.join(Dir.tmpdir, "sitemap.xml")
149
- File.unlink(path) if File.exist?(path)
150
- Sitemap::Generator.instance.load(:host => "someplace.com") do
151
- resources :activities
152
- end
153
- Sitemap::Generator.instance.build!
154
- Sitemap::Generator.instance.save(path)
155
- assert File.exist?(path)
156
- File.unlink(path)
157
- end
158
-
159
- def test_saves_fragments
160
- Sitemap.defaults[:max_urls] = 2
161
- Sitemap::Generator.instance.load(:host => "someplace.com") do
162
- path :root
163
- path :root
164
- path :root
165
- path :root
166
- end
167
- path = File.join(Dir.tmpdir, "sitemap.xml")
168
- root = File.join(Dir.tmpdir, "sitemaps") # Directory is being removed at the end of the test.
169
- assert !File.directory?(root)
170
- Sitemap::Generator.instance.build!
171
- Sitemap::Generator.instance.save(path)
172
- 1.upto(2) { |i|
173
- assert File.exists?(File.join(root, "sitemap-fragment-#{i}.xml"))
174
- }
175
- FileUtils.rm_rf(root)
176
- end
177
-
178
- def test_fragments_index
179
- Sitemap.defaults[:max_urls] = 2
180
- Sitemap::Generator.instance.load(:host => "someplace.com") do
181
- path :root
182
- path :root
183
- path :root
184
- path :root
185
- path :root
186
- end
187
- Sitemap::Generator.instance.build!
188
- doc = Nokogiri::HTML(Sitemap::Generator.instance.render("index"))
189
- elements = doc.xpath "//sitemap"
190
- assert_equal Sitemap::Generator.instance.fragments.length, 3
191
- end
192
-
193
- end
@@ -1,35 +0,0 @@
1
- require "test/unit"
2
- require "rubygems"
3
-
4
- class StoreTest < Test::Unit::TestCase
5
-
6
- def test_append_entries
7
- store = Sitemap::Store.new(:max_entries => 1000)
8
- 3.times { store << "contents" }
9
- assert_equal store.entries.length, 3
10
- end
11
-
12
- def test_reset_entries_limit
13
- store = Sitemap::Store.new(:max_entries => 2)
14
- 2.times { store << "contents" }
15
- assert_equal store.entries.length, 2
16
- store << "contents"
17
- assert_equal store.entries.length, 1
18
- end
19
-
20
- def test_reset_callback
21
- store = Sitemap::Store.new(:max_entries => 2)
22
- store.before_reset do |entries|
23
- store.instance_variable_set("@callback_data", entries.join(", "))
24
- end
25
- 3.times { |i| store << "item #{i + 1}" }
26
- assert_equal store.instance_variable_get("@callback_data"), "item 1, item 2"
27
- end
28
-
29
- def test_increments_reset_count
30
- store = Sitemap::Store.new(:max_entries => 2)
31
- 5.times { store << "contents" }
32
- assert_equal store.reset_count, 2
33
- end
34
-
35
- end