Active 0.0.42 → 0.1.7

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.
Files changed (54) hide show
  1. data/.gitignore +6 -0
  2. data/.irbrc +21 -0
  3. data/.rspec +1 -0
  4. data/.rvmrc +2 -0
  5. data/Active.gemspec +28 -29
  6. data/Gemfile +4 -0
  7. data/History.txt +5 -2
  8. data/{README.txt → README.md} +4 -20
  9. data/Rakefile +11 -17
  10. data/lib/Active.rb +11 -79
  11. data/lib/active/activity.rb +7 -0
  12. data/lib/active/article.rb +7 -0
  13. data/lib/active/asset.rb +205 -0
  14. data/lib/active/errors.rb +9 -0
  15. data/lib/active/query.rb +225 -0
  16. data/lib/active/result.rb +7 -0
  17. data/lib/active/results.rb +6 -0
  18. data/lib/active/training.rb +7 -0
  19. data/lib/active/version.rb +3 -0
  20. data/lib/ext/hash_extensions.rb +8 -0
  21. data/spec/asset_spec.rb +47 -0
  22. data/spec/search_spec.rb +383 -432
  23. data/spec/spec_helper.rb +23 -2
  24. metadata +113 -116
  25. data/bin/Active +0 -7
  26. data/lib/.DS_Store +0 -0
  27. data/lib/services/.DS_Store +0 -0
  28. data/lib/services/IActivity.rb +0 -39
  29. data/lib/services/_ats.rb +0 -215
  30. data/lib/services/active_works.rb +0 -167
  31. data/lib/services/activity.rb +0 -512
  32. data/lib/services/address.rb +0 -17
  33. data/lib/services/ats.rb +0 -229
  34. data/lib/services/dto/user.rb +0 -9
  35. data/lib/services/gsa.rb +0 -205
  36. data/lib/services/reg_center.rb +0 -270
  37. data/lib/services/sanitize.rb +0 -108
  38. data/lib/services/search.rb +0 -494
  39. data/lib/services/validators.rb +0 -124
  40. data/rspec-tm +0 -1
  41. data/rvmrc +0 -1
  42. data/spec/.DS_Store +0 -0
  43. data/spec/Active_spec.rb +0 -28
  44. data/spec/activeworks_spec.rb +0 -60
  45. data/spec/activity_spec.rb +0 -421
  46. data/spec/ats_spec.rb +0 -106
  47. data/spec/benchmark/search_bench.rb +0 -55
  48. data/spec/custom_matchers_spec.rb +0 -27
  49. data/spec/gsa_spec.rb +0 -210
  50. data/spec/reg_spec.rb +0 -173
  51. data/spec/search_memcached_spec.rb +0 -42
  52. data/spec/validators_spec.rb +0 -19
  53. data/test/test_Active.rb +0 -0
  54. data/version.txt +0 -1
