cartographer 1.0.0 → 1.1.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/History.txt +6 -0
- data/Rakefile +3 -1
- data/lib/cartographer.rb +47 -3
- data/test/test_cartographer.rb +45 -0
- metadata +8 -8
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.1.0 / 2011-03-28
|
2
|
+
|
3
|
+
* from_xml takes sitemap.xml content and integrates it into the current Cartographer object.
|
4
|
+
* uniq! processes URLs through a uniqueness filter.
|
5
|
+
* Nokogiri is now a runtime dependency.
|
6
|
+
|
1
7
|
=== 1.0.0 / 2011-03-23
|
2
8
|
|
3
9
|
* 1 major enhancement
|
data/Rakefile
CHANGED
@@ -17,12 +17,14 @@ spec = Hoe.spec 'cartographer' do
|
|
17
17
|
self.rubyforge_name = nil
|
18
18
|
|
19
19
|
extra_deps << ['haml', '>= 0']
|
20
|
+
extra_deps << ['nokogiri', '>= 0']
|
20
21
|
|
21
22
|
extra_dev_deps << ['minitest', '>= 0']
|
22
23
|
extra_dev_deps << ['hoe-roodi', '>= 0']
|
23
24
|
extra_dev_deps << ['hoe-reek', '>= 0']
|
24
25
|
extra_dev_deps << ['hoe-git', '>= 0']
|
25
|
-
|
26
|
+
|
27
|
+
self.testlib = :minitest
|
26
28
|
end
|
27
29
|
|
28
30
|
task :install => [:gem] do
|
data/lib/cartographer.rb
CHANGED
@@ -2,6 +2,7 @@ require 'find'
|
|
2
2
|
require 'haml'
|
3
3
|
require 'uri'
|
4
4
|
require 'time'
|
5
|
+
require 'nokogiri'
|
5
6
|
|
6
7
|
#
|
7
8
|
# Cartographer is a sitemap manipulation library.
|
@@ -23,7 +24,7 @@ require 'time'
|
|
23
24
|
# See Cartographer and Cartographer::URL RDoc for more information.
|
24
25
|
#
|
25
26
|
class Cartographer
|
26
|
-
VERSION = '1.
|
27
|
+
VERSION = '1.1.0'
|
27
28
|
|
28
29
|
##
|
29
30
|
# List of Cartographer::URL objects
|
@@ -97,12 +98,40 @@ class Cartographer
|
|
97
98
|
|
98
99
|
##
|
99
100
|
#
|
100
|
-
# Transforms the given Cartographer::URL list to the sitemap XML format.
|
101
|
+
# Transforms the given Cartographer::URL list to the sitemap XML format.
|
102
|
+
#
|
103
|
+
# Be aware this does not alter the root URL structure of these elements, so
|
104
|
+
# you may have mixed sitemap content if you do not rewrite the URLs.
|
101
105
|
#
|
102
106
|
def to_xml
|
103
107
|
Haml::Engine.new(File.read(XML_TEMPLATE)).render(self)
|
104
108
|
end
|
105
109
|
|
110
|
+
##
|
111
|
+
#
|
112
|
+
# Given a string containing sitemap.xml content, parses it and adds each item
|
113
|
+
# to the URL list.
|
114
|
+
#
|
115
|
+
def from_xml(xml)
|
116
|
+
xml = Nokogiri::XML.parse(xml)
|
117
|
+
xml.root.xpath('xmlns:url').each do |url|
|
118
|
+
add Cartographer::URL.new(
|
119
|
+
:location => URI.parse(url.xpath('xmlns:loc').first.content),
|
120
|
+
:lastmod => (Time.parse(url.xpath('xmlns:lastmod').first.content) rescue Time.now),
|
121
|
+
:changefreq => (url.xpath('xmlns:changefreq').first.content rescue nil),
|
122
|
+
:priority => (url.xpath('xmlns:priority').first.content rescue nil)
|
123
|
+
)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
##
|
128
|
+
#
|
129
|
+
# Uniq's the URL list. This operation is destructive.
|
130
|
+
#
|
131
|
+
def uniq!
|
132
|
+
urls.uniq!
|
133
|
+
end
|
134
|
+
|
106
135
|
##
|
107
136
|
# Cartographer::URL is a structure to enforce the sitemap format.
|
108
137
|
#
|
@@ -125,7 +154,6 @@ class Cartographer
|
|
125
154
|
# Priority, stored as a Numeric object, from 0 to 1 with decimal values included.
|
126
155
|
attr_accessor :priority
|
127
156
|
|
128
|
-
|
129
157
|
##
|
130
158
|
#
|
131
159
|
# Constructor. Takes a hash of arguments:
|
@@ -168,5 +196,21 @@ class Cartographer
|
|
168
196
|
def to_xml
|
169
197
|
Haml::Engine.new(File.read(XML_TEMPLATE)).render(self)
|
170
198
|
end
|
199
|
+
|
200
|
+
##
|
201
|
+
# Computes a hash based off the URI.
|
202
|
+
def hash
|
203
|
+
location.hash
|
204
|
+
end
|
205
|
+
|
206
|
+
##
|
207
|
+
#
|
208
|
+
# Compares two locations and returns true/false.
|
209
|
+
#
|
210
|
+
def eql?(url2)
|
211
|
+
location == url2.location
|
212
|
+
end
|
213
|
+
|
214
|
+
alias == eql?
|
171
215
|
end
|
172
216
|
end
|
data/test/test_cartographer.rb
CHANGED
@@ -44,6 +44,19 @@ class TestCartographer < MiniTest::Unit::TestCase
|
|
44
44
|
sm.urls.map(&:location),
|
45
45
|
URI.parse("http://example.org/test_cartographer/")
|
46
46
|
)
|
47
|
+
|
48
|
+
require 'fileutils'
|
49
|
+
FileUtils.mkdir_p("test/prune_me")
|
50
|
+
|
51
|
+
sm = Cartographer.new("http://example.org")
|
52
|
+
sm.add_tree(File.expand_path("test")) { |x| x =~ /prune_me/ }
|
53
|
+
|
54
|
+
refute_includes(
|
55
|
+
sm.urls.map(&:location),
|
56
|
+
URI.parse("http://example.org/prune_me/")
|
57
|
+
)
|
58
|
+
|
59
|
+
FileUtils.rm_r("test/prune_me")
|
47
60
|
end
|
48
61
|
|
49
62
|
def test_to_xml
|
@@ -71,4 +84,36 @@ class TestCartographer < MiniTest::Unit::TestCase
|
|
71
84
|
assert_equal [ "http://example.org/", "http://example.org/test_cartographer/" ],
|
72
85
|
xml.root.xpath('//xmlns:loc', xml.root.namespaces).map(&:content)
|
73
86
|
end
|
87
|
+
|
88
|
+
def test_from_xml
|
89
|
+
sm = Cartographer.new("http://example.org")
|
90
|
+
sm.add_tree(File.expand_path("test"))
|
91
|
+
|
92
|
+
assert_includes sm.urls.map { |x| x.location.path }, "/test_cartographer.rb"
|
93
|
+
assert_equal 1, sm.urls.select { |x| x.location.path == "/test_cartographer.rb" }.length
|
94
|
+
|
95
|
+
sm2 = Cartographer.new("http://example.org")
|
96
|
+
sm2.from_xml(sm.to_xml)
|
97
|
+
|
98
|
+
assert_includes sm2.urls.map { |x| x.location.path }, "/test_cartographer.rb"
|
99
|
+
assert_equal 1, sm2.urls.select { |x| x.location.path == "/test_cartographer.rb" }.length
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_uniq!
|
103
|
+
sm = Cartographer.new("http://example.org")
|
104
|
+
sm.add_tree(File.expand_path("test"))
|
105
|
+
|
106
|
+
assert_includes sm.urls.map { |x| x.location.path }, "/test_cartographer.rb"
|
107
|
+
assert_equal 1, sm.urls.select { |x| x.location.path == "/test_cartographer.rb" }.length
|
108
|
+
|
109
|
+
sm.from_xml(sm.to_xml)
|
110
|
+
|
111
|
+
assert_includes sm.urls.map { |x| x.location.path }, "/test_cartographer.rb"
|
112
|
+
assert_equal 2, sm.urls.select { |x| x.location.path == "/test_cartographer.rb" }.length
|
113
|
+
|
114
|
+
sm.uniq!
|
115
|
+
|
116
|
+
assert_includes sm.urls.map { |x| x.location.path }, "/test_cartographer.rb"
|
117
|
+
assert_equal 1, sm.urls.select { |x| x.location.path == "/test_cartographer.rb" }.length
|
118
|
+
end
|
74
119
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: cartographer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Erik Hollensbe
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-03-
|
14
|
+
date: 2011-03-28 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
type: :runtime
|
27
27
|
version_requirements: *id001
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: nokogiri
|
30
30
|
prerelease: false
|
31
31
|
requirement: &id002 !ruby/object:Gem::Requirement
|
32
32
|
none: false
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: "0"
|
37
|
-
type: :
|
37
|
+
type: :runtime
|
38
38
|
version_requirements: *id002
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
|
-
name:
|
40
|
+
name: minitest
|
41
41
|
prerelease: false
|
42
42
|
requirement: &id003 !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
@@ -48,7 +48,7 @@ dependencies:
|
|
48
48
|
type: :development
|
49
49
|
version_requirements: *id003
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
|
-
name: hoe-
|
51
|
+
name: hoe-roodi
|
52
52
|
prerelease: false
|
53
53
|
requirement: &id004 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
type: :development
|
60
60
|
version_requirements: *id004
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name: hoe-
|
62
|
+
name: hoe-reek
|
63
63
|
prerelease: false
|
64
64
|
requirement: &id005 !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
@@ -70,7 +70,7 @@ dependencies:
|
|
70
70
|
type: :development
|
71
71
|
version_requirements: *id005
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: hoe-git
|
74
74
|
prerelease: false
|
75
75
|
requirement: &id006 !ruby/object:Gem::Requirement
|
76
76
|
none: false
|