module Packable::ClassMethods
Public Instance Methods
init_params()
click to toggle source
# File lib/musicality/packable.rb, line 58 def init_params params = instance_method(:initialize).parameters Hash[ params.map {|pair| pair.reverse } ] end
pack_specially(sym, val)
click to toggle source
# File lib/musicality/packable.rb, line 79 def pack_specially sym, val class_variable_get(:@@special_packing)[sym].call(val) end
packs_specially?(sym)
click to toggle source
# File lib/musicality/packable.rb, line 71 def packs_specially? sym class_variable_get(:@@special_packing).has_key?(sym) end
special_packing(sym, &block)
click to toggle source
# File lib/musicality/packable.rb, line 63 def special_packing sym, &block class_variable_get(:@@special_packing)[sym] = block end
special_unpacking(sym, &block)
click to toggle source
# File lib/musicality/packable.rb, line 67 def special_unpacking sym, &block class_variable_get(:@@special_unpacking)[sym] = block end
unpack(packing) { |obj| ... }
click to toggle source
# File lib/musicality/packable.rb, line 13 def unpack packing args = [] kwargs = {} init_params.each do |name,type| if (type == :req || type == :keyreq) && !packing.has_key?(name) raise ArgumentError, "Packing does not have required key #{name}" end val = packing[name] if type == :keyrest raise "Expected this to be a Hash" unless val.is_a? Hash end val2 = if unpacks_specially?(name) unpack_specially(name,val) else Packable.unpack_val(val) end case type when :req, :opt args.push val2 when :key, :keyreq kwargs[name] = val2 when :keyrest kwargs.merge!(val2) end end if args.any? if kwargs.any? obj = new(*args,**kwargs) else obj = new(*args) end elsif kwargs.any? obj = new(**kwargs) else obj = new end block_given? ? yield(obj) : obj end
unpack_specially(sym, val)
click to toggle source
# File lib/musicality/packable.rb, line 83 def unpack_specially sym, val class_variable_get(:@@special_unpacking)[sym].call(val) end
unpacks_specially?(sym)
click to toggle source
# File lib/musicality/packable.rb, line 75 def unpacks_specially? sym class_variable_get(:@@special_unpacking).has_key?(sym) end