Class: BitGirder::Core::BitGirderClassDefinition
Constant Summary
collapse
- REQUIRED_ATTRS =
[ :cls, :attrs, :attr_syms, :decl_order, :instance_mappers ]
- @@class_defs =
{}
- @@validation_listener =
nil
BitGirder::Core::BitGirderMethods::PARAM_TYPE_ARG, BitGirder::Core::BitGirderMethods::PARAM_TYPE_ENVVAR, BitGirder::Core::BitGirderMethods::PARAM_TYPE_KEY
Class Method Summary
collapse
Instance Method Summary
collapse
argv_to_argh, check_fail_prefix, class_name_to_sym, compares_to, console, ext_to_class_name, ext_to_sym, has_env, has_key, has_keys, nonnegative, not_nil, positive, raisef, set_from_key, set_var, split_argv, sym_to_cli_switch, sym_to_ext_id, to_bool, unpack_argv_array, unpack_argv_hash, warn
Constructor Details
Returns a new instance of BitGirderClassDefinition.
568
569
570
571
572
573
574
575
|
# File 'lib/bitgirder/core.rb', line 568
def initialize( opts )
REQUIRED_ATTRS.each do |attr|
val = BitGirderMethods.has_key( opts, attr )
instance_variable_set( :"@#{attr}", val )
end
end
|
Class Method Details
.code(*argv) ⇒ Object
797
798
799
|
# File 'lib/bitgirder/core.rb', line 797
def self.code( *argv )
BitGirderLogger.code( *argv )
end
|
.default_instance_mappers_for(cls) ⇒ Object
758
759
760
761
762
763
764
765
766
767
768
769
770
771
|
# File 'lib/bitgirder/core.rb', line 758
def self.default_instance_mappers_for( cls )
[
InstanceMapper.new(
:processor => lambda { |val| val.is_a?( cls ) && val } ),
InstanceMapper.new(
:processor => lambda { |val|
val.is_a?( Hash ) && cls.send( :new, val )
}
)
]
end
|
.for_class(cls) ⇒ Object
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
|
# File 'lib/bitgirder/core.rb', line 773
def self.for_class( cls )
unless res = @@class_defs[ cls ]
attrs, decl_order =
if cls == BitGirderClass || cls == BitGirderError
[ {}, [] ]
else
cd = self.for_class( cls.superclass )
[ Hash.new.merge( cd.attrs ), Array.new( cd.decl_order ) ]
end
@@class_defs[ cls ] = res = new(
:cls => cls,
:attrs => attrs,
:attr_syms => attrs.keys.map { |id| "@#{id}".to_sym },
:decl_order => decl_order,
:instance_mappers => self.default_instance_mappers_for( cls )
)
end
res
end
|
.get_class_defs ⇒ Object
736
737
738
|
# File 'lib/bitgirder/core.rb', line 736
def self.get_class_defs
@@class_defs.dup
end
|
.get_validation_listener ⇒ Object
740
741
742
743
744
745
746
747
748
|
# File 'lib/bitgirder/core.rb', line 740
def self.get_validation_listener
if res = @@validation_listener
@@validation_listener = nil
res
else
lambda { |attr, e| } end
end
|
.init_instance(inst, argv) ⇒ Object
801
802
803
|
# File 'lib/bitgirder/core.rb', line 801
def self.init_instance( inst, argv )
self.for_class( inst.class ).init_instance( inst, argv )
end
|
.validation_listener=(l) ⇒ Object
750
751
752
753
754
755
756
|
# File 'lib/bitgirder/core.rb', line 750
def self.validation_listener=( l )
BitGirderMethods.not_nil( l, :l )
raise "A validation listener is already set" if @@validation_listener
@@validation_listener = l
end
|
Instance Method Details
#add_attr(arg) ⇒ Object
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
|
# File 'lib/bitgirder/core.rb', line 592
def add_attr( arg )
attr = read_add_attr_arg( arg )
if @attrs.key?( attr.identifier )
msg = "Attribute #{attr.identifier.inspect} already defined"
raise BitGirderAttribute::RedefinitionError, msg
else
ident = attr.identifier
@attrs[ ident ] = attr
@attr_syms << "@#{ident}".to_sym
@decl_order << ident
@cls.send( attr.mutable ? :attr_accessor : :attr_reader, ident )
end
end
|
#hash_instance(inst) ⇒ Object
729
730
731
|
# File 'lib/bitgirder/core.rb', line 729
def hash_instance( inst )
@decl_order.map { |id| @attrs[ id ].get_instance_value( inst ) }.hash
end
|
#init_instance(inst, argv) ⇒ Object
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
|
# File 'lib/bitgirder/core.rb', line 705
def init_instance( inst, argv )
argh =
if argv.size == 0
{}
else
if argv.size == 1 and ( arg = argv[ 0 ] ).is_a?( Hash )
arg
else
argv_to_argh( argv, @decl_order )
end
end
trace = caller
listener = BitGirderClassDefinition.get_validation_listener
@attrs.each_pair { |ident, attr|
set_attr_value( inst, argh, ident, attr, trace, listener )
}
impl_initialize( inst )
end
|