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