@@ -0,0 +1,9 @@
1
+ module Active
2
+
3
+ class ActiveError < StandardError; end
4
+
5
+ class RecordNotFound < ActiveError; end
6
+
7
+ class InvalidOption < ActiveError; end
8
+
9
+ end
@@ -0,0 +1,225 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module Active
5
+ class Query
6
+
7
+ attr_accessor :options
8
+
9
+ def initialize(options={})
10
+ @options = {
11
+ :s => "relevance",
12
+ :f => options[:facet],
13
+ :meta => {},
14
+ :m => [],
15
+ :v => 'json'
16
+ }
17
+ end
18
+
19
+ def page(value=1)
20
+ raise Active::InvalidOption if value.to_i <= 0
21
+ @options[:page] = value
22
+ self
23
+ end
24
+
25
+ def limit(value)
26
+ @options[:num] = value
27
+ self
28
+ end
29
+ alias per_page limit
30
+
31
+ # s = sort
32
+ # The default sort for results is by relevance. The available values are:
33
+ # date_asc
34
+ # date_desc
35
+ # relevance
36
+ def sort(value)
37
+ @options[:s] = value
38
+ self
39
+ end
40
+ alias order sort
41
+
42
+ # LatLngBounds(sw?:LatLng, ne?:LatLng)
43
+ # Constructs a rectangle from the points at its south-west and north-east corners.
44
+ def bounding_box(box)
45
+ latitude1 = box[:sw].split(",").first.to_f+90
46
+ latitude2 = box[:ne].split(",").first.to_f+90
47
+ longitude1 = box[:sw].split(",").last.to_f+180
48
+ longitude2 = box[:ne].split(",").last.to_f+180
49
+ options[:meta][:latitudeShifted] = "#{latitude1}..#{latitude2}"
50
+ options[:meta][:longitudeShifted] = "#{longitude1}..#{longitude2}"
51
+ self
52
+ end
53
+
54
+ def near(value)
55
+ raise Active::InvalidOption unless value[:latitude] and value[:longitude] and value[:radius]
56
+ @options[:l] = "#{value[:latitude]},#{value[:longitude]}"
57
+ @options[:r] = value[:radius]
58
+ self
59
+ end
60
+
61
+ def location(value)
62
+ if value.kind_of?(Hash)
63
+ options[:meta].merge!(value)
64
+ elsif value.kind_of?(String)
65
+ @options[:l] = single_encode(value)
66
+ end
67
+ self
68
+ end
69
+
70
+ def radius(value)
71
+ raise Active::InvalidOption unless value
72
+ @options[:r] = value.to_i
73
+ self
74
+ end
75
+
76
+ def keywords(value)
77
+ if value.kind_of?(Array)
78
+ @options[:k] = value.join("+")
79
+ elsif value.kind_of?(String)
80
+ @options[:k] = single_encode(value)
81
+ end
82
+ self
83
+ end
84
+
85
+ def date_range(start_date,end_date)
86
+ if start_date.kind_of?(String)
87
+ start_date = Date.parse(start_date)
88
+ end
89
+ if end_date.kind_of?(String)
90
+ end_date = Date.parse(end_date)
91
+ end
92
+ start_date = URI.escape(start_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
93
+ end_date = URI.escape(end_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
94
+ options[:meta][:startDate] = "daterange:#{start_date}..#{end_date}"
95
+ self
96
+ end
97
+
98
+ def future
99
+ options[:meta][:startDate] = "daterange:today..+"
100
+ self
101
+ end
102
+
103
+ def past
104
+ options[:meta][:startDate] = "daterange:..#{Date.today}"
105
+ self
106
+ end
107
+
108
+ def today
109
+ options[:meta][:startDate] = Date.today
110
+ self
111
+ end
112
+
113
+ [:state, :city, :category, :channel, :splitMediaType, :zip, :dma].each do |method_name|
114
+ define_method(method_name) do |val|
115
+
116
+ options[:meta][method_name] ||= []
117
+ if val.kind_of?(Array)
118
+ options[:meta][method_name] += val
119
+ elsif val.kind_of?(Hash)
120
+ options[:meta].merge!(val)
121
+ else
122
+ options[:meta][method_name] << val
123
+ end
124
+ self
125
+ end
126
+ end
127
+ alias zips zip
128
+
129
+ def to_query
130
+ opts = @options.deep_copy
131
+
132
+ # Extract :meta and turn it into a single string for :m
133
+ # Nested options inside meta get joined as OR
134
+ # Top-level options get joined with AND
135
+ opts[:m] += opts[:meta].collect { |k,v|
136
+ next unless v
137
+ if v.kind_of?(Array)
138
+ # Second-level options get joined with OR
139
+ v.collect do |v2|
140
+ # clean out empty values
141
+ if v2.nil?
142
+ next
143
+ elsif v2.kind_of?(String) and v2.empty?
144
+ next
145
+ elsif k == :assetId
146
+ "meta:#{k}=#{single_encode(v2)}"
147
+ else
148
+ "meta:#{k}=#{double_encode(v2)}"
149
+ end
150
+ end.join('+OR+')
151
+ else
152
+ # these keys need meta :
153
+ if k == :latitudeShifted or k == :longitudeShifted or k == :startDate
154
+ # encoding works for longitudeShifted
155
+ if k == :latitudeShifted or k == :longitudeShifted
156
+ double_encode("meta:#{k}:#{v}") # WTF encode the : ? and we don't have to encode it for assetId?
157
+ else
158
+ # encoding doesn't work for asset_id, daterange
159
+ "meta:#{k}:#{v}"
160
+ end
161
+ else# these keys need meta=
162
+ "meta:#{k}=#{double_encode(v)}"
163
+ end
164
+ end
165
+ }
166
+
167
+ opts[:m] << double_encode("meta:startDate:daterange:01-01-2000..") if opts[:meta][:startDate].nil?
168
+ # clean out empty values
169
+ opts[:m] = opts[:m].compact.reject { |s| s.nil? or s.empty? }
170
+ opts[:m] = opts[:m].join('+AND+')
171
+ opts.delete(:meta)
172
+ opts.delete_if { |k, v| v.nil? || v.to_s.empty? } # Remove all blank keys
173
+ "http://search.active.com/search?" + opts.collect{|k,v| "#{k}=#{v}"}.join('&')
174
+ end
175
+
176
+ def search
177
+ searchurl = URI.parse(to_query)
178
+ http = Net::HTTP.new(searchurl.host, searchurl.port)
179
+
180
+ res = http.start do |http|
181
+ http.get("#{searchurl.path}?#{searchurl.query}")
182
+ end
183
+
184
+ if (200..307).include?(res.code.to_i)
185
+ # TODO HANDLE JSON PARSE ERROR
186
+ return JSON.parse(res.body)
187
+ else
188
+ raise Active::ActiveError, "Active Search responded to your query with code: #{res.code}"
189
+ end
190
+ end
191
+
192
+ def results
193
+ return @a if @a
194
+ @res ||= search
195
+ @a ||= Active::Results.new()
196
+ # GSA will only return 1000 events but will give us a number larger then 1000.
197
+ @a.number_of_results = (@res['numberOfResults'] <= 1000) ? @res['numberOfResults'] : 1000
198
+ @a.end_index = @res['endIndex']
199
+ @a.page_size = @res['pageSize']
200
+ @a.search_time = @res['searchTime']
201
+
202
+ @res['_results'].collect do |d|
203
+ @a << Active::Asset.factory(d)
204
+ end
205
+ @a
206
+ end
207
+
208
+ private
209
+ # good for assetId only.. maybe
210
+ def single_encode(str)
211
+ str = URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
212
+ str.gsub!(/\-/,"%252D")
213
+ str
214
+ end
215
+ # good for all other values like city and state
216
+ def double_encode(str)
217
+ str = str.to_s
218
+ str = URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
219
+ str = URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
220
+ str.gsub!(/\-/,"%252D")
221
+ str
222
+ end
223
+
224
+ end
225
+ end
@@ -0,0 +1,7 @@
1
+ module Active
2
+ class Result < Asset
3
+ def self.facet
4
+ 'results'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+
2
+ module Active
3
+ class Results < Array
4
+ attr_accessor :end_index, :number_of_results, :page_size, :search_time
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Active
2
+ class Training < Asset
3
+ def self.facet
4
+ 'training'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Active
2
+ VERSION = "0.1.7"
3
+ end
@@ -0,0 +1,8 @@
1
+ class Hash
2
+
3
+ # http://stackoverflow.com/questions/4157399/how-do-i-copy-a-hash-in-ruby
4
+ def deep_copy
5
+ Marshal.load(Marshal.dump(self))
6
+ end
7
+
8
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+ describe "Search" do
3
+ describe "Asset Accessors" do
4
+
5
+ describe "invalid UTF-8 byte sequences" do
6
+ # TODO: Test pipe separately from UTF-8
7
+ it "should gracefully handle invalid UTF-8 byte sequences in the title" do
8
+ asset = Active::Asset.new()
9
+ asset['title'] = "one | \xB7 two"
10
+ asset.title.should eql("one")
11
+ end
12
+ end
13
+
14
+ describe "HTML and special character sanitizing" do
15
+ it "should convert HTML special characters in the title" do
16
+ asset = Active::Asset.new()
17
+ asset['title'] = "one &amp; two"
18
+ asset.title.should eql("one & two")
19
+ end
20
+ it "should remove HTML tags from the title" do
21
+ asset = Active::Asset.new()
22
+ asset['title'] = "one <b>two</b>"
23
+ asset.title.should eql("one two")
24
+ end
25
+ it "should remove HTML tags from the description" do
26
+ asset = Active::Asset.new({"meta" => { "summary"=>"one <b>two</b>" }})
27
+ asset.description.should eql("one two")
28
+ end
29
+ end
30
+
31
+ describe "Address and Location" do
32
+ it "should return an address if one exists in meta" do
33
+ asset = Active::Asset.new({"meta" => { "address"=>"123 Main St" }})
34
+ asset.address.should eql("123 Main St")
35
+ end
36
+ it "should return location if no address is present" do
37
+ asset = Active::Asset.new({"meta" => { "location"=>"123 Main St" }})
38
+ asset.address.should eql("123 Main St")
39
+ end
40
+ it "should return city, state if no location or address" do
41
+ asset = Active::Asset.new({"meta" => { "city"=>"Brooklyn", "state"=>"New York" }})
42
+ asset.address.should eql("Brooklyn, New York")
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -1,465 +1,416 @@
1
- require 'fake_web'
2
- # Require the spec helper relative to this file
3
1
  require File.join(File.dirname(__FILE__), %w[spec_helper])
4
- require File.join(File.dirname(__FILE__), %w[custom_matchers_spec])
5
- require File.join(File.dirname(__FILE__), %w[ .. lib services search])
6
- require File.join(File.dirname(__FILE__), %w[ .. lib services activity])
7
- include Active::Services
8
- # Active.memcache_host "localhost:11211"
2
+ describe "Search" do
3
+ describe "Asset" do
4
+ # describe HTTP and JSON Parse Errors
9
5
 
10
- describe Search do
11
- include CustomMatchers
12
- describe "Set up" do
13
- it "should set the api key"
14
- it "should not all search.active.com by default"
15
- it "should call search.active.com when told to"
16
- end
17
- describe "Search URL Construction" do
18
-
19
- it "should search by city" do
20
- uri = URI.parse( Search.new({:city=>"Oceanside"}).end_point )
21
- uri.query.should have_param("meta:city=Oceanside")
22
- uri.query.should_not have_param("l=")
23
- end
24
-
25
- it "should double encode the city" do
26
- uri = URI.parse( Search.new({:city=>"San Marcos"}).end_point )
27
- uri.query.should have_param("meta:city=San%2520Marcos")
28
- end
29
-
30
- it "should pass California as the meta state" do
31
- uri = URI.parse( Search.new({:state=>"California"}).end_point )
32
- uri.query.should have_param("meta:state=California")
33
- uri.query.should_not have_param("l=")
34
- end
35
-
36
- it "should search by the SF DMA" do
37
- uri = URI.parse( Search.new({:dma=>"San Francisco - Oakland - San Jose"}).end_point )
38
- uri.query.should have_param("meta:dma=San%2520Francisco%2520%252D%2520Oakland%2520%252D%2520San%2520Jose")
39
- uri.query.should_not have_param("l=")
40
- end
41
-
42
- it "should place lat and lng in the l param" do
43
- location = {:latitude=>"37.785895", :longitude=>"-122.40638"}
44
- uri = URI.parse( Search.new(location).end_point )
45
- uri.query.should have_param("l=37.785895;-122.40638")
46
- end
47
-
48
- it "should escape the location" do
49
- s = Search.new()
50
- s.location.should be_nil
51
- s = Search.new({:location => "San Diego"})
52
- s.location.should eql("San+Diego")
53
- end
54
-
55
- it "should have an array of keywords" do
56
- s = Search.new()
57
- s.should have(0).keywords
58
- s = Search.new({:keywords => "Dog,Cat,Cow"})
59
- s.should have(3).keywords
60
- s = Search.new({:keywords => %w(Dog Cat Cow)})
61
- s.should have(3).keywords
62
- s = Search.new({:keywords => ["Dog","Cat","Cow"]})
63
- s.should have(3).keywords
6
+ describe "pagination" do
7
+ it "should show the number of results" do
8
+ asset = Active::Asset.location(:city=>"Oceanside")
9
+ results = asset.results
10
+ results.number_of_results.should_not be_nil
11
+ results.end_index.should_not be_nil
12
+ results.page_size.should_not be_nil
13
+ results.search_time.should_not be_nil
14
+ end
64
15
  end
65
-
66
- it "should have an array of channels" do
67
- s = Search.new()
68
- s.should have(0).channels
69
- s = Search.new({:channels => "running,swimming,yoga"})
70
- puts s.end_point
71
- s.end_point.include?("m=meta:channel=Running+OR+meta:channel=Swimming+OR+meta:channel=Mind%2520%2526%2520Body%255CYoga").should be_true
16
+
17
+ describe "Instance Methods - Query Builder - Default Options" do
18
+ it "should build a query" do
19
+ asset = Active::Query.new
20
+ asset.to_query.should have_param("http://search.active.com/search?")
21
+ end
22
+ it "should have a facet in the query" do
23
+ asset = Active::Query.new(:facet => 'activities')
24
+ asset.to_query.should have_param("f=activities")
25
+ end
72
26
 
73
- s.should have(3).channels
74
- s = Search.new({:channels => %w(running swimming yoga)})
75
- s.should have(3).channels
76
- s = Search.new({:channels => ["running","swimming","yoga"]})
77
- s.should have(3).channels
78
- end
79
-
80
- it "should have defaults set" do
81
- s = Search.new()
82
- uri = URI.parse( s.end_point )
83
- uri.query.include?("f=#{Facet.ACTIVITIES}").should be_true
84
- uri.query.include?("s=#{Sort.DATE_ASC}").should be_true
85
- uri.query.include?("v=json").should be_true
86
- uri.query.include?("page=1").should be_true
87
- uri.query.should have_param("num=10")
88
- uri.query.should have_param("daterange:today..+")
89
- uri.query.should_not have_param("assetId=")
90
- end
91
-
92
- it "should construct a valid url with location" do
93
- s = Search.new( {:location => "San Diego, CA, US"} )
94
- uri = URI.parse(s.end_point)
95
- uri.scheme.should eql("http")
96
- uri.host.should eql("search.active.com")
97
- uri.query.should have_param("l=#{CGI.escape("San Diego, CA, US")}")
98
- end
99
-
100
- it "should send an array of zips" do
101
- uri = URI.parse( Search.new( {:zips => "92121, 92078, 92114"} ).end_point )
102
- uri.query.should have_param("l=92121,92078,92114")
103
- uri = URI.parse( Search.new( {:zips => [92121, 92078, 92114]} ).end_point )
104
- uri.query.should have_param("l=92121,92078,92114")
105
- end
106
-
107
- # it "should construct a valid url from a zip code" do
108
- # s = Search.new( {:zip => "92121"} )
109
- # uri = URI.parse(s.end_point)
110
- # uri.query.should have_param("l=#{CGI.escape("92121")}")
111
- # end
112
-
113
- it "should construct a valid url with CSV keywords" do
114
- s = Search.new( {:keywords => "running, tri"} )
115
- uri = URI.parse( s.end_point )
116
- uri.query.should have_param("k=running+tri")
117
- s = Search.new( {:keywords => ["running","tri","cycling"]} )
118
- uri = URI.parse( s.end_point )
119
- uri.query.should have_param("k=running+tri+cycling")
120
- end
121
-
122
- it "should construct a valid url with channels array" do
123
- s = Search.new( {:channels => [:running, :tri,:cycling, :yoga]} )
124
- uri = URI.parse( s.end_point )
125
- uri.query.should have_param("m=meta:channel=Running+OR+meta:channel=Cycling+OR+meta:channel=Mind%2520%2526%2520Body%255CYoga")
126
- end
27
+ it "should specify sort and return itself" do
28
+ asset = Active::Asset.sort(:date_desc)
29
+ asset.should be_an_instance_of(Active::Query)
30
+ asset.to_query.should have_param("s=date_desc")
31
+ asset.sort(:relevance).should === asset
32
+ asset.to_query.should have_param("s=relevance")
33
+ end
34
+
35
+ it "should specify order and return itself" do
36
+ asset = Active::Asset.order(:date_asc)
37
+ asset.should be_an_instance_of(Active::Query)
38
+ asset.to_query.should have_param("s=date_asc")
39
+ asset.order(:relevance).should === asset
40
+ asset.to_query.should have_param("s=relevance")
41
+ end
127
42
 
128
- it "should send valid channel info" do
129
- uri = URI.parse( Search.new({:channels => [:running,:triathlon]}).end_point )
130
- uri.query.include?("meta:channel=Running+OR+meta:channel=Triathlon").should be_true
43
+ it "should specify limit and return itself" do
44
+ asset = Active::Asset.limit(5)
45
+ asset.should be_an_instance_of(Active::Query)
46
+ asset.to_query.should have_param("num=5")
47
+ asset.limit(16).should === asset
48
+ asset.to_query.should have_param("num=16")
49
+ # alias per_page to limit
50
+ asset.per_page(3).should === asset
51
+ asset.to_query.should have_param("num=3")
52
+ end
53
+
54
+ it "should specify a per_page and return itself" do
55
+ asset = Active::Asset.per_page(3)
56
+ asset.should be_an_instance_of(Active::Query)
57
+ asset.to_query.should have_param("num=3")
58
+ end
59
+ it "should raise an invalid option error" do
60
+ lambda { Active::Asset.page(0) }.should raise_error(Active::InvalidOption)
61
+ lambda { Active::Asset.page(-1) }.should raise_error(Active::InvalidOption)
62
+ end
63
+ it "should specify page and return itself" do
64
+ asset = Active::Asset.page()
65
+ asset.should be_an_instance_of(Active::Query)
66
+ asset.to_query.should have_param("page=1")
67
+ asset.page(5).should === asset
68
+ asset.to_query.should have_param("page=5")
69
+ end
70
+ it "does something" do
71
+ asset = Active::Asset.page(2).limit(5).sort(:date_asc)
72
+ asset.to_query.should have_param("page=2")
73
+ asset.to_query.should have_param("s=date_asc")
74
+ asset.to_query.should have_param("num=5")
75
+ end
131
76
  end
77
+
78
+ describe "Instance Methods - Query Builder - Location" do
79
+ it "should search by city" do
80
+ asset = Active::Asset.location(:city=>"Oceanside")
81
+ asset.to_query.should have_param("meta:city=Oceanside")
82
+ end
83
+ it "should double encode the city" do
84
+ asset = Active::Asset.city("San Marcos")
85
+ asset.to_query.should have_param("meta:city=San%2520Marcos")
86
+
87
+ asset = Active::Asset.location(:city=>"San Marcos")
88
+ asset.to_query.should have_param("meta:city=San%2520Marcos")
89
+
90
+ end
91
+ it "should pass California as the meta state" do
92
+ asset = Active::Asset.state("California")
93
+ asset.to_query.should have_param("meta:state=California")
132
94
 
133
- it "should send valid channel info and a bounding_box" do
134
- s = Search.new({:bounding_box => { :sw => "37.695141,-123.013657", :ne => "37.695141,-123.013657"}, :channels => [:running,:triathlon] })
135
- s.bounding_box.should_not be_nil
136
- # uri = URI.parse( Search.new({:channels => [:running,:triathlon], :bounding_box => { :sw => "37.695141,-123.013657", :ne => "37.695141,-123.013657"} }).end_point )
137
- uri = URI.parse( s.end_point )
138
- puts "?????????????????????"
139
- puts uri
140
- uri.query.include?("meta:channel=Running+OR+meta:channel=Triathlon").should be_true
141
- uri.query.include?("meta:latitudeShifted:127.695141..127.695141+AND+meta:longitudeShifted:56.986343..56.986343").should be_true
142
- end
95
+ asset = Active::Asset.state(["California", "Oregon"])
96
+ asset.to_query.should have_param("meta:state=California+OR+meta:state=Oregon")
97
+
98
+ asset = Active::Asset.location(:state=>"California")
99
+ asset.to_query.should have_param("meta:state=California")
100
+ end
101
+ it "should search by the SF DMA" do
102
+ asset = Active::Asset.dma("San Francisco - Oakland - San Jose")
103
+ asset.to_query.should have_param("meta:dma=San%2520Francisco%2520%252D%2520Oakland%2520%252D%2520San%2520Jose")
104
+ end
105
+ it "should place lat and lng in the l param" do
106
+ asset = Active::Asset.near({:latitude=>"37.785895", :longitude=>"-122.40638", :radius => 25})
107
+ asset.to_query.should have_param("l=37.785895,-122.40638")
108
+ asset.to_query.should have_param("r=25")
109
+ end
110
+ it "should find by zip" do
111
+ asset = Active::Activity.zip("92121")
112
+ asset.to_query.should have_param("zip=92121")
113
+ asset.results.each do |result|
114
+ result.zip.should == "92121"
115
+ end
116
+ end
117
+ it "should find many zips" do
118
+ asset = Active::Activity.zips([92121, 92114])
119
+ asset.to_query.should have_param("meta:zip=92121+OR+meta:zip=92114")
120
+ asset.results.each do |result|
121
+ result.zip.should satisfy do |zip|
122
+ true if zip == "92121" or zip == "92114"
123
+ end
124
+ end
143
125
 
144
- it "should send the correct channel value for everything in Search.CHANNELS" do
145
- Categories.CHANNELS.each do |key,value|
146
- uri = URI.parse( Search.new({:channels => [key]}).end_point )
147
- value = URI.escape(value, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
148
- value = URI.escape(value, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
149
- value.gsub!(/\-/,"%252D")
150
- uri.query.should have_param("meta:channel=#{value}")
151
126
  end
127
+ it "should construct a valid url with location" do
128
+ asset = Active::Asset.location("San Diego, CA, US")
129
+ asset.to_query.should have_param("l=San%20Diego%2C%20CA%2C%20US")
130
+ end
131
+ it "should construct a valid url with radius" do
132
+ asset = Active::Asset.radius(50)
133
+ asset.to_query.should have_param("r=50")
134
+ end
135
+ it "should send bounding_box" do
136
+ pending
137
+ asset = Active::Activity.bounding_box({ :sw => "33.007407,-117.332985", :ne => "33.179984,-117.003395"} )
138
+ asset.to_query.should have_param("meta%253AlongitudeShifted%253A62.667015..62.996605")
139
+ asset.to_query.should have_param("meta%253AlatitudeShifted%253A123.007407..123.179984")
140
+ # asset.results.each do |result|
141
+ # puts "#{result.meta.latitude}, #{result.meta.longitude}<br/>"
142
+ # # result.meta.latitude.should satisfy do |lat|
143
+ # # puts "<br/> latitude #{lat}"
144
+ # # lat.to_f >= 33.007407 and lat.to_f <= 33.179984
145
+ # # end
146
+ # result.meta.longitude.should satisfy do |lng|
147
+ # puts "<br/> longitude #{lng.to_f}"
148
+ # lng.to_f <= -117.003395# and lng.to_f <= -117.332985
149
+ # end
150
+ # end
151
+ end
152
+ it "should send bounding_box" do
153
+ pending
154
+ asset = Active::Activity.bounding_box({:ne=>"38.8643,-121.208199", :sw=>"36.893089,-123.533684"})
155
+ #puts asset.to_query
156
+ asset.to_query.should have_param("meta%253AlatitudeShifted%253A126.893089..128.8643")
157
+ asset.to_query.should have_param("meta%253AlongitudeShifted%253A56.466316..58.791801")
158
+ # asset.results.each do |result|
159
+ # puts "#{result.meta.latitude}, #{result.meta.longitude}<br/>"
160
+ # # result.meta.latitude.should satisfy do |lat|
161
+ # # puts "<br/> latitude #{lat}"
162
+ # # lat.to_f >= 33.007407 and lat.to_f <= 33.179984
163
+ # # end
164
+ # result.meta.longitude.should satisfy do |lng|
165
+ # puts "<br/> longitude #{lng.to_f}"
166
+ # # lng.to_f <= -117.003395# and lng.to_f <= -117.332985
167
+ # end
168
+ # end
169
+ end
170
+
152
171
  end
153
172
 
154
- it "should pass the channel of Running and splitMediaType of 5k" do
155
- key = :running
156
- value = "Running"
157
- uri = URI.parse( Search.new({:channels => [key], :split_media_type => ["5k"]}).end_point )
158
- uri.query.should have_param("meta:channel=#{value}")
159
- uri.query.should have_param("meta:splitMediaType=5k")
160
- # SHOULD NOT SEE "++"
161
- pending
173
+ describe "Instance Methods - Query Builder - Meta" do
174
+ it "should search keywords" do
175
+ asset = Active::Asset.keywords('Running')
176
+ asset.to_query.should have_param("k=Running")
177
+ asset = Active::Asset.keywords(['Running', 'Hiking'])
178
+ asset.to_query.should have_param("k=Running+Hiking")
179
+ end
180
+ it "should search channels" do
181
+ asset = Active::Asset.channel('Running')
182
+ asset.to_query.should have_param("meta:channel=Running")
183
+ end
184
+ it "should search splitMediaType" do
185
+ asset = Active::Asset.splitMediaType('5k')
186
+ asset.to_query.should have_param("meta:splitMediaType=5k")
187
+ # open_url(asset.to_query)
188
+ end
162
189
  end
163
190
 
164
- it "should pass the assetTypeId" do
165
- local_asset_type_id = "EC6E96A5-6900-4A0E-8B83-9AA935F45A73"
166
- encoded = "EC6E96A5%252D6900%252D4A0E%252D8B83%252D9AA935F45A73"
167
- uri = URI.parse( Search.new({:asset_type_id => local_asset_type_id}).end_point )
168
- uri.query.should have_param("meta:assetTypeId=#{encoded}")
191
+ describe "Instance Methods - Query Builder - Dates" do
192
+ it "should send a valid start and end date" do
193
+ sd = Date.new(2011, 11, 1)
194
+ ed = Date.new(2011, 11, 3)
195
+ asset = Active::Asset.date_range( sd, ed )
196
+ asset.should be_an_instance_of(Active::Query)
197
+ asset.to_query.should have_param("meta:startDate:daterange:11%2F01%2F2011..11%2F03%2F2011")
198
+ asset.results.size.should eq(10)
199
+ asset.results.each do |result|
200
+ result.meta.startDate.should satisfy { |date|
201
+ d = Date.parse(date)
202
+ d >= sd and d <= ed
203
+ }
204
+ end
205
+ end
206
+ it "should send a valid start and end date" do
207
+ asset = Active::Asset.date_range( "2011-11-1", "2011-11-3" )
208
+ asset.should be_an_instance_of(Active::Query)
209
+ asset.to_query.should have_param("meta:startDate:daterange:11%2F01%2F2011..11%2F03%2F2011")
210
+ asset.results.size.should eq(10)
211
+ asset.results.each do |result|
212
+ result.meta.startDate.should satisfy { |date|
213
+ d = Date.parse(date)
214
+ d >= Date.parse("2011-11-1") and d <= Date.parse("2011-11-3")
215
+ }
216
+ end
217
+ end
218
+ it "should send a valid start and end date" do
219
+ asset = Active::Asset.date_range( "1/11/2011", "3/11/2011" )
220
+ asset.should be_an_instance_of(Active::Query)
221
+ asset.to_query.should have_param("meta:startDate:daterange:11%2F01%2F2011..11%2F03%2F2011")
222
+ asset.results.size.should eq(10)
223
+ asset.results.each do |result|
224
+ result.meta.startDate.should satisfy { |date|
225
+ d = Date.parse(date)
226
+ d >= Date.parse("2011-11-1") and d <= Date.parse("2011-11-3")
227
+ }
228
+ end
229
+ end
230
+
231
+
232
+
233
+ it "should search past" do
234
+ asset = Active::Asset.past
235
+ asset.should be_an_instance_of(Active::Query)
236
+ asset.to_query.should have_param("meta:startDate:daterange:..#{Date.today}")
237
+ asset.results.each do |result|
238
+ result.meta.startDate.should satisfy { |date|
239
+ Date.parse(date) <= Date.today
240
+ }
241
+ end
242
+ end
243
+ it "should search future" do
244
+ asset = Active::Asset.future
245
+ asset.should be_an_instance_of(Active::Query)
246
+ asset.to_query.should have_param("daterange:today..+")
247
+ asset.results.each do |result|
248
+ result.meta.startDate.should satisfy { |date|
249
+ Date.parse(date) >= Date.today
250
+ }
251
+ end
252
+ end
253
+ it "should search today" do
254
+ asset = Active::Asset.today
255
+ asset.should be_an_instance_of(Active::Query)
256
+ asset.to_query.should have_param("meta:startDate:#{Date.today}")
257
+ asset.results.each do |result|
258
+ result.meta.startDate.should satisfy { |date|
259
+ Date.parse(date) == Date.today
260
+ }
261
+ end
262
+ end
263
+
169
264
  end
170
265
 
171
- it "should pass a url" do
172
- url = "www.active.com/running/pleasant-hill-ca/dont-wine-just-run-5k-fun-runwalk-east-bay-edition-2011"
173
- encoded = "site:www.active.com%2Frunning%2Flong-branch-nj%2Fnew-jersey-marathon-and-long-branch-half-marathon-2011"
174
- uri = URI.parse( Search.new({:url => url}).end_point )
175
- uri.query.should have_param(encoded)
176
- end
177
-
178
- it "should send a valid start and end date" do
179
- uri = URI.parse( Search.new().end_point )
180
- uri.query.should have_param("daterange:today..+")
181
- end
182
-
183
- it "should send a valid start and end date" do
184
- uri = URI.parse( Search.new({:start_date => Date.new(2010, 11, 1), :end_date => Date.new(2010, 11, 15)}).end_point )
185
- uri.query.include?("meta:startDate:daterange:11%2F01%2F2010..11%2F15%2F2010").should be_true
186
- end
187
-
188
- it "should be valid with date range and channels" do
189
- uri = URI.parse( Search.new({:channels => [:running, :triathlon],
190
- :start_date => Date.new(2010, 11, 1),
191
- :end_date => Date.new(2010, 11, 15)}).end_point )
192
- uri.query.should have_param("meta:channel=Running+OR+meta:channel=Triathlon")
193
- uri.query.should have_param("daterange:11%2F01%2F2010..11%2F15%2F2010")
266
+ describe "Instance Methods - Catching empty and nill values" do
267
+ it "should not pass empty values" do
268
+ asset = Active::Activity.page(1).limit(10)
269
+ asset.keywords("")
270
+ asset.state("")
271
+ asset.channel("Running")
272
+ asset.to_query.should_not have_param("meta:state=")
273
+ asset.to_query.should_not have_param("k=")
274
+ asset.to_query.should have_param("meta:channel=Running")
275
+ asset.to_query.should_not have_param("+OR++OR+")
276
+ asset.to_query.should_not have_param("+AND++AND+")
277
+ end
278
+ it "should not pass nil values" do
279
+ asset = Active::Activity.page(1).limit(10)
280
+ asset.keywords("")
281
+ asset.state(nil)
282
+ asset.channel("Running")
283
+ asset.to_query.should_not have_param("meta:state=")
284
+ end
194
285
  end
195
286
 
196
- it "should pass the search radius" do
197
- uri = URI.parse( Search.new({:radius => '666'}).end_point )
198
- uri.query.should have_param("r=666")
199
- end
200
-
201
- it "should pass the given asset_id" do
202
- s = Search.new({:asset_id => "12-34" })
203
- s.should have(1).asset_ids
204
- end
205
-
206
- it "should pass the given asset_id's" do
207
- s = Search.new({:asset_ids => ["12-34","5-67","77-7"] })
208
- s.should have(3).asset_ids
209
- uri = URI.parse( s.end_point )
210
- uri.query.should_not have_param("m=+AND+")
211
- uri.query.should have_param("meta:assetId%3D12%252d34+OR+meta:assetId%3D5%252d67+OR+meta:assetId%3D77%252d7")
212
- end
213
-
214
- it "should pass a query" do
215
- # uri = URI.parse( Search.search({:num_results => 50, :radius => "50", :query => "soccer"}).end_point )
216
- # uri.query.should have_param("q=soccer")
217
- pending
218
- end
219
-
220
- it "should probably encode the query value" do
221
- pending
222
- # uri = URI.parse( Search.search({:num_results => 50, :radius => "50", :query => "soccer balls"}).end_point )
223
- # uri.query.should have_param("q=soccer+balls") What kind of encoding do we need
224
- end
225
-
226
- it "should decode this JSON" do
227
- # if the location is not in the correct format there is a json error.
228
- # s = Active::Services::Search.search({:location => "belvedere-tiburon-ca"})
229
- # /search?api_key=&num=10&page=1&l=belvedere-tiburon-ca&f=activities&v=json&r=50&s=date_asc&k=&m=meta:startDate:daterange:today..+
230
- # I think the JSON spec says that only arrays or objects can be at the top level.
231
- # JSON::ParserError: A JSON text must at least contain two octets!
232
- pending
233
- end
234
-
235
- it "should find 5 items when doing a DMA search" do
236
- Search.new({:dma=>"San Francisco - Oakland - San Jose", :num_results => 5}).num_results.should eql(5)
237
- Search.search({:dma=>"San Francisco - Oakland - San Jose", :num_results => 5}).should have(5).results
238
- Search.search({:dma=>"San Francisco - Oakland - San Jose", :num_results => 2}).should have(2).results
287
+ describe "Static Find Methods" do
288
+ it "should raise error if no id is specified" do
289
+ lambda { Active::Asset.find() }.should raise_error(Active::InvalidOption, "Couldn't find Asset without an ID")
290
+ end
291
+ it "should find record: Dean Karnazes Silicon Valley Marathon" do
292
+ result = Active::Asset.find("DD8F427F-6188-465B-8C26-71BBA22D2DB7")
293
+ result.should be_an_instance_of(Active::Asset)
294
+ result.asset_id.should eql("DD8F427F-6188-465B-8C26-71BBA22D2DB7")
295
+ end
296
+ it "should have two asset_id's in the query" do
297
+ results = Active::Asset.find(["DD8F427F-6188-465B-8C26-71BBA22D2DB7", "2C384907-D683-4E83-BD97-63A46F38437A"])
298
+ results.should be_an_instance_of(Array)
299
+ end
300
+ it "should throw an error if one or more asset_ids weren't found" do
301
+ lambda { Active::Asset.find(["DD8F427F-6188-465B-8C26-71BBA22D2DB7", "123"])
302
+ }.should raise_error(Active::RecordNotFound, "Couldn't find record with asset_id: 123")
303
+ end
304
+ it "should find a record by url" do
305
+ # event = Active::Activity.find_by_url("http://www.active.com/triathlon/oceanside-ca/rohto-ironman-703-california-2011")
306
+ event = Active::Activity.find_by_url("www.active.com/triathlon/oceanside-ca/rohto-ironman-703-california-2011")
307
+ event.title.should eql("2011 Rohto Ironman 70.3 California")
308
+ end
309
+ describe "Result Object" do
310
+ it "should have a title via dot notation" do
311
+ result = Active::Asset.find("DD8F427F-6188-465B-8C26-71BBA22D2DB7")
312
+ result.title.should eql("Dean Karnazes Silicon Valley Marathon")
313
+ end
314
+ end
239
315
  end
240
- end
241
316
 
242
- describe "Handle http server codes" do
243
- after(:each) do
244
- FakeWeb.clean_registry
245
- end
246
-
247
- it "should follow a 302" do
248
- FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&s=date_asc&m=meta:startDate:daterange:today..+",
249
- :body => '{"endIndex":3,"numberOfResults":3,"pageSize":3,"searchTime":0.600205,"_results":[{"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}},
250
- {"escapedUrl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","language": "en","title": "Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21) \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","summary": "\u003cb\u003e...\u003c/b\u003e Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21). Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e\u003cbr\u003e Reviews of Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10. \u003cb\u003e...\u003c/b\u003e ","meta": {"summary": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","startDate": "2010-09-19","eventDate": "2010-09-19","location": "Alki Beach Park, Seattle","tag": ["event:10", "Running:10"],"state": "Washington","endDate": "2010-11-22","locationName": "1702 Alki Ave. SW","splitMediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"lastModifiedDateTime": "2010-08-19 23:35:50.117","endTime": "07:59:59","mediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"google-site-verification": "","city": "Seattle","startTime": "07:00:00","assetId": ["39e8177e-dd0e-42a2-8a2b-24055e5325f3", "39e8177e-dd0e-42a2-8a2b-24055e5325f3"],"eventId": "E-000NGFS9","participationCriteria": "Kids,Family","description": "","longitude": "-122.3912","substitutionUrl": "E-000NGFS9","assetName": ["Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)", "Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)"],"zip": "98136","contactPhone": "n/a","eventState": "WA","sortDate": "2000-09-19","keywords": "Event","eventAddress": "1702 Alki Ave. SW","contactEmail": "n/a","dma": "Seattle - Tacoma","trackbackurl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","seourl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://photos-images.active.com/file/3/1/optimized/9015e50d-3a2e-4ce4-9ddc-80b05b973b01.jpg","allText": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","address": "1702 Alki Ave. SW","assetTypeId": "DFAA997A-D591-44CA-9FB7-BF4A4C8984F1","lastModifiedDate": "2010-08-19","eventZip": "98136","latitude": "47.53782","UpdateDateTime": "8/18/2010 10:16:08 AM","channel": "Running"}},
251
- {"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}}]}',
252
- :status => ["302", "Found"])
253
- s = Search.search( {:location => "San Diego, CA, US"} )
254
- s.should have(3).results
255
- end
256
-
257
- end
258
- describe "Calls with FakeWeb" do
259
- after(:each) do
260
- FakeWeb.clean_registry
261
- end
262
-
263
- it "should have some channels" do
264
- Categories.CHANNELS.should_not be_nil
265
- end
266
-
267
- it "should describe pagination info on search object" do
268
- FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&s=date_asc&m=meta:startDate:daterange:today..+",
269
- :body => '{"endIndex":3,"numberOfResults":3,"pageSize":5,"searchTime":0.600205,"_results":[{"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}},
270
- {"escapedUrl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","language": "en","title": "Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21) \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","summary": "\u003cb\u003e...\u003c/b\u003e Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21). Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e\u003cbr\u003e Reviews of Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10. \u003cb\u003e...\u003c/b\u003e ","meta": {"summary": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","startDate": "2010-09-19","eventDate": "2010-09-19","location": "Alki Beach Park, Seattle","tag": ["event:10", "Running:10"],"state": "Washington","endDate": "2010-11-22","locationName": "1702 Alki Ave. SW","splitMediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"lastModifiedDateTime": "2010-08-19 23:35:50.117","endTime": "07:59:59","mediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"google-site-verification": "","city": "Seattle","startTime": "07:00:00","assetId": ["39e8177e-dd0e-42a2-8a2b-24055e5325f3", "39e8177e-dd0e-42a2-8a2b-24055e5325f3"],"eventId": "E-000NGFS9","participationCriteria": "Kids,Family","description": "","longitude": "-122.3912","substitutionUrl": "E-000NGFS9","assetName": ["Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)", "Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)"],"zip": "98136","contactPhone": "n/a","eventState": "WA","sortDate": "2000-09-19","keywords": "Event","eventAddress": "1702 Alki Ave. SW","contactEmail": "n/a","dma": "Seattle - Tacoma","trackbackurl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","seourl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://photos-images.active.com/file/3/1/optimized/9015e50d-3a2e-4ce4-9ddc-80b05b973b01.jpg","allText": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","address": "1702 Alki Ave. SW","assetTypeId": "DFAA997A-D591-44CA-9FB7-BF4A4C8984F1","lastModifiedDate": "2010-08-19","eventZip": "98136","latitude": "47.53782","UpdateDateTime": "8/18/2010 10:16:08 AM","channel": "Running"}},
271
- {"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}}]}',
272
- :status => ["200", "Found"])
273
- s = Search.search( {:location => "San Diego, CA, US"} )
274
- s.should be_a_kind_of(Search)
275
- s.should have(3).results
276
- s.endIndex.should == 3
277
- s.numberOfResults.should == 3
278
- s.pageSize.should == 5
279
- s.searchTime.should == 0.600205
280
-
281
- end
282
-
283
- it "should raise and error during a 404" do
284
- FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&s=date_asc&m=meta:startDate:daterange:today..+",
285
- :body => "Nothing to be found 'round here", :status => ["404", "Not Found"])
286
- lambda { Search.search( {:location => "San Diego, CA, US"} ) }.should raise_error(RuntimeError)
287
- end
288
-
289
- it "should search by location (san diego)" do
290
- FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&s=date_asc&m=meta:startDate:daterange:today..+",
291
- :body => '{"endIndex":3,"numberOfResults":3,"pageSize":5,"searchTime":0.600205,"_results":[{"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}},
292
- {"escapedUrl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","language": "en","title": "Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21) \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","summary": "\u003cb\u003e...\u003c/b\u003e Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10/17, 11/21). Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e\u003cbr\u003e Reviews of Fitness For Vitality 5k/\u003cb\u003e10k\u003c/b\u003e 3-Race Series (9/19, 10. \u003cb\u003e...\u003c/b\u003e ","meta": {"summary": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","startDate": "2010-09-19","eventDate": "2010-09-19","location": "Alki Beach Park, Seattle","tag": ["event:10", "Running:10"],"state": "Washington","endDate": "2010-11-22","locationName": "1702 Alki Ave. SW","splitMediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"lastModifiedDateTime": "2010-08-19 23:35:50.117","endTime": "07:59:59","mediaType": ["5K", "difficulty:Beginner", "difficulty:Advanced", "Event", "difficulty:Intermediate", "10K"],"google-site-verification": "","city": "Seattle","startTime": "07:00:00","assetId": ["39e8177e-dd0e-42a2-8a2b-24055e5325f3", "39e8177e-dd0e-42a2-8a2b-24055e5325f3"],"eventId": "E-000NGFS9","participationCriteria": "Kids,Family","description": "","longitude": "-122.3912","substitutionUrl": "E-000NGFS9","assetName": ["Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)", "Fitness For Vitality 5k/10k 3-Race Series (9/19, 10/17, 11/21)"],"zip": "98136","contactPhone": "n/a","eventState": "WA","sortDate": "2000-09-19","keywords": "Event","eventAddress": "1702 Alki Ave. SW","contactEmail": "n/a","dma": "Seattle - Tacoma","trackbackurl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","seourl": "http://www.active.com/10k-race/seattle-wa/fitness-for-vitality-5k10k-3race-series-919-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://photos-images.active.com/file/3/1/optimized/9015e50d-3a2e-4ce4-9ddc-80b05b973b01.jpg","allText": "\u003cp style\u003dtext-align:left\u003e\u003cfont style\u003dfont-family:UniversEmbedded;font-size:12;color:#000000; LETTERSPACING\u003d0 KERNING\u003d0\u003eRace or walk on a flat, fast, and fun course! The entire event is along the Puget Sound. Do all 3 events in the series and watch your time and fitness improve! Oatmeal post-race. 10% proceeds sh","address": "1702 Alki Ave. SW","assetTypeId": "DFAA997A-D591-44CA-9FB7-BF4A4C8984F1","lastModifiedDate": "2010-08-19","eventZip": "98136","latitude": "47.53782","UpdateDateTime": "8/18/2010 10:16:08 AM","channel": "Running"}},
293
- {"escapedUrl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language": "en","title": "Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs | Calabasas, California 91302 \u003cb\u003e...\u003c/b\u003e","url": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary": "\u003cb\u003e...\u003c/b\u003e Calabasas Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs. Based on 0 reviews. \u003cb\u003e...\u003c/b\u003e Recent Reviews Calabasas\u003cbr\u003e Classic 2010 - 5k \u003cb\u003e10k\u003c/b\u003e Runs reviews. Get Directions. Start Address. End Address \u003cb\u003e...\u003c/b\u003e ","meta": {"startDate": "2010-11-14","eventDate": "2010-11-14T08:00:00-08:00","location": "Calabasas Park Centre","tag": ["event:10", "Green:10", "Running:10"],"state": "California","eventLongitude": "-118.6789","endDate": "2010-11-14","locationName": "Calabasas Park Centre","splitMediaType": ["Event", "1 mile", "10K", "5K"],"endTime": "8:00:00","mediaType": ["Event", "Event\\1 mile", "Event\\10K", "Event\\5K"],"google-site-verification": "","city": "Calabasas","startTime": "8:00:00","assetId": ["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD", "11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"eventId": "1810531","participationCriteria": "All","description": "","longitude": "-118.6789","onlineDonationAvailable": "false","substitutionUrl": "1810531","assetName": ["Calabasas Classic 2010 - 5k 10k Runs", "Calabasas Classic 2010 - 5k 10k Runs"],"zip": "91302","contactPhone": "818-715-0428","sortDate": "2000-11-14","eventState": "California","eventLatitude": "34.12794","keywords": "Event","eventAddress": "23975 Park Sorrento","contactEmail": "rot10kd@yahoo.com","onlineMembershipAvailable": "false","trackbackurl": "http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country": "United States","onlineRegistrationAvailable": "true","category": "Activities","image1": "http://www.active.com/images/events/hotrace.gif","assetTypeId": "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate": "2010-03-04 07:30:26.307","eventZip": "91302","latitude": "34.12794","UpdateDateTime": "8/18/2010 10:16:26 AM","channel": ["Running", "Walking"]}}]}',
294
- :status => ["200", "Found"])
295
- s = Search.search( {:location => "San Diego, CA, US"} )
296
- s.should be_a_kind_of(Search)
297
- s.should have(3).results
298
- s.results.each do |a|
299
- a.should be_an_instance_of(Activity)
300
- a.title.should_not be_nil
301
- # a.start_date.should_not be_nil
302
- # a.end_date.should_not be_nil
303
- # a.categories.should_not be_nil
304
- # a.desc.should_not be_nil
305
- # a.start_time.should_not be_nil
306
- # a.end_time.should_not be_nil
307
- # a.address.should_not be_nil
308
- # a.address[:name].should_not be_nil
309
- # a.address[:city].should_not be_nil
310
- # a.address[:state].should_not be_nil
311
- # a.address[:zip].should_not be_nil
312
- # a.address[:country].should_not be_nil
313
- # a.address[:lat].should_not be_nil
314
- # a.address[:lng].should_not be_nil
317
+ describe "Results Object" do
318
+ it "should find only 4 results" do
319
+ asset = Active::Asset.order(:relevance)
320
+ asset.page(1)
321
+ asset.limit(4)
322
+ asset.order(:date_asc)
323
+ asset.should have_exactly(4).results
324
+ asset.results.first.should be_an_instance_of(Active::Activity)
325
+ asset.results.first.url.should_not be_nil
326
+ asset.results.first.meta.eventId.should_not be_nil
315
327
  end
