Sha256: cccf54d0bf39220d7f2d4bb791745610119f969acb8a27e8664822fcf6727082
Contents?: true
Size: 993 Bytes
Versions: 2
Compression:
Stored size: 993 Bytes
Contents
module Celluloid module Internals # Properties define inheritable attributes of classes, somewhat similar to # Rails cattr_*/mattr_* or class_attribute module Properties def property(name, opts = {}) default = opts.fetch(:default, nil) multi = opts.fetch(:multi, false) ivar_name = "@#{name}".to_sym singleton = class << ancestors.first; self; end begin singleton.send(:remove_method, name) rescue nil end singleton.send(:define_method, name) do |value = nil, *extra| if value value = value ? [value, *send(name), *extra].uniq : [] if multi instance_variable_set(ivar_name, value) elsif instance_variables.include?(ivar_name) instance_variable_get(ivar_name) elsif superclass.respond_to? name superclass.send(name) else default end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
celluloid-0.18.0 | lib/celluloid/internals/properties.rb |
celluloid-0.18.0.pre2 | lib/celluloid/internals/properties.rb |