草庐IT

控制方法

全部标签

ruby - 如何规范退出或中止的方法

我有一个从CLI触发的方法,它有一些显式退出或中止的逻辑路径。我发现在为此方法编写规范时,RSpec将其标记为失败,因为退出是异常。这是一个简单的例子:defcli_methodifconditionputs"Everything'sokay!"elseputs"GTFO!"exitendend我可以使用shouldraise_error(SystemExit)将规范包装在lambda中,但这会忽略block内发生的任何断言。需要明确的是:我不是在测试导出本身,而是在它之前发生的逻辑。我该如何指定这种类型的方法? 最佳答案 只需将您

ruby-on-rails - 我如何在 ruby​​ on rails 控制台中加载文件?

我正在尝试加载一个文件,其中包含我所有的设置到Rails控制台中。我想这样做是因为当我使用控制台时重复太多。谢谢 最佳答案 您可以使用位于您的主目录中的.irbrc文件来设置IRB的配置。您可以在那里使用load、require以及您想要的任何内容。添加类似require'rubygems'和require'pp'的内容会有所帮助。有些人更大量地自定义文件。参见this例如。 关于ruby-on-rails-我如何在ruby​​onrails控制台中加载文件?,我们在StackOverf

ruby 流量控制

我在网上找不到任何有用的资源来分解Ruby的不同流控制选项。假设我在一个方法中遍历一个数组:defa_methodthings.eachdo|t|#controloptions?endend这里有哪些不同的流量控制选项?它们有何不同?重试返回休息下一个重做 最佳答案 retry可以在救援block内使用,在导致异常的条件得到纠正后跳回到开始block。在block内,它具有跳转到yielding方法开头的效果。所以在每个内部这意味着重试将跳转到循环的开头。return将从它所在的方法返回-在本例中是从a_method。break将从

ruby - 我可以使用 RSpec 模拟标准输入/标准输出来测试控制台读写吗?

我的Ruby程序从stdin读取行并使用puts打印到stdout(终端)。我可以使用RSpec来测试读写吗?我可以像在stdin中编写的那样向我的程序注入(inject)一个字符串,同时检查输出吗?line=STDIN.read.chomp.split另外,我在一个循环中进行读取和写入,直到line[0]被“退出”。我可以在循环运行时进行测试,还是应该调用subject.read_in和subject.write_out? 最佳答案 您可以使用模拟并通过在and_return()方法中列出多个值来多次调用该方法。这些将按照给定的顺

ruby - 在 Ruby 中初始化常量的正确方法是什么?

我有一个简单的类,它定义了一些常量,例如:moduleFooclassBarBAZ="bof"...在我告诉Rake运行我所有的Test::Unit测试之前,一切都是小狗和彩虹。当它发生时,我会收到警告:bar.rb:3:warning:alreadyinitializedconstantBAZ我的习惯是通过使常量初始化有条件来避免这些警告,例如:...BAZ="bof"unlessconst_defined?:BAZ...这似乎解决了问题,但有点乏味,而且我从未见过其他人以这种方式初始化常量。这让我觉得我可能做错了。有没有更好的方法来初始化不会产生警告的常量?更新:通过更详细地说明我

ruby - 如何拦截 ruby​​ 中的方法调用?

我目前有一个父类(superclass),它有一个函数,我希望所有子类在它的每个函数中调用该函数。该函数的行为应该像rails中的before_filter函数,但我不确定如何去实现before_filter。这是一个例子classSuperclassdefbefore_each_methodputs"BeforeMethod"#thisissupposedtobeinvokedbyeachextendingclass'methodendendclassSubclass 最佳答案 这是一种方法:classSuperclassdefb

ruby-on-rails - 为 memcached 和 Rails 组合片段和对象缓存的最佳方法

假设您有一个显示最新帖子的页面片段,并且您在30分钟后将其过期。我在这里使用Rails。30.minutes)do%>...显然,如果该片段存在,您不需要进行数据库查找来获取最新的帖子,因此您也应该能够避免这种开销。我现在正在做的是Controller中类似这样的东西,它似乎可以工作:unlessRails.cache.exist?"views/recent_posts"@posts=Post.find(:all,:limit=>20,:order=>"updated_atDESC")end这是最好的方法吗?安全吗?我不明白的一件事是为什么片段的键是“recent_posts”,而稍后

ruby - 我可以通过猴子修补 NilClass 来为缺少的方法返回 nil 吗?

在其他语言中(例如objective-c)在nil对象上调用方法会静默失败并返回nil但在ruby​​中你会得到这样的错误...undefinedmethod`some_method'fornil:NilClass这(对我而言)会产生如下代码:ifsome_object&&some_object.cool?#insteadofifsome_object.cool?#dosomecoolstuffend或some_object.do_awsome_thingifsome_object这一切都显得倒退和怪异。两个问题我做错了什么,处理可能出现nil对象的正确方法是什么如果我只是猴子修补ni

ruby-on-rails - Rails 控制台 : Run a Ruby file several times

Rails提供了一个非常有用的控制台('script/console')。我编写了一个ruby​​文件并使用requirefoo.rb在控制台中运行它。第一次工作正常,但第二次和下一次requirefoo.rb没有运行我的脚本(require没有重新加载它)。你有什么提示/技巧吗? 最佳答案 require用于加载扩展-因此代码将执行一次,以使扩展出现在您的环境中,但随后的require不会做任何事情,因为工作已经完成完成。load,另一方面,每次加载并执行代码。如前所述,如果你只是想运行你的脚本并且你需要Rails环境,那么可以考

ruby - 保存并重新使用 block 以进行方法调用

我调用RestClient::Resource#get(additional_headers={},&block)方法多次使用相同的block但在不同的资源上,我想知道是否有一种方法可以将block保存到变量中,或者将其保存到Proc中,每次都将其转换为block。编辑:我做了以下事情:resource=RestClient::Resource.new('https://foo.com')redirect=lambdado|response,request,result,&block|if[301,302,307].include?response.coderesponse.follo