316
- end
317
-
318
- it "should handle this json error" do
319
- # FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&r=50&s=date_asc&k=&m=meta:startDate:daterange:today..+",
320
- # :body => '{"endIndex":10,"numberOfResults":2790,"pageSize":10,"searchTime":0.253913,"_results":[{"escapedUrl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","language":"en","title":"Myrtle Beach Mini Marathon | Myrtle Beach, South Carolina \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","summary":"","meta":{"eventDate":"2010-10-24T07:00:00-07:00","location":"Myrtle Beach, South Carolina","tag":["event:10","Running:10"],"endDate":"2010-10-24","eventLongitude":"-78.92921","splitMediaType":["Event","5K","Half Marathon","Marathon","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"lastModifiedDateTime":"2010-09-13 18:15:04.753","locationName":"Myrtle Beach, South Carolina","endTime":"7:00:00","google-site-verification":"","city":"Myrtle Beach","startTime":"7:00:00","eventId":"1797753","description":"","longitude":"-78.92921","substitutionUrl":"1797753","eventLatitude":"33.75043","eventState":"South Carolina","sortDate":"2000-10-24","keywords":"Event","eventAddress":"Medieval Times","dma":"Florence - Myrtle Beach","seourl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","country":"United States","category":"Activities","market":"Florence - Myrtle Beach","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Robert Pozo","eventZip":"29579","latitude":"33.75043","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-24","state":"South Carolina","mediaType":["Event","Event\\5K","Event\\Half Marathon","Event\\Marathon","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"estParticipants":"6000","assetId":["008540A9-C2AB-4D7F-BE68-298758B324CD","008540a9-c2ab-4d7f-be68-298758b324cd"],"participationCriteria":"Adult,Men,Women","onlineDonationAvailable":"1","assetName":["Myrtle Beach Mini Marathon","Myrtle Beach Mini Marathon"],"eventURL":"http://runmyrtlebeach.com","zip":"29579","contactPhone":"1-800-733-7089","contactEmail":"info@runmyrtlebeach.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-13","channel":"Running"}},{"escapedUrl":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","language":"en","title":"Fans on the Field 2010 - Denver Stadium 5K/10K | Denver \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","summary":"","meta":{"startDate":"2010-10-10","eventDate":"2010-10-10T00:00:00-07:00","location":"INVESCO Field at Mile High","tag":["event:10","Running:10"],"state":"Colorado","eventLongitude":"-105.0265","endDate":"2010-10-10","lastModifiedDateTime":"2010-08-05 16:15:18.14","splitMediaType":["Event","10K","5K"],"locationName":"INVESCO Field at Mile High","endTime":"0:00:00","mediaType":["Event","Event\\10K","Event\\5K"],"city":"Denver","google-site-verification":"","startTime":"0:00:00","assetId":["4850BB73-3701-493D-936C-C38CC0B3FD4C","4850bb73-3701-493d-936c-c38cc0b3fd4c"],"eventId":"1869635","participationCriteria":"All","description":"","longitude":"-105.0265","onlineDonationAvailable":"false","substitutionUrl":"1869635","assetName":["Fans on the Field 2010 - Denver Stadium 5K/10K","Fans on the Field 2010 - Denver Stadium 5K/10K"],"zip":"80204","contactPhone":"303-293-5315","eventLatitude":"39.73804","eventState":"Colorado","sortDate":"2000-10-10","keywords":"Event","eventAddress":"1801 Bryant Street","contactEmail":"ahinkle@nscd.org","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-08-05","eventZip":"80204","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"39.73804","channel":["Running","Walking"]}},{"escapedUrl":"http://www.active.com/triathlon/sedalia-mo/sedalia-duathlon-2010","language":"en","title":"Sedalia Duathlon | Sedalia, Missouri 65301 | Sunday \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/sedalia-mo/sedalia-duathlon-2010","summary":"","meta":{"startDate":"2010-09-26","eventDate":"2010-09-26T08:00:00-07:00","location":"Centennial Park/Parview School","state":"Missouri","endDate":"2010-09-26","eventLongitude":"-93.22826","lastModifiedDateTime":"2010-07-29 17:15:03.313","splitMediaType":["Event","Sprint"],"locationName":"Centennial Park/Parview School","endTime":"8:00:00","mediaType":["Event","Event\\Sprint"],"city":"Sedalia","google-site-verification":"","startTime":"8:00:00","assetId":["F11300A4-0A56-4321-AD4C-17502CEE8503","f11300a4-0a56-4321-ad4c-17502cee8503"],"eventId":"1879447","participationCriteria":"All","description":"","longitude":"-93.22826","onlineDonationAvailable":"false","substitutionUrl":"1879447","assetName":["Sedalia Duathlon","Sedalia Duathlon"],"zip":"65301","contactPhone":"660-827-6809","eventLatitude":"38.70446","eventState":"Missouri","sortDate":"2000-09-26","keywords":"Event","eventAddress":"1901 S. New York","contactEmail":"jamm@iland.net","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/sedalia-mo/sedalia-duathlon-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-07-29","eventZip":"65301","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"38.70446","channel":["More Sports\\Duathlon","Triathlon"]}},{"escapedUrl":"http://www.active.com/triathlon/tempe-az/pbr-urban-dirt-duathlon-2010","language":"en","title":"PBR Urban Dirt Duathlon | Tempe, Arizona 85281 | Sunday \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/tempe-az/pbr-urban-dirt-duathlon-2010","summary":"","meta":{"eventDate":"2010-10-10T07:30:00-07:00","location":"North side of Tempe Town Lake near sand Volleyball courts, east of Mill Ave. Race thru Papago!","tag":["event:10","Triathlon:10"],"endDate":"2010-10-10","eventLongitude":"-111.9305","splitMediaType":["Event","Off-Road","Sprint","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"lastModifiedDateTime":"2010-09-08 15:15:42.507","locationName":"North side of Tempe Town Lake near sand Volleyball courts, east of Mill Ave. Race thru Papago!","endTime":"7:30:00","google-site-verification":"","city":"Tempe","startTime":"7:30:00","eventId":"1814945","description":"","longitude":"-111.9305","substitutionUrl":"1814945","eventLatitude":"33.42507","eventState":"Arizona","sortDate":"2000-10-10","keywords":"Event","eventAddress":"54 West Rio Salado Parkway","dma":"Phoenix","seourl":"http://www.active.com/triathlon/tempe-az/pbr-urban-dirt-duathlon-2010","country":"United States","category":"Activities","market":"Phoenix","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Red Rock Co","eventZip":"85281","latitude":"33.42507","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-10","state":"Arizona","mediaType":["Event","Event\\Off-Road","Event\\Sprint","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"estParticipants":"400","assetId":["C47BA275-BFFF-41F1-8915-42F9159456B6","c47ba275-bfff-41f1-8915-42f9159456b6"],"participationCriteria":"Adult,Family,Kids,Men,Women","onlineDonationAvailable":"0","assetName":["PBR Urban Dirt Duathlon","PBR Urban Dirt Duathlon"],"eventURL":"http://www.redrockco.com","zip":"85281","contactPhone":"877-681-7223","contactEmail":"mike@redrockco.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/triathlon/tempe-az/pbr-urban-dirt-duathlon-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-08","channel":["More Sports\\Duathlon","Triathlon"]}},{"escapedUrl":"http://www.active.com/triathlon/hayesville-nc/fall-chill-duathlon-2010","language":"en","title":"Fall Chill Duathlon 2010 | Hayesville, North Carolina 28904 \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/hayesville-nc/fall-chill-duathlon-2010","summary":"","meta":{"eventDate":"2010-10-24T10:00:00-07:00","location":"Clay County Recreation Park: 5 miles from Hiawassee Ga","tag":["event:10","Triathlon:10"],"endDate":"2010-10-24","eventLongitude":"-83.73081","splitMediaType":["Event","Sprint","\u003ddifficulty:Intermediate"],"lastModifiedDateTime":"2010-09-16 03:11:56.37","locationName":"Clay County Recreation Park: 5 miles from Hiawassee Ga","endTime":"10:00:00","google-site-verification":"","city":"Hayesville","startTime":"10:00:00","eventId":"1816551","description":"","longitude":"-83.73081","substitutionUrl":"1816551","eventLatitude":"35.04112","eventState":"North Carolina","sortDate":"2000-10-24","keywords":"Event","eventAddress":"Clay County Recreation Park Road, Hayesville, NC 28904","dma":"Atlanta","seourl":"http://www.active.com/triathlon/hayesville-nc/fall-chill-duathlon-2010","country":"United States","category":"Activities","market":"Atlanta","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Scott Hanna","eventZip":"28904","latitude":"35.04112","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-24","state":"North Carolina","mediaType":["Event","Event\\Sprint","\u003ddifficulty:Intermediate"],"estParticipants":"150","assetId":["2B2DD142-23EA-42AE-A86A-C3BAAF8089F0","2b2dd142-23ea-42ae-a86a-c3baaf8089f0"],"participationCriteria":"Adult","onlineDonationAvailable":"0","assetName":["Fall Chill Duathlon 2010","Fall Chill Duathlon 2010"],"eventURL":"http://www.thebeastoftheeast.net","zip":"28904","contactPhone":"828-389-6982","contactEmail":"tri20001@msn.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/triathlon/hayesville-nc/fall-chill-duathlon-2010","onlineRegistrationAvailable":"true","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-16","channel":["More Sports\\Duathlon","Triathlon"]}},{"escapedUrl":"http://www.active.com/triathlon/congers-ny/fall-toga-duathlon-2010","language":"en","title":"2010 Fall Toga Duathlon | Congers, New York 10920 \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/congers-ny/fall-toga-duathlon-2010","summary":"","meta":{"startDate":"2010-10-17","eventDate":"2010-10-17T08:30:00-07:00","location":"Rockland Lake","tag":["event:10","Triathlon:10"],"state":"New York","endDate":"2010-10-17","eventLongitude":"-73.93904","splitMediaType":["Event","Sprint"],"locationName":"Rockland Lake","endTime":"8:30:00","mediaType":["Event","Event\\Sprint"],"city":"Congers","google-site-verification":"","startTime":"8:30:00","assetId":["096853C1-151A-4EED-9931-79275795AAA9","096853c1-151a-4eed-9931-79275795aaa9"],"eventId":"1821127","participationCriteria":"All","description":"","longitude":"-73.93904","onlineDonationAvailable":"false","substitutionUrl":"1821127","assetName":["2010 Fall Toga Duathlon","2010 Fall Toga Duathlon"],"zip":"10920","contactPhone":"8453538331","eventLatitude":"41.15644","eventState":"New York","sortDate":"2000-10-17","keywords":"Event","eventAddress":"Rt 9W","contactEmail":"Lonny@Togabikes.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/congers-ny/fall-toga-duathlon-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-03-02 15:22:22.54","eventZip":"10920","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"41.15644","channel":["More Sports\\Duathlon","Triathlon"]}},{"escapedUrl":"http://www.active.com/triathlon/mendon-ny/rochester-autumn-classic-duathlon-2010","language":"en","title":"Rochester Autumn Classic Duathlon 2010 | Mendon, New \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/mendon-ny/rochester-autumn-classic-duathlon-2010","summary":"","meta":{"eventDate":"2010-10-03T08:30:00-07:00","location":"Stewart Lodge, Mendon Ponds Park","tag":["event:10","Triathlon:10"],"endDate":"2010-10-03","eventLongitude":"-77.49951","splitMediaType":["Event","Sprint"],"lastModifiedDateTime":"2010-08-30 13:15:51.837","locationName":"Stewart Lodge, Mendon Ponds Park","endTime":"8:30:00","google-site-verification":"","city":"Mendon","startTime":"8:30:00","eventId":"1821816","description":"","longitude":"-77.49951","substitutionUrl":"1821816","eventLatitude":"42.99441","eventState":"New York","sortDate":"2000-10-03","keywords":"Event","eventAddress":"Douglas Rd.","dma":"Rochester, NY","seourl":"http://www.active.com/triathlon/mendon-ny/rochester-autumn-classic-duathlon-2010","country":"United States","category":"Activities","market":"Rochester, NY","contactName":"Dave or Ellen Boutillier","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","eventZip":"14506","latitude":"42.99441","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-03","state":"New York","mediaType":["Event","Event\\Sprint"],"estParticipants":"250","assetId":["39F96A49-A188-4592-A04C-755D12D5D8BB","39f96a49-a188-4592-a04c-755d12d5d8bb"],"participationCriteria":"All","onlineDonationAvailable":"0","assetName":["Rochester Autumn Classic Duathlon 2010","Rochester Autumn Classic Duathlon 2010"],"eventURL":"http://www.yellowjacketracing.com","zip":"14506","contactPhone":"585-697-3338","contactEmail":"elleneabrenner@aol.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/triathlon/mendon-ny/rochester-autumn-classic-duathlon-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-08-30","channel":["More Sports\\Duathlon","Triathlon"]}},{"escapedUrl":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","language":"en","title":"IRONMAN 70.3 MIAMI | Miami, Florida 33132 | Saturday \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","summary":"","meta":{"startDate":"2010-10-30","eventDate":"2010-10-30T07:00:00-07:00","location":"Bayfront Park - Downtown Miami","tag":["event:10","Triathlon:10"],"state":"Florida","eventLongitude":"-80.18975","endDate":"2010-10-30","lastModifiedDateTime":"2010-05-10 11:16:04.46","splitMediaType":["Event","Ironman","Long Course","\u003ddifficulty:Advanced","\u003ddifficulty:Intermediate"],"locationName":"Bayfront Park - Downtown Miami","endTime":"7:00:00","mediaType":["Event","Event\\Ironman","Event\\Long Course","\u003ddifficulty:Advanced","\u003ddifficulty:Intermediate"],"city":"Miami","google-site-verification":"","startTime":"7:00:00","assetId":["72FAE9F7-5C68-4DF8-B01C-B63AC188A06A","72fae9f7-5c68-4df8-b01c-b63ac188a06a"],"eventId":"1800302","participationCriteria":"Adult,Family,Men,Women","description":"","longitude":"-80.18975","onlineDonationAvailable":"false","substitutionUrl":"1800302","assetName":["IRONMAN 70.3 MIAMI","IRONMAN 70.3 MIAMI"],"zip":"33132","contactPhone":"3053072285","eventLatitude":"25.78649","eventState":"Florida","sortDate":"2000-10-30","keywords":"Event","eventAddress":"301 N. Biscayne Blvd.","contactEmail":"jennifer@miamitrievents.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-05-10","eventZip":"33132","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"25.78649","channel":"Triathlon"}},{"escapedUrl":"http://www.active.com/triathlon/austin-tx/austin-oyster-urban-adventure-race-2010","language":"en","title":"Austin Oyster Urban Adventure Race | Austin, Texas 78704 \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/austin-tx/austin-oyster-urban-adventure-race-2010","summary":"","meta":{"eventDate":"2010-10-16T08:00:00-07:00","location":"Runtex","tag":["event:10","Triathlon:10"],"endDate":"2010-10-16","eventLongitude":"-97.76204","splitMediaType":"Event","lastModifiedDateTime":"2010-09-17 10:16:19.03","locationName":"Runtex","endTime":"8:00:00","google-site-verification":"","city":"Austin","startTime":"8:00:00","eventId":"1831863","description":"","longitude":"-97.76204","substitutionUrl":"1831863","eventLatitude":"30.24495","eventState":"Texas","sortDate":"2000-10-16","keywords":"Event","eventAddress":"422 W. Riverside","dma":"Austin","seourl":"http://www.active.com/triathlon/austin-tx/austin-oyster-urban-adventure-race-2010","country":"United States","category":"Activities","market":"Austin","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Luann Morris","eventZip":"78704","latitude":"30.24495","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-16","state":"Texas","mediaType":"Event","estParticipants":"500","assetId":["5BCA2E67-05F8-49FA-911B-EA007A08A7ED","5bca2e67-05f8-49fa-911b-ea007a08a7ed"],"participationCriteria":"All","onlineDonationAvailable":"0","assetName":["Austin Oyster Urban Adventure Race","Austin Oyster Urban Adventure Race"],"eventURL":"http://OysterRacingSeries.com","zip":"78704","contactPhone":"3037776887","contactEmail":"luann@teamsage.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/triathlon/austin-tx/austin-oyster-urban-adventure-race-2010","onlineRegistrationAvailable":"true","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-17","channel":["More Sports\\Adventure Racing","Triathlon"]}},{"escapedUrl":"http://www.active.com/running/colorado-springs-co/fall-series-kids-2010-ov251","language":"en","title":"Fall Series 2010 (Kids) | Colorado Springs, Colorado 80903 \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/colorado-springs-co/fall-series-kids-2010-ov251","summary":"","meta":{"startDate":"2010-10-03","eventDate":"2010-10-03T13:30:00-07:00","location":"Various sites","tag":["event:10","Running:10"],"state":"Colorado","eventLongitude":"-104.8163","endDate":"2010-10-03","lastModifiedDateTime":"2010-08-12 11:19:31.73","splitMediaType":["Event","1 mile","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"locationName":"Various sites","endTime":"13:30:00","mediaType":["Event","Event\\1 mile","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"city":"Colorado Springs","google-site-verification":"","estParticipants":"400","startTime":"13:30:00","assetId":["54A4A562-2A34-4345-8A20-7084EC435C57","54a4a562-2a34-4345-8a20-7084ec435c57"],"eventId":"1882757","participationCriteria":"Kids","description":"","longitude":"-104.8163","onlineDonationAvailable":"true","substitutionUrl":"1882757","assetName":["Fall Series 2010 (Kids)","Fall Series 2010 (Kids)"],"zip":"80903","eventURL":"http://pprrun.org","contactPhone":"719-590-7086","sortDate":"2000-10-03","eventState":"Colorado","eventLatitude":"38.84134","keywords":"Event","contactEmail":"fallseries@aol.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/running/colorado-springs-co/fall-series-kids-2010-ov251","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","market":"Colorado Springs - Pueblo","contactName":"Larry Miller","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-08-12","eventZip":"80903","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"38.84134","channel":["Running","Walking"]}}]}',
321
- # :status => ["200", "Found"])
322
- # s = Search.search( {:zips=>["92198", "92199", "91901", "91902", "91903", "91905", "91906", "91908", "91909", "91910", "91911", "91912", "91913", "91914", "91915", "91916", "91917", "91921", "91931", "91932", "91933", "91934", "91935", "91941", "91942", "91943", "91944", "91945", "91946", "91947", "91948", "91950", "91951", "91962", "91963", "91976", "91977", "91978", "91979", "91980", "91987", "91990", "92003", "92004", "92007", "92008", "92009", "92013", "92014", "92018", "92019", "92020", "92021", "92022", "92023", "92024", "92025", "92026", "92027", "92028", "92029", "92030", "92033", "92036", "92037", "92038", "92039", "92040", "92046", "92049", "92051", "92052", "92054", "92055", "92056", "92057", "92058", "92059", "92060", "92061", "92064", "92065", "92066", "92067", "92068", "92069", "92070", "92071", "92072", "92074", "92075", "92078", "92079", "92082", "92083", "92084", "92085", "92086", "92088", "92090", "92091", "92092", "92093", "92096", "92101", "92102", "92103", "92104", "92105", "92106", "92107", "92108", "92109", "92110", "92111", "92112", "92113", "92114", "92115", "92116", "92117", "92118", "92119", "92120", "92121", "92122", "92123", "92124", "92126", "92127", "92128", "92129", "92130", "92131", "92132", "92133", "92134", "92135", "92136", "92137", "92138", "92139", "92140", "92142", "92143", "92145", "92147", "92149", "92150", "92152", "92153", "92154", "92155", "92158", "92159", "92160", "92161", "92162", "92163", "92164", "92165", "92166", "92167", "92168", "92169", "92170", "92171", "92172", "92173", "92174", "92175", "92176", "92177", "92178", "92179", "92182", "92184", "92186", "92187", "92190", "92191", "92192", "92193", "92194", "92195", "92196", "92197", "92081"]} )
323
- s = Search.search( {:zips=>["92198", "92199", "91901"]} )
324
- s.results.should have(10).items
325
- s.results.should_not be_empty
326
- end
327
-
328
- it "should handle a JSON parse error" do
329
- # /search?api_key=&num=10&page=1&l=0&f=activities&v=json&r=50&s=trending&k=&m=meta:startDate:daterange:today..+
330
- # FakeWeb.register_uri(:get, "http://search.active.com/search?api_key=&num=10&page=1&l=San+Diego%2C+CA%2C+US&f=activities&v=json&r=50&s=date_asc&k=&m=meta:startDate:daterange:today..+",
331
- # :body => '{"endIndex":10,"numberOfResults":2810,"pageSize":10,"searchTime":0.86581,"_results":[{"escapedUrl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","language":"en","title":"Myrtle Beach Mini Marathon | Myrtle Beach, South Carolina \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","summary":"","meta":{"eventDate":"2010-10-24T07:00:00-07:00","location":"Myrtle Beach, South Carolina","tag":["event:10","Running:10"],"endDate":"2010-10-24","eventLongitude":"-78.92921","splitMediaType":["Event","5K","Half Marathon","Marathon","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"lastModifiedDateTime":"2010-09-13 18:15:04.753","locationName":"Myrtle Beach, South Carolina","endTime":"7:00:00","google-site-verification":"","city":"Myrtle Beach","startTime":"7:00:00","eventId":"1797753","description":"","longitude":"-78.92921","substitutionUrl":"1797753","eventLatitude":"33.75043","eventState":"South Carolina","sortDate":"2000-10-24","keywords":"Event","eventAddress":"Medieval Times","dma":"Florence - Myrtle Beach","seourl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","country":"United States","category":"Activities","market":"Florence - Myrtle Beach","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Robert Pozo","eventZip":"29579","latitude":"33.75043","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-10-24","state":"South Carolina","mediaType":["Event","Event\\5K","Event\\Half Marathon","Event\\Marathon","\u003ddifficulty:Advanced","\u003ddifficulty:Beginner","\u003ddifficulty:Intermediate"],"estParticipants":"6000","assetId":["008540A9-C2AB-4D7F-BE68-298758B324CD","008540a9-c2ab-4d7f-be68-298758b324cd"],"participationCriteria":"Adult,Men,Women","onlineDonationAvailable":"1","assetName":["Myrtle Beach Mini Marathon","Myrtle Beach Mini Marathon"],"eventURL":"http://runmyrtlebeach.com","zip":"29579","contactPhone":"1-800-733-7089","contactEmail":"info@runmyrtlebeach.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/myrtle-beach-sc/myrtle-beach-mini-marathon-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-13","channel":"Running"}},{"escapedUrl":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","language":"en","title":"Fans on the Field 2010 - Denver Stadium 5K/10K | Denver \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","summary":"","meta":{"startDate":"2010-10-10","eventDate":"2010-10-10T00:00:00-07:00","location":"INVESCO Field at Mile High","tag":["event:10","Running:10"],"state":"Colorado","eventLongitude":"-105.0265","endDate":"2010-10-10","lastModifiedDateTime":"2010-08-05 16:15:18.14","splitMediaType":["Event","10K","5K"],"locationName":"INVESCO Field at Mile High","endTime":"0:00:00","mediaType":["Event","Event\\10K","Event\\5K"],"city":"Denver","google-site-verification":"","startTime":"0:00:00","assetId":["4850BB73-3701-493D-936C-C38CC0B3FD4C","4850bb73-3701-493d-936c-c38cc0b3fd4c"],"eventId":"1869635","participationCriteria":"All","description":"","longitude":"-105.0265","onlineDonationAvailable":"false","substitutionUrl":"1869635","assetName":["Fans on the Field 2010 - Denver Stadium 5K/10K","Fans on the Field 2010 - Denver Stadium 5K/10K"],"zip":"80204","contactPhone":"303-293-5315","eventLatitude":"39.73804","eventState":"Colorado","sortDate":"2000-10-10","keywords":"Event","eventAddress":"1801 Bryant Street","contactEmail":"ahinkle@nscd.org","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/running/denver-co/fans-on-the-field-denver-stadium-5k10k-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-08-05","eventZip":"80204","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"39.73804","channel":["Running","Walking"]}},{"escapedUrl":"http://www.active.com/running/west-palm-beach-fl/the-palm-beaches-marathon-festival-2010","language":"en","title":"The Palm Beaches Marathon Festival | West Palm Beach \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/west-palm-beach-fl/the-palm-beaches-marathon-festival-2010","summary":"","meta":{"eventDate":"2010-12-05T06:00:00-08:00","location":"West Palm Beach, Florida","tag":["event:10","Running:10"],"endDate":"2010-12-05","eventLongitude":"-80.06707","splitMediaType":["Event","5K","Half Marathon","Marathon","Relay"],"lastModifiedDateTime":"2010-09-10 13:15:05.057","locationName":"West Palm Beach, Florida","endTime":"6:00:00","google-site-verification":"","city":"West Palm Beach","startTime":"6:00:00","eventId":"1815427","description":"","longitude":"-80.06707","substitutionUrl":"1815427","eventLatitude":"26.72339","eventState":"Florida","sortDate":"2000-12-05","keywords":"Event","eventAddress":"S. Flagler Drive and Evernia St.","dma":"West Palm Beach - Fort Pierce","seourl":"http://www.active.com/running/west-palm-beach-fl/the-palm-beaches-marathon-festival-2010","country":"United States","category":"Activities","market":"West Palm Beach - Fort Pierce","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Iva Grady","eventZip":"33401","latitude":"26.72339","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-12-05","state":"Florida","mediaType":["Event","Event\\5K","Event\\Half Marathon","Event\\Marathon","Event\\Relay"],"estParticipants":"8000","assetId":["EA86AD3C-FBBA-403A-9DDB-1D211C210225","ea86ad3c-fbba-403a-9ddb-1d211c210225"],"participationCriteria":"All","onlineDonationAvailable":"0","assetName":["The Palm Beaches Marathon Festival","The Palm Beaches Marathon Festival"],"eventURL":"http://www.pbmarathon.com","zip":"33401","contactPhone":"561-833-3711 ex. 222","contactEmail":"info@marathonofthepalmbeaches.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/west-palm-beach-fl/the-palm-beaches-marathon-festival-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-10","channel":"Running"}},{"escapedUrl":"http://www.active.com/running/encino-ca/2nd-annual-wespark-10k-run-and-5k-run-walk-2010","language":"en","title":"2nd Annual weSPARK 10K Run \u0026amp; 5K Run Walk | Encino \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/encino-ca/2nd-annual-wespark-10k-run-and-5k-run-walk-2010","summary":"","meta":{"eventDate":"2010-11-14T08:00:00-08:00","location":"Balboa Park/Lake Balboa","tag":["event:10","Running:10"],"endDate":"2010-11-14","eventLongitude":"-118.4924","splitMediaType":["Event","10K","5K"],"lastModifiedDateTime":"2010-08-23 13:16:00.843","locationName":"Balboa Park/Lake Balboa","endTime":"8:00:00","google-site-verification":"","city":"Encino","startTime":"8:00:00","eventId":"1847738","description":"","longitude":"-118.4924","substitutionUrl":"1847738","eventLatitude":"34.19933","eventState":"California","sortDate":"2000-11-14","keywords":"Event","eventAddress":"6335 Woodley Avenue","dma":"Los Angeles","seourl":"http://www.active.com/running/encino-ca/2nd-annual-wespark-10k-run-and-5k-run-walk-2010","country":"United States","category":"Activities","market":"Los Angeles","contactName":"Lilliane Ballesteros","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","eventZip":"91406","latitude":"34.19933","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-11-14","state":"California","mediaType":["Event","Event\\10K","Event\\5K"],"estParticipants":"1400","assetId":["D9A22F33-8A14-4175-8D5B-D11578212A98","d9a22f33-8a14-4175-8d5b-d11578212a98"],"participationCriteria":"All","onlineDonationAvailable":"0","assetName":["2nd Annual weSPARK 10K Run \u0026 5K Run Walk","2nd Annual weSPARK 10K Run \u0026 5K Run Walk"],"eventURL":"http://www.wespark.org","zip":"91406","contactPhone":"818-906-3022","contactEmail":"lilliane@wespark.org","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/encino-ca/2nd-annual-wespark-10k-run-and-5k-run-walk-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-08-23","channel":["Running","Walking"]}},{"escapedUrl":"http://www.active.com/running/los-angeles-playa-del-rey-ca/heroes-of-hope-race-for-research-2010","language":"en","title":"Heroes of Hope Race for Research | Los Angeles, Playa Del \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/los-angeles-playa-del-rey-ca/heroes-of-hope-race-for-research-2010","summary":"","meta":{"eventDate":"2010-11-07T08:00:00-08:00","location":"Dockweiler State Beach","tag":["event:10","Running:10"],"endDate":"2010-11-07","eventLongitude":"-118.4392","splitMediaType":["Event","10K","5K"],"lastModifiedDateTime":"2010-09-09 07:15:48.193","locationName":"Dockweiler State Beach","endTime":"8:00:00","google-site-verification":"","city":"Los Angeles, Playa Del Rey","startTime":"8:00:00","eventId":"1858905","description":"","longitude":"-118.4392","substitutionUrl":"1858905","eventLatitude":"33.9495","eventState":"California","sortDate":"2000-11-07","keywords":"Event","eventAddress":"8255 Vista Del Mar Blvd","dma":"Los Angeles","seourl":"http://www.active.com/running/los-angeles-playa-del-rey-ca/heroes-of-hope-race-for-research-2010","country":"United States","category":"Activities","market":"Los Angeles","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","contactName":"Lisa Kaminsky-Millar","eventZip":"90293","latitude":"33.9495","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-11-07","state":"California","mediaType":["Event","Event\\10K","Event\\5K"],"estParticipants":"1000","assetId":["0D92AB40-ED0B-4657-B00B-480B38062F1C","0d92ab40-ed0b-4657-b00b-480b38062f1c"],"participationCriteria":"All","onlineDonationAvailable":"1","assetName":["Heroes of Hope Race for Research","Heroes of Hope Race for Research"],"eventURL":"http://www.heroesofhoperace.org","zip":"90293","contactPhone":"1-866-48-4CURE","contactEmail":"heroesofhoperace@gmail.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/los-angeles-playa-del-rey-ca/heroes-of-hope-race-for-research-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-09","channel":"Running"}},{"escapedUrl":"http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","language":"en","title":"Calabasas Classic 2010 - 5k 10k Runs | Calabasas, California \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","summary":"","meta":{"eventDate":"2010-11-14T08:00:00-08:00","location":"Calabasas Park Centre","tag":["event:10","Green:10","Running:10"],"endDate":"2010-11-14","eventLongitude":"-118.6789","splitMediaType":["Event","1 mile","10K","5K"],"lastModifiedDateTime":"2010-09-14 21:02:55.007","locationName":"Calabasas Park Centre","endTime":"8:00:00","google-site-verification":"","city":"Calabasas","startTime":"8:00:00","eventId":"1810531","description":"","longitude":"-118.6789","substitutionUrl":"1810531","eventLatitude":"34.12794","eventState":"California","sortDate":"2000-11-14","keywords":"Event","eventAddress":"23975 Park Sorrento","dma":"Los Angeles","seourl":"http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","country":"United States","category":"Activities","market":"Los Angeles","contactName":"Julie Talbert","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","eventZip":"91302","latitude":"34.12794","UpdateDateTime":"9/1/2010 6:09:21 PM","startDate":"2010-11-14","state":"California","mediaType":["Event","Event\\1 mile","Event\\10K","Event\\5K"],"estParticipants":"2500","assetId":["11B01475-8C65-4F9C-A4AC-2A3FA55FE8CD","11b01475-8c65-4f9c-a4ac-2a3fa55fe8cd"],"participationCriteria":"All","onlineDonationAvailable":"0","assetName":["Calabasas Classic 2010 - 5k 10k Runs","Calabasas Classic 2010 - 5k 10k Runs"],"eventURL":"http://www.calabasasclassic.com","zip":"91302","contactPhone":"818-715-0428","contactEmail":"rot10kd@yahoo.com","onlineMembershipAvailable":"0","trackbackurl":"http://www.active.com/running/calabasas-ca/calabasas-classic-5k-10k-runs-2010","onlineRegistrationAvailable":"1","image1":"http://www.active.com/images/events/hotrace.gif","lastModifiedDate":"2010-09-14","channel":["Running","Walking"]}},{"escapedUrl":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","language":"en","title":"IRONMAN 70.3 MIAMI | Miami, Florida 33132 | Saturday \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","summary":"","meta":{"startDate":"2010-10-30","eventDate":"2010-10-30T07:00:00-07:00","location":"Bayfront Park - Downtown Miami","tag":["event:10","Triathlon:10"],"state":"Florida","eventLongitude":"-80.18975","endDate":"2010-10-30","lastModifiedDateTime":"2010-05-10 11:16:04.46","splitMediaType":["Event","Ironman","Long Course","\u003ddifficulty:Advanced","\u003ddifficulty:Intermediate"],"locationName":"Bayfront Park - Downtown Miami","endTime":"7:00:00","mediaType":["Event","Event\\Ironman","Event\\Long Course","\u003ddifficulty:Advanced","\u003ddifficulty:Intermediate"],"city":"Miami","google-site-verification":"","startTime":"7:00:00","assetId":["72FAE9F7-5C68-4DF8-B01C-B63AC188A06A","72fae9f7-5c68-4df8-b01c-b63ac188a06a"],"eventId":"1800302","participationCriteria":"Adult,Family,Men,Women","description":"","longitude":"-80.18975","onlineDonationAvailable":"false","substitutionUrl":"1800302","assetName":["IRONMAN 70.3 MIAMI","IRONMAN 70.3 MIAMI"],"zip":"33132","contactPhone":"3053072285","eventLatitude":"25.78649","eventState":"Florida","sortDate":"2000-10-30","keywords":"Event","eventAddress":"301 N. Biscayne Blvd.","contactEmail":"jennifer@miamitrievents.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/miami-fl/ironman-703-miami-2010","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-05-10","eventZip":"33132","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"25.78649","channel":"Triathlon"}},{"escapedUrl":"http://www.active.com/triathlon/san-juan-na/ironman-703-san-juan-2011-ig329","language":"en","title":"2011 Ironman 70.3 San Juan | San Juan, 00901 | Saturday \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/san-juan-na/ironman-703-san-juan-2011-ig329","summary":"","meta":{"startDate":"2011-03-19","eventDate":"2011-03-19T07:00:00-07:00","location":"Los Rosales Street, San Geronimo Grounds","tag":["event:10","Triathlon:10"],"state":"N/A","endDate":"2011-03-19","eventLongitude":"-66.10572","lastModifiedDateTime":"2010-06-15 14:15:08.557","splitMediaType":["Event","Ironman","\u003ddifficulty:Advanced"],"locationName":"Los Rosales Street, San Geronimo Grounds","endTime":"7:00:00","mediaType":["Event","Event\\Ironman","\u003ddifficulty:Advanced"],"city":"San Juan","google-site-verification":"","startTime":"7:00:00","assetId":["F6B819B9-9CC1-4E67-A87D-11518B05D4F3","f6b819b9-9cc1-4e67-a87d-11518b05d4f3"],"eventId":"1841595","participationCriteria":"Adult","description":"","longitude":"-66.10572","onlineDonationAvailable":"false","substitutionUrl":"1841595","assetName":["2011 Ironman 70.3 San Juan","2011 Ironman 70.3 San Juan"],"zip":"00901","contactPhone":"813-868-5940","eventLatitude":"18.46633","sortDate":"2001-03-19","keywords":"Event","contactEmail":"info@bnsportsllc.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/san-juan-na/ironman-703-san-juan-2011-ig329","country":"Puerto Rico","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65","lastModifiedDate":"2010-06-15","eventZip":"00901","latitude":"18.46633","UpdateDateTime":"9/1/2010 6:09:21 PM","channel":"Triathlon"}},{"escapedUrl":"http://www.active.com/triathlon/st-george-ut/ford-ironman-st-george-2011","language":"en","title":"2011 Ford Ironman St. George | St. George, Utah 84737 \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/st-george-ut/ford-ironman-st-george-2011","summary":"","meta":{"startDate":"2011-05-07","eventDate":"2011-05-07T07:00:00-07:00","location":"Sand Hollow State Park,","tag":["event:10","Triathlon:10"],"state":"Utah","eventLongitude":"-113.1508","endDate":"2011-05-07","lastModifiedDateTime":"2010-07-22 11:15:08.46","splitMediaType":["Event","Ironman","Long Course"],"locationName":"Sand Hollow State Park,","endTime":"7:00:00","mediaType":["Event","Event\\Ironman","Event\\Long Course"],"city":"St. George","google-site-verification":"","startTime":"7:00:00","assetId":["A10B5BC1-BD95-4AFE-A1F6-35F6099E3636","a10b5bc1-bd95-4afe-a1f6-35f6099e3636"],"eventId":"1848350","participationCriteria":"All","description":"","longitude":"-113.1508","onlineDonationAvailable":"false","substitutionUrl":"1848350","assetName":["2011 Ford Ironman St. George","2011 Ford Ironman St. George"],"zip":"84737","contactPhone":"813-868-5940","eventLatitude":"37.15574","eventState":"Utah","sortDate":"2001-05-07","keywords":"Event","eventAddress":"4405 West 3600 South","contactEmail":"stgeorge@ironman.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/st-george-ut/ford-ironman-st-george-2011","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6","lastModifiedDate":"2010-07-22","eventZip":"84737","UpdateDateTime":"9/1/2010 6:09:21 PM","latitude":"37.15574","channel":"Triathlon"}},{"escapedUrl":"http://www.active.com/triathlon/galveston-tx/memorial-hermann-ironman-703-texas-and-lonestar-sprint-triathlon-2011","language":"en","title":"2011 Memorial Hermann Ironman 70.3 Texas \u0026amp; Lonestar \u003cb\u003e...\u003c/b\u003e","url":"http://www.active.com/triathlon/galveston-tx/memorial-hermann-ironman-703-texas-and-lonestar-sprint-triathlon-2011","summary":"","meta":{"startDate":"2011-04-09","eventDate":"2011-04-09T07:00:00-07:00","location":"Moody Gardens","state":"Texas","endDate":"2011-04-10","eventLongitude":"-94.90395","lastModifiedDateTime":"2010-05-12 09:16:41.91","splitMediaType":["Event","Ironman","Long Course","Sprint"],"locationName":"Moody Gardens","endTime":"7:00:00","mediaType":["Event","Event\\Ironman","Event\\Long Course","Event\\Sprint"],"city":"Galveston","google-site-verification":"","startTime":"7:00:00","assetId":["A40CC533-D502-4953-8157-DBB64D7FC4C2","a40cc533-d502-4953-8157-dbb64d7fc4c2"],"eventId":"1859810","participationCriteria":"All","description":"","longitude":"-94.90395","onlineDonationAvailable":"false","substitutionUrl":"1859810","assetName":["2011 Memorial Hermann Ironman 70.3 Texas \u0026 Lonestar Sprint Triathlon","2011 Memorial Hermann Ironman 70.3 Texas \u0026 Lonestar Sprint Triathlon"],"zip":"77554","contactPhone":"813-868-5940","eventLatitude":"29.24699","eventState":"Texas","sortDate":"2001-04-09","keywords":"Event","contactEmail":"texas70.3@ironman.com","onlineMembershipAvailable":"false","trackbackurl":"http://www.active.com/triathlon/galveston-tx/memorial-hermann-ironman-703-texas-and-lonestar-sprint-triathlon-2011","country":"United States","onlineRegistrationAvailable":"true","category":"Activities","image1":"http://www.active.com/images/events/hotrace.gif","assetTypeId":"3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6","lastModifiedDate":"2010-05-12","eventZip":"77554","latitude":"29.24699","UpdateDateTime":"9/1/2010 6:09:21 PM","channel":"Triathlon"}}]}',
332
- # :status => ["200", "Found"])
333
- # This query is throwing this error "source did not contain any JSON!" and we need to handle it
334
- # s = Search.search( {:radius=>"50", :keywords=>"", :page=>1, :num_results=>10, :location=>"0"} )
335
- pending
336
- end
337
-
338
- end
339
- describe "Call Live Data" do
340
-
341
- it "should find only events in the future" do
342
- s = Search.search( { :keywords => ["running"] } )
343
- s.should have(10).results
344
- s.results.each do |a|
345
- a.start_date.should satisfy { |d|
346
- d >= Date.today
347
- }
328
+
329
+ it "should find Running events" do
330
+ asset = Active::Asset.order(:date_asc)
331
+ asset.page(1).limit(1)
332
+ asset.channel('Running')
333
+ asset.to_query.should have_param('Running')
334
+ asset.results.first.should be_an_instance_of(Active::Activity)
335
+ asset.results.first.url.should_not be_nil
336
+ asset.results.first.meta.eventId.should_not be_nil
348
337
  end
