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

Version Path
canard-0.5.0.pre lib/generators/ability_definition.rb
canard-0.4.3 lib/generators/ability_definition.rb
canard-0.4.2.pre lib/generators/ability_definition.rb
canard-0.4.1 lib/generators/ability_definition.rb
canard-0.4.0 lib/generators/ability_definition.rb
canard-0.4.0.pre lib/generators/ability_definition.rb
canard-0.3.7 lib/generators/ability_definition.rb
canard-0.3.6 lib/generators/ability_definition.rb
canard-0.3.5 lib/generators/ability_definition.rb
canard-0.3.4 lib/generators/ability_definition.rb
canard-0.3.2 lib/generators/ability_definition.rb
canard-0.3.1 lib/generators/ability_definition.rb
canard-0.2.7 lib/generators/ability_definition.rb
canard-0.2.5 lib/generators/ability_definition.rb
canard-0.2.4 lib/generators/ability_definition.rb
canard-0.2.3 lib/generators/ability_definition.rb
canard-0.2.2 lib/generators/ability_definition.rb
canard-0.2.1 lib/generators/ability_definition.rb
canard-0.2.0 lib/generators/ability_definition.rb
canard-0.1.2 lib/generators/ability_definition.rb