module GlobalConst

Constants

APP_CODE_HASHES

Public Class Methods

constants() click to toggle source
# 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) click to toggle source
# 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 = {}) click to toggle source
# 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
mappings() click to toggle source

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

# 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) click to toggle source

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

# 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