349
- end
350
-
351
- it "should find only events with in a range" do
352
- s = Search.search( {:start_date => Date.new(2010,1,1), :end_date => Date.new(2010,2,1)} )
353
- s.should have(10).results
354
- s.results.each do |a|
355
- a.start_date.should satisfy { |d|
356
- d >= Date.new(2010,1,1) and d <= Date.new(2010,2,1)
357
- }
338
+
339
+ it "should not return more then 1000 results" do
340
+ # GSA will only return 1000 events but will give us a number larger then 1000.
341
+ # This test depends on this query returning more than 1000
342
+ asset = Active::Asset.order(:date_asc)
343
+ asset.results.number_of_results.should eql(1000)
358
344
  end
359
345
  end
360
-
361
- it "should find events after the start date" do
362
- s = Search.search( {:start_date => Date.new(2010,1,1), :num_results => 50} )
363
- s.should have(50).results
364
- s.results.each do |a|
365
- a.start_date.should satisfy { |d|
366
- d >= Date.new(2010,1,1)
367
- }
346
+
347
+ describe "Results Object" do
348
+
349
+ it "should have a date object for each result" do
350
+ asset = Active::Asset.new({"meta" => {"startDate"=>"2011-07-16"}})
351
+ asset.start_date.should be_an_instance_of(Date)
368
352
  end
