Sha256: 9ede408f1dace4d1eb6d1d4e79369c240374341e9018d6ca753d8c93e052b294

Contents?: true

Size: 1.06 KB

Versions: 5

Compression:

Stored size: 1.06 KB

Contents

require 'cell/base'

module Cell
  # Use Cell::Rack to mount your cell to a rack-route with a working +session+ and +params+ reference
  # in the cell. This is especially useful when using gems like devise with your cell, without the
  # entire Cell::Rails overhead.
  #
  # The only dependency these kinds of cells have is a rack-compatible request object.
  #
  # Example:
  #
  #   match "/dashboard/comments" => proc { |env|
  #     request = ActionDispatch::Request.new(env)
  #     [ 200, {}, [ Cell::Rack.render_cell_for(:comments, :show, request) ]]
  #   }
  class Rack < Base
    attr_reader :request
    delegate :session, :params, :to => :request
    
    class << self
      # DISCUSS: i don't like these class methods. maybe a RenderingStrategy?
      def create_cell(request, *args) # defined in Builder.
        new(request)
      end
      
      def render_cell_state(cell, state, request, *args) # defined in Rendering.
        super(cell, state, *args)
      end
    end
    
    def initialize(request)
      super()
      @request = request
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
cells-3.8.8 lib/cell/rack.rb
cells-3.8.7 lib/cell/rack.rb
cells-3.8.6 lib/cell/rack.rb
cells-3.8.5 lib/cell/rack.rb
cells-3.8.4 lib/cell/rack.rb