`
czy0203
  • 浏览: 6107 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

beast1.0 解读(二)

    博客分类:
  • ruby
阅读更多
简单的分析一下,发觉有了文档什么问题都不是问题!
model代码中我发觉user.rb代码比较丰富多彩一些,那就拿user.rb拿分析一下.

ruby 代码
 
  1. require 'digest/sha1'  #分析:引入Hash加密算法  
  2.   
  3. class User < ActiveRecord::Base  
  4.   has_many :moderatorships:dependent => :destroy  
  5.   has_many :forums:through => :moderatorships:order => 'forums.name'  
  6.   
  7.   has_many :posts  
  8.   has_many :topics  
  9.   has_many :monitorships  
  10.   has_many :monitored_topics:through => :monitorships:conditions => ['monitorships.active = ?', true], :order => 'topics.replied_at desc', :source => :topic  
  11.   #分析:  
  12.   #has_many就是表与表之间一对多的关系,就如:users表与forums表  
  13.   #这里专门介绍一个has_many各种Options的用法.  
  14.   #:class_name - 仅当model名不能直接由关联名推断出时,就必须指定这个选项值,  
  15.   #如:has_many :products 默认情况下,他的model的名字应为product;但是这个关联的model的名为SpecialProduct,这时我们就得指定这个选项值.  
  16.   #:conditions - 这个应该比较容易理解,就是取关联表数据时,必须加上:conditions所指定的条件.  
  17.   #:order - 就是取关联表数据时,返回一个"order by"的SQL片段.  
  18.   #:group - 关联表数据返回一个"group by"的SQL片段,如:"category"  
  19.   #:foreign_key - 默认的情况下外键为单数的表名+"_id";当外键与默认的约定不同时,那就得在这里选项里设值了.  
  20.   #:dependent - 从字面上看的意思是依赖,相关的意思.比如: has_many :moderatorships, :dependent => :destroy这句代码的意思就是当User  
  21.   #执行destroy方法时,那相应也会相应的删除moderatorships表里该user相关联的数据.  
  22.   #:exclusively_dependent - 排外依赖.就是关联表的相关记录一条SQL删除,不会因为其他表的关联产生回滚现象.  
  23.   #:through: 指定一个Join的方式执行一个跨表查询.   
  24.     
  25.   validates_presence_of     :login:email #分析:这两个字段必填  
  26.   validates_length_of       :login:minimum => 2  #分析:login的最小长度为2  
  27.     
  28.   with_options :if => :password_requireddo |u|  #分析:如果需要密码则:增加如下的验证条件.  
  29.     u.validates_presence_of     :password_hash  
  30.     u.validates_length_of       :password:minimum => 5, :allow_nil => true  
  31.     u.validates_confirmation_of :password:on => :create  #分析:一致性检查 仅在user.create的时候  
  32.     u.validates_confirmation_of :password:on => :update:allow_nil => true  
  33.   end  
  34.     
  35.   
  36.   # names that start with #s really upset me for some reason  
  37.   validates_format_of       :login:with => /^[a-z]{2}(?:\w+)?$/i  #分析:正则表达式  
  38.   validates_format_of       :identity_url:with => /^https?:\/\//i, :allow_nil => true  
  39.   
  40.   # names that start with #s really upset me for some reason  
  41.   validates_format_of     :display_name:with => /^[a-z]{2}(?:[.'\-\w ]+)?$/i, :allow_nil => true  
  42.   
  43.   validates_format_of :email:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => "Please check the e-mail address"[:check_email_message]  
  44.   
  45.   validates_uniqueness_of   :login:email:case_sensitive => false  
  46.   validates_uniqueness_of   :display_name:identity_url:case_sensitive => false:allow_nil => true  
  47.   before_validation { |u| u.identity_url = nil if u.identity_url.blank? }  
  48.   before_validation { |u| u.display_name = u.login if u.display_name.blank? }  
  49.   # first user becomes admin automatically  
  50.   before_create { |u| u.admin = u.activated = true if User.count == 0 }  
  51.   format_attribute :bio  
  52.   
  53.   attr_reader :password  
  54.   attr_protected :admin:posts_count:login:created_at:updated_at:last_login_at:topics_count:activated  
  55.   
  56.   def self.currently_online  
  57.     User.find(:all:conditions => ["last_seen_at > ?"Time.now.utc-5.minutes])  
  58.   end  
  59.   
  60.   # we allow false to be passed in so a failed login can check  
  61.   # for an inactive account to show a different error  
  62.   def self.authenticate(login, password, activated=true)  
  63.     find_by_login_and_password_hash_and_activated(login, Digest::SHA1.hexdigest(password + PASSWORD_SALT), activated)  
  64.   end  
  65.   
  66.   def self.search(query, options = {})  
  67.     with_scope :find => { :conditions => build_search_conditions(query) } do  
  68.       find :all, options  
  69.     end  
  70.   end  
  71.   
  72.   def self.build_search_conditions(query)  
  73.     query && ['LOWER(display_name) LIKE :q OR LOWER(login) LIKE :q', {:q => "%#{query}%"}]  
  74.   end  
  75.   
  76.   def password=(value)  
  77.     return if value.blank?  
  78.     write_attribute :password_hash, Digest::SHA1.hexdigest(value + PASSWORD_SALT)  
  79.     @password = value  
  80.   end  
  81.     
  82.   def reset_login_key!  
  83.     self.login_key = Digest::SHA1.hexdigest(Time.now.to_s + password_hash.to_s + rand(123456789).to_s).to_s  
  84.     # this is not currently honored  
  85.     self.login_key_expires_at = Time.now.utc+1.year  
  86.     save!  
  87.     login_key  
  88.   end  
  89.   
  90.   def moderator_of?(forum)  
  91.     moderatorships.count(:all:conditions => ['forum_id = ?', (forum.is_a?(Forum) ? forum.id : forum)]) == 1  
  92.   end  
  93.   
  94.   def to_xml(options = {})  
  95.     options[:except] ||= []  
  96.     options[:except] << :email << :login_key << :login_key_expires_at << :password_hash << :identity_url  
  97.     super  
  98.   end  
  99.     
  100.   def password_required?  
  101.     identity_url.nil?  
  102.   end  
  103. end  
分享到:
评论
1 楼 flyingchen 2007-10-24  
请教,其中的format_attribute是干什么的啊?
从字面看是format作用,可又发现不了它的定义

相关推荐

    蝙蝠怪物怪兽动物带动画模型:Bat Monster Beast 1.0

    蝙蝠怪物怪兽动物带动画模型

    PHP源码加密工具(php-beast)php7版 v1.0

    php-beast是一个源码加密模块...使用模块提供的beast_encode_file&#40;$input_file, $output_file&#41;;来加密文件,$input_file为要加密的文件,$output_file为要输出的加密文件。5)把加密好的文件放到服务器上运行。

    BEAST计算分化时间

    #### 二、BEAST概述 **BEAST**由以下几个关键组件构成: 1. **BEAST程序**:这是核心程序,用于执行分子进化的贝叶斯推断。 2. **BEAUti**:即Bayesian Evolutionary Analysis Utility,是用于设置进化模型和MCMC...

    beast源代码下载

    "beast-1.0"可能是指Beast的一个特定版本,这个版本号表示了软件的稳定性和功能特性。在不同版本之间,Beast可能会添加新功能、修复错误或改进性能。因此,选择适合你研究需求的版本至关重要。 总的来说,Beast是一...

    BEAST v1.8.2.rar

    **二、贝叶斯算法基础** 贝叶斯算法是一种统计推断方法,基于贝叶斯定理。在生物进化分析中,贝叶斯方法能够处理复杂的进化模型,并给出所有可能树形结构的概率分布。通过马尔科夫链蒙特卡洛(MCMC)方法,BEAST...

    beast加密扩展Windows DLL

    这个扩展是基于著名的“BEAST”(Block Cipher for Efficient and Secure Transports)算法,它是一种对称加密算法,旨在提供高效且安全的数据传输。在PHP环境中,这个DLL扩展使得开发者可以更方便地在Windows平台上...

    基于Boost.Beast构建的易于使用的HTTP(S)客户端.zip

    Boost.Beast的核心在于它的设计,它将网络通信的复杂性封装起来,使得开发者能够更专注于业务逻辑。Boost.Beast使用了Asio库,这是一个强大的、跨平台的C++网络编程库,提供了异步I/O功能。在Boost.Beast中,HTTP...

    windows下编译php­beast扩展

    在Windows环境下编译PHP-beast扩展是一个较为复杂的过程,涉及到选择合适的编译器、设置编译环境、准备编译文件、以及执行具体的编译步骤。本文将详细说明如何在Windows系统中编译PHP-beast扩展,同时会提供必要的...

    Beast-Super-Signal_super_indicator_mt4indicator_mt4_beastsupersi

    【标题】"Beast-Super-Signal_super_indicator_mt4indicator_mt4_beastsupersi" 指的是一个专门用于MetaTrader 4 (MT4) 平台的交易指标,名为"BEAST SUPER SIGNAL"。这个高级指标设计的目的是帮助交易者在金融市场中...

    Beast2.07 软件

    Beast2.07软件 Beast2.07软件 Beast2.07软件

    beast2, 基于抽样树的贝叶斯进化分析.zip

    beast2, 基于抽样树的贝叶斯进化分析 Beast 2 Beast 是一种基于分子序列MCMC的贝叶斯推理交叉平台程序。 它完全向根的方向推导,时间测量phylogenies使用严格或者松松的分子时钟模型推断出来。 它可以以作为一种重构...

    A Rough Guide to BEAST 1.4

    BEAST是一个基于贝叶斯MCMC(马尔可夫链蒙特卡洛)分析的跨平台分子序列分析程序,其设计目标是用于推断具有根的、基于严格或松弛分子钟模型的时间测定的系统发育树。BEAST不仅是一个重建系统发育树的方法,也是一个...

    beAst音频小组内部教程_初级第一版

    #### 二、国语音轨的数字化提取 1. **正版音像制品中的国语音轨提取**: - **软件准备**:使用ANYDVD,这是一种自动解密DVD电影的驱动程序,用于去除CSS加密保护和全区码。此外,DVDDecrypter用于提取DVD中的视频...

    PHP源码加密模块php-beast.zip

    PHP Beast是一个源码加密模块,使用这个模块可以把PHP源码加密并在此模块下运行。 为什么要用PHP-Beast? ... 有时候我们的代码会放到... 可见, 使用缓存的beast模块比原来还要快一点. 标签:phpbeast

    php-beast-master.zip

    php代码加密扩展 完安装php-beast后可以使用tools目录下的encode_files.php来加密你的项目使用。encode_files.php之前先修改tools目录下的configure.ini文件

    加密扩展php-beast

    BEAST攻击是利用了TLS 1.0中的CBC(Cipher Block Chaining)模式的一个漏洞,通过中间人攻击来获取用户敏感信息。php-beast扩展则为PHP提供了抵抗这种攻击的工具。 该扩展可能包括以下功能: 1. **TLS 1.2支持**:...

    TB+Beast_deZenderphp.ini_dezender_

    标题 "TB+Beast_deZenderphp.ini_dezender_" 暗示这是一个与 PHP 相关的项目,其中可能包含解码或处理 Zender 类的工具。描述 "decoder fo zender class php" 明确指出这是一个用于解码 Zender 类的 PHP 解码器。...

    HP源码加密工具(php-beast)php7版 v1.0

    HP源码加密工具(php-beast)php7版简介php-beast是一个源码加密模块,使用这个模块可以把PHP源码加密并在此模块下运行。PHP源码加密工具(php-beast)php7版主要支持PHP7,选择php7分支然后编译安装即可。使用方法:1)...

    php-beast_liexusong.tar.gz

    《PHP源码加密模块——深入理解php-beast_liexusong.tar.gz》 在Web开发领域,PHP作为一种开源、跨平台的脚本语言,因其简洁、高效的特点被广泛应用。然而,随着互联网安全问题日益凸显,如何保护PHP源码不被轻易...

    基于PHP的源码加密工具(-beast )7版.zip

    beast 7版作为一款高效的加密工具,提供了强大的加密算法和优化策略,能够有效提升代码的安全性。 1. **加密原理**:beast 7版可能采用了混淆、编码和加密等多种技术,使得原始的PHP代码变得难以理解。混淆技术通过...

Global site tag (gtag.js) - Google Analytics