Module: Configurable

Included in:
AgEditor, Application
Defined in:
lib/a-commons.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.properties_group(_group, _hash_source) ⇒ Object



476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
# File 'lib/a-commons.rb', line 476

def Configurable.properties_group(_group, _hash_source)
  @@conf_groups = Hash.new if !defined?(@@conf_groups)
  if @@conf_groups[_group].nil?
    @@conf_groups[_group] = Hash.new
    glen=_group.length
    _hash_source.keys.sort.each{|k|
      if k[0..glen] == "#{_group}."
        @@conf_groups[_group][k[glen+1..-1]]=_hash_source[k]
      elsif @@conf_groups[_group].length > 0
        break
      end
    }
  end
  Hash.new.update(@@conf_groups[_group])
end

Instance Method Details

#properties_file2hash(_property_file, _link_hash = nil) ⇒ Object



440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
# File 'lib/a-commons.rb', line 440

def properties_file2hash(_property_file, _link_hash=nil)
  r_hash = Hash.new
  if _property_file &&  FileTest::exist?(_property_file)
    f = File::open(_property_file,'r')
    begin
      _lines = f.readlines
      _lines.each{|_line|
        _strip_line = _line.strip
        if (_strip_line.length > 0)&&(_strip_line[0,1]!='#')
          var_plat = _line.split('::')
          if var_plat.length > 1
            if (RUBY_PLATFORM.include?(var_plat[0]))
              _line = var_plat[1]
              var_plat[2..-1].collect{|x| _line=_line+'::'+x} if var_plat.length > 2
            else
              _line = ''
            end
          end
          var = _line.split('=')
          if var.length > 1
            _value = var[1].strip
            var[2..-1].collect{|x| _value=_value+'='+x} if var.length > 2
            if _link_hash 
              _value = resolve_link(_value, _link_hash)
            end
            r_hash[var[0].strip]=_value
          end
        end
      }
    ensure
      f.close unless f.nil?
    end
    return r_hash      
  end
end


493
494
495
496
497
498
499
500
501
502
503
504
# File 'lib/a-commons.rb', line 493

def resolve_link(_value, _hash_source, _link_symbol='>>>', _add_symbol='+++')
    if _value.length > 0 
      _v, _vadd = _value.split(_add_symbol)
    else
      _v = _value
    end
    if _v.length > 3 && _v[0..2]==_link_symbol
      _v=_hash_source[_v[3..-1]] if _hash_source[_v[3..-1]]
      _v=_v+_vadd if _vadd
    end
    return _v
end


506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
# File 'lib/a-commons.rb', line 506

def resolve_properties_link(_hash_target, _hash_source, _link_symbol='>>>', _add_symbol='+++')
  loop_level_max = 10
#    _hash_adding = Hash.new
  _keys_to_extend = Array.new
  _hash_target.each{|k,value|
    loop_level = 0
    if value.length > 0
	v, vadd = value.split(_add_symbol)
    else
	v= value
    end
#      p "value=#{value} class=#{value.class}"
#      p "v=#{v} class=#{v.class}"
#      p "vadd=#{vadd}"
    while loop_level < loop_level_max && v.length > 3 && v[0..2]==_link_symbol
      if k[-1..-1]=='.'
        _keys_to_extend << k
        break
      elsif _hash_source[v[3..-1]]
        v=_hash_source[v[3..-1]]
        v=v+vadd if vadd
      else
        break
      end
      loop_level = loop_level + 1
    end
    _hash_target[k]=v
    if loop_level == loop_level_max
      raise("Link loop found for property : #{k}")
    end
  }
  _keys_to_extend.each do |k|
    v=_hash_target[k]
    g=Configurable.properties_group(v[3..-1], _hash_target)
    g.each do |key,value|
      _hash_target["#{k[0..-2]}.#{key}"]=value if !_hash_target["#{k[0..-2]}.#{key}"]
    end
    _hash_target.delete(k)
  end
end