collin-google_ajax_feed_api 0.0.1
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/README +50 -0
- data/Rakefile.rb +68 -0
- data/lib/google_ajax_feed_api.rb +221 -0
- data/spec/google_ajax_feed_spec.rb +160 -0
- metadata +91 -0
data/README
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
I wanted to do feeds through googles Ajax Feed API.
|
2
|
+
|
3
|
+
http://code.google.com/apis/ajaxfeeds/documentation/reference.html
|
4
|
+
|
5
|
+
I did.
|
6
|
+
|
7
|
+
Use if you see fit.
|
8
|
+
|
9
|
+
Run the specs if you have autotest.
|
10
|
+
|
11
|
+
Use it?
|
12
|
+
|
13
|
+
>> require 'lib/feed'
|
14
|
+
=> true
|
15
|
+
>> feed = Google::Ajax::Feed.lookup "olympichifi.com"
|
16
|
+
=> #<Google::Ajax::Feed:0xb77b660c @url="http://olympichifi.com/feed/">
|
17
|
+
>> feed.title
|
18
|
+
=> "Olympic Hi-Fi"
|
19
|
+
>> feed.link
|
20
|
+
=> "http://olympichifi.com"
|
21
|
+
>> feed.canonical_id
|
22
|
+
=> "http://olympichifi.com/feed/"
|
23
|
+
>> post = feed.entries.first
|
24
|
+
=> <#Google::Ajax::Feed::Entry link=http://olympichifi.com/2008/10/12/leetle-groove/ title=leetle groove>
|
25
|
+
>> post.content
|
26
|
+
=> "<p>\nmy first song evarr! it\342\200\231s cheesy, but still, its my first.</p>"
|
27
|
+
|
28
|
+
>> feed = Google::Ajax::Feed.lookup "ajaxian.com"
|
29
|
+
=> #<Google::Ajax::Feed:0xb75b3a08 @url="http://ajaxian.com/index.xml">
|
30
|
+
>> feed.load :limit => 100
|
31
|
+
=> 6
|
32
|
+
>> feed.entries.size
|
33
|
+
=> 20
|
34
|
+
|
35
|
+
>> feed = Google::Ajax::Feed.lookup "ajaxian.com"
|
36
|
+
=> #<Google::Ajax::Feed:0xb79d82c8 @url="http://ajaxian.com/index.xml">
|
37
|
+
>> feed.load :limit => 100, :history => true
|
38
|
+
=> 6
|
39
|
+
>> feed.entries.size
|
40
|
+
=> 100
|
41
|
+
|
42
|
+
>> Google::Ajax::Feed.config.limit = 50
|
43
|
+
=> 50
|
44
|
+
>> Google::Ajax::Feed.config.history = true
|
45
|
+
=> true
|
46
|
+
>> feed = Google::Ajax::Feed.lookup "ajaxian.com"
|
47
|
+
=> #<Google::Ajax::Feed:0xb756ecc8 @url="http://ajaxian.com/index.xml">
|
48
|
+
>> feed.entries.size
|
49
|
+
=> 50
|
50
|
+
|
data/Rakefile.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'pathname'
|
3
|
+
require 'spec'
|
4
|
+
|
5
|
+
__DIR__ = Pathname.new(__FILE__).dirname
|
6
|
+
|
7
|
+
task :default => 'spec:all'
|
8
|
+
|
9
|
+
namespace :spec do
|
10
|
+
task :prepare do
|
11
|
+
@specs= Dir.glob("#{__DIR__}/spec/**/*.rb").join(' ')
|
12
|
+
end
|
13
|
+
|
14
|
+
task :all => :prepare do
|
15
|
+
system "spec #{@specs}"
|
16
|
+
end
|
17
|
+
|
18
|
+
task :doc => :prepare do
|
19
|
+
system "spec #{@specs} --format specdoc"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
task :cleanup do
|
24
|
+
Dir.glob("**/*.*~")+Dir.glob("**/*~").each{|swap|FileUtils.rm(swap, :force => true)}
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :gem do
|
28
|
+
task :version do
|
29
|
+
@version = "0.0.2"
|
30
|
+
end
|
31
|
+
|
32
|
+
task :build => :spec do
|
33
|
+
load __DIR__ + "google_ajax_feed_api.gemspec"
|
34
|
+
Gem::Builder.new(@google_ajax_feed_api_gemspec).build
|
35
|
+
end
|
36
|
+
|
37
|
+
task :install => :build do
|
38
|
+
cmd = "gem install google_ajax_feed_api -l"
|
39
|
+
system cmd unless system "sudo #{cmd}"
|
40
|
+
FileUtils.rm(__DIR__ + "google_ajax_feed_api-#{@version}.gem")
|
41
|
+
end
|
42
|
+
|
43
|
+
task :spec => :version do
|
44
|
+
file = File.new(__DIR__ + "google_ajax_feed_api.gemspec", 'w+')
|
45
|
+
FileUtils.chmod 0755, __DIR__ + "google_ajax_feed_api.gemspec"
|
46
|
+
spec = %{
|
47
|
+
Gem::Specification.new do |s|
|
48
|
+
s.name = "google_ajax_feed_api"
|
49
|
+
s.version = "#{@version}"
|
50
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
51
|
+
s.has_rdoc = true
|
52
|
+
s.summary = "Light wrapper for Google Ajax Feed API"
|
53
|
+
s.authors = ["Collin Miller"]
|
54
|
+
s.email = "collintmiller@gmail.com"
|
55
|
+
s.homepage = "http://github.com/collin/fold"
|
56
|
+
s.files = %w{#{(%w(README Rakefile.rb) + Dir.glob("{lib,spec}/**/*")).reject{|path| path.match /~$/ }.join(' ')}}
|
57
|
+
|
58
|
+
s.add_dependency "rake"
|
59
|
+
s.add_dependency "rspec"
|
60
|
+
s.add_dependency "json"
|
61
|
+
s.add_dependency "extlib"
|
62
|
+
end
|
63
|
+
}
|
64
|
+
|
65
|
+
@google_ajax_feed_api_gemspec = eval(spec)
|
66
|
+
file.write(spec)
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,221 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'extlib'
|
4
|
+
require 'json'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
module Google #:nodoc:
|
8
|
+
module Ajax #:nodoc:
|
9
|
+
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
|
160
|
+
|
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
|
172
|
+
|
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
|
+
end
|
221
|
+
end
|
@@ -0,0 +1,160 @@
|
|
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
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: collin-google_ajax_feed_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Collin Miller
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-12-22 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: rspec
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: "0"
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: json
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: "0"
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: extlib
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
description:
|
52
|
+
email: collintmiller@gmail.com
|
53
|
+
executables: []
|
54
|
+
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files: []
|
58
|
+
|
59
|
+
files:
|
60
|
+
- README
|
61
|
+
- Rakefile.rb
|
62
|
+
- lib/google_ajax_feed_api.rb
|
63
|
+
- spec/google_ajax_feed_spec.rb
|
64
|
+
has_rdoc: true
|
65
|
+
homepage: http://github.com/collin/fold
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 1.2.0
|
87
|
+
signing_key:
|
88
|
+
specification_version: 2
|
89
|
+
summary: Light wrapper for Google Ajax Feed API
|
90
|
+
test_files: []
|
91
|
+
|