Sha256: f3d76f08da6aba3168ba1926d5bdb183e817d2f5110e885b28541e68057e65cd
Contents?: true
Size: 1.44 KB
Versions: 5
Compression:
Stored size: 1.44 KB
Contents
module CanTango::Ability::Executor class Modal < Base def initialize ability, modes, options = {} super ability, options extract_modes modes execute end module ClassMethods def build candidate, modes, options = {} new build_ability(candidate, options), modes, options end end extend ClassMethods 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 extract_modes modes raise ArgumentError, "Modes must defined!" if !modes modes = modes.kind_of?(Hash) ? modes_from_option(modes) : modes modes = [modes].flatten raise ArgumentError, "Modes must be a list of modes to execute!" if modes.blank? @modes = modes end def modes_from_option options @options.merge! options options[:modes] || options[:mode] end 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
5 entries across 5 versions & 1 rubygems