sitemap_generator 1.2.3 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.3
1
+ 1.3.1
@@ -1,6 +1,7 @@
1
1
  require 'builder'
2
2
  require 'zlib'
3
- require 'action_view'
3
+ require 'action_view' # for number_to_human_size
4
+ require 'fileutils'
4
5
 
5
6
  module SitemapGenerator
6
7
  module Builder
@@ -111,6 +112,14 @@ module SitemapGenerator
111
112
  def finalize!
112
113
  raise SitemapGenerator::SitemapFinalized if self.finalized?
113
114
 
115
+ # Ensure that the directory exists
116
+ dir = File.dirname(self.full_path)
117
+ if !File.exists?(dir)
118
+ FileUtils.mkdir_p(dir)
119
+ elsif !File.directory?(dir)
120
+ raise SitemapError.new("#{dir} should be a directory!")
121
+ end
122
+
114
123
  open(self.full_path, 'wb') do |file|
115
124
  gz = Zlib::GzipWriter.new(file)
116
125
  gz.write @xml_wrapper_start
@@ -11,18 +11,30 @@ module SitemapGenerator
11
11
  include ActionController::UrlWriter
12
12
  end
13
13
 
14
- def initialize(sitemap_config_file=nil)
15
- sitemap_config_file ||= File.join(::Rails.root, 'config/sitemap.rb')
16
- eval(open(sitemap_config_file).read)
14
+ # Call with a block to evaluate a dynamic config. The only method exposed for you is
15
+ # `add` to add a link to the sitemap object attached to this interpreter.
16
+ #
17
+ # @param sitemap a sitemap object
18
+ # @param sitemap_config_file full path to the config file (default is config/sitemap.rb)
19
+ def initialize(sitemap, sitemap_config_file=nil, &block)
20
+ @sitemap = sitemap
21
+ if block_given?
22
+ instance_eval(&block)
23
+ else
24
+ sitemap_config_file ||= File.join(::Rails.root, 'config/sitemap.rb')
25
+ config = open(sitemap_config_file).read
26
+ eval(config)
27
+ end
17
28
  end
18
29
 
19
- # KJV do we need this? We should be using path_* helpers.
20
- # def self.default_url_options(options = nil)
21
- # { :host => SitemapGenerator::Sitemap.default_host }
22
- # end
30
+ def add(*args)
31
+ @sitemap.add(*args)
32
+ end
23
33
 
34
+ # Evaluate the sitemap config file in this namespace which includes the
35
+ # URL helpers.
24
36
  def self.run
25
- new
37
+ new(SitemapGenerator::Sitemap)
26
38
  end
27
39
  end
28
40
  end
@@ -7,7 +7,7 @@ module SitemapGenerator
7
7
  class LinkSet
8
8
  include ActionView::Helpers::NumberHelper # for number_with_delimiter
9
9
 
10
- attr_accessor :default_host, :public_path, :sitemaps_path
10
+ attr_reader :default_host, :public_path, :sitemaps_path
11
11
  attr_accessor :sitemap, :sitemap_index
12
12
  attr_accessor :verbose, :yahoo_app_id
13
13
 
@@ -18,26 +18,25 @@ module SitemapGenerator
18
18
  #
19
19
  # TODO: Refactor so that we can have multiple instances
20
20
  # of LinkSet.
21
- def create
21
+ def create(&block)
22
22
  require 'sitemap_generator/interpreter'
23
23
 
24
- self.public_path = File.join(::Rails.root, 'public/') if self.public_path.nil?
25
-
26
- # Default host is not set yet. Set it on these objects when `add_links` is called
27
- self.sitemap_index = SitemapGenerator::Builder::SitemapIndexFile.new(public_path, sitemap_index_path)
28
- self.sitemap = SitemapGenerator::Builder::SitemapFile.new(public_path, new_sitemap_path)
29
-
30
24
  start_time = Time.now
31
- SitemapGenerator::Interpreter.run
25
+ if self.sitemap_index.finalized?
26
+ self.sitemap_index = SitemapGenerator::Builder::SitemapIndexFile.new(@public_path, sitemap_index_path)
27
+ self.sitemap = SitemapGenerator::Builder::SitemapFile.new(@public_path, new_sitemap_path)
28
+ end
29
+
30
+ SitemapGenerator::Interpreter.new(self, &block)
32
31
  unless self.sitemap.finalized?
33
32
  self.sitemap_index.add(self.sitemap)
34
33
  puts self.sitemap.summary if verbose
35
34
  end
36
35
  self.sitemap_index.finalize!
37
36
  end_time = Time.now
38
-
37
+
39
38
  if verbose
40
- puts self.sitemap_index.summary
39
+ puts self.sitemap_index.summary
41
40
  puts "\nSitemap stats: #{number_with_delimiter(self.sitemap_index.total_link_count)} links / #{self.sitemap_index.sitemaps.size} sitemaps / " +
42
41
  ("%dm%02ds" % (end_time - start_time).divmod(60))
43
42
  end
@@ -54,9 +53,15 @@ module SitemapGenerator
54
53
  # <tt>default_host</tt> hostname including protocol to use in all sitemap links
55
54
  # e.g. http://en.google.ca
56
55
  def initialize(public_path = nil, sitemaps_path = nil, default_host = nil)
57
- self.default_host = default_host
58
- self.public_path = public_path
59
- self.sitemaps_path = sitemaps_path
56
+ @default_host = default_host
57
+ @public_path = public_path
58
+ @sitemaps_path = sitemaps_path
59
+
60
+ @public_path = File.join(::Rails.root, 'public/') if @public_path.nil?
61
+
62
+ # Default host is not set yet. Set it on these objects when `add_links` is called
63
+ self.sitemap_index = SitemapGenerator::Builder::SitemapIndexFile.new(@public_path, sitemap_index_path)
64
+ self.sitemap = SitemapGenerator::Builder::SitemapFile.new(@public_path, new_sitemap_path)
60
65
  end
61
66
 
62
67
  # Entry point for users.
@@ -132,7 +137,25 @@ module SitemapGenerator
132
137
  def link_count
133
138
  self.sitemap_index.total_link_count
134
139
  end
135
-
140
+
141
+ def default_host=(value)
142
+ @default_host = value
143
+ self.sitemap_index.hostname = value unless self.sitemap_index.finalized?
144
+ self.sitemap.hostname = value unless self.sitemap.finalized?
145
+ end
146
+
147
+ def public_path=(value)
148
+ @public_path = value
149
+ self.sitemap_index.public_path = value unless self.sitemap_index.finalized?
150
+ self.sitemap.public_path = value unless self.sitemap.finalized?
151
+ end
152
+
153
+ def sitemaps_path=(value)
154
+ @sitemaps_path = value
155
+ self.sitemap_index.sitemap_path = sitemap_index_path unless self.sitemap_index.finalized?
156
+ self.sitemap.sitemap_path = new_sitemap_path unless self.sitemap.finalized?
157
+ end
158
+
136
159
  protected
137
160
 
138
161
  # Return the current sitemap filename with index.
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 2
9
8
  - 3
10
- version: 1.2.3
9
+ - 1
10
+ version: 1.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Karl Varga
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-10-25 00:00:00 -07:00
19
+ date: 2010-11-02 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency