Sha256: 8190a648ae8436fcc7f2ea3a9767c191c67ac6101fd7faeac894fb5621734c5c

Contents?: true

Size: 1.45 KB

Versions: 6

Compression:

Stored size: 1.45 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, *args)
        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(*args, &symbol_or_proc) : instance_exec(*args, &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

6 entries across 6 versions & 1 rubygems

Version Path
ab_admin-0.11.0 lib/ab_admin/config/optional_display.rb
ab_admin-0.10.0 lib/ab_admin/config/optional_display.rb
ab_admin-0.9.0 lib/ab_admin/config/optional_display.rb
ab_admin-0.8.3 lib/ab_admin/config/optional_display.rb
ab_admin-0.8.2 lib/ab_admin/config/optional_display.rb
ab_admin-0.8.1 lib/ab_admin/config/optional_display.rb