A Rack application which provides a REST interface to a Moneta store.
@example config.ru
map '/moneta' do run Rack::MonetaRest.new(:Memory) end
@example config.ru
# Pass it a block like the one passed to Moneta.build run Rack::MonetaRest.new do use :Transformer, :value => :zlib adapter :Memory end
@api public
# File lib/rack/moneta_rest.rb, line 20 def initialize(store = nil, options = {}, &block) if block raise ArgumentError, 'Use either block or options' unless options.empty? @store = ::Moneta.build(&block) else raise ArgumentError, 'Block or argument store is required' unless @store = store @store = ::Moneta.new(@store, options) if Symbol === @store end end
# File lib/rack/moneta_rest.rb, line 30 def call(env) key = env['PATH_INFO'][1..-1].to_s case env['REQUEST_METHOD'] when 'HEAD' if key.empty? respond(400, 'Empty key') elsif @store.key?(key) empty(200) else empty(404) end when 'GET' if key.empty? respond(400, 'Empty key') elsif value = @store[key] respond(200, value) else empty(404) end when 'POST', 'PUT' if key.empty? respond(400, 'Empty key') else respond(200, @store[key] = env['rack.input'].read) end when 'DELETE' if key.empty? @store.clear empty(200) else respond(200, @store.delete(key)) end else respond(400, 'Bad method') end rescue => ex respond(500, "Exception: #{ex.message}") end
Generated with the Darkfish Rdoc Generator 2.