Class: Rack::MonetaStore

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/moneta_store.rb

Overview

A Rack middleware that inserts a Moneta store in the environment and supports per-request caching via the the option ‘cache: true`.

Examples:

config.ru

# Add Rack::MonetaStore somewhere in your rack stack
use Rack::MonetaStore, :Memory, cache: true

run lambda { |env|
  env['rack.moneta_store'] # is a Moneta store with per-request caching
}

config.ru

# Pass it a block like the one passed to Moneta.build
use Rack::MonetaStore do
  use :Transformer, value: :zlib
  adapter :Cookie
end

run lambda { |env|
  env['rack.moneta_store'] # is a Moneta store without caching
}

Instance Method Summary collapse

Constructor Details

#initialize(app, store = nil, options = {}, &block) ⇒ MonetaStore

Returns a new instance of MonetaStore.



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rack/moneta_store.rb', line 28

def initialize(app, store = nil, options = {}, &block)
  @app = app
  @cache = options.delete(:cache)
  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

Instance Method Details

#call(env) ⇒ Object



40
41
42
43
# File 'lib/rack/moneta_store.rb', line 40

def call(env)
  env['rack.moneta_store'] = @cache ? ::Moneta::Cache.new(cache: ::Moneta::Adapters::Memory.new, adapter: @store) : @store
  @app.call(env)
end