collin-google_ajax_feed_api 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile.rb CHANGED
@@ -26,7 +26,8 @@ end
26
26
 
27
27
  namespace :gem do
28
28
  task :version do
29
- @version = "0.0.2"
29
+ require 'lib/google_ajax_feed_api'
30
+ @version = Google::Ajax::Feed::Version
30
31
  end
31
32
 
32
33
  task :build => :spec do
@@ -4,218 +4,18 @@ require 'extlib'
4
4
  require 'json'
5
5
  require 'open-uri'
6
6
 
7
+ $LOAD_PATH << File.dirname(__FILE__)
8
+
7
9
  module Google #:nodoc:
8
10
  module Ajax #:nodoc:
9
11
  class Feed
10
- # = Google Ajax Feed Api
11
- class Entry
12
- def inspect # :nodoc:
13
- "<#Google::Ajax::Feed::Entry link=#{link} title=#{title}>"
14
- end
15
-
16
- # The permalink for this entry
17
- def link
18
- @data["link"]
19
- end
20
-
21
- # The title for this entry
22
- def title
23
- @data["title"]
24
- end
25
-
26
- # The content of this entry
27
- def content
28
- @data["content"]
29
- end
30
-
31
- # A snippet of this entries content
32
- def snippet
33
- @data["contentSnippet"]
34
- end
35
-
36
- # The author for this specific entry
37
- def author
38
- @data["author"]
39
- end
40
-
41
- # The publication date for this entry
42
- def created_at
43
- @data["publishedDate"]
44
- end
45
-
46
- def initialize data #:nodoc:
47
- @data = data
48
- end
49
- end
50
-
51
- module API #:nodoc:
52
- def self.[] version
53
- case version
54
- when '1.0'
55
- OneZero
56
- end
57
- end
58
-
59
- class OneZero
60
- class << self
61
- # The endpoint URI for lookup requests
62
- def lookup
63
- "http://ajax.googleapis.com/ajax/services/feed/lookup"
64
- end
65
-
66
- # The endpoint URI for search requests
67
- def find
68
- "http://ajax.googleapis.com/ajax/services/feed/find"
69
- end
70
-
71
- # The endpoint URI for loading feeds
72
- def load
73
- "http://ajax.googleapis.com/ajax/services/feed/load"
74
- end
75
-
76
- # Builds a query to lookup a feed for a url
77
- def lookup_query url
78
- "#{lookup}#{params url}"
79
- end
80
-
81
-
82
- # Builds a query to search for feeds
83
- # query is a search term
84
- def find_query query
85
- "#{find}#{params query}"
86
- end
87
-
88
-
89
- # Builds a query
90
- # options are overrides for Feed#config options
91
- def load_query url, options={}
92
- "#{load}#{params url}#{load_params options}"
93
- end
94
-
95
- def load_params options={} #:nodoc
96
- options = ({
97
- :limit => Feed.config.limit,
98
- :history => Feed.config.history
99
- }).merge(options)
100
-
101
- params = "&num=#{options[:limit]}"
102
- params << '&scoring=h' if options[:history]
103
- params
104
- end
105
-
106
- def params query #:nodoc:
107
- "?v=1.0&q=#{URI.encode query}"
108
- end
109
- end
110
- end
111
- end
112
-
113
- class << self
114
- # Default values are:
115
- # * config.version = '1.0'
116
- #
117
- # version specifies what version of the feed API to use.
118
- # 1.0 is the only version that exists and thusly the only
119
- # option supported. DO NOT CHANGE THIS
120
- #
121
- # * config.limit = 15
122
- #
123
- # limit specifies how many feed items may be fetched at once
124
- # Google specifies a hard limit of 100.
125
- # But an individual feed might have it's own, lower limit.
126
- #
127
- # * config.history = false
128
- # Which is where the history option comes into play.
129
- # History pulls from Googls cache of the feed, not from the current
130
- # state of the feed. With this option you can fetch up to 100 items
131
- # from a feed that shows fewer than 100 at any given time.
132
- def config
133
- @config ||= OpenStruct.new(
134
- :version => '1.0',
135
- :limit => 15,
136
- :history => false
137
- )
138
- end
139
-
140
- # Lookup will take any of these url formats:
141
- # * http://example.com
142
- # * http://example.com/
143
- # * http://www.example.com/
144
- # * www.example.com
145
- # * example.com/rss
146
- # * etc.
147
- #
148
- # And the object created will have the same Feed#canonical_id
149
- # Use of Feed#new is strongly discouraged
150
- def lookup url
151
- http_response = JSON.parse open(api.lookup_query(url)).read
152
- url = http_response["responseData"]["url"]
153
- new url
154
- end
155
-
156
- def api #:nodoc:
157
- API[config.version]
158
- end
159
- end
12
+ Version = "0.0.3"
13
+ end
160
14
 
