module Packable
Requires that an including class can be instantiated entirely by keyword args that map these symbols to values
Constants
- PACKED_CLASS_KEY
Public Class Methods
included(base)
click to toggle source
# File lib/musicality/packable.rb, line 6 def self.included(base) base.extend(ClassMethods) base.class_variable_set(:@@special_packing, {}) base.class_variable_set(:@@special_unpacking, {}) end
pack_val(val)
click to toggle source
# File lib/musicality/packable.rb, line 132 def pack_val val if val.is_a?(Packable) val.pack elsif val.is_a? Array val.map {|v| pack_val v} elsif val.is_a? Hash Hash[ val.map {|k,v| [ Packable.pack_val(k), Packable.pack_val(v) ]} ] else val end end
recover_class(klass_str)
click to toggle source
# File lib/musicality/packable.rb, line 110 def recover_class klass_str Kernel.const_get(klass_str) end
unpack_val(val)
click to toggle source
# File lib/musicality/packable.rb, line 117 def unpack_val val if val.is_a? Array val.map {|v| Packable.unpack_val v} elsif val.is_a? Hash if val.packed_class? val.unpack else Hash[ val.map {|k,v| [ Packable.unpack_val(k), Packable.unpack_val(v) ]} ] end else val end end
Public Instance Methods
class_str()
click to toggle source
# File lib/musicality/packable.rb, line 92 def class_str self.class.to_s end
init_params()
click to toggle source
# File lib/musicality/packable.rb, line 88 def init_params self.class.init_params end
pack()
click to toggle source
# File lib/musicality/packable.rb, line 96 def pack packing = { PACKED_CLASS_KEY => class_str } init_params.keys.each do |name| val = self.send(name) val2 = if self.class.packs_specially?(name) self.class.pack_specially(name,val) else Packable.pack_val(val) end packing[name] = val2 end packing end
Private Instance Methods
pack_val(val)
click to toggle source
# File lib/musicality/packable.rb, line 132 def pack_val val if val.is_a?(Packable) val.pack elsif val.is_a? Array val.map {|v| pack_val v} elsif val.is_a? Hash Hash[ val.map {|k,v| [ Packable.pack_val(k), Packable.pack_val(v) ]} ] else val end end
recover_class(klass_str)
click to toggle source
# File lib/musicality/packable.rb, line 110 def recover_class klass_str Kernel.const_get(klass_str) end
unpack_val(val)
click to toggle source
# File lib/musicality/packable.rb, line 117 def unpack_val val if val.is_a? Array val.map {|v| Packable.unpack_val v} elsif val.is_a? Hash if val.packed_class? val.unpack else Hash[ val.map {|k,v| [ Packable.unpack_val(k), Packable.unpack_val(v) ]} ] end else val end end