Module BoxGrinder::AStructMixin
In: lib/boxgrinder-core/astruct_mixin.rb
lib/boxgrinder-core/astruct_mixin.rb

Methods

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

   # File lib/boxgrinder-core/astruct_mixin.rb, line 5
5:     def cascade_for_nils!
6:       @cascade_for_nils = true
7:       self
8:     end

[Source]

   # File lib/boxgrinder-core/astruct_mixin.rb, line 5
5:     def cascade_for_nils!
6:       @cascade_for_nils = true
7:       self
8:     end

[Source]

    # File lib/boxgrinder-core/astruct_mixin.rb, line 54
54:     def inspect
55:        "AStruct<#{super.to_s}>"
56:     end

[Source]

    # File lib/boxgrinder-core/astruct_mixin.rb, line 54
54:     def inspect
55:        "AStruct<#{super.to_s}>"
56:     end

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]