overlord
Talk to the Google ajax apis and render the results. This gem contains several method calls and partials to call out to the Google Ajax Apis (code.google.com/apis/ajax/). This gem is designed to work in Ruby on Rails and currently won’t work outside that framework.
Usage
Installation
Installing the gem should install the dependencies
sudo gem install overlord
In case it doesn’t install dependencies:
sudo gem install httparty
sudo gem install crack
Settings
This gem requires some configuration before it will work in your Rails application: You will need an initializer file with ‘google_ajax_api_key’ and ‘request_referer’ defined. You can set it up thus:
In initializers/overlord.rb
Overlord.configure do |config|
config.google_ajax_api_key = '' # A google ajax api key - http://code.google.com/apis/ajaxsearch/signup.html
config.request_referer = '' # The url of the site making the request.
config.show_google_search = true # Determines whether or not a google search is displayed on the topic page
config.load_feeds_on_server = false # Determines whether feeds on a topic page are loaded on the server or the client. Loading on the server can take a while
config.combine_feeds_on_server = false # Combines feeds loaded on the server
config.google_ad_partner_pub # Ad partner id (optional) used for 'searchControl.enableAds'
end
Models
If you want to use the methods ‘convert_google_feed_json_to_feed’, ‘convert_google_find_feeds_json_to_feeds’, and ‘convert_google_feed_json_to_entries’ you will also need a Feed, Service and Entry class with specific attributes. See the rails application inside of the test directory for more information on how to create these classes.
# Required attributes:
# :uri, :service_id, :display_uri, :title, :service
class Feed < ActiveRecord::Base
end
# tag_list can be from one of the various acts_as_taggable gems.
# Required attributes:
# :permalink, :author, :title, :description, :content, :published_at, :tag_list, :direct_link, :feed
class Entry < ActiveRecord::Base
end
class Service < ActiveRecord::Base
# Selects and caches all services from the database.
#
# refresh_services: By default all tag services are cached. Setting this value to true
# will result in the values being repopulated from the database
def self.get_services(refresh_services = false)
@all_services = nil if refresh_services
@all_services ||= Service.all
end
# Attempts to find a service object using a uri
#
# uri: Uri to search for. This method will attempt to all services for any part of the provided uri.
# refresh_services: Forces a refresh of the services. By default the services are cached for the duration of the request.
def self.find_service_by_uri(uri, refresh_services = false)
service = get_services(refresh_services).detect { |service| service.uri && service.uri.length > 0 && (uri.include?(service.uri) || service.uri.include?(uri)) }
service ||= default_service
service
end
end
create_table "entries", :force => true do |t|
t.integer "feed_id", :null => false
t.string "permalink", :limit => 2083, :default => "", :null => false
t.string "author", :limit => 2083
t.text "title", :null => false
t.text "description"
t.text "content"
t.datetime "published_at", :null => false
t.string "direct_link", :limit => 2083
end
create_table "feeds", :force => true do |t|
t.string "uri", :limit => 2083
t.string "display_uri", :limit => 2083
t.string "title", :limit => 1000
t.integer "service_id", :default => 0
t.string "login"
end
create_table "services", :force => true do |t|
t.string "uri", :limit => 2083, :default => ""
t.string "name", :limit => 1000, :default => ""
t.string "api_uri", :limit => 2083, :default => ""
t.string "uri_key"
end
Testing
If you want to run the test application you will need to add a file with your google credentials Create a file ‘test/rails_test/config.googl.yml’
default: &DEFAULT
google_ajax_api_key: 'YOUR GOOGLE AJAX API KEY from http://code.google.com/apis/ajaxsearch/signup.html'
request_referer: 'www.example.com'
development:
<<: *DEFAULT
test:
<<: *DEFAULT
Copyright
Copyright © 2009-2010 Tatemae.com. See LICENSE for details.