Module: GlobalConst

Defined in:
lib/ns_service_pack/global_const.rb

Constant Summary collapse

APP_CODE_HASHES =
"config/code_hashes/"
@@global_data =
{}

Class Method Summary collapse

Class Method Details

.constantsObject



24
25
26
27
28
# File 'lib/ns_service_pack/global_const.rb', line 24

def self.constants
  data = @@global_data.select{|k| k.to_s !~ /\w+_mapping$/}.dup
  data.map{|k, v| data[k] = v.data}
  data
end

.load_app_code_hashes!(dir = APP_CODE_HASHES) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/ns_service_pack/global_const.rb', line 59

def self.load_app_code_hashes!(dir = APP_CODE_HASHES)
  if defined? Rails
    target = "#{Rails.root}/#{APP_CODE_HASHES}"
    if File.directory?(target)
      hfiles = Dir.glob("#{target}**/*.yml")
      hfiles.each do |f|
        load_code_hashes!(f)
      end
    end
  end
end

.load_code_hashes!(hash_or_file = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ns_service_pack/global_const.rb', line 37

def self.load_code_hashes!(hash_or_file = {})
  if hash_or_file.is_a?(Hash)
    h = hash_or_file
  else
    h = YAML.load(File.open(hash_or_file))
    unless h.is_a?(Hash)
      #格式异常检查,过滤掉空和无效文件
      puts "==>Warning: Invalid arguments: #{hash_or_file}, it does not evalute to a Hash!你自己去看,别找我!"
      return
    end
  end
  nh = h.symbolize_keys
  nh.keys.each do |k|
    if @@global_data.key?(k)
      puts "==>Warning: new value(from #{hash_or_file.inspect}) is set for key:#{k}! Please check that!"
    end
    #FIXME 兼容一下以前的版本,以前吧mapping文件的键值定义为:<class_name>_fileds
    _new_key = k.to_s =~ /_fields$/ ? k.to_s.gsub("_fields", "_mapping").to_sym : k
    @@global_data[_new_key] = CodeHash.new(nh[k])
  end
end

.mappingsObject

TODO 考虑在数据结构和设置时优化



31
32
33
34
35
# File 'lib/ns_service_pack/global_const.rb', line 31

def self.mappings
  data = @@global_data.select{|k| k.to_s =~ /\w+_mapping$/}.dup
  data.map{|k, v| data[k] = v.data}
  data
end

.method_missing(method_name, *args, &block) ⇒ Object

TODO 加载的时候直接生成方法,而不用这样动态查找,效率会更好吗?



18
19
20
21
22
# File 'lib/ns_service_pack/global_const.rb', line 18

def self.method_missing(method_name, *args, &block)
  ms = method_name.to_sym
  return @@global_data[ms] if @@global_data.key?(ms)
  raise "Method name: #{method_name}(#{args.inspect}) is not defined!"
end