sitemap 0.1b2 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,9 +2,23 @@
2
2
 
3
3
  A simple ruby on rails sitemap generator.
4
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
+
5
19
  == Usage
6
20
 
7
- Create a sitemap.rb file in your config directory. Paths can be indexed as follows:
21
+ In your sitemap config file, paths can be indexed as follows:
8
22
 
9
23
  Sitemap::Generator.instance.load :host => "mywebsite.com" do
10
24
  path :root, :priority => 1
@@ -23,6 +37,16 @@ Ping search engines:
23
37
 
24
38
  rake sitemap:ping
25
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
+ == Limitations
47
+
48
+ Sitemaps can only have up to 50000 urls and an uncompressed size of 10MB. This issue will be resolved in a future release.
49
+
26
50
  == License
27
51
 
28
52
  This package is licensed under the MIT license and/or the Creative
@@ -0,0 +1,2 @@
1
+ Description:
2
+ Create sample sitemap config file.
@@ -0,0 +1,17 @@
1
+ module Sitemap
2
+
3
+ module Generators
4
+
5
+ class InstallGenerator < Rails::Generators::Base
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_config
10
+ copy_file "sitemap.rb", "config/sitemap.rb"
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,26 @@
1
+ Sitemap::Generator.instance.load :host => "mywebsite.com" do
2
+
3
+ # Sample path:
4
+ # path :faq
5
+ # The specified path must exist in your routes file (usually specified through :as).
6
+
7
+ # Sample path with params:
8
+ # path :faq, :params => { :format => "html", :filter => "recent" }
9
+ # Depending on the route, the resolved url could be http://mywebsite.com/frequent-questions.html?filter=recent.
10
+
11
+ # Sample resource:
12
+ # resources :articles
13
+
14
+ # Sample resource with custom objects:
15
+ # resources :articles, :objects => proc { Article.published }
16
+
17
+ # Sample resource with search options:
18
+ # resources :articles, :priority => 0.8, :change_frequency => "monthly"
19
+
20
+ # Sample resource with block options:
21
+ # resources :activities,
22
+ # :skip_index => true,
23
+ # :updated_at => proc { |activity| activity.published_at.strftime("%Y-%m-%d") }
24
+ # :params => { :subdomain => proc { |activity| activity.location } }
25
+
26
+ end
@@ -9,6 +9,7 @@ require "singleton"
9
9
  require "builder"
10
10
  require "sitemap/railtie"
11
11
  require "sitemap/ping"
12
+ require "sitemap/generator"
12
13
 
13
14
  module Sitemap
14
15
 
@@ -23,146 +24,4 @@ module Sitemap
23
24
  }
24
25
  }
25
26
 
26
- class Generator
27
-
28
- include Singleton
29
-
30
- SEARCH_ATTRIBUTES = {
31
- :updated_at => "lastmod",
32
- :change_frequency => "changefreq",
33
- :priority => "priority"
34
- }
35
-
36
- attr_accessor :entries, :host, :routes
37
-
38
- # Instantiates a new object.
39
- # Should never be called directly.
40
- def initialize
41
- self.class.send(:include, Rails.application.routes.url_helpers)
42
- self.entries = []
43
- end
44
-
45
- # Sets the urls to be indexed.
46
- #
47
- # The +host+, or any other global option can be set here:
48
- #
49
- # Sitemap::Generator.instance.load :host => "mywebsite.com" do
50
- # ...
51
- # end
52
- #
53
- # Simple paths can be added as follows:
54
- #
55
- # Sitemap::Generator.instance.load :host => "mywebsite.com" do
56
- # path :faq
57
- # end
58
- #
59
- # Object collections are supported too:
60
- #
61
- # Sitemap::Generator.instance.load :host => "mywebsite.com" do
62
- # resources :activities
63
- # end
64
- #
65
- # Search options such as frequency and priority can be declared as an options hash:
66
- #
67
- # Sitemap::Generator.instance.load :host => "mywebsite.com" do
68
- # path :root, :priority => 1
69
- # path :faq, :priority => 0.8, :change_frequency => "daily"
70
- # resources :activities, :change_frequency => "weekly"
71
- # end
72
- #
73
- def load(options = {}, &block)
74
- options.each do |k, v|
75
- self.send("#{k}=", v)
76
- end
77
- self.routes = block
78
- end
79
-
80
- # Adds the specified url or object (such as an ActiveRecord model instance).
81
- # In either case the data is being looked up in the current application routes.
82
- #
83
- # Params can be specified as follows:
84
- #
85
- # # config/routes.rb
86
- # match "/frequent-questions" => "static#faq", :as => "faq"
87
- #
88
- # # config/sitemap.rb
89
- # path :faq, :params => { :filter => "recent" }
90
- #
91
- # The resolved url would be <tt>http://mywebsite.com/frequent-questions?filter=recent</tt>.
92
- #
93
- def path(object, options = {})
94
- params = Sitemap.defaults[:params].clone.merge!(options[:params] || {})
95
- params[:host] ||= host # Use global host if none was specified.
96
- params.merge!(params) { |type, value| get_data(object, value) }
97
-
98
- search = Sitemap.defaults[:search].clone.merge!(options.select { |k, v| SEARCH_ATTRIBUTES.keys.include?(k) })
99
- search.merge!(search) { |type, value| get_data(object, value) }
100
-
101
- self.entries << {
102
- :object => object,
103
- :search => search,
104
- :params => params
105
- }
106
- end
107
-
108
- # Adds the associated object types.
109
- #
110
- # The following will map all Activity entries, as well as the index (<tt>/activities</tt>) page:
111
- #
112
- # resources :activities
113
- #
114
- # You can also specify which entries are being mapped:
115
- #
116
- # resources :articles, :objects => proc { Article.published }
117
- #
118
- # To skip the index action and map only the records:
119
- #
120
- # resources :articles, :skip_index => true
121
- #
122
- # As with the path, you can specify params through the +params+ options hash.
123
- # The params can also be build conditionally by using a +proc+:
124
- #
125
- # resources :activities, :params => { :host => proc { |activity| [activity.location, host].join(".") } }, :skip_index => true
126
- #
127
- # In this case the host will change based the each of the objects associated +location+ attribute.
128
- # Because the index page doesn't have this attribute it's best to skip it.
129
- #
130
- def resources(type, options = {})
131
- path(type) unless options[:skip_index]
132
- objects = options[:objects] ? options[:objects].call : type.to_s.classify.constantize.all
133
- options.reject! { |k, v| k == :objects }
134
-
135
- objects.each do |object|
136
- path(object, options)
137
- end
138
- end
139
-
140
- # Parses the loaded data and returns the xml entries.
141
- def build
142
- instance_exec(self, &routes)
143
- xml = Builder::XmlMarkup.new(:indent => 2)
144
- file = File.read(File.expand_path("../views/index.xml.builder", __FILE__))
145
- instance_eval file
146
- end
147
-
148
- # Builds xml entries and saves the data to the specified location.
149
- def save(location)
150
- file = File.new(location, "w")
151
- file.write(build)
152
- file.close
153
- end
154
-
155
- # URL to the <tt>sitemap.xml</tt> file.
156
- def file_url
157
- URI::HTTP.build(:host => host, :path => "/sitemap.xml").to_s
158
- end
159
-
160
- private
161
-
162
- def get_data(object, data)
163
- data.is_a?(Proc) ? data.call(object) : data
164
- end
165
-
166
- end
167
-
168
27
  end
