Sha256: adceb4b34799586ac736c1eefdd12a8e51c2cd4e417f4ef255dd0c7ef26a72ec

Contents?: true

Size: 1.44 KB

Versions: 7

Compression:

Stored size: 1.44 KB

Contents

module AbAdmin
  module Config
    # Shareable module to give a #display_on?(action) method
    # which returns true or false depending on an options hash.
    #
    # The options hash accepts:
    #
    # :only => :index
    # :only => [:index, :show]
    # :except => :index
    # :except => [:index, :show]
    #
    # call #normalize_display_options! after @options has been set
    # to ensure that the display options are setup correctly

    module OptionalDisplay
      def for_context?(render_context = nil)
        if @options[:if]
          symbol_or_proc = @options[:if]
          return case symbol_or_proc
                   when Symbol, String
                     render_context ? render_context.send(symbol_or_proc) : self.send(symbol_or_proc)
                   when Proc
                     render_context ? render_context.instance_exec(&symbol_or_proc) : instance_exec(&symbol_or_proc)
                   else
                     symbol_or_proc
                 end
        end
        true
      end

      def for_action?(action)
        return false if @options[:only] && !@options[:only].include?(action.to_sym)
        return false if @options[:except] && @options[:except].include?(action.to_sym)
        true
      end

      private

      def normalize_display_options!
        @options[:only] = Array(@options[:only]) if @options[:only]
        @options[:except] = Array(@options[:except]) if @options[:except]
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ab_admin-0.2.3 lib/ab_admin/config/optional_display.rb
ab_admin-0.2.2 lib/ab_admin/config/optional_display.rb
ab_admin-0.2.1 lib/ab_admin/config/optional_display.rb
ab_admin-0.2.0 lib/ab_admin/config/optional_display.rb
ab_admin-0.1.2 lib/ab_admin/config/optional_display.rb
ab_admin-0.1.1 lib/ab_admin/config/optional_display.rb
ab_admin-0.1.0 lib/ab_admin/config/optional_display.rb