Sha256: ca695dda5d912d336b17a104d8c78db163c3ba0e0ee88227886809deee745b69
Contents?: true
Size: 1019 Bytes
Versions: 20
Compression:
Stored size: 1019 Bytes
Contents
require 'active_support/inflector' class AbilityDefinition attr_accessor :cans, :cannots def self.parse(definitions) @@ability_definitions ||= {} limitation, ability_list, model_list = *definitions.split(':') ability_names, model_names = extract(ability_list), extract(model_list) model_names.each do |model_name| definition = @@ability_definitions[model_name] || AbilityDefinition.new definition.merge(limitation.pluralize, ability_names) @@ability_definitions[model_name] = definition end end def self.extract(string) return *string.gsub(/[\[\]\s]/, '').split(',') end def self.models @@ability_definitions end def initialize @cans, @cannots = [], [] end def merge(limitation, ability_names) combined_ability_names = instance_variable_get("@#{limitation}") | ability_names instance_variable_set("@#{limitation}", combined_ability_names) end def can @cans end def cannot @cannots end end
Version data entries
20 entries across 20 versions & 1 rubygems