@@ -0,0 +1,145 @@
1
+ module Sitemap
2
+
3
+ class Generator
4
+
5
+ include Singleton
6
+
7
+ SEARCH_ATTRIBUTES = {
8
+ :updated_at => "lastmod",
9
+ :change_frequency => "changefreq",
10
+ :priority => "priority"
11
+ }
12
+
13
+ attr_accessor :entries, :host, :routes
14
+
15
+ # Instantiates a new object.
16
+ # Should never be called directly.
17
+ def initialize
18
+ self.class.send(:include, Rails.application.routes.url_helpers)
19
+ self.entries = []
20
+ end
21
+
22
+ # Sets the urls to be indexed.
23
+ #
24
+ # The +host+, or any other global option can be set here:
25
+ #
26
+ # Sitemap::Generator.instance.load :host => "mywebsite.com" do
27
+ # ...
28
+ # end
29
+ #
30
+ # Simple paths can be added as follows:
31
+ #
32
+ # Sitemap::Generator.instance.load :host => "mywebsite.com" do
33
+ # path :faq
34
+ # end
35
+ #
36
+ # Object collections are supported too:
37
+ #
38
+ # Sitemap::Generator.instance.load :host => "mywebsite.com" do
39
+ # resources :activities
40
+ # end
41
+ #
42
+ # Search options such as frequency and priority can be declared as an options hash:
43
+ #
44
+ # Sitemap::Generator.instance.load :host => "mywebsite.com" do
45
+ # path :root, :priority => 1
46
+ # path :faq, :priority => 0.8, :change_frequency => "daily"
47
+ # resources :activities, :change_frequency => "weekly"
48
+ # end
49
+ #
50
+ def load(options = {}, &block)
51
+ options.each do |k, v|
52
+ self.send("#{k}=", v)
53
+ end
54
+ self.routes = block
55
+ end
56
+
57
+ # Adds the specified url or object (such as an ActiveRecord model instance).
58
+ # In either case the data is being looked up in the current application routes.
59
+ #
60
+ # Params can be specified as follows:
61
+ #
62
+ # # config/routes.rb
63
+ # match "/frequent-questions" => "static#faq", :as => "faq"
64
+ #
65
+ # # config/sitemap.rb
66
+ # path :faq, :params => { :filter => "recent" }
67
+ #
68
+ # The resolved url would be <tt>http://mywebsite.com/frequent-questions?filter=recent</tt>.
69
+ #
70
+ def path(object, options = {})
71
+ params = Sitemap.defaults[:params].clone.merge!(options[:params] || {})
72
+ params[:host] ||= host # Use global host if none was specified.
73
+ params.merge!(params) { |type, value| get_data(object, value) }
74
+
75
+ search = Sitemap.defaults[:search].clone.merge!(options.select { |k, v| SEARCH_ATTRIBUTES.keys.include?(k) })
76
+ search.merge!(search) { |type, value| get_data(object, value) }
77
+
78
+ self.entries << {
79
+ :object => object,
80
+ :search => search,
81
+ :params => params
82
+ }
83
+ end
84
+
85
+ # Adds the associated object types.
86
+ #
87
+ # The following will map all Activity entries, as well as the index (<tt>/activities</tt>) page:
88
+ #
89
+ # resources :activities
90
+ #
91
+ # You can also specify which entries are being mapped:
92
+ #
93
+ # resources :articles, :objects => proc { Article.published }
94
+ #
95
+ # To skip the index action and map only the records:
96
+ #
97
+ # resources :articles, :skip_index => true
98
+ #
99
+ # As with the path, you can specify params through the +params+ options hash.
100
+ # The params can also be build conditionally by using a +proc+:
101
+ #
102
+ # resources :activities, :params => { :host => proc { |activity| [activity.location, host].join(".") } }, :skip_index => true
103
+ #
104
+ # In this case the host will change based the each of the objects associated +location+ attribute.
105
+ # Because the index page doesn't have this attribute it's best to skip it.
106
+ #
107
+ def resources(type, options = {})
108
+ path(type) unless options[:skip_index]
109
+ objects = options[:objects] ? options[:objects].call : type.to_s.classify.constantize.all
110
+ options.reject! { |k, v| k == :objects }
111
+
112
+ objects.each do |object|
113
+ path(object, options)
114
+ end
115
+ end
116
+
117
+ # Parses the loaded data and returns the xml entries.
118
+ def build
119
+ instance_exec(self, &routes)
120
+ xml = Builder::XmlMarkup.new(:indent => 2)
121
+ file = File.read(File.expand_path("../../views/index.xml.builder", __FILE__))
122
+ instance_eval file
123
+ end
124
+
125
+ # Builds xml entries and saves the data to the specified location.
126
+ def save(location)
127
+ file = File.new(location, "w")
128
+ file.write(build)
129
+ file.close
130
+ end
131
+
132
+ # URL to the <tt>sitemap.xml</tt> file.
133
+ def file_url
134
+ URI::HTTP.build(:host => host, :path => "/sitemap.xml").to_s
135
+ end
136
+
137
+ private
138
+
139
+ def get_data(object, data)
140
+ data.is_a?(Proc) ? data.call(object) : data
141
+ end
142
+
143
+ end
144
+
145
+ end
@@ -7,7 +7,6 @@ module Sitemap
7
7
 
