class Module

Public Instance Methods

with_trait(trait, rename: {}, suppress: []) click to toggle source
# File lib/cube/traits.rb, line 50
def with_trait(trait, rename: {}, suppress: [])
  unless trait.is_a? Cube::Trait
    raise ArgumentError, "#{trait} is not an Cube::Trait"
  end
  cls = clone
  cls.instance_variable_set(:@__trait_allow_include, true)
  cls.instance_variable_set(:@__trait_cloned_from, self)
  raise ArgumentError, "aliases must be a Hash" unless rename.is_a?(Hash)
  raise ArgumentError, "supresses must be a Array" unless suppress.is_a?(Array)

  al_trait = trait_with_resolutions(trait, rename, suppress)
  al_trait.instance_variable_set(:@__interface_runtime_check, false)
  cls.include(al_trait)
  cls
end

Private Instance Methods

trait_with_resolutions(trait, aliases, suppress) click to toggle source
# File lib/cube/traits.rb, line 68
def trait_with_resolutions(trait, aliases, suppress)
  cl = trait.clone
  cl.module_exec do
    suppress.each do |sup|
      remove_method(sup)
    end
    aliases.each do |before, after|
      begin
        alias_method(after, before)
      rescue => e
        $stderr.puts "with_trait(#{trait}): #{e.message}"
        raise ArgumentError, "with_trait(#{trait}): #{e.message}"
      end
      remove_method(before)
    end
  end
  cl
end