Roxy是Ryan Daigle写的一个Ruby代理库,它可以让你轻松的向关联对象添加方法,就像has_many为关联对象添加的build和create方法那样,比如: require ‘roxy’ class Person include Roxy::Moxie attr_accessor :first, :last, :parents proxy :parents do def divorced? proxy_target.size > 1 and proxy_target.collect { |parent| parent.last }.uniq.size > 1 end end end 现在你就可以直接在person.parents上直接调用divorced?方法了, -> person.parents.divorced? => true|false 当然如果只是简单的修改find条件,那么named_scope无疑是个更好的选择,更多信息及安装方法请看这里。
Category Archives: Ruby
Writing Efficient Ruby Code Short Cut
这本书目前只完成了第一章,不过出版社已经迫不及待的发售了Shortcut版本(有点类似电影宣传片,但是价格不菲),这本书的作者Stefan Kaes就是Letrails上访问量最高的文章之一《Rails应用优化指南》的作者。书中的内容主要来自作者参与Rails Core开发以及他自己的几个Rails咨询项目中的经验。 至于Shortcut,只有48页,主要讲了一些Ruby编程的最佳实践,有些内容《Rails应用优化指南》也有讲到,对于编写高质量的Ruby代码还是有帮助的,但12刀的价格,尽管RMB持续升值,性价比仍然过低(且大部分内容根据目录标题应该都可以谷歌到),还是期待整书面世。
Matz在Google Tech Talks上的演讲
主要讲了Ruby1.9的变动,比如: e1 = [1, 2, 3, 4].each e2 = [10, 11, 4].each loop { p e1.next + e2.next } #prints 11, 13 and 7 还是蛮不错的,不用担心听不懂,因为Matz的英语实在是。。。
Ruby Metaclass详解
来自whytheluckystiff.net。 —————————————– 如果你是Ruby Metaprogramming的新手,那么下面的代码或许会帮你找到一点感觉: class Object # The hidden singleton lurks behind everyone def metaclass; class > class MailTruck >> attr_accessor :driver, :route >> def initialize( driver, route ) >> @driver, @route = driver, route >> end >> end >> m = MailTruck.new( “Harold”, ['12 Corrigan Way', '23 Antler Ave'] ) => #<MailTruck:0x81cfb94 @route=["12 Corrigan [...]
for循环与each的区别
for和each的区别主要在于: for是通过调用each实现,因此for更慢一些 for会在each的scope之外创建一个局部变量,这在某些情况下会引发问题 关于第二点,下面的代码可以很好的说明这个问题: irb> [1, 2, 3].each do |m| puts m end irb> puts m NameError: undefined local variable or method `m’ for main:Object irb> for n in [1, 2, 3] do puts n; end irb> puts n => 3 如果你不了解这一点,那么在某些特殊的情况下,你可能会遇到麻烦,Ruby Forum的某个用户提交的一段代码很好的说明了for可能引发的问题: a = [] for n in [1, 2, 3] do a << [...]
Ruby技巧3则
1. 构造正则 我们都知道,可以通过一下两种方式来构造正则: irb> /ruby/ => /ruby/ irb> Regexp.new(‘ruby’) => /ruby/ 但实际上还有一种: irb> %r{ruby} => /ruby/ 如同%w, %q一样,%r将一个字符串转换为一个正则,并且你不止可以使用{}作为起始,结束符: irb> %r!ruby! => /ruby/ irb> %r|ruby| => /ruby/ 实际上,你可以使用任何不在正则中出现的字符作为字符串的起始和结束符,比如@#$%^&等等。 来自这里 2. alias 与 alias_method的区别 来自pragmati.st, 区别有3点: alias是Ruby的一个关键字,而alias_method是Module类的一个方法 alias的参数就是方法本身(method identify),注意,不是字符串,也不是Symbol,alias_method的参数则是字符串或者symbol,并且使用逗号分隔。 alias_method可以重定义,而alias则不能 alias new_method_name old_method_name alias_method :new_method_name, ld_method_name alias_method ‘new_method_name’, ‘old_method_name’ 3. ruby 中的printf irb> “my name is %s” [...]
使用Flog测试你的Ruby代码复杂度
简介 Flog是一个计算你的Ruby代码复杂度的工具,来自大牛Ryan Davis的seattle.rb项目。 安装 $ sudo gem install flog 使用 $ find . -name \*.rb | xargs flog 这条命令将会计算你当前目录下的所有.rb文件的复杂度。 Flog根据以下条件判断你的代码复杂度,得分越高,说明你的代码越复杂, eval,6分 分支语句,1.2分 ==,1.2分 puts,1.2分 赋值语句,1.2分 Fixnum,0.4分 因此下面这段代码的得分就是11.2分: 图片来自RubyInside。
JRuby Inside上线
与Ruby Inside类似,不过从它的名字我们就能想到,JRuby Inside的内容将主要集中在JRuby方面,当然,Ruby Inside上也还会有关于JRuby的内容,不过如果你是JRuby的粉丝,那么我相信JRuby Inside会使你的脉搏跳动的更快一些。 JRuby Inside的Feed订阅地址:http://feeds.feedburner.com/JRubyInside
JRuby1.0发布
JRuby,Ruby语言的Java实现,经过漫长的等待之后,终于发布了1.0版本 ,此版本的特性包括: 完全兼容Ruby1.8.5版本 支持大部分Ruby builtin class 支持从Ruby内部定义及使用Java class Bean Scripting Framework(BSF)支持 多License支持(CPL/GPL/LGPL) JRuby项目始于2001年,最初仅仅是对Ruby 1.6的简单porting,但是随着2006年9月Sun公司的介入,JRuby项目开始进入一个高速发展的阶段,随着1.0版本的发布,JRuby项 目的开发者宣称大部分兼容性Bug都已经得到了解决,现在”它基本可以工作了(It will just works!)!“ 事实上,许多公司(Thoughtworks是最著名的),都期盼着JRuby项目能够释放Rails在企业应用开发上的强大动力,现在,随着 JRuby1.0的发布,让我们有理由相信,Rails进军企业级应用的那一天已经不远了,相信Ruby社区很快就会出现大量的基于JRuby的新应用以 及开发指南。
