| Module | BoxGrinder::AStructMixin |
| In: |
lib/boxgrinder-core/astruct_mixin.rb
lib/boxgrinder-core/astruct_mixin.rb |
# File lib/boxgrinder-core/astruct_mixin.rb, line 14
14: def [](key)
15: r = [key, key.to_sym, key.to_s].find { |fk| !super(fk).nil? }
16: transform_entry( key, super(r) )
17: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 14
14: def [](key)
15: r = [key, key.to_sym, key.to_s].find { |fk| !super(fk).nil? }
16: transform_entry( key, super(r) )
17: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 5 5: def cascade_for_nils! 6: @cascade_for_nils = true 7: self 8: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 5 5: def cascade_for_nils! 6: @cascade_for_nils = true 7: self 8: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 54
54: def inspect
55: "AStruct<#{super.to_s}>"
56: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 54
54: def inspect
55: "AStruct<#{super.to_s}>"
56: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 10
10: def key?(key)
11: super( key ) || super( key.to_sym ) || super( key.to_s )
12: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 10
10: def key?(key)
11: super( key ) || super( key.to_sym ) || super( key.to_s )
12: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 19
19: def method_missing(sym, *args, &blk)
20: type = sym.to_s[-1,1]
21: name = sym.to_s.gsub(/[=!?]$/, '').to_sym
22: case type
23: when '='
24: self[name] = args.first
25: when '!'
26: __send__(name, *args, &blk)
27: when '?'
28: self[name]
29: else
30: if key?(name)
31: self[name]
32: elsif @cascade_for_nils
33: self[name] = AStruct.new.cascade_for_nils!
34: self[name]
35: else
36: nil
37: end
38: end
39: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 19
19: def method_missing(sym, *args, &blk)
20: type = sym.to_s[-1,1]
21: name = sym.to_s.gsub(/[=!?]$/, '').to_sym
22: case type
23: when '='
24: self[name] = args.first
25: when '!'
26: __send__(name, *args, &blk)
27: when '?'
28: self[name]
29: else
30: if key?(name)
31: self[name]
32: elsif @cascade_for_nils
33: self[name] = AStruct.new.cascade_for_nils!
34: self[name]
35: else
36: nil
37: end
38: end
39: end
# File lib/boxgrinder-core/astruct_mixin.rb, line 41
41: def transform_entry(for_key, entry)
42: case(entry)
43: when AStructMixin
44: entry
45: when Hash
46: entry.extend(AStructMixin)
47: when Array
48: entry.map!{|i| transform_entry(for_key, i)}
49: else
50: entry
51: end
52: end