标签: ruby

将2元素数组的数组转换为散列,其中重复键附加其他值

例如

给定一个数组:

array = [[:a,:b],[:a,:c],[:c,:b]]
Run Code Online (Sandbox Code Playgroud)

返回以下哈希:

hash = { :a => [:b,:c] , :c => [:b] }
Run Code Online (Sandbox Code Playgroud)

hash = Hash[array] 覆盖以前的协会,产生:

hash = { :a => :c , :c => :b }
Run Code Online (Sandbox Code Playgroud)

ruby arrays hash

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

检查字符串是否包含Ruby中数组中的任何子字符串

我正在使用Tmail库,对于电子邮件中的每个附件,当我这样做时attachment.content_type,有时我不仅会获得内容类型,还会获得名称.例子:

image/jpeg; name=example3.jpg

image/jpeg; name=example.jpg

image/jpeg; name=photo.JPG

image/png
Run Code Online (Sandbox Code Playgroud)

我有一系列有效的内容类型,如下所示:

VALID_CONTENT_TYPES = ['image/jpeg']
Run Code Online (Sandbox Code Playgroud)

我希望能够检查内容类型是否包含在任何有效的内容类型数组元素中.

在Ruby中这样做的最佳方式是什么?

ruby regex substring

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

一个方法应该结束吗?(问号)只返回一个布尔值?

我认为这只是常识和Ruby惯例,但我有这个方法:

def is_subscribed?(feed_url)
  Subscription.find_by_user_id_and_feed_id(self[ :id ], Feed.find_by_feed_url(feed_url))
end
Run Code Online (Sandbox Code Playgroud)

我得到的唯一困惑是,这不会像我最初预期的那样返回布尔值,方法名称的末尾加上问号.我的印象是,在将对象评估为条件时,true如果不是则返回nil.

显然我在这里忽略了这一点,并没有像我想的那样评估它.

所以,我的问题是,最好只做一个if (condition) true else false?或者有更优雅的方法吗?

ruby

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

如何检查对象是否可以在Ruby中迭代?

如何检查对象是否可以在Ruby中迭代?

也就是说,我想要一个干净地检查对象是否可迭代的方法,如下所示:

def is_iterable(my_object)
  ..
end
Run Code Online (Sandbox Code Playgroud)

我真的不知道从这个方法中明确命名类的这个简短的开始.

编辑: 为了我的目的,让我们说可迭代是你可以做的事情.

ruby

34
推荐指数
3
解决办法
1万
查看次数

页面对象模型:为什么不在页面方法中包含断言?

第一次海报.我已经在UI自动化领域工作了很多年,但最近才引入/指示使用Page Object Model.其中大部分是常识,包括我已经使用的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释.我希望这里有人可以启发我,因为这个问题引起了一些惊愕,因为我试图将POM与我自己的最佳实践相结合.

来自http://code.google.com/p/selenium/wiki/PageObjects:

上面给出的代码显示了一个重要的观点:测试而不是PageObjects应该负责对页面状态进行断言....当然,正如每个指南都有例外......

来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:

在如何设计页面对象方面有很多灵活性,但是有一些基本规则可以获得测试代码所需的可维护性.页面对象本身永远不应该进行验证或断言.这是测试的一部分,应该始终在测试代码中,而不是在页面对象中.页面对象将包含页面的表示形式,以及页面通过方法提供的服务,但是没有与正在测试的内容相关的代码应该在页面对象中.

有一个单一的验证可以而且应该在页面对象中,即验证页面以及页面上可能的关键元素是否已正确加载.应在实例化页面对象时完成此验证.

这两个"指南"都允许潜在的例外,但我对基本前提不能不同意.我习惯于在"页面方法"中进行大量的验证,我认为验证的存在是一种强大的技术,可以在各种环境中查找问题(即每次调用方法时都会进行验证)而不仅仅发生在特定测试的有限环境中.

例如,让我们想象一下,当您登录AUT时,会出现一些文本"以USER身份登录".有一个测试专门验证这个是合适的,但为什么不想在每次调用登录时验证它?这个工件与页面"是否正确加载"没有直接关系,并且它与"正在测试的内容"无关,因此根据上面的POM指南,它显然不应该是页面方法. ..但在我看来,它显然应该存在,通过尽可能经常地验证重要的工件来最大化自动化的力量,尽可能少的事先考虑.将验证码放入页面方法可以增加自动化的功能,允许您"免费"获得大量验证,而不必在测试中担心,并且在不同的环境中进行频繁验证通常会发现您不会发现的问题如果验证仅限于对该工件的单个测试.

