Module: TypeWrapper
- Defined in:
- lib/type_wrapper.rb,
lib/type_wrapper/version.rb
Constant Summary collapse
- FOR =
-> type, *behaviors do Class.new(Delegator) do include TypeWrapper const_set :Type, type const_set :BEHAVIORS, behaviors const_set :Trait, Module.new { refine(type) { prepend(*behaviors.reverse) } } forwarding = behaviors.flat_map(&:public_instance_methods) - public_instance_methods code = forwarding.uniq.map { |meth| "def %{meth}(*args, &block) __getobj__.%{meth}(*args, &block) end" % { meth: meth } } class_eval code.unshift("using Trait").join("\n") end end
- VERSION =
"1.1.0"
Class Method Summary collapse
Class Method Details
.[](type, *modules) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/type_wrapper.rb', line 13 def self.[](type, *modules) raise TypeError, "wrong argument type (expected Class)" unless Class === type raise TypeError, "wrong argument type (expected Module(s))" unless modules.all? { |mod| mod.class == Module } raise ArgumentError, "wrong number of arguments (given 1, expected 2+)" if modules.empty? FOR[type, *modules] end |