1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionservice/examples/googlesearch/direct/search_controller.rb
David Heinemeier Hansson e7a2938029 Added Action Service to the repository
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@658 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2005-02-18 10:35:25 +00:00

109 lines
3.9 KiB
Ruby

class DirectoryCategory < ActionService::Struct
member :fullViewableName, :string
member :specialEncoding, :string
end
class ResultElement < ActionService::Struct
member :summary, :string
member :URL, :string
member :snippet, :string
member :title, :string
member :cachedSize, :string
member :relatedInformationPresent, :bool
member :hostName, :string
member :directoryCategory, DirectoryCategory
member :directoryTitle, :string
end
class GoogleSearchResult < ActionService::Struct
member :documentFiltering, :bool
member :searchComments, :string
member :estimatedTotalResultsCount, :int
member :estimateIsExact, :bool
member :resultElements, [ResultElement]
member :searchQuery, :string
member :startIndex, :int
member :endIndex, :int
member :searchTips, :string
member :directoryCategories, [DirectoryCategory]
member :searchTime, :float
end
class GoogleSearchAPI < ActionService::API::Base
inflect_names false
api_method :doGetCachedPage, :returns => [:string], :expects => [{:key=>:string}, {:url=>:string}]
api_method :doGetSpellingSuggestion, :returns => [:string], :expects => [{:key=>:string}, {:phrase=>:string}]
api_method :doGoogleSearch, :returns => [GoogleSearchResult], :expects => [
{:key=>:string},
{:q=>:string},
{:start=>:int},
{:maxResults=>:int},
{:filter=>:bool},
{:restrict=>:string},
{:safeSearch=>:bool},
{:lr=>:string},
{:ie=>:string},
{:oe=>:string}
]
end
class SearchController < ApplicationController
service_api GoogleSearchAPI
wsdl_service_name 'GoogleSearch'
def doGetCachedPage
"<html><body>i am a cached page. my key was %s, url was %s</body></html>" % [@params['key'], @params['url']]
end
def doSpellingSuggestion
"%s: Did you mean '%s'?" % [@params['key'], @params['phrase']]
end
def doGoogleSearch
resultElement = ResultElement.new
resultElement.summary = "ONlamp.com: Rolling with Ruby on Rails"
resultElement.URL = "http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html"
resultElement.snippet = "Curt Hibbs shows off Ruby on Rails by building a simple application that requires " +
"almost no Ruby experience. ... Rolling with Ruby on Rails. ..."
resultElement.title = "Teh Railz0r"
resultElement.cachedSize = "Almost no lines of code!"
resultElement.relatedInformationPresent = true
resultElement.hostName = "rubyonrails.com"
resultElement.directoryCategory = category("Web Development", "UTF-8")
result = GoogleSearchResult.new
result.documentFiltering = @params['filter']
result.searchComments = ""
result.estimatedTotalResultsCount = 322000
result.estimateIsExact = false
result.resultElements = [resultElement]
result.searchQuery = "http://www.google.com/search?q=ruby+on+rails"
result.startIndex = @params['start']
result.endIndex = @params['start'] + @params['maxResults']
result.searchTips = "\"on\" is a very common word and was not included in your search [details]"
result.searchTime = 0.000001
# For Mono, we have to clone objects if they're referenced by more than one place, otherwise
# the Ruby SOAP collapses them into one instance and uses references all over the
# place, confusing Mono.
#
# This has recently been fixed:
# http://bugzilla.ximian.com/show_bug.cgi?id=72265
result.directoryCategories = [
category("Web Development", "UTF-8"),
category("Programming", "US-ASCII"),
]
result
end
private
def category(name, encoding)
cat = DirectoryCategory.new
cat.fullViewableName = name.dup
cat.specialEncoding = encoding.dup
cat
end
end