Parent

Methods

Files

Class/Module Index [+]

Quicksearch

Rack::MonetaRest

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

Public Class Methods

new(store = nil, options = {}, &block) click to toggle source
# 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

Public Instance Methods

call(env) click to toggle source
# 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.