jsl-placemaker 0.0.1.1 → 0.0.1.2
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/LICENSE +20 -0
- data/README.rdoc +1 -1
- data/Rakefile +28 -0
- data/lib/core_ext/array.rb +8 -0
- data/lib/core_ext/hash.rb +17 -0
- data/lib/placemaker/document.rb +14 -0
- data/lib/placemaker/place.rb +47 -0
- data/lib/placemaker/reader.rb +50 -0
- data/lib/placemaker/xml_parser.rb +17 -0
- data/lib/placemaker.rb +12 -0
- data/placemaker.gemspec +49 -0
- data/spec/fixtures/xml_rss_feed_result.xml +636 -0
- data/spec/placemaker/document_spec.rb +19 -0
- data/spec/placemaker/place_spec.rb +61 -0
- data/spec/placemaker/reader_spec.rb +47 -0
- data/spec/placemaker/xml_parser_spec.rb +18 -0
- data/spec/spec_helper.rb +19 -0
- metadata +24 -3
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Justin S. Leitgeb
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'spec/rake/spectask'
|
6
|
+
require 'rake/rdoctask'
|
7
|
+
|
8
|
+
require 'lib/placemaker'
|
9
|
+
|
10
|
+
desc 'Test the plugin.'
|
11
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
12
|
+
t.spec_opts = ["--format", "progress", "--colour"]
|
13
|
+
t.libs << 'lib'
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run all the tests"
|
18
|
+
task :default => :spec
|
19
|
+
|
20
|
+
desc 'Generate documentation'
|
21
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
22
|
+
rdoc.rdoc_dir = 'rdoc'
|
23
|
+
rdoc.title = 'Placemaker'
|
24
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
25
|
+
rdoc.rdoc_files.include('README.rdoc')
|
26
|
+
rdoc.rdoc_files.include('lib/placemaker/**/*.rb')
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Hash
|
2
|
+
# Returns a Hash containing only input keys.
|
3
|
+
# Method from merb-core.
|
4
|
+
def except(*rejected)
|
5
|
+
reject { |k,v| rejected.include?(k) }
|
6
|
+
end
|
7
|
+
|
8
|
+
def reverse_merge(other_hash)
|
9
|
+
other_hash.merge(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns a new hash containing only the input keys.
|
13
|
+
# Method from merb-core.
|
14
|
+
def only(*allowed)
|
15
|
+
reject { |k,v| !allowed.include?(k) }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Placemaker
|
2
|
+
class Document
|
3
|
+
def initialize(nodeset)
|
4
|
+
@nodeset = nodeset
|
5
|
+
end
|
6
|
+
|
7
|
+
def places
|
8
|
+
@nodeset.search('.//xmlns:placeDetails', 'xmlns' => 'http://wherein.yahooapis.com/v1/schema').map do |p|
|
9
|
+
Placemaker::Place.new(p)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Placemaker
|
2
|
+
class Point < OpenStruct
|
3
|
+
end
|
4
|
+
|
5
|
+
class Place
|
6
|
+
def initialize(nodeset)
|
7
|
+
@nodeset = nodeset
|
8
|
+
end
|
9
|
+
|
10
|
+
def centroid
|
11
|
+
centroid = @nodeset.search('.//xmlns:centroid', 'xmlns' => 'http://wherein.yahooapis.com/v1/schema')
|
12
|
+
lat = centroid.search('.//xmlns:latitude', 'xmlns' => 'http://wherein.yahooapis.com/v1/schema').inner_text.to_f
|
13
|
+
lng = centroid.search('.//xmlns:longitude', 'xmlns' => 'http://wherein.yahooapis.com/v1/schema').inner_text.to_f
|
14
|
+
Placemaker::Point.new(:lat => lat, :lng => lng)
|
15
|
+
end
|
16
|
+
|
17
|
+
def place_type
|
18
|
+
nested_node('type')
|
19
|
+
end
|
20
|
+
|
21
|
+
def match_type
|
22
|
+
nested_node('matchType').to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
def weight
|
26
|
+
nested_node('weight').to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
def confidence
|
30
|
+
nested_node('confidence').to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
def name
|
34
|
+
nested_node('name')
|
35
|
+
end
|
36
|
+
|
37
|
+
def woe_id
|
38
|
+
nested_node('woeId').to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def nested_node(name)
|
44
|
+
@nodeset.search(".//xmlns:#{name}", 'xmlns' => 'http://wherein.yahooapis.com/v1/schema').inner_text
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Placemaker
|
2
|
+
class Reader
|
3
|
+
POST_FIELDS = %w[ appid document_content document_url document_type document_title
|
4
|
+
auto_disambiguate focus_woe_id input_language output_type ].map{|f| f.to_sym}
|
5
|
+
|
6
|
+
attr_reader :documents
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@options = options
|
10
|
+
@options[:appid] ||= ENV['PLACEMAKER_APPID']
|
11
|
+
@documents = [ ]
|
12
|
+
verify_content_set
|
13
|
+
verify_document_type_set
|
14
|
+
end
|
15
|
+
|
16
|
+
POST_FIELDS.each do |f|
|
17
|
+
define_method(f) do # def appid
|
18
|
+
@options[f] # @options[:appid]
|
19
|
+
end # end
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch
|
23
|
+
fields = POST_FIELDS.reject{|f| @options[f].nil? }.map do |f|
|
24
|
+
# Change ruby-form fields to url type, e.g., document_content => documentContent
|
25
|
+
cgi_param = f.to_s.gsub(/\_(.)/) {|s| s.upcase}.gsub('_', '').sub(/url/i, 'URL')
|
26
|
+
Curl::PostField.content(cgi_param, @options[f])
|
27
|
+
end
|
28
|
+
|
29
|
+
res = Curl::Easy.http_post('http://wherein.yahooapis.com/v1/document', *fields)
|
30
|
+
xml_parser = Placemaker::XmlParser.new(res.body_str)
|
31
|
+
@documents = xml_parser.documents
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def verify_document_type_set
|
37
|
+
valid_types = %w[
|
38
|
+
text/plain
|
39
|
+
text/html text/xml text/rss
|
40
|
+
application/xml application/rss+xml
|
41
|
+
]
|
42
|
+
|
43
|
+
raise ArgumentError, "Document type must be in #{valid_types.join(', ')}" unless valid_types.include?(@options[:document_type])
|
44
|
+
end
|
45
|
+
|
46
|
+
def verify_content_set
|
47
|
+
raise ArgumentError, "Either document_url or document_content must be set" if (@options[:document_content].nil? && @options[:document_url].nil?)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Placemaker
|
2
|
+
class XmlParser
|
3
|
+
def initialize(xml_body)
|
4
|
+
@body = xml_body
|
5
|
+
@xml = Nokogiri::XML(xml_body)
|
6
|
+
end
|
7
|
+
|
8
|
+
# Returns a set of documents corresponding to the RSS entries in input data.
|
9
|
+
# Returns a collection of Placemaker::Document objects.
|
10
|
+
def documents
|
11
|
+
@xml.xpath('//xmlns:document', 'xmlns' => 'http://wherein.yahooapis.com/v1/schema').map do |d|
|
12
|
+
Placemaker::Document.new(d)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
data/lib/placemaker.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'curb'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
lib_dirs = [ 'core_ext', 'placemaker' ].map do |d|
|
7
|
+
File.join(File.dirname(__FILE__), d)
|
8
|
+
end
|
9
|
+
|
10
|
+
lib_dirs.each do |d|
|
11
|
+
Dir[File.join(d, "*.rb")].each {|file| require file }
|
12
|
+
end
|
data/placemaker.gemspec
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{placemaker}
|
5
|
+
s.version = "0.0.1.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Justin Leitgeb"]
|
9
|
+
s.date = %q{2009-05-20}
|
10
|
+
s.description = %q{Ruby interface for the Yahoo Placemaker API}
|
11
|
+
s.email = %q{justin@phq.org}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README.rdoc"
|
14
|
+
]
|
15
|
+
|
16
|
+
|
17
|
+
s.files = ["lib/core_ext/array.rb", "lib/core_ext/hash.rb", "lib/placemaker/document.rb", "lib/placemaker/place.rb",
|
18
|
+
"lib/placemaker/reader.rb", "lib/placemaker/xml_parser.rb", "lib/placemaker.rb", "LICENSE",
|
19
|
+
"placemaker.gemspec", "Rakefile", "README.rdoc", "spec/fixtures/xml_rss_feed_result.xml",
|
20
|
+
"spec/placemaker/document_spec.rb", "spec/placemaker/place_spec.rb", "spec/placemaker/reader_spec.rb",
|
21
|
+
"spec/placemaker/xml_parser_spec.rb", "spec/spec_helper.rb"]
|
22
|
+
|
23
|
+
s.has_rdoc = true
|
24
|
+
s.homepage = %q{http://github.com/jsl/placemaker}
|
25
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
s.rubygems_version = %q{1.3.1}
|
28
|
+
s.summary = %q{Ruby interface over the Yahoo Placemaker API}
|
29
|
+
s.test_files = ["spec/fixtures/xml_rss_feed_result.xml", "spec/placemaker/document_spec.rb", "spec/placemaker/place_spec.rb",
|
30
|
+
"spec/placemaker/reader_spec.rb", "spec/placemaker/xml_parser_spec.rb", "spec/spec_helper.rb"]
|
31
|
+
|
32
|
+
s.extra_rdoc_files = [ "README.rdoc" ]
|
33
|
+
|
34
|
+
s.rdoc_options += [
|
35
|
+
'--title', 'Placemaker',
|
36
|
+
'--main', 'README.rdoc',
|
37
|
+
'--line-numbers',
|
38
|
+
'--inline-source'
|
39
|
+
]
|
40
|
+
|
41
|
+
%w[ curb nokogiri ].each do |dep|
|
42
|
+
s.add_dependency(dep)
|
43
|
+
end
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
+
s.specification_version = 2
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,636 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<contentlocation xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xmlns="http://wherein.yahooapis.com/v1/schema" xml:lang="en">
|
3
|
+
<processingTime>0.028125</processingTime>
|
4
|
+
<version> build 090508</version>
|
5
|
+
<documentLength>29700</documentLength>
|
6
|
+
<document>
|
7
|
+
</document>
|
8
|
+
<document>
|
9
|
+
</document>
|
10
|
+
<document>
|
11
|
+
<administrativeScope>
|
12
|
+
<woeId>2344681</woeId>
|
13
|
+
<type>State</type>
|
14
|
+
<name><![CDATA[Ciudad de Buenos Aires, AR]]></name>
|
15
|
+
<centroid>
|
16
|
+
<latitude>-34.5465</latitude>
|
17
|
+
<longitude>-58.4597</longitude>
|
18
|
+
</centroid>
|
19
|
+
</administrativeScope>
|
20
|
+
<geographicScope>
|
21
|
+
<woeId>2344681</woeId>
|
22
|
+
<type>State</type>
|
23
|
+
<name><![CDATA[Ciudad de Buenos Aires, AR]]></name>
|
24
|
+
<centroid>
|
25
|
+
<latitude>-34.5465</latitude>
|
26
|
+
<longitude>-58.4597</longitude>
|
27
|
+
</centroid>
|
28
|
+
</geographicScope>
|
29
|
+
<extents>
|
30
|
+
<center>
|
31
|
+
<latitude>-34.5545</latitude>
|
32
|
+
<longitude>-58.4691</longitude>
|
33
|
+
</center>
|
34
|
+
<southWest>
|
35
|
+
<latitude>-34.6944</latitude>
|
36
|
+
<longitude>-58.6389</longitude>
|
37
|
+
</southWest>
|
38
|
+
<northEast>
|
39
|
+
<latitude>-34.4146</latitude>
|
40
|
+
<longitude>-58.2992</longitude>
|
41
|
+
</northEast>
|
42
|
+
</extents>
|
43
|
+
<placeDetails>
|
44
|
+
<place>
|
45
|
+
<woeId>468739</woeId>
|
46
|
+
<type>Town</type>
|
47
|
+
<name><![CDATA[Buenos Aires, Ciudad de Buenos Aires, AR]]></name>
|
48
|
+
<centroid>
|
49
|
+
<latitude>-34.5545</latitude>
|
50
|
+
<longitude>-58.4691</longitude>
|
51
|
+
</centroid>
|
52
|
+
</place>
|
53
|
+
<matchType>0</matchType>
|
54
|
+
<weight>10</weight>
|
55
|
+
<confidence>5</confidence>
|
56
|
+
</placeDetails>
|
57
|
+
<referenceList>
|
58
|
+
<reference>
|
59
|
+
<woeIds>468739</woeIds>
|
60
|
+
<start>22</start>
|
61
|
+
<end>34</end>
|
62
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
63
|
+
<text><![CDATA[Buenos Aires]]></text>
|
64
|
+
<type>xpathwithcounts</type>
|
65
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[3]/title[1]]]></xpath>
|
66
|
+
</reference>
|
67
|
+
</referenceList>
|
68
|
+
</document>
|
69
|
+
<document>
|
70
|
+
</document>
|
71
|
+
<document>
|
72
|
+
<administrativeScope>
|
73
|
+
<woeId>2461487</woeId>
|
74
|
+
<type>Town</type>
|
75
|
+
<name><![CDATA[North Pole, AK, US]]></name>
|
76
|
+
<centroid>
|
77
|
+
<latitude>64.7491</latitude>
|
78
|
+
<longitude>-147.353</longitude>
|
79
|
+
</centroid>
|
80
|
+
</administrativeScope>
|
81
|
+
<geographicScope>
|
82
|
+
<woeId>2461487</woeId>
|
83
|
+
<type>Town</type>
|
84
|
+
<name><![CDATA[North Pole, AK, US]]></name>
|
85
|
+
<centroid>
|
86
|
+
<latitude>64.7491</latitude>
|
87
|
+
<longitude>-147.353</longitude>
|
88
|
+
</centroid>
|
89
|
+
</geographicScope>
|
90
|
+
<extents>
|
91
|
+
<center>
|
92
|
+
<latitude>64.7491</latitude>
|
93
|
+
<longitude>-147.353</longitude>
|
94
|
+
</center>
|
95
|
+
<southWest>
|
96
|
+
<latitude>64.726</latitude>
|
97
|
+
<longitude>-147.428</longitude>
|
98
|
+
</southWest>
|
99
|
+
<northEast>
|
100
|
+
<latitude>64.7778</latitude>
|
101
|
+
<longitude>-147.304</longitude>
|
102
|
+
</northEast>
|
103
|
+
</extents>
|
104
|
+
<placeDetails>
|
105
|
+
<place>
|
106
|
+
<woeId>2461487</woeId>
|
107
|
+
<type>Town</type>
|
108
|
+
<name><![CDATA[North Pole, AK, US]]></name>
|
109
|
+
<centroid>
|
110
|
+
<latitude>64.7491</latitude>
|
111
|
+
<longitude>-147.353</longitude>
|
112
|
+
</centroid>
|
113
|
+
</place>
|
114
|
+
<matchType>0</matchType>
|
115
|
+
<weight>1</weight>
|
116
|
+
<confidence>4</confidence>
|
117
|
+
</placeDetails>
|
118
|
+
<referenceList>
|
119
|
+
<reference>
|
120
|
+
<woeIds>2461487</woeIds>
|
121
|
+
<start>900</start>
|
122
|
+
<end>910</end>
|
123
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
124
|
+
<text><![CDATA[North Pole]]></text>
|
125
|
+
<type>xpathwithcounts</type>
|
126
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[5]/description[1]]]></xpath>
|
127
|
+
</reference>
|
128
|
+
</referenceList>
|
129
|
+
</document>
|
130
|
+
<document>
|
131
|
+
<administrativeScope>
|
132
|
+
<woeId>23424977</woeId>
|
133
|
+
<type>Country</type>
|
134
|
+
<name><![CDATA[United States]]></name>
|
135
|
+
<centroid>
|
136
|
+
<latitude>48.8907</latitude>
|
137
|
+
<longitude>-116.982</longitude>
|
138
|
+
</centroid>
|
139
|
+
</administrativeScope>
|
140
|
+
<geographicScope>
|
141
|
+
<woeId>24875662</woeId>
|
142
|
+
<type>Colloquial</type>
|
143
|
+
<name><![CDATA[Continental United States, US]]></name>
|
144
|
+
<centroid>
|
145
|
+
<latitude>37.1669</latitude>
|
146
|
+
<longitude>-95.9669</longitude>
|
147
|
+
</centroid>
|
148
|
+
</geographicScope>
|
149
|
+
<extents>
|
150
|
+
<center>
|
151
|
+
<latitude>38.8913</latitude>
|
152
|
+
<longitude>-77.0337</longitude>
|
153
|
+
</center>
|
154
|
+
<southWest>
|
155
|
+
<latitude>18.9108</latitude>
|
156
|
+
<longitude>-167.276</longitude>
|
157
|
+
</southWest>
|
158
|
+
<northEast>
|
159
|
+
<latitude>72.8961</latitude>
|
160
|
+
<longitude>-66.6879</longitude>
|
161
|
+
</northEast>
|
162
|
+
</extents>
|
163
|
+
<placeDetails>
|
164
|
+
<place>
|
165
|
+
<woeId>2442047</woeId>
|
166
|
+
<type>Town</type>
|
167
|
+
<name><![CDATA[Los Angeles, CA, US]]></name>
|
168
|
+
<centroid>
|
169
|
+
<latitude>34.0533</latitude>
|
170
|
+
<longitude>-118.245</longitude>
|
171
|
+
</centroid>
|
172
|
+
</place>
|
173
|
+
<matchType>0</matchType>
|
174
|
+
<weight>1</weight>
|
175
|
+
<confidence>9</confidence>
|
176
|
+
</placeDetails>
|
177
|
+
<placeDetails>
|
178
|
+
<place>
|
179
|
+
<woeId>2459115</woeId>
|
180
|
+
<type>Town</type>
|
181
|
+
<name><![CDATA[New York, NY, US]]></name>
|
182
|
+
<centroid>
|
183
|
+
<latitude>40.7145</latitude>
|
184
|
+
<longitude>-74.0071</longitude>
|
185
|
+
</centroid>
|
186
|
+
</place>
|
187
|
+
<matchType>0</matchType>
|
188
|
+
<weight>1</weight>
|
189
|
+
<confidence>9</confidence>
|
190
|
+
</placeDetails>
|
191
|
+
<placeDetails>
|
192
|
+
<place>
|
193
|
+
<woeId>2514815</woeId>
|
194
|
+
<type>Town</type>
|
195
|
+
<name><![CDATA[Washington, DC, US]]></name>
|
196
|
+
<centroid>
|
197
|
+
<latitude>38.8913</latitude>
|
198
|
+
<longitude>-77.0337</longitude>
|
199
|
+
</centroid>
|
200
|
+
</place>
|
201
|
+
<matchType>0</matchType>
|
202
|
+
<weight>1</weight>
|
203
|
+
<confidence>9</confidence>
|
204
|
+
</placeDetails>
|
205
|
+
<placeDetails>
|
206
|
+
<place>
|
207
|
+
<woeId>23424977</woeId>
|
208
|
+
<type>Country</type>
|
209
|
+
<name><![CDATA[United States]]></name>
|
210
|
+
<centroid>
|
211
|
+
<latitude>48.8907</latitude>
|
212
|
+
<longitude>-116.982</longitude>
|
213
|
+
</centroid>
|
214
|
+
</place>
|
215
|
+
<matchType>0</matchType>
|
216
|
+
<weight>1</weight>
|
217
|
+
<confidence>9</confidence>
|
218
|
+
</placeDetails>
|
219
|
+
<referenceList>
|
220
|
+
<reference>
|
221
|
+
<woeIds>23424977</woeIds>
|
222
|
+
<start>1997</start>
|
223
|
+
<end>2004</end>
|
224
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
225
|
+
<text><![CDATA[America]]></text>
|
226
|
+
<type>xpathwithcounts</type>
|
227
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[6]/description[1]]]></xpath>
|
228
|
+
</reference>
|
229
|
+
<reference>
|
230
|
+
<woeIds>2514815</woeIds>
|
231
|
+
<start>3315</start>
|
232
|
+
<end>3325</end>
|
233
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
234
|
+
<text><![CDATA[Washington]]></text>
|
235
|
+
<type>xpathwithcounts</type>
|
236
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[6]/description[1]]]></xpath>
|
237
|
+
</reference>
|
238
|
+
<reference>
|
239
|
+
<woeIds>2514815</woeIds>
|
240
|
+
<start>521</start>
|
241
|
+
<end>534</end>
|
242
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
243
|
+
<text><![CDATA[Washington DC]]></text>
|
244
|
+
<type>xpathwithcounts</type>
|
245
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[6]/description[1]]]></xpath>
|
246
|
+
</reference>
|
247
|
+
<reference>
|
248
|
+
<woeIds>2459115</woeIds>
|
249
|
+
<start>634</start>
|
250
|
+
<end>642</end>
|
251
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
252
|
+
<text><![CDATA[New York]]></text>
|
253
|
+
<type>xpathwithcounts</type>
|
254
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[6]/description[1]]]></xpath>
|
255
|
+
</reference>
|
256
|
+
<reference>
|
257
|
+
<woeIds>2442047</woeIds>
|
258
|
+
<start>938</start>
|
259
|
+
<end>949</end>
|
260
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
261
|
+
<text><![CDATA[Los Angeles]]></text>
|
262
|
+
<type>xpathwithcounts</type>
|
263
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[6]/description[1]]]></xpath>
|
264
|
+
</reference>
|
265
|
+
</referenceList>
|
266
|
+
</document>
|
267
|
+
<document>
|
268
|
+
<administrativeScope>
|
269
|
+
<woeId>2346016</woeId>
|
270
|
+
<type>State</type>
|
271
|
+
<name><![CDATA[Bayrut, LB]]></name>
|
272
|
+
<centroid>
|
273
|
+
<latitude>33.8881</latitude>
|
274
|
+
<longitude>35.5139</longitude>
|
275
|
+
</centroid>
|
276
|
+
</administrativeScope>
|
277
|
+
<geographicScope>
|
278
|
+
<woeId>2346016</woeId>
|
279
|
+
<type>State</type>
|
280
|
+
<name><![CDATA[Bayrut, LB]]></name>
|
281
|
+
<centroid>
|
282
|
+
<latitude>33.8881</latitude>
|
283
|
+
<longitude>35.5139</longitude>
|
284
|
+
</centroid>
|
285
|
+
</geographicScope>
|
286
|
+
<extents>
|
287
|
+
<center>
|
288
|
+
<latitude>33.8927</latitude>
|
289
|
+
<longitude>35.4853</longitude>
|
290
|
+
</center>
|
291
|
+
<southWest>
|
292
|
+
<latitude>33.8562</latitude>
|
293
|
+
<longitude>35.467</longitude>
|
294
|
+
</southWest>
|
295
|
+
<northEast>
|
296
|
+
<latitude>33.9073</latitude>
|
297
|
+
<longitude>35.5751</longitude>
|
298
|
+
</northEast>
|
299
|
+
</extents>
|
300
|
+
<placeDetails>
|
301
|
+
<place>
|
302
|
+
<woeId>1960307</woeId>
|
303
|
+
<type>Town</type>
|
304
|
+
<name><![CDATA[Beirut, Bayrut, LB]]></name>
|
305
|
+
<centroid>
|
306
|
+
<latitude>33.8927</latitude>
|
307
|
+
<longitude>35.4853</longitude>
|
308
|
+
</centroid>
|
309
|
+
</place>
|
310
|
+
<matchType>0</matchType>
|
311
|
+
<weight>1</weight>
|
312
|
+
<confidence>9</confidence>
|
313
|
+
</placeDetails>
|
314
|
+
<referenceList>
|
315
|
+
<reference>
|
316
|
+
<woeIds>1960307</woeIds>
|
317
|
+
<start>396</start>
|
318
|
+
<end>402</end>
|
319
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
320
|
+
<text><![CDATA[Beirut]]></text>
|
321
|
+
<type>xpathwithcounts</type>
|
322
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[7]/description[1]]]></xpath>
|
323
|
+
</reference>
|
324
|
+
</referenceList>
|
325
|
+
</document>
|
326
|
+
<document>
|
327
|
+
<administrativeScope>
|
328
|
+
<woeId>2459115</woeId>
|
329
|
+
<type>Town</type>
|
330
|
+
<name><![CDATA[New York, NY, US]]></name>
|
331
|
+
<centroid>
|
332
|
+
<latitude>40.7145</latitude>
|
333
|
+
<longitude>-74.0071</longitude>
|
334
|
+
</centroid>
|
335
|
+
</administrativeScope>
|
336
|
+
<geographicScope>
|
337
|
+
<woeId>24701780</woeId>
|
338
|
+
<type>Zone</type>
|
339
|
+
<name><![CDATA[646 New York, NY, US]]></name>
|
340
|
+
<centroid>
|
341
|
+
<latitude>40.791</latitude>
|
342
|
+
<longitude>-73.9659</longitude>
|
343
|
+
</centroid>
|
344
|
+
</geographicScope>
|
345
|
+
<extents>
|
346
|
+
<center>
|
347
|
+
<latitude>40.791</latitude>
|
348
|
+
<longitude>-73.9659</longitude>
|
349
|
+
</center>
|
350
|
+
<southWest>
|
351
|
+
<latitude>40.6838</latitude>
|
352
|
+
<longitude>-74.0477</longitude>
|
353
|
+
</southWest>
|
354
|
+
<northEast>
|
355
|
+
<latitude>40.8819</latitude>
|
356
|
+
<longitude>-73.9067</longitude>
|
357
|
+
</northEast>
|
358
|
+
</extents>
|
359
|
+
<placeDetails>
|
360
|
+
<place>
|
361
|
+
<woeId>12589342</woeId>
|
362
|
+
<type>County</type>
|
363
|
+
<name><![CDATA[Manhattan, New York, NY, US]]></name>
|
364
|
+
<centroid>
|
365
|
+
<latitude>40.791</latitude>
|
366
|
+
<longitude>-73.9659</longitude>
|
367
|
+
</centroid>
|
368
|
+
</place>
|
369
|
+
<matchType>0</matchType>
|
370
|
+
<weight>1</weight>
|
371
|
+
<confidence>8</confidence>
|
372
|
+
</placeDetails>
|
373
|
+
<referenceList>
|
374
|
+
<reference>
|
375
|
+
<woeIds>12589342</woeIds>
|
376
|
+
<start>1939</start>
|
377
|
+
<end>1948</end>
|
378
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
379
|
+
<text><![CDATA[Manhattan]]></text>
|
380
|
+
<type>xpathwithcounts</type>
|
381
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[8]/description[1]]]></xpath>
|
382
|
+
</reference>
|
383
|
+
</referenceList>
|
384
|
+
</document>
|
385
|
+
<document>
|
386
|
+
</document>
|
387
|
+
<document>
|
388
|
+
<administrativeScope>
|
389
|
+
<woeId>1968212</woeId>
|
390
|
+
<type>Town</type>
|
391
|
+
<name><![CDATA[Tel Aviv, Tel Aviv, IL]]></name>
|
392
|
+
<centroid>
|
393
|
+
<latitude>32.0451</latitude>
|
394
|
+
<longitude>34.7697</longitude>
|
395
|
+
</centroid>
|
396
|
+
</administrativeScope>
|
397
|
+
<geographicScope>
|
398
|
+
<woeId>1968212</woeId>
|
399
|
+
<type>Town</type>
|
400
|
+
<name><![CDATA[Tel Aviv, Tel Aviv, IL]]></name>
|
401
|
+
<centroid>
|
402
|
+
<latitude>32.0451</latitude>
|
403
|
+
<longitude>34.7697</longitude>
|
404
|
+
</centroid>
|
405
|
+
</geographicScope>
|
406
|
+
<extents>
|
407
|
+
<center>
|
408
|
+
<latitude>32.0451</latitude>
|
409
|
+
<longitude>34.7697</longitude>
|
410
|
+
</center>
|
411
|
+
<southWest>
|
412
|
+
<latitude>32.0312</latitude>
|
413
|
+
<longitude>34.7413</longitude>
|
414
|
+
</southWest>
|
415
|
+
<northEast>
|
416
|
+
<latitude>32.146</latitude>
|
417
|
+
<longitude>34.8533</longitude>
|
418
|
+
</northEast>
|
419
|
+
</extents>
|
420
|
+
<placeDetails>
|
421
|
+
<place>
|
422
|
+
<woeId>1968212</woeId>
|
423
|
+
<type>Town</type>
|
424
|
+
<name><![CDATA[Tel Aviv, Tel Aviv, IL]]></name>
|
425
|
+
<centroid>
|
426
|
+
<latitude>32.0451</latitude>
|
427
|
+
<longitude>34.7697</longitude>
|
428
|
+
</centroid>
|
429
|
+
</place>
|
430
|
+
<matchType>0</matchType>
|
431
|
+
<weight>10</weight>
|
432
|
+
<confidence>9</confidence>
|
433
|
+
</placeDetails>
|
434
|
+
<referenceList>
|
435
|
+
<reference>
|
436
|
+
<woeIds>1968212</woeIds>
|
437
|
+
<start>108</start>
|
438
|
+
<end>118</end>
|
439
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
440
|
+
<text><![CDATA[Tel Aviv's]]></text>
|
441
|
+
<type>xpathwithcounts</type>
|
442
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[10]/description[1]]]></xpath>
|
443
|
+
</reference>
|
444
|
+
<reference>
|
445
|
+
<woeIds>1968212</woeIds>
|
446
|
+
<start>16</start>
|
447
|
+
<end>26</end>
|
448
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
449
|
+
<text><![CDATA[Tel Aviv's]]></text>
|
450
|
+
<type>xpathwithcounts</type>
|
451
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[10]/title[1]]]></xpath>
|
452
|
+
</reference>
|
453
|
+
</referenceList>
|
454
|
+
</document>
|
455
|
+
<document>
|
456
|
+
<administrativeScope>
|
457
|
+
<woeId>23424925</woeId>
|
458
|
+
<type>Country</type>
|
459
|
+
<name><![CDATA[Portugal]]></name>
|
460
|
+
<centroid>
|
461
|
+
<latitude>39.566</latitude>
|
462
|
+
<longitude>-7.84516</longitude>
|
463
|
+
</centroid>
|
464
|
+
</administrativeScope>
|
465
|
+
<geographicScope>
|
466
|
+
<woeId>23424925</woeId>
|
467
|
+
<type>Country</type>
|
468
|
+
<name><![CDATA[Portugal]]></name>
|
469
|
+
<centroid>
|
470
|
+
<latitude>39.566</latitude>
|
471
|
+
<longitude>-7.84516</longitude>
|
472
|
+
</centroid>
|
473
|
+
</geographicScope>
|
474
|
+
<extents>
|
475
|
+
<center>
|
476
|
+
<latitude>39.566</latitude>
|
477
|
+
<longitude>-7.84516</longitude>
|
478
|
+
</center>
|
479
|
+
<southWest>
|
480
|
+
<latitude>30.0329</latitude>
|
481
|
+
<longitude>-31.266</longitude>
|
482
|
+
</southWest>
|
483
|
+
<northEast>
|
484
|
+
<latitude>42.1542</latitude>
|
485
|
+
<longitude>-6.19021</longitude>
|
486
|
+
</northEast>
|
487
|
+
</extents>
|
488
|
+
<placeDetails>
|
489
|
+
<place>
|
490
|
+
<woeId>23424925</woeId>
|
491
|
+
<type>Country</type>
|
492
|
+
<name><![CDATA[Portugal]]></name>
|
493
|
+
<centroid>
|
494
|
+
<latitude>39.566</latitude>
|
495
|
+
<longitude>-7.84516</longitude>
|
496
|
+
</centroid>
|
497
|
+
</place>
|
498
|
+
<matchType>0</matchType>
|
499
|
+
<weight>1</weight>
|
500
|
+
<confidence>8</confidence>
|
501
|
+
</placeDetails>
|
502
|
+
<referenceList>
|
503
|
+
<reference>
|
504
|
+
<woeIds>23424925</woeIds>
|
505
|
+
<start>598</start>
|
506
|
+
<end>606</end>
|
507
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
508
|
+
<text><![CDATA[Portugal]]></text>
|
509
|
+
<type>xpathwithcounts</type>
|
510
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[11]/description[1]]]></xpath>
|
511
|
+
</reference>
|
512
|
+
</referenceList>
|
513
|
+
</document>
|
514
|
+
<document>
|
515
|
+
<administrativeScope>
|
516
|
+
<woeId>761570</woeId>
|
517
|
+
<type>Town</type>
|
518
|
+
<name><![CDATA[Gijon, Asturias, ES]]></name>
|
519
|
+
<centroid>
|
520
|
+
<latitude>43.542</latitude>
|
521
|
+
<longitude>-5.6638</longitude>
|
522
|
+
</centroid>
|
523
|
+
</administrativeScope>
|
524
|
+
<geographicScope>
|
525
|
+
<woeId>761570</woeId>
|
526
|
+
<type>Town</type>
|
527
|
+
<name><![CDATA[Gijon, Asturias, ES]]></name>
|
528
|
+
<centroid>
|
529
|
+
<latitude>43.542</latitude>
|
530
|
+
<longitude>-5.6638</longitude>
|
531
|
+
</centroid>
|
532
|
+
</geographicScope>
|
533
|
+
<extents>
|
534
|
+
<center>
|
535
|
+
<latitude>43.542</latitude>
|
536
|
+
<longitude>-5.6638</longitude>
|
537
|
+
</center>
|
538
|
+
<southWest>
|
539
|
+
<latitude>43.495</latitude>
|
540
|
+
<longitude>-5.75073</longitude>
|
541
|
+
</southWest>
|
542
|
+
<northEast>
|
543
|
+
<latitude>43.571</latitude>
|
544
|
+
<longitude>-5.60209</longitude>
|
545
|
+
</northEast>
|
546
|
+
</extents>
|
547
|
+
<placeDetails>
|
548
|
+
<place>
|
549
|
+
<woeId>761570</woeId>
|
550
|
+
<type>Town</type>
|
551
|
+
<name><![CDATA[Gijon, Asturias, ES]]></name>
|
552
|
+
<centroid>
|
553
|
+
<latitude>43.542</latitude>
|
554
|
+
<longitude>-5.6638</longitude>
|
555
|
+
</centroid>
|
556
|
+
</place>
|
557
|
+
<matchType>0</matchType>
|
558
|
+
<weight>10</weight>
|
559
|
+
<confidence>10</confidence>
|
560
|
+
</placeDetails>
|
561
|
+
<referenceList>
|
562
|
+
<reference>
|
563
|
+
<woeIds>761570</woeIds>
|
564
|
+
<start>28</start>
|
565
|
+
<end>40</end>
|
566
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
567
|
+
<text><![CDATA[Gijon, Spain]]></text>
|
568
|
+
<type>xpathwithcounts</type>
|
569
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[12]/title[1]]]></xpath>
|
570
|
+
</reference>
|
571
|
+
</referenceList>
|
572
|
+
</document>
|
573
|
+
<document>
|
574
|
+
</document>
|
575
|
+
<document>
|
576
|
+
</document>
|
577
|
+
<document>
|
578
|
+
<administrativeScope>
|
579
|
+
<woeId>2459115</woeId>
|
580
|
+
<type>Town</type>
|
581
|
+
<name><![CDATA[New York, NY, US]]></name>
|
582
|
+
<centroid>
|
583
|
+
<latitude>40.7145</latitude>
|
584
|
+
<longitude>-74.0071</longitude>
|
585
|
+
</centroid>
|
586
|
+
</administrativeScope>
|
587
|
+
<geographicScope>
|
588
|
+
<woeId>24701780</woeId>
|
589
|
+
<type>Zone</type>
|
590
|
+
<name><![CDATA[646 New York, NY, US]]></name>
|
591
|
+
<centroid>
|
592
|
+
<latitude>40.791</latitude>
|
593
|
+
<longitude>-73.9659</longitude>
|
594
|
+
</centroid>
|
595
|
+
</geographicScope>
|
596
|
+
<extents>
|
597
|
+
<center>
|
598
|
+
<latitude>40.7145</latitude>
|
599
|
+
<longitude>-74.0071</longitude>
|
600
|
+
</center>
|
601
|
+
<southWest>
|
602
|
+
<latitude>40.4957</latitude>
|
603
|
+
<longitude>-74.2557</longitude>
|
604
|
+
</southWest>
|
605
|
+
<northEast>
|
606
|
+
<latitude>40.9176</latitude>
|
607
|
+
<longitude>-73.7004</longitude>
|
608
|
+
</northEast>
|
609
|
+
</extents>
|
610
|
+
<placeDetails>
|
611
|
+
<place>
|
612
|
+
<woeId>2459115</woeId>
|
613
|
+
<type>Town</type>
|
614
|
+
<name><![CDATA[New York, NY, US]]></name>
|
615
|
+
<centroid>
|
616
|
+
<latitude>40.7145</latitude>
|
617
|
+
<longitude>-74.0071</longitude>
|
618
|
+
</centroid>
|
619
|
+
</place>
|
620
|
+
<matchType>0</matchType>
|
621
|
+
<weight>1</weight>
|
622
|
+
<confidence>7</confidence>
|
623
|
+
</placeDetails>
|
624
|
+
<referenceList>
|
625
|
+
<reference>
|
626
|
+
<woeIds>2459115</woeIds>
|
627
|
+
<start>197</start>
|
628
|
+
<end>205</end>
|
629
|
+
<isPlaintextMarker>0</isPlaintextMarker>
|
630
|
+
<text><![CDATA[New York]]></text>
|
631
|
+
<type>xpathwithcounts</type>
|
632
|
+
<xpath><![CDATA[/rss[1]/channel[1]/item[15]/description[1]]]></xpath>
|
633
|
+
</reference>
|
634
|
+
</referenceList>
|
635
|
+
</document>
|
636
|
+
</contentlocation>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Placemaker::Document do
|
4
|
+
before do
|
5
|
+
@xml_str = File.read(File.join(File.dirname(__FILE__), %w[.. fixtures xml_rss_feed_result.xml]))
|
6
|
+
@xmlp = Placemaker::XmlParser.new(@xml_str)
|
7
|
+
@doc = @xmlp.documents[5]
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#places" do
|
11
|
+
it "should have 4 places for the given node" do
|
12
|
+
@doc.places.size.should == 4
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return a Placemaker::Place object for the first node" do
|
16
|
+
@doc.places.first.should be_a(Placemaker::Place)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Placemaker::Place do
|
4
|
+
before do
|
5
|
+
@xml_str = File.read(File.join(File.dirname(__FILE__), %w[.. fixtures xml_rss_feed_result.xml]))
|
6
|
+
@xmlp = Placemaker::XmlParser.new(@xml_str)
|
7
|
+
@doc = @xmlp.documents[5]
|
8
|
+
@place = @doc.places.first
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#woe_id" do
|
12
|
+
it "should equal 2442047" do
|
13
|
+
@place.woe_id.should == 2442047
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "place_type" do
|
18
|
+
it "should be Town" do
|
19
|
+
@place.place_type.should == 'Town'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#name" do
|
24
|
+
it "should be Los Angeles, CA, US" do
|
25
|
+
@place.name.should == 'Los Angeles, CA, US'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "centroid" do
|
30
|
+
|
31
|
+
it "should be a Placemaker::Point object" do
|
32
|
+
@place.centroid.should be_a(Placemaker::Point)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return an object with lat set to 34.0533" do
|
36
|
+
@place.centroid.lat.should == 34.0533
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return an object with lng set to -118.245" do
|
40
|
+
@place.centroid.lng.should == -118.245
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#match_type" do
|
45
|
+
it "should be 0" do
|
46
|
+
@place.match_type.should == 0
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#weight" do
|
51
|
+
it "should be 1" do
|
52
|
+
@place.weight.should == 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#confidence" do
|
57
|
+
it "should be 9" do
|
58
|
+
@place.confidence.should == 9
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Placemaker::Reader do
|
4
|
+
before do
|
5
|
+
@valid_opts = {
|
6
|
+
:document_url => 'http://www.example.com',
|
7
|
+
:document_type => 'text/plain'
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "object initialization" do
|
12
|
+
it "should set appid to the value of ENV['PLACEMAKER_APPID']" do
|
13
|
+
ENV['PLACEMAKER_APPID'] = 'foo'
|
14
|
+
p = Placemaker::Reader.new(@valid_opts)
|
15
|
+
p.appid.should == 'foo'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should initialize #documents to an empty array" do
|
19
|
+
p = Placemaker::Reader.new(@valid_opts)
|
20
|
+
p.documents.should be_a(Array)
|
21
|
+
p.documents.should be_empty
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should raise an argument error if the document_type is not correctly set" do
|
25
|
+
lambda {
|
26
|
+
Placemaker::Reader.new(@valid_opts.except(:document_type))
|
27
|
+
}.should raise_error(ArgumentError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should set the appid to the value of options[:appid] if provided" do
|
31
|
+
ENV['PLACEMAKER_APPID'] = 'foo'
|
32
|
+
p = Placemaker::Reader.new(@valid_opts.merge(:appid => 'fark', :document_url => 'foo'))
|
33
|
+
p.appid.should == 'fark'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should create methods to allow access to configuration parameters" do
|
37
|
+
p = Placemaker::Reader.new(@valid_opts.merge(:document_content => 'foo'))
|
38
|
+
p.document_content.should == 'foo'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should raise an error if both document_content and document_url are nil" do
|
42
|
+
lambda {
|
43
|
+
p = Placemaker::Reader.new
|
44
|
+
}.should raise_error(ArgumentError)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), %w[ .. spec_helper])
|
2
|
+
|
3
|
+
describe Placemaker::XmlParser do
|
4
|
+
before do
|
5
|
+
@xml_str = File.read(File.join(File.dirname(__FILE__), %w[.. fixtures xml_rss_feed_result.xml]))
|
6
|
+
@xmlp = Placemaker::XmlParser.new(@xml_str)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#documents" do
|
10
|
+
it "should return 15 documents" do
|
11
|
+
@xmlp.documents.size.should == 15
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should contain all Placemaker::Document objects" do
|
15
|
+
@xmlp.documents.all?{|d| d.class == Placemaker::Document}.should be_true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mocha'
|
3
|
+
require 'spec'
|
4
|
+
|
5
|
+
require File.join(File.dirname(__FILE__), %w[.. lib placemaker])
|
6
|
+
|
7
|
+
Spec::Runner.configure do |config|
|
8
|
+
config.mock_with(:mocha)
|
9
|
+
end
|
10
|
+
|
11
|
+
shared_examples_for "all backends" do
|
12
|
+
it "should respond to #get" do
|
13
|
+
@backend.should respond_to(:get)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should respond to #set" do
|
17
|
+
@backend.should respond_to(:set)
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsl-placemaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Leitgeb
|
@@ -41,7 +41,23 @@ extensions: []
|
|
41
41
|
extra_rdoc_files:
|
42
42
|
- README.rdoc
|
43
43
|
files:
|
44
|
+
- lib/core_ext/array.rb
|
45
|
+
- lib/core_ext/hash.rb
|
46
|
+
- lib/placemaker/document.rb
|
47
|
+
- lib/placemaker/place.rb
|
48
|
+
- lib/placemaker/reader.rb
|
49
|
+
- lib/placemaker/xml_parser.rb
|
50
|
+
- lib/placemaker.rb
|
51
|
+
- LICENSE
|
52
|
+
- placemaker.gemspec
|
53
|
+
- Rakefile
|
44
54
|
- README.rdoc
|
55
|
+
- spec/fixtures/xml_rss_feed_result.xml
|
56
|
+
- spec/placemaker/document_spec.rb
|
57
|
+
- spec/placemaker/place_spec.rb
|
58
|
+
- spec/placemaker/reader_spec.rb
|
59
|
+
- spec/placemaker/xml_parser_spec.rb
|
60
|
+
- spec/spec_helper.rb
|
45
61
|
has_rdoc: true
|
46
62
|
homepage: http://github.com/jsl/placemaker
|
47
63
|
post_install_message:
|
@@ -74,5 +90,10 @@ rubygems_version: 1.2.0
|
|
74
90
|
signing_key:
|
75
91
|
specification_version: 2
|
76
92
|
summary: Ruby interface over the Yahoo Placemaker API
|
77
|
-
test_files:
|
78
|
-
|
93
|
+
test_files:
|
94
|
+
- spec/fixtures/xml_rss_feed_result.xml
|
95
|
+
- spec/placemaker/document_spec.rb
|
96
|
+
- spec/placemaker/place_spec.rb
|
97
|
+
- spec/placemaker/reader_spec.rb
|
98
|
+
- spec/placemaker/xml_parser_spec.rb
|
99
|
+
- spec/spec_helper.rb
|