161
- # A canonical identifier for the feed. Feeds found with Feed#lookup
162
- # will have the some canonical_id even if the url used to find them
163
- # was not 100% the same. (Missing '/' etc.)
164
- def canonical_id
165
- @url
166
- end
167
-
168
- # true if the lookup returned a positive match for a feed
169
- def valid?
170
- not @url.nil?
171
- end
15
+ require 'google_ajax_feed_api/feed'
16
+ require 'google_ajax_feed_api/entry'
17
+ require 'google_ajax_feed_api/api'
18
+ require 'google_ajax_feed_api/api/one_zero'
172
19
 
173
- # The link of the feed.
174
- def link
175
- feed["link"]
176
- end
177
-
178
- # The author of the feed.
179
- def author
180
- feed["author"]
181
- end
182
-
183
- # The title of the feed.
184
- def title
185
- feed["title"]
186
- end
187
-
188
- # The description of the feed.
189
- def description
190
- feed["description"]
191
- end
192
-
193
- # List of Entry objects for this feed.
194
- def entries
195
- @entries ||= feed["entries"].map do |entry|
196
- Entry.new(entry)
197
- end
198
- end
199
-
200
- def load options={} #:nodoc:
201
- url = self.class.api.load_query @url, options
202
-
203
- # Very strange json bug. Bye bye tabs
204
- http_response = JSON.parse open(url).read.gsub("\t", '')
205
-
206
- @feed = http_response["responseData"]["feed"]
207
-
208
- return @feed.length
209
- end
210
-
211
- def feed #:nodoc:
212
- load if @feed.nil?
213
- @feed
214
- end
215
-
216
- def initialize url #:nodoc:
217
- @url = url
218
- end
219
- end
220
20
  end
221
21
  end
