MiraitSystems/enju_trunk

View on GitHub
app/models/system_configuration.rb

Summary

Maintainability
B
6 hrs
Test Coverage
class SystemConfiguration < ActiveRecord::Base
  default_scope order('id ASC') 
  validate :value_by_typename_is_valid
  validate :check_length

  after_commit lambda {    
    Rails.cache.clear
  }

  Prefix_Key = "systemconfig_"

  CLASSIFICATION_TYPES = {
    0 => I18n.t('classification.not_disabled_type')
  }
  ClassificationType.all.each do |cls_type|
    CLASSIFICATION_TYPES[cls_type.id] = cls_type.display_name
  end


  def self.get(keyname)
    value = typename = nil

    s = Rails.cache.read("#{Prefix_Key}#{keyname}")
    if s
      logger.debug "using cache:#{Prefix_Key}#{keyname}"
    else
      s = SystemConfiguration.where(:keyname => keyname).first rescue nil
      if s
        Rails.cache.write("#{Prefix_Key}#{keyname}", s)
      end
    end
    if s
      value = s.v
      typename = s.typename
    end

    if value and typename
      case typename
      when "Text"
        return value.to_s
      when "String"
        return value.to_s
      when "Boolean"
        if value == "true"
          return true
        else
          return false
        end
      when "Numeric"
        return value.to_i
      end
    else
      begin
        v = eval("Setting.#{keyname}") 
      rescue
        logger.warn "key not found: #{keyname}"
      end
      return v
    end
  end

  def self.isWebOPAC
    return true if ENV['ENJU_WEB_OPAC'] or !SystemConfiguration.get('internal_server')
    false
  end

  def self.login_link_hidden?
    return true if ENV['ENJU_WEB_OPAC'] or !SystemConfiguration.get('internal_server')
    return true if ENV['ENJU_LOGIN_LINK_HIDDEN']
    false
  end

  private  
  def value_by_typename_is_valid
    case typename
    when "Text"
    when "String"
    when "Boolean"
      unless ["true","false"].include?(v)
        errors.add(:v, I18n.t('activerecord.attributes.system_configuration.invalid_format')) 
      end
    when "Numeric"
      unless self.v.blank?
        unless v =~ /^[0-9]+$/ 
          errors.add(:v, I18n.t('activerecord.attributes.system_configuration.invalid_format')) 
        end
      else
        self.v = 0
      end
    end
  end

  def check_length
    case keyname
    when 'checkouts_print.message'
      if v.length > 152
        errors[:base] = I18n.t('system_configuration.error.over_checkouts_print_message', :num => 76)
      end
    when 'reminder_postal_card_message'
      if v.length > 484
        errors[:base] = I18n.t('system_configuration.error.over_reminder_postal_card_message', :num => 242)
      end 
    when 'reminder_letter_message'
      if v.length > 1100
        errors[:base] = I18n.t('system_configuration.error.over_reminder_letter_message', :num => 550)
      end
    end
  end
end