换句话说,我倾向于区分特定于测试的验证和"一般"验证,并且我认为后者被广泛地包含在页面方法中是完全合适/可取的.这促进了更薄的测试和更厚的页面对象,这通常通过重用更多代码来提高测试可维护性 - 尽管这些指南中存在相反的争用.我错过了这一点吗?不希望在页面方法中进行验证的真正原理是什么?我所描述的情况实际上是这些指南中描述的"例外"之一,因此实际上与POM不一致吗?提前感谢您的想法.-jn-

ruby selenium webdriver pageobjects selenium-webdriver

34
推荐指数
4
解决办法
7718
查看次数

在Ruby中覆盖==运算符

根据文档,Array.include?在对象上使用==比较.我来自Java,其中(通常)使用.equals()完成这些事情,这很容易覆盖特定对象.

如何在Ruby中覆盖==以允许我指定Array.include的行为对于我的特定对象?

非常感谢.

ruby overriding equality

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

Carrierwave,MiniMagick - NoMethodError:nil的未定义方法`size':NilClass

在暂存时,我在通过carrierwave和minimagick上传和调整图像大小时面临以下错误.在当地一切正常.

carrierwave(0.9.0)mini_magick(3.7.0)

irb(main):003:0> PicturePost.create(remote_content_url: 'http://www.imagpress.com/img/slider/slider_1.jpg')
NoMethodError: undefined method `size' for nil:NilClass
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:24:in `choose_processor'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:64:in `mogrify?'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:360:in `run_command'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:171:in `valid?'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:140:in `create'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:48:in `read'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:111:in `block in open'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:260:in `manipulate!'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:176:in `resize_to_fill'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:85:in `block in process!'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `each'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `process!'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `each'
9 levels...
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/download.rb:65:in `download!'
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:353:in `remote_url='
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:203:in `remote_content_url='
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:44:in `remote_content_url='
from …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-3 carrierwave minimagick

34
推荐指数
2
解决办法
9632
查看次数

rails4未知编码名称 - CP720

我现在得到这个错误当我想运行任何gem命令,如

 gem install rubygems-update
Run Code Online (Sandbox Code Playgroud)

错误

while executing gem ... (ArgumentError)
unknown encoding name - CP720
Run Code Online (Sandbox Code Playgroud)

因此,当我调整它时,我发现有人建议使用此命令将编码更改为1252

C:\DevKit> chcp 1252
c:\DevKit> ruby dk.rb init  
Run Code Online (Sandbox Code Playgroud)

但是在我使用它之后我仍然得到了同样的错误,所以我怎么能解决这个问题?????

注意:我正在使用Windows 7

ruby command-line cmd ruby-on-rails

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

退出和中止有什么区别?

abort文件说, abort

通过调用Kernel.exit(false)立即终止执行.

"立即"究竟是什么意思?非状态abortexittrue状态有什么区别?

ruby exit

34
推荐指数
1
解决办法
3万
查看次数

Heroku上的Rails 4错误R14(超出内存配额)

我一直得到(显然很常见的)错误R14,不知道什么时候开始但是在安装Papertrail插件后注意到了.在看到其他人提到它之后我也加了oink.我已经尝试过其他人在其他SO问题中尝试过的所有问题,但我似乎无法找到问题/内存泄漏.

Error R14 (Memory quota exceeded)
heroku/web.1: Process running mem=587M(114.7%)
Run Code Online (Sandbox Code Playgroud)

当我看到这个,暂时修复它,我运行heroku restart了一段时间,但我想永久解决这个问题.

从我在Papertrail中看到的,该应用程序只是一遍又一遍地加载相同的页面(主页)(而不是用户流量):

app/web.1: Completed 200 OK in 436ms (Views: 45.5ms | ActiveRecord: 386.2ms) 
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db rails[9]: Oink Action: static_pages#home
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db rails[9]: Memory usage: 378860 | PID: 19
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db rails[9]: Oink Log Entry Complete 
heroku/web.1: source=web.1 dyno=heroku.25566769.9d9a3da0-db4c-4b51-bc53-b69be9e43cb7 sample#memory_total=209.86MB sample#memory_rss=209.83MB sample#memory_cache=0.02MB sample#memory_swap=0.00MB sample#memory_pgpgin=59278pages sample#memory_pgpgout=5555pages 
Run Code Online (Sandbox Code Playgroud)

2分钟后:

heroku/web.1: source=web.1 dyno=heroku.25566769.9d9a3da0-db4c-4b51-bc53-b69be9e43cb7 sample#memory_total=293.73MB sample#memory_rss=291.94MB sample#memory_cache=0.02MB sample#memory_swap=1.77MB sample#memory_pgpgin=80890pages sample#memory_pgpgout=6147pages …
Run Code Online (Sandbox Code Playgroud)

ruby memory-leaks ruby-on-rails heroku ruby-on-rails-4

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