369
- s.results.each do |a|
370
- a.asset_id.should_not be_nil
353
+
354
+ it "should return nil of there isn't a date" do
355
+ asset = Active::Asset.new()
356
+ asset.start_date.should be_nil
357
+ asset = Active::Asset.new({"meta" => { "foo"=>"bar" }})
358
+ asset.start_date.should be_nil
359
+ end
360
+
361
+ it "should return nil if the title is missing" do
362
+ asset = Active::Asset.new({"meta" => {"startDate"=>"2011-07-16"}})
363
+ asset.title.should be_nil
371
364
  end
372
- end
373
-
374
- it "should search by keyword" do
375
- s = Search.search( {:keywords => "Running Race"} )
376
- s.results.should have_at_least(1).items
377
- end
378
-
379
- it "shouls search by city" do
380
- s = Search.search({:city=>"Oceanside"})
381
- s.results.should have_at_least(1).items
382
- end
383
- # our model should be updated to handle multiple categories
384
- # I'm sure running is with in all of these events but we're only storing 1.
385
- # it "should find only running activities" do
386
- # s = Search.search( {:channels => [:running],
387
- # :start_date => Date.new(2010,1,1), :num_results => 20} )
388
- # s.should have(20).results
389
- # s.results.each do |a|
390
- # puts "-#{a.category}-"
391
- # a.category.should satisfy { |d|
392
- # d.include?('Running' )
393
- # }
394
- # end
395
- # end
396
-
397
- it "should find yoga activities by channel" do
398
- s = Search.search( {:channels => [:yoga]} )
399
- s.should have_at_least(1).results
400
- end
401
-
402
- it "should not set sort to an empty string" do
403
- # s = Search.search( {:sort => ""} )
404
- # s.sort.should_not be_empty
405
- pending
406
- end
407
-
408
- it "should get results given these area codes" do
409
- s = Search.search( {:zips => "92121, 92078, 92114"} )
410
- s.should be_an_instance_of Search
411
- s.results.should_not be_empty
412
- end
413
365
 