@@ -0,0 +1,14 @@
1
+ module Google
2
+ module Ajax
3
+ class Feed
4
+ module API #:nodoc:
5
+ def self.[] version
6
+ case version
7
+ when '1.0'
8
+ OneZero
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,58 @@
1
+ module Google
2
+ module Ajax
3
+ class Feed
4
+ module API
5
+ class OneZero
6
+ class << self
7
+ # The endpoint URI for lookup requests
8
+ def lookup
9
+ "http://ajax.googleapis.com/ajax/services/feed/lookup"
10
+ end
11
+
12
+ # The endpoint URI for search requests
13
+ def find
14
+ "http://ajax.googleapis.com/ajax/services/feed/find"
15
+ end
16
+
17
+ # The endpoint URI for loading feeds
18
+ def load
19
+ "http://ajax.googleapis.com/ajax/services/feed/load"
20
+ end
21
+
22
+ # Builds a query to lookup a feed for a url
23
+ def lookup_query url
24
+ "#{lookup}#{params url}"
25
+ end
26
+
27
+ # Builds a query to search for feeds
28
+ # query is a search term
29
+ def find_query query
30
+ "#{find}#{params query}"
31
+ end
32
+
33
+ # Builds a query
34
+ # options are overrides for Feed#config options
35
+ def load_query url, options={}
36
+ "#{load}#{params url}#{load_params options}"
37
+ end
38
+
39
+ def load_params options={} #:nodoc
40
+ options = ({
41
+ :limit => Feed.config.limit,
42
+ :history => Feed.config.history
43
+ }).merge(options)
44
+
45
+ params = "&num=#{options[:limit]}"
46
+ params << '&scoring=h' if options[:history]
47
+ params
48
+ end
49
+
50
+ def params query #:nodoc:
51
+ "?v=1.0&q=#{URI.encode query}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,45 @@
1
+ module Google
2
+ module Ajax
3
+ class Feed
4
+ class Entry
5
+ def inspect # :nodoc:
6
+ "<#Google::Ajax::Feed::Entry link=#{link} title=#{title}>"
7
+ end
8
+
9
+ # The permalink for this entry
10
+ def link
11
+ @data["link"]
12
+ end
13
+
14
+ # The title for this entry
15
+ def title
16
+ @data["title"]
17
+ end
18
+
19
+ # The content of this entry
20
+ def content
21
+ @data["content"]
22
+ end
23
+
24
+ # A snippet of this entries content
25
+ def snippet
26
+ @data["contentSnippet"]
27
+ end
28
+
29
+ # The author for this specific entry
30
+ def author
31
+ @data["author"]
32
+ end
33
+
34
+ # The publication date for this entry
35
+ def created_at
36
+ @data["publishedDate"]
37
+ end
38
+
39
+ def initialize data #:nodoc:
40
+ @data = data
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,112 @@
1
+ module Google #:nodoc:
2
+ module Ajax #:nodoc:
3
+ class Feed
4
+ class << self
5
+ # Default values are:
6
+ # * config.version = '1.0'
7
+ #
8
+ # version specifies what version of the feed API to use.
9
+ # 1.0 is the only version that exists and thusly the only
10
+ # option supported. DO NOT CHANGE THIS
11
+ #
12
+ # * config.limit = 15
13
+ #
14
+ # limit specifies how many feed items may be fetched at once
15
+ # Google specifies a hard limit of 100.
16
+ # But an individual feed might have it's own, lower limit.
17
+ #
18
+ # * config.history = false
19
+ # Which is where the history option comes into play.
20
+ # History pulls from Googls cache of the feed, not from the current
21
+ # state of the feed. With this option you can fetch up to 100 items
22
+ # from a feed that shows fewer than 100 at any given time.
23
+ def config
24
+ @config ||= OpenStruct.new(
25
+ :version => '1.0',
26
+ :limit => 15,
27
+ :history => false
28
+ )
29
+ end
30
+
31
+ # Lookup will take any of these url formats:
32
+ # * http://example.com
33
+ # * http://example.com/
34
+ # * http://www.example.com/
35
+ # * www.example.com
36
+ # * example.com/rss
37
+ # * etc.
38
+ #
39
+ # And the object created will have the same Feed#canonical_id
40
+ # Use of Feed#new is strongly discouraged
41
+ def lookup url
42
+ http_response = JSON.parse open(api.lookup_query(url)).read
43
+ url = http_response["responseData"]["url"]
44
+ new url
45
+ end
46
+
47
+ def api #:nodoc:
48
+ API[config.version]
49
+ end
50
+ end
51
+
52
+ # A canonical identifier for the feed. Feeds found with Feed#lookup
53
+ # will have the some canonical_id even if the url used to find them
54
+ # was not 100% the same. (Missing '/' etc.)
55
+ def canonical_id
56
+ @url
57
+ end
58
+
59
+ # true if the lookup returned a positive match for a feed
60
+ def valid?
61
+ not @url.nil?
62
+ end
63
+
64
+ # The link of the feed.
65
+ def link
66
+ feed["link"]
67
+ end
68
+
69
+ # The author of the feed.
70
+ def author
71
+ feed["author"]
72
+ end
73
+
74
+ # The title of the feed.
75
+ def title
76
+ feed["title"]
77
+ end
78
+
79
+ # The description of the feed.
80
+ def description
81
+ feed["description"]
82
+ end
83
+
84
+ # List of Entry objects for this feed.
85
+ def entries
86
+ @entries ||= feed["entries"].map do |entry|
87
+ Entry.new(entry)
88
+ end
89
+ end
90
+
91
+ def load options={} #:nodoc:
92
+ url = self.class.api.load_query @url, options
93
+
94
+ # Very strange json bug. Bye bye tabs
95
+ http_response = JSON.parse open(url).read.gsub("\t", '')
96
+
97
+ @feed = http_response["responseData"]["feed"]
98
+
99
+ return @feed.length
100
+ end
101
+
102
+ def feed #:nodoc:
103
+ load if @feed.nil?
104
+ @feed
105
+ end
106
+
107
+ def initialize url #:nodoc:
108
+ @url = url
109
+ end
110
+ end
111
+ end
112
+ end
data/spec/api_spec.rb ADDED
@@ -0,0 +1,57 @@
1
+ require 'spec/helper'
2
+
3
+ describe Google::Ajax::Feed::API do
4
+ it "has V1.0 constants" do
5
+ GAF::API['1.0'].should_not be_nil
6
+ end
7
+
8
+ it "has 1.0 lookup endpoint" do
9
+ GAF::API['1.0'].lookup.
10
+ should == "http://ajax.googleapis.com/ajax/services/feed/lookup"
11
+ end
12
+
13
+ it "has 1.0 find endpoint" do
14
+ GAF::API['1.0'].find.
15
+ should == "http://ajax.googleapis.com/ajax/services/feed/find"
16
+ end
17
+
18
+ it "has 1.0 load endpoint" do
19
+ GAF::API['1.0'].load.
20
+ should == "http://ajax.googleapis.com/ajax/services/feed/load"
21
+ end
22
+
23
+ it "constructs 1.0 lookups" do
24
+ blog_url = "http://someblog.com/?blog=franklins passion"
25
+ GAF::API['1.0'].lookup_query(blog_url).
26
+ should == "#{GAF::API['1.0'].lookup}?v=1.0&q=#{URI.encode blog_url}"
27
+ end
28
+
29
+ it "constructs 1.0 finds" do
30
+ query = "senior superman's @w3s0me l33t <<>> machine"
31
+ GAF::API['1.0'].find_query(query).
32
+ should == "#{GAF::API['1.0'].find}?v=1.0&q=#{URI.encode query}"
33
+ end
34
+
35
+ it "constructs 1.0 loads" do
36
+ blog_url = "http://someblog.com/?blog=franklins passion"
37
+ GAF::API['1.0'].load_query(blog_url).
38
+ should ==
39
+ "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=15"
40
+ end
41
+
42
+ it "constructs 1.0 loads with options" do
43
+ blog_url = "http://someblog.com/?blog=franklins passion"
44
+ GAF::API['1.0'].load_query(blog_url, :limit => 100, :history => true).
45
+ should ==
46
+ "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=100&scoring=h"
47
+ end
48
+
49
+ it "constructs 1.0 loads with config options" do
50
+ blog_url = "http://someblog.com/?blog=franklins passion"
51
+ GAF.config.history = true
52
+ GAF::API['1.0'].load_query(blog_url).
53
+ should ==
54
+ "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=15&scoring=h"
55
+ GAF.config.history = nil
56
+ end
57
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec/helper'
2
+
3
+ describe Google::Ajax::Feed::Entry do
4
+ before :each do
5
+ @feed = GAF.lookup('http://ajaxian.com')
6
+ @entry = @feed.entries.first
7
+ end
8
+
9
+ describe "entry" do
10
+ it "exposes title" do
11
+ @entry.title.should_not be_nil
12
+ end
13
+
14
+ it "exposes link" do
15
+ @entry.link.should_not be_nil
16
+ end
17
+
18
+ it "exposes author" do
19
+ @entry.author.should_not be_nil
20
+ end
21
+
22
+ it "exposes content" do
23
+ @entry.content.should_not be_nil
24
+ end
25
+
26
+ it "exposes snippet" do
27
+ @entry.snippet.should_not be_nil
28
+ end
29
+ end
30
+ end
31
+
data/spec/feed_spec.rb ADDED
@@ -0,0 +1,73 @@
1
+ require 'spec/helper'
2
+
3
+ describe Google::Ajax::Feed do
4
+ it "has configuration" do
5
+ GAF.config.should be_is_a(OpenStruct)
6
+ end
7
+
8
+ it "has default version" do
9
+ GAF.config.version.should == '1.0'
10
+ end
11
+
12
+ it "has default number to load" do
13
+ GAF.config.limit.should == 15
14
+ end
15
+
16
+ it "api set from config" do
17
+ GAF.api.should == GAF::API['1.0']
18
+ end
19
+
20
+ it "looks up feeds" do
21
+ GAF.lookup('http://ajaxian.com').should_not be_nil
22
+ end
23
+
24
+ it "validates feeds" do
25
+ GAF.new(nil).should_not be_valid
26
+ end
27
+
28
+ it "loads feed" do
29
+ f = GAF.lookup('http://ajaxian.com')
30
+ f.load
31
+ f.feed.should_not be_nil
32
+ end
33
+
34
+ describe "feed attributes" do
35
+ before :each do
36
+ @feed = GAF.lookup('http://ajaxian.com')
37
+ end
38
+
39
+ it "exposes title" do
40
+ @feed.title.should == "Ajaxian » Front Page"
41
+ end
42
+
43
+ it "exposes link" do
44
+ @feed.link.should == "http://ajaxian.com"
45
+ end
46
+
47
+ it "exposes author" do
48
+ @feed.author.should == ""
49
+ end
50
+
51
+ it "exposes description" do
52
+ @feed.description.should == "Cleaning up the web with Ajax"
53
+ end
54
+
55
+ it "exposes entries" do
56
+ @feed.entries.should be_is_a(Array)
57
+ end
58
+ end
59
+
60
+ it "feeds have canonical_id" do
61
+ a= GAF.lookup('http://ajaxian.com')
62
+ b= GAF.lookup('http://www.ajaxian.com')
63
+ c= GAF.lookup('http://ajaxian.com/')
64
+ d= GAF.lookup('http://www.ajaxian.com/')
65
+ e= GAF.lookup('http://ajaxian.com/index.xml')
66
+
67
+ a.canonical_id.should_not be_nil
68
+ a.canonical_id.should == b.canonical_id
69
+ a.canonical_id.should == c.canonical_id
70
+ a.canonical_id.should == d.canonical_id
71
+ a.canonical_id.should == e.canonical_id
72
+ end
73
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'lib/google_ajax_feed_api'
2
+ require 'rubygems'
3
+ require 'spec'
4
+
5
+ GAF = Google::Ajax::Feed
6
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collin-google_ajax_feed_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Collin Miller
@@ -59,8 +59,17 @@ extra_rdoc_files: []
59
59
  files:
