Class: Module

Inherits:
Object show all
Defined in:
lib/cube/traits.rb,
lib/cube/interfaces.rb

Instance Method Summary collapse

Instance Method Details

#as_interface(iface, runtime_checks: true) ⇒ Object



251
252
253
# File 'lib/cube/interfaces.rb', line 251

def as_interface(iface, runtime_checks: true)
  clone.implements(iface, runtime_checks: runtime_checks)
end

#assert_implements(iface) ⇒ Object



255
256
257
# File 'lib/cube/interfaces.rb', line 255

def assert_implements(iface)
  clone.implements(iface, false)
end

#implements(mod, runtime_checks: true) ⇒ Object



243
244
245
246
247
248
249
# File 'lib/cube/interfaces.rb', line 243

def implements(mod, runtime_checks: true)
  unless is_a? Class
    raise "Non-Class modules should not implement interfaces"
  end
  instance_variable_set(:@__interface_runtime_check, true) if runtime_checks
  include(mod)
end

#shell_implements(mod) ⇒ Object



259
260
261
262
263
# File 'lib/cube/interfaces.rb', line 259

def shell_implements(mod)
  instance_variable_set(:@__interface_runtime_check, false)
  instance_variable_set(:@__interface_arity_skip, true)
  include(mod)
end

#with_trait(trait, aliases: {}, suppresses: []) ⇒ Object

Raises:

  • (ArgumentError)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cube/traits.rb', line 39

def with_trait(trait, aliases: {}, suppresses: [])
  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 aliases.is_a?(Hash)
  raise ArgumentError, "supresses must be a Array" unless suppresses.is_a?(Array)

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