Navigation Menu

Skip to content

Commit

Permalink
add exceptions and storage base abstraction
Browse files Browse the repository at this point in the history
  • Loading branch information
chriskite committed Sep 2, 2010
1 parent 82aa853 commit 094d9e0
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 2 deletions.
5 changes: 4 additions & 1 deletion lib/anemone/core.rb
Expand Up @@ -2,8 +2,10 @@
require 'robots'
require 'anemone/tentacle'
require 'anemone/page'
require 'anemone/exceptions'
require 'anemone/page_store'
require 'anemone/storage'
require 'anemone/storage/base'

module Anemone

Expand Down Expand Up @@ -187,7 +189,8 @@ def run
def process_options
@opts = DEFAULT_OPTS.merge @opts
@opts[:threads] = 1 if @opts[:delay] > 0
@pages = PageStore.new(@opts[:storage] || Anemone::Storage.Hash)
storage = Anemone::Storage::Base.new(@opts[:storage] || Anemone::Storage.Hash)
@pages = PageStore.new(storage)
@robots = Robots.new(@opts[:user_agent]) if @opts[:obey_robots_txt]

freeze_options
Expand Down
5 changes: 5 additions & 0 deletions lib/anemone/exceptions.rb
@@ -0,0 +1,5 @@
module Anemone
class Error < ::StandardError
attr_accessor :wrapped_exception
end
end
5 changes: 4 additions & 1 deletion lib/anemone/storage.rb
Expand Up @@ -2,7 +2,10 @@ module Anemone
module Storage

def self.Hash(*args)
Hash.new(*args)
hash = Hash.new(*args)
# add close method for compatibility with Storage::Base
class << hash; def close; end; end
hash
end

def self.PStore(*args)
Expand Down
74 changes: 74 additions & 0 deletions lib/anemone/storage/base.rb
@@ -0,0 +1,74 @@
require 'anemone/storage/exceptions'

module Anemone
module Storage
class Base

def initialize(adapter)
@adap = adapter

# verify adapter conforms to this class's methods
methods.each do |method|
if !@adap.respond_to?(method.to_sym)
raise "Storage adapter must support method #{method}"
end
end
end

def [](key)
@adap[key]
rescue
raise RetrievalError
end

def []=(key, value)
@adap[key] = value
rescue
raise InsertionError
end

def delete(key)
@adap.delete(key)
rescue
raise DeletionError
end

def each
@adap.each { |k, v| yield k, v }
rescue
raise GenericError
end

def merge!(hash)
@adap.merge!(hash)
rescue
raise GenericError
end

def close
@adap.close
rescue
raise CloseError
end

def size
@adap.size
rescue
raise GenericError
end

def keys
@adap.keys
rescue
raise GenericError
end

def has_key?(key)
@adap.has_key?(key)
rescue
raise GenericError
end

end
end
end
15 changes: 15 additions & 0 deletions lib/anemone/storage/exceptions.rb
@@ -0,0 +1,15 @@
module Anemone
module Storage

class GenericError < Error; end;

class ConnectionError < Error; end

class RetrievalError < Error; end

class InsertionError < Error; end

class CloseError < Error; end

end
end
2 changes: 2 additions & 0 deletions lib/anemone/storage/pstore.rb
Expand Up @@ -43,6 +43,8 @@ def merge!(hash)
self
end

def close; end

end
end
end

0 comments on commit 094d9e0

Please sign in to comment.