Skip to content

Instantly share code, notes, and snippets.

@rociiu
Forked from nkallen/MODULARITY_OLYMPICS.markdown
Created February 16, 2010 05:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rociiu/305308 to your computer and use it in GitHub Desktop.
Save rociiu/305308 to your computer and use it in GitHub Desktop.
query_factory = MemoizingQueryFactory.new(TimingOutQueryFactory.new(Query, 1.second))
QueryEvaluator.new(ConnectionPool.new(20), query_factory)
class MemoizingQueryFactory
def initialize(query_factory)
@memo = Hash.new do |h, k|
h = query_factory.new(*k)
end
end
def new(connection, query_string, *args)
@memo[[connection, query_string, args]]
end
end
class QueryEvaluator
def initialize(connection_pool, query_factory = Query)
@query_factory = query_factory
@connection_pool = connection_pool
end
def select(query_string, *args)
@connection_pool.with_connection do |connection|
@query_factory.new(connection, query_string, *args).select
end
end
end
class TimingOutQueryProxyFactory
def initialize(query_factory, timeout)
@query_factory = query_factory
@timeout = timeout
end
def new(connection, query_string, *args)
@query_factory.new(connection, query_string, *args)
end
end
class TimingOutQueryProxy
def initialize(query, timeout)
@query = query
@timeout = timeout
end
def select
Timeout.timeout(@timeout) do
@query.select
end
end
# ...
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment