77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| class Site
 | |
|   
 | |
|   METAS = ['description', 'keywords']
 | |
| 
 | |
|   include Mongoid::Document
 | |
|   include Mongoid::Timestamps
 | |
|   
 | |
|   field :in_use_locales, :type => Array
 | |
|   field :valid_locales, :type => Array
 | |
|   
 | |
|   field :roaming_id
 | |
|   field :private_key, :type => Binary
 | |
|   field :public_key, :type => Binary
 | |
|   field :title_always_on, :type => Boolean, :default => false
 | |
|   
 | |
|   field :school
 | |
|   field :department
 | |
| 
 | |
|   has_one :title, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy
 | |
|   has_one :footer, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy
 | |
|   has_one :sub_menu, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy
 | |
|   has_many :site_metas, :autosave => true, :dependent => :destroy
 | |
|   
 | |
|   before_save :set_key
 | |
| 
 | |
|   def generate_keys
 | |
|     private_key = OpenSSL::PKey::RSA.generate(2048)
 | |
|     self.public_key = private_key.public_key.to_s
 | |
|     self.private_key = private_key.to_s
 | |
|   end
 | |
|   
 | |
|   def registered?
 | |
|     !self.roaming_id.blank?
 | |
|   end
 | |
|   
 | |
|   def up_to_date?
 | |
|     res = res.split('rails_3_1').pop.gsub('(', '').gsub(')','').strip rescue nil
 | |
|     res.eql?('local out of date') ? false : true
 | |
|   end
 | |
| 
 | |
|   def title
 | |
|     @title ||= I18nVariable.first(:conditions => {:key => 'title', :language_value_id => self.id, :language_value_type => self.class}) rescue nil
 | |
|   end
 | |
| 
 | |
|   def footer
 | |
|     @footer ||= I18nVariable.first(:conditions => {:key => 'footer', :language_value_id => self.id, :language_value_type => self.class}) rescue nil
 | |
|   end
 | |
| 
 | |
|   def sub_menu
 | |
|     @sub_menu ||= I18nVariable.first(:conditions => {:key => 'sub_menu', :language_value_id => self.id, :language_value_type => self.class}) rescue nil
 | |
|   end
 | |
| 
 | |
|   METAS.each do |meta|
 | |
|     define_method meta do
 | |
|       fetch_meta = self.site_metas.where(key: meta).limit(1)
 | |
|       fetch_meta.blank? ? nil : fetch_meta[0].i18n_variable
 | |
|     end
 | |
|     define_method "#{meta}=" do |values|
 | |
|       if a = self.send(meta)
 | |
|         a.update_attributes(values)
 | |
|       else
 | |
|         a = self.site_metas.build(key: meta)
 | |
|         a.build_i18n_variable(values)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   protected
 | |
|   
 | |
|   def set_key
 | |
|     title.key = 'title' if title && (title.key.blank? rescue true)
 | |
|     footer.key = 'footer' if footer && (footer.key.blank? rescue true)
 | |
|     sub_menu.key = 'sub_menu' if sub_menu && (sub_menu.key.blank? rescue true)
 | |
|   end
 | |
|   
 | |
| end
 |