标签: ruby

如何从.NET风格的TDD转向Ruby?

我一直在努力使我的标准方法适应测试驱动.NET代码到Ruby.

作为一个例子,我正在写一个类:

grab all *.markdown files from a directory
  foreach file:
    extract code samples from file
    save code to file.cs in output directory
Run Code Online (Sandbox Code Playgroud)

通常对于.NET,我最终会得到类似的东西:

class ExamplesToCode {
  public ExamplesToCode(IFileFinder finder, IExampleToCodeConverter converter) { ... }
  public void Convert(string exampleDir, string targetDir) { ... }
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中(首先写的),我是模拟查找器和转换器.然后,我踩灭了finder.FindFiles("*.markdown")回说["file1", "file2"],检查converter.Convert("file1", targetDir)converter.Convert("file2", targetDir)被调用.

我努力将这个应用于Ruby的地方是Ruby倾向于使用块和内部迭代器(例如array.each { |x| puts x }),并且包括模块而不是构造函数注入.我不确定如何在这些情况下对代码进行单元测试(没有设置完整的集成测试),而且.NET方法看起来非常不完美; 它似乎与Ruby自然运作的方式作斗争.

有关如何以Ruby方式执行此操作的任何建议?这个例子的Ruby测试的例子很棒.

.net c# ruby testing tdd

9
推荐指数
1
解决办法
430
查看次数

获取rails中相关模型的列表

假设我有一个对象Person,has_many :foos:bars.

给定一个实例p(p = Person.new),我如何以编程方式确定可用的关系?

p.some_method => ["foo", "bar"]

ruby ruby-on-rails relationship

9
推荐指数
1
解决办法
2344
查看次数

为什么这种递归不是无限的?

我和我的朋友正在进行一些基本的Ruby练习以了解语言,我们遇到了一个我们无法理解的有趣行为.基本上,我们创建的tree数据类型只有一个类node,它只包含一个值和一个零或更多的数组nodes.我们正在使用rspec的autospec测试运行器.有一次,我们开始编写测试以禁止无限递归(循环树结构).

这是我们的测试:

it "breaks on a circular reference, which we will fix later" do
  tree1 = Node.new 1
  tree2 = Node.new 1
  tree2.add_child tree1
  tree1.add_child tree2
  (tree1 == tree2).should be_false
end
Run Code Online (Sandbox Code Playgroud)

这是Node类:

class Node
  attr_accessor :value
  attr_reader :nodes

  def initialize initial_value = nil
    @value = initial_value
    @nodes = []
  end

  def add_child child
    @nodes.push child
    @nodes.sort! { |node1, node2| node1.value <=> node2.value }
  end

  def == node
    return (@value == node.value) && …
Run Code Online (Sandbox Code Playgroud)

ruby recursion rspec

9
推荐指数
1
解决办法
644
查看次数

arel,如何加入

特定

class Category < ActiveRecord::Base
  has_many :products, :order => 'name ASC'
end
Run Code Online (Sandbox Code Playgroud)

使用Rails 3堆栈,如何查询"拥有"产品的所有类别?

ruby ruby-on-rails arel ruby-on-rails-3

9
推荐指数
2
解决办法
2万
查看次数

如何向extconf.rb添加C++编译器标志

我正在编写一个Ruby扩展,我有一个标准的mkmf配置脚本,但我需要--std=c++0x在所有C++编译步骤中添加一个特殊的include flag().我不希望它在C编译步骤中,因为它会抛出警告.我该怎么做?

require 'mkmf'
create_makefile('thing')
Run Code Online (Sandbox Code Playgroud)

例如,我尝试过$CXXFLAGS << '-I..',但CXXFLAGS尚未定义.如果我使用$CXXFLAGS = '-I..'它,它稍后会被覆盖.

c c++ ruby

9
推荐指数
1
解决办法
1328
查看次数

我是否滥用"救援"进行零检查?

rescue用于所有事情,而不仅仅是用于"拯救"例外.我的意思是,我只是喜欢它让我验证并仔细检查数据的方式.

举个例子,假设我有一个Item可能有或没有的模型User.然后,当我想获得我写的项目的所有者名称时:

item.user.name rescue ""
Run Code Online (Sandbox Code Playgroud)

而不是像

item.user.nil? ? "" : item.user.name
Run Code Online (Sandbox Code Playgroud)

它也是同样的想法,因为nil.name触发了我拯救的异常"",但我不确定这是一个好习惯.它制作了我想要的东西,它用更少的代码制作它,但是......我不知道,rescue这里和那里的所有单词都让我感到不安全.

这是一种不好的做法,还是滥用rescue关键字有效?

ruby exception-handling ruby-on-rails

9
推荐指数
1
解决办法
987
查看次数

从Rails 2迁移到Rails 3

可能重复:
Rails 3已弃用的方法和API

有哪些资源(免费或付费)可以帮助您完成将Ruby on Rails 2应用程序迁移到Rails 3的过程?我在RoR网站上看到过一些博客文章(其中一些看起来已经过时)和一本电子书出售,但是你能推荐什么作为从版本2到版本3的变化的准确和完整的解释以及需要什么移植到Rails 3环境时要更新?

ruby migration ruby-on-rails ruby-on-rails-3

9
推荐指数
2
解决办法
5660
查看次数

Twitter仍然在Rails上运行吗?

我知道Twitter最初是在Ruby on Rails平台上运行的.

今天这是真的吗?

ruby twitter ruby-on-rails

9
推荐指数
1
解决办法
1217
查看次数

黑客ActiveRecord:添加全局命名范围

我试图为ActiveRecord模型提供一组非常通用的命名范围,如下所示:

module Scopes
  def self.included(base)
    base.class_eval do
      named_scope :not_older_than, lambda {|interval|
        {:conditions => ["#{table_name}.created_at >= ?", interval.ago]
      }
    end
  end
end
ActiveRecord::Base.send(:include, Scopes)

class User < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

如果命名范围应该是通用的,我们需要指定*table_name*以防止命名问题(如果它们是来自其他链式命名范围的连接).

问题是我们无法获取table_name,因为它在ActiveRecord :: Base上调用,而不是在User上调用.

User.not_older_than(1.week)

NoMethodError: undefined method `abstract_class?' for Object:Class
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2207:in `class_of_active_record_descendant'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1462:in `base_class'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1138:in `reset_table_name'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1134:in `table_name'
from /home/bogdan/makabu/railsware/startwire/repository/lib/core_ext/active_record/base.rb:15:in `included'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:92:in `call'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:92:in `named_scope'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:97:in `call'
from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:97:in `not_older_than'
Run Code Online (Sandbox Code Playgroud)

如何在Scopes模块中获取实际的table_name?

ruby activerecord ruby-on-rails

9
推荐指数
2
解决办法
2543
查看次数

做ruby插件让启动vim非常慢?

最近,当我运行它来编辑ruby文件或rails项目时,vim需要很长时间才能启动.但是在纯文本文件上调用时它会快速启动.有没有办法找出哪些ruby vim插件最有助于延长启动时间?

ruby vim

9
推荐指数
2
解决办法
881
查看次数