Sha256: 59823bd071cb940575daad0727d5b877062a2bc916d63c8f35e66f50a5f2f742

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

# encoding: utf-8

require "rango/mixins/chainable"

module Rango
  module MessageMixin
    # The rails-style flash messages
    # @since 0.0.2
    # NOTE: it's important to include this mixin after ImplicitRendering mixin
    def self.included(controller)
      unless controller.method_defined?(:request)
        raise "Rango::MessageMixin requires method request to be defined"
      end
      if controller.method_defined?(:context)
        Rango.logger.debug("Extending context by message")
        controller.class_eval do
          extend Chainable
          chainable do
            def context
              super.merge!(message: self.message)
            end

            def redirect(uri, status = 301, options = Hash.new)
              status, options = 301, status if status.is_a?(Hash)
              if options.respond_to?(:inject)
                # redirect "/post", error: "Try again"
                # ?msg[error]="Try again"
                uri = options.inject(uri) do |uri, pair|
                  type, message = pair
                  uri + "?msg[#{type}]=#{message}"
                end
              else
                # redirect "/post", "Try again"
                # ?msg="Try again"
                uri.concat("?msg=#{options}")
              end
              super(uri, status)
            end
          end
        end
      else
        Rango.logger.warn("Context method isn't defined")
      end
    end

    def message
      @message ||= (request.GET[:msg] || Hash.new)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rango-0.2.1.pre lib/rango/mixins/message.rb