8
8
  SEARCH_ENGINES = {
9
9
  "Google" => "http://www.google.com/webmasters/tools/ping?sitemap=%s",
10
- "Yahoo!" => "http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=SitemapWriter&url=%s",
11
10
  "Ask.com" => "http://submissions.ask.com/ping?sitemap=%s",
12
11
  "Bing" => "http://www.bing.com/webmaster/ping.aspx?siteMap=%s"
13
12
  }
@@ -2,7 +2,7 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), "lib")
2
2
 
3
3
  spec = Gem::Specification.new do |spec|
4
4
  spec.name = "sitemap"
5
- spec.version = "0.1b2"
5
+ spec.version = "0.1"
6
6
  spec.summary = "Sitemap"
7
7
  spec.description = "A simple ruby on rails sitemap generator"
8
8
 
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitemap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1b2
5
- prerelease: 3
4
+ version: '0.1'
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Daniel Mircea
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-03 00:00:00.000000000Z
12
+ date: 2011-09-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
16
- requirement: &14319520 !ruby/object:Gem::Requirement
16
+ requirement: &17823580 !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: *14319520
24
+ version_requirements: *17823580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &14319100 !ruby/object:Gem::Requirement
27
+ requirement: &17823140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *14319100
35
+ version_requirements: *17823140
36
36
  description: A simple ruby on rails sitemap generator
37
37
  email: daniel@viseztrance.com
38
38
  executables: []
@@ -41,9 +41,13 @@ extra_rdoc_files:
41
41
  - README.rdoc
42
42
  - LICENSE
43
43
  files:
44
+ - lib/generators/sitemap/USAGE
45
+ - lib/generators/sitemap/templates/sitemap.rb
46
+ - lib/generators/sitemap/install_generator.rb
44
47
  - lib/views/index.xml.builder
45
48
  - lib/sitemap.rb
46
49
  - lib/sitemap/railtie.rb
50
+ - lib/sitemap/generator.rb
47
51
  - lib/sitemap/ping.rb
48
52
  - lib/tasks/sitemap.rake
49
53
  - README.rdoc
@@ -73,9 +77,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
77
  required_rubygems_version: !ruby/object:Gem::Requirement
74
78
  none: false
75
79
  requirements:
76
- - - ! '>'
80
+ - - ! '>='
77
81
  - !ruby/object:Gem::Version
78
- version: 1.3.1
82
+ version: '0'
79
83
  requirements: []
80
84
  rubyforge_project:
81
85
  rubygems_version: 1.8.8