Module: WR::ModAccessor
Overview
Base classes #####
Defined Under Namespace
Modules: ModArrayAccess
Instance Attribute Summary collapse
-
#_accessors ⇒ Object
readonly
Returns the value of attribute _accessors.
Instance Method Summary collapse
-
#_add_accessor(obj, name) ⇒ Object
dpp self, obj, name#, caller[0, 2].
- #_check_name(name) ⇒ Object
- #_define_access_method(name, obj) ⇒ Object
- #_delete_accessor(name, idx = nil) ⇒ Object
- #_delete_accessor_by_obj(obj) ⇒ Object
Instance Attribute Details
#_accessors ⇒ Object (readonly)
Returns the value of attribute _accessors.
402 403 404 |
# File 'lib/wrb/base.rb', line 402 def _accessors @_accessors end |
Instance Method Details
#_add_accessor(obj, name) ⇒ Object
dpp self, obj, name#, caller[0, 2]
416 417 418 419 420 421 422 423 424 425 426 427 428 |
# File 'lib/wrb/base.rb', line 416 def _add_accessor(obj, name) #dpp self, obj, name#, caller[0, 2] @_accessors ||= {} raise "Need name for accessor" unless name _check_name(name) if obj1=@_accessors[name] @_accessors[name] = [obj1].extend(ModArrayAccess) unless obj1.is_a? Array @_accessors[name] << obj else @_accessors[name] = obj _define_access_method(name, obj) end obj end |
#_check_name(name) ⇒ Object
403 404 405 406 407 408 409 |
# File 'lib/wrb/base.rb', line 403 def _check_name(name) raise NameError, "Name must be Symbol (but got #{name.class})." unless name.is_a? Symbol str = name.to_s if !(str =~ /^[a-z][a-zA-Z0-9_]*$/) raise NameError ,"`#{str}' is not allowed for name of accessor.", caller(2) end end |
#_define_access_method(name, obj) ⇒ Object
411 412 413 414 |
# File 'lib/wrb/base.rb', line 411 def _define_access_method(name, obj) instance_eval "def #{name}() @_accessors[:#{name}]; end" @parent.instance_eval "def _#{name}() controls.#{name}; end" end |
#_delete_accessor(name, idx = nil) ⇒ Object
430 431 432 433 434 435 436 437 438 439 440 441 442 443 |
# File 'lib/wrb/base.rb', line 430 def _delete_accessor(name, idx=nil) if (obj1=@_accessors[name]).is_a?(Array) && obj1.size>1 raise ArgumentError, "Need index" unless idx if idx.is_a?(Integer) && idx <= ModParent::ItemBaseID obj1.delete_at(idx) else obj1.delete(idx) end @_accessors[name] = obj1[0] if obj1.size == 1 else @_accessors.delete(name) instance_eval "undef #{name} if defined?(#{name})" end end |
#_delete_accessor_by_obj(obj) ⇒ Object
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 |
# File 'lib/wrb/base.rb', line 445 def _delete_accessor_by_obj(obj) @_accessors.each{|k, v| if v.is_a?(Array) if r=v.delete(obj) @_accessors[k] = v[0] if v.size==1 break else next end elsif v==obj @_accessors.delete_if{|k, v| v==obj} instance_eval "undef #{k} if defined?(#{k})" break end } end |