60
60
  - README
61
61
  - Rakefile.rb
62
+ - lib/google_ajax_feed_api
63
+ - lib/google_ajax_feed_api/api.rb
64
+ - lib/google_ajax_feed_api/api
65
+ - lib/google_ajax_feed_api/api/one_zero.rb
66
+ - lib/google_ajax_feed_api/feed.rb
67
+ - lib/google_ajax_feed_api/entry.rb
62
68
  - lib/google_ajax_feed_api.rb
63
- - spec/google_ajax_feed_spec.rb
69
+ - spec/helper.rb
70
+ - spec/entry_spec.rb
71
+ - spec/feed_spec.rb
72
+ - spec/api_spec.rb
64
73
  has_rdoc: true
65
74
  homepage: http://github.com/collin/fold
66
75
  post_install_message:
@@ -1,160 +0,0 @@
1
- require 'lib/google_ajax_feed_api'
2
- require 'rubygems'
3
- require 'spec'
4
-
5
- GAF = Google::Ajax::Feed
6
-
7
- describe Google::Ajax::Feed::Entry do
8
- before :each do
9
- @feed = GAF.lookup('http://ajaxian.com')
10
- @entry = @feed.entries.first
11
- end
12
-
13
- describe "entry" do
14
- it "exposes title" do
15
- @entry.title.should_not be_nil
16
- end
17
-
18
- it "exposes link" do
19
- @entry.link.should_not be_nil
20
- end
21
-
22
- it "exposes author" do
23
- @entry.author.should_not be_nil
24
- end
25
-
26
- it "exposes content" do
27
- @entry.content.should_not be_nil
28
- end
29
-
30
- it "exposes snippet" do
31
- @entry.snippet.should_not be_nil
32
- end
33
- end
34
- end
35
-
36
- describe Google::Ajax::Feed do
37
- it "has V1.0 constants" do
38
- GAF::API['1.0'].should_not be_nil
39
- end
40
-
41
- it "has 1.0 lookup endpoint" do
42
- GAF::API['1.0'].lookup.
43
- should == "http://ajax.googleapis.com/ajax/services/feed/lookup"
44
- end
45
-
46
- it "has 1.0 find endpoint" do
47
- GAF::API['1.0'].find.
48
- should == "http://ajax.googleapis.com/ajax/services/feed/find"
49
- end
50
-
51
- it "has 1.0 load endpoint" do
52
- GAF::API['1.0'].load.
53
- should == "http://ajax.googleapis.com/ajax/services/feed/load"
54
- end
55
-
56
- it "constructs 1.0 lookups" do
57
- blog_url = "http://someblog.com/?blog=franklins passion"
58
- GAF::API['1.0'].lookup_query(blog_url).
59
- should == "#{GAF::API['1.0'].lookup}?v=1.0&q=#{URI.encode blog_url}"
60
- end
61
-
62
- it "constructs 1.0 finds" do
63
- query = "senior superman's @w3s0me l33t <<>> machine"
64
- GAF::API['1.0'].find_query(query).
65
- should == "#{GAF::API['1.0'].find}?v=1.0&q=#{URI.encode query}"
66
- end
67
-
68
- it "constructs 1.0 loads" do
69
- blog_url = "http://someblog.com/?blog=franklins passion"
70
- GAF::API['1.0'].load_query(blog_url).
71
- should ==
72
- "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=15"
73
- end
74
-
75
- it "constructs 1.0 loads with options" do
76
- blog_url = "http://someblog.com/?blog=franklins passion"
77
- GAF::API['1.0'].load_query(blog_url, :limit => 100, :history => true).
78
- should ==
79
- "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=100&scoring=h"
80
- end
81
-
82
- it "constructs 1.0 loads with config options" do
83
- blog_url = "http://someblog.com/?blog=franklins passion"
84
- GAF.config.history = true
85
- GAF::API['1.0'].load_query(blog_url).
86
- should ==
87
- "#{GAF::API['1.0'].load}?v=1.0&q=#{URI.encode blog_url}&num=15&scoring=h"
88
- GAF.config.history = nil
89
- end
90
-
91
- it "has configuration" do
92
- GAF.config.should be_is_a(OpenStruct)
93
- end
94
-
95
- it "has default version" do
96
- GAF.config.version.should == '1.0'
97
- end
98
-
99
- it "has default number to load" do
100
- GAF.config.limit.should == 15
101
- end
102
-
103
- it "api set from config" do
104
- GAF.api.should == GAF::API['1.0']
105
- end
106
-
107
- it "looks up feeds" do
108
- GAF.lookup('http://ajaxian.com').should_not be_nil
109
- end
110
-
111
- it "validates feeds" do
112
- GAF.new(nil).should_not be_valid
113
- end
114
-
115
- it "loads feed" do
116
- f = GAF.lookup('http://ajaxian.com')
117
- f.load
118
- f.feed.should_not be_nil
119
- end
120
-
121
- describe "feed attributes" do
122
- before :each do
123
- @feed = GAF.lookup('http://ajaxian.com')
124
- end
125
-
126
- it "exposes title" do
127
- @feed.title.should == "Ajaxian » Front Page"
128
- end
129
-
130
- it "exposes link" do
131
- @feed.link.should == "http://ajaxian.com"
132
- end
133
-
134
- it "exposes author" do
135
- @feed.author.should == ""
136
- end
137
-
138
- it "exposes description" do
139
- @feed.description.should == "Cleaning up the web with Ajax"
140
- end
141
-
142
- it "exposes entries" do
143
- @feed.entries.should be_is_a(Array)
144
- end
145
- end
146
-
147
- it "feeds have canonical_id" do
148
- a= GAF.lookup('http://ajaxian.com')
149
- b= GAF.lookup('http://www.ajaxian.com')
150
- c= GAF.lookup('http://ajaxian.com/')
151
- d= GAF.lookup('http://www.ajaxian.com/')
152
- e= GAF.lookup('http://ajaxian.com/index.xml')
153
-
154
- a.canonical_id.should_not be_nil
155
- a.canonical_id.should == b.canonical_id
156
- a.canonical_id.should == c.canonical_id
157
- a.canonical_id.should == d.canonical_id
158
- a.canonical_id.should == e.canonical_id
159
- end
160
- end