小编Gab*_*esy的帖子

在Ruby中,为什么与nil("Date.new == nil")的相等性返回nil?

今天写一些rspec时,我遇到了一些意外行为,将Date(和Time)实例与nil进行比较.这是使用原始ruby(没有Rails或其他库)的示例:

user@MacBook-Work ~ $ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
user@MacBook-Work ~ $ irb
>> 1 == nil
=> false
>> "string" == nil
=> false
>> :sym == nil
=> false
>> false == nil
=> false
>> [] == nil
=> false
>> {} == nil
=> false
>> Proc.new {} == nil
=> false
Run Code Online (Sandbox Code Playgroud)

到目前为止,这么好,对吗?

>> Date.new == nil
=> nil
>> Time.new == nil
=> nil
Run Code Online (Sandbox Code Playgroud)

Date确实实现了自己的===,这很好用:

>> Date.new === nil
=> false
Run Code Online (Sandbox Code Playgroud)

有没有解释为什么会发生这种情况或为什么这是理想的行为?==似乎是从Comparable实现的.==,但是关于它的文档没有任何迹象表明它会返回nil.对此有何设计决定? …

ruby equality date

17
推荐指数
2
解决办法
3604
查看次数

使用ruby生成为/ etc/shadow格式化的SHA512 crypt-style哈希?

我想生成SHA512散列密码,以便直接包含在/ etc/shadow文件中,以便与chef的用户资源一起使用.通常我会去stdlib的Digest库,但它不会以正确的格式生成哈希:

ruby-1.9.2-p136 :001 > require 'digest/sha2'
 => true 
ruby-1.9.2-p136 :002 > Digest::SHA512.hexdigest('test')
 => "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff" 
Run Code Online (Sandbox Code Playgroud)

shadow文件想要的格式是:

$6$/ShPQNXV$HJnibH9lw01qtYqyJQiBf81ggJB2BGUvKA7.kv39HGCeE.gD4C/SS9zAf5BrwOv3VJzvl99FpHYli9E8jykRC0
Run Code Online (Sandbox Code Playgroud)

我看过的事情:

  • openssl"dgst"模块返回与.hexdigest相同的格式,其"passwd"模块不包含SHA512支持.
  • String#crypt,但不支持SHA512.(编辑:这只是OSX的情况 - 如果指定"$ 6 $ somesalt"作为盐,现代Linux发行版将起作用)
  • ruby-crypt gem,但它不支持SHA512

为了比较,返回正确格式的东西是PHP的crypt,但我宁愿不必向PHP执行简单的操作.

ruby encryption passwords crypt sha

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

rspec:使用render_views从控制器规范中存储模板的辅助方法调用

从Rails 3/Rspec 2开始,我试图利用控制器规范的render_views功能.我遇到的问题是我们刚刚安装了kaminari寻呼机gem,我想<%= paginate @sites %>从我的视图中删除调用,所以我不必手动删除kaminari在集合中定义的所有内部方法与paginate帮助者一起使用.

如果这是在视图规范中,我可以通过调用来删除辅助方法view.stub(:paginate),但是我找不到任何方法来从控制器规范(例如controller.view.stub(:paginate))获取视图对象的句柄.有没有办法做到这一点,或者我们可以选择禁用此方法的render_views,或者存储一堆与我们无关的内部kaminari方法(因为它们应该被kaminari的测试覆盖,并且可能会改变未来的版本)?

describe SitesController do
  render_views

  def mock_site(stubs={})
    @mock_site ||= mock_model(Site, stubs).as_null_object
  end

  describe "GET index" do
    it "assigns all sites as @sites" do
      Site.stub_chain("enabled.ordered.page") {[mock_site]}
      # want to do something here like: controller.view.stub(:paginate)
      get :index
      assigns(:sites).should eq([mock_site])
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails stub rspec2 ruby-on-rails-3

6
推荐指数
1
解决办法
1696
查看次数