Sha256: 3cfb4e649df3025f1e1452be46aad8838a09813a716a1aac6735dcb49d8b0520

Contents?: true

Size: 999 Bytes

Versions: 1

Compression:

Stored size: 999 Bytes

Contents

module CanTango::Ability::Executor
  class Modal < Base    
    def initialize candidate, modes, options = {}
      super candidate, options
      modes = [modes].flatten if modes
      raise ArgumentError, "Modes must be a list of modes to execute!" if modes.blank?
      @modes = modes
      execute
    end

    def calculate_rules
      @rules = modes.inject([]) do |result, mode|
        result = result + modal_rules(mode)
        result
      end
      normalize_rules!
    end

    def execute
      return if executed?
      clear_rules!
      calculate_rules
    rescue Exception => e
      debug e.message      
    ensure
      @executed = true
      rules
    end

    def finder
      @finder ||= CanTango::Ability::Mode::Finder.new self
    end

    protected

    def modal_rules mode
      mode?(mode) ? executor(mode).execute : []
    end

    def executor mode
      @executor ||= finder.executor_for(mode)
    end

    def mode? mode
      modes.include?(mode)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cantango-core-0.1.6 lib/cantango/ability/executor/modal.rb