414
- it "should find activities that have been recently added" do
415
- s = Search.search( {:sort=>Sort.DATE_DESC})
416
- s.should be_an_instance_of Search
417
- s.results.should_not be_empty
418
- # s.results.each do |a|
419
- # DateTime.parse(a.gsa.last_modified).should satisfy { |d|
420
- # d >= DateTime.now-2
421
- # }
422
- # end
366
+ it "should return nil if the title is missing" do
367
+ asset = Active::Asset.new({"meta" => {"startDate"=>"2011-07-16"}})
368
+ asset.to_json.should eql("{\"meta\":{\"startDate\":\"2011-07-16\"}}")
369
+ end
370
+
423
371
  end
424
- it "should find events that have online regristration"
425
- it "should find events that do not have online regristration"
426
372
 
427
- it "should have a nil email address from GSA" do
428
- Search.search(:asset_id => "715ED4EF-E4FF-42F2-B24B-2E4255649676").results.first.user.email.should be_nil
373
+ describe "Factory" do
374
+ it "should type cast results" do
375
+ asset = Active::Asset.factory({})
376
+ asset.should be_an_instance_of(Active::Asset)
377
+ asset2 = Active::Asset.factory({'meta'=>{'category'=>'Activities'}})
378
+ asset2.should be_an_instance_of(Active::Activity)
379
+ asset3 = Active::Asset.factory({'meta'=>{'category'=>'Articles'}})
380
+ asset3.should be_an_instance_of(Active::Article)
381
+ asset4 = Active::Asset.factory({'meta'=>{'category'=>'Training plans'}})
382
+ asset4.should be_an_instance_of(Active::Training)
383
+ end
429
384
  end
430
-
431
- end
432
- describe "Parametric search" do
433
- describe "Parametric search for running channel" do
434
- it "should find by splitMediaType for the Running channel" do
435
- # http://developer.active.com/docs/Activecom_Search_API_Reference
436
- s = Search.search({:channels => [:running], :split_media_type => ["5K"]})
437
- s.results.each do |result|
438
- result.gsa.data['meta']['splitMediaType'].should include("5K")
439
- end
385
+
386
+ describe "Real world examples" do
387
+ it "should work in Search.rb" do
388
+ asset = Active::Activity.page(1).limit(10)
389
+ asset.date_range( "2000-11-1", "2011-11-3" )
390
+ asset.keywords("run")
391
+ asset.state("CA")
392
+ asset.channel("Running")
393
+
394
+ asset.to_query.should have_param("meta:startDate:daterange:11%2F01%2F2000..11%2F03%2F2011")
395
+ asset.to_query.should have_param("k=run")
396
+ asset.to_query.should have_param("meta:state=CA")
397
+ asset.to_query.should have_param("meta:channel=Running")
440
398
 
441
- end
399
+ # open_url asset.to_query
400
+ asset.should have_exactly(10).results
401
+ end
402
+ it "should work in Search.rb" do
403
+ asset = Active::Activity.page(1).limit(10)
404
+ asset.date_range( "2000-11-1", "2011-11-3" )
405
+ asset.keywords("run walk")
406
+ asset.state("CA")
407
+ asset.channel("Running")
408
+
409
+ # open_url asset.to_query
410
+ asset.to_query.should have_param("k=run%20walk")
411
+ asset.should have_at_least(1).results
412
+ end
442
413
  end
443
- describe "Parametric search for triathlon channel" do
444
- end
445
- end
446
414
 
415
+ end
447
416
  end
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
-
460
-
461
-
462
-
463
-
464
-
465
-