标签: ruby

如何找到安装Ruby Gem的路径(即Gem.lib_path cf Gem.bin_path)

Gem.bin_path('cucumber', 'cucumber')
Run Code Online (Sandbox Code Playgroud)

将返回二进制/可执行文件的路径.似乎没有这样的函数来返回库路径.在这种情况下,理想情况下会返回:

/home/hedge/.rvm/gems/ruby-1.9.2-p136@bbb-bdd-meta-bdd/gems/cucumber-0.10.0/lib
Run Code Online (Sandbox Code Playgroud)

我错过了什么或者是否有一种简单/一种方法来获取这些信息?

更新:请不要CLI或非stdlib建议.

ruby api rubygems

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

如何使用Rails 3获取请求的目标控制器和操作?

在过滤器之前的应用程序控制器

class ApplicationController < ActionController::Base
  before_filter :authenticate

  def authenticate
    # How do we know which controller and action was targetted?
  end
end
Run Code Online (Sandbox Code Playgroud)

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

44
推荐指数
4
解决办法
3万
查看次数

如何合并哈希数组以获取值数组的哈希值

这与将一个Hash of Arrays转换为Ruby中的Hashes数组相反.

优雅地和/或有效地将散列数组转换为散列值,其中值是所有值的数组:

hs = [
  { a:1, b:2 },
  { a:3, c:4 },
  { b:5, d:6 }
]
collect_values( hs )
#=> { :a=>[1,3], :b=>[2,5], :c=>[4], :d=>[6] }
Run Code Online (Sandbox Code Playgroud)

这个简洁的代码几乎可以工作,但是在没有重复的情况下无法创建数组:

def collect_values( hashes )
  hashes.inject({}){ |a,b| a.merge(b){ |_,x,y| [*x,*y] } }
end
collect_values( hs )
#=> { :a=>[1,3], :b=>[2,5], :c=>4, :d=>6 }
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但你能写一个更好的版本吗?

def collect_values( hashes )
  # Requires Ruby 1.8.7+ for Object#tap
  Hash.new{ |h,k| h[k]=[] }.tap do |result|
    hashes.each{ |h| h.each{ |k,v| result[k]<<v } }
  end …
Run Code Online (Sandbox Code Playgroud)

ruby arrays hash merge

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

您如何在RoR中创建SO或Facebook等通知系统?

我认为通知将是它自己的资源,并且has_many, through与用户模型有关系,并且连接表表示关联.

具有许多通知的用户是显而易见的,然后通知将具有许多用户,因为将存在与许多用户相关联的多个标准化通知(评论通知,后续通知等).

除此设置外,我不确定如何根据应用程序中的某些事件触发通知创建.我也不确定如何设置路由 - 它是自己独立的资源还是嵌套在用户资源中?如果有人可以对此进行扩展,我会发现它非常有用.

最后,ajax轮询可能会改善这样的功能.

可能有一些我缺少的东西,所以请填写它,以便它是一个很好的一般资源.

ruby notifications ruby-on-rails push-notification ruby-on-rails-3

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

如何在C#中生成HMAC-SHA1?

我正在尝试使用C#来使用REST API.API创建者提供了PHP,Ruby和Java的示例库.我被挂在它的一部分,我需要生成一个HMAC.

以下是它们提供的示例库中的完成方式.

PHP

hash_hmac('sha1', $signatureString, $secretKey, false);
Run Code Online (Sandbox Code Playgroud)

红宝石

digest = OpenSSL::Digest::Digest.new('sha1')
return OpenSSL::HMAC.hexdigest(digest, secretKey, signatureString)
Run Code Online (Sandbox Code Playgroud)

Java的

SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA1_ALGORITHM);

Mac mac = null;
mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);

byte[] bytes = mac.doFinal(signatureString.getBytes());

String form = "";
for (int i = 0; i < bytes.length; i++)
{
    String str = Integer.toHexString(((int)bytes[i]) & 0xff);
    if (str.length() == 1)
    {
        str = "0" + str;
    }

    form = form + str;
}
return form;
Run Code Online (Sandbox Code Playgroud)

这是我在C#中的尝试.它不起作用.更新:下面的C#示例工作得很好.我发现真正的问题是由于我的换行符中的一些跨平台差异 …

php c# ruby java hmac

44
推荐指数
3
解决办法
5万
查看次数

在Ruby中发送方法

我刚刚读到了sendRuby中的内容,在查看此代码时我仍然感到困惑(它来自测验但是过去截止日期)

x = [1,2,3]
x.send :[]=,0,2
x[0] + x.[](1) + x.send(:[],2)
Run Code Online (Sandbox Code Playgroud)

我明白第一行给x分配一个数组然后我不明白什么:[] = ,0,2根本不知道我不明白为什么需要发送我不知道什么x.[](1)做和x.send(:[],2)做到最后线

我真的很困惑,我无法在网上找到这些信息.

我发现了发送的内容,但我仍然有点困惑,并且对这个代码整体感到很困惑.

ruby

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

VCRProxy:在Capybara内用录像机录制PhantomJS ajax电话

我已经在这个领域做了一些研究,但没有找到任何解决方案.我有一个网站,在那里对facebook进行异步ajax调用(使用JSONP).我正在使用VCR在Ruby端记录我的所有HTTP请求,所以我认为将这个功能用于AJAX调用也很酷.

所以我玩了一下,并提出了代理尝试.我正在使用PhantomJS作为Capybara内部集成的无头浏览器和恶作剧者.Poltergeist现在配置为使用这样的代理:

  Capybara.register_driver :poltergeist_vcr do |app|
    options = {
      :phantomjs_options => [
        "--proxy=127.0.0.1:9100",
        "--proxy-type=http",
        "--ignore-ssl-errors=yes",
        "--web-security=no"
      ],
      :inspector => true
    }
    Capybara::Poltergeist::Driver.new(app, options)
  end
  Capybara.javascript_driver = :poltergeist_vcr
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我编写了一个基于WEbrick的代理服务器,它集成了VCR:

require 'io/wait'
require 'webrick'
require 'webrick/httpproxy'

require 'rubygems'
require 'vcr'

module WEBrick
  class VCRProxyServer < HTTPProxyServer
    def service(*args)
      VCR.use_cassette('proxied') { super(*args) }
    end
  end
end

VCR.configure do |c|
  c.stub_with :webmock
  c.cassette_library_dir = '.'
  c.default_cassette_options = { :record => :new_episodes }
  c.ignore_localhost = true
end

IP   = '127.0.0.1'
PORT = 9100

reader, writer …
Run Code Online (Sandbox Code Playgroud)

ruby ajax https phantomjs vcr

44
推荐指数
1
解决办法
3694
查看次数

在Ruby中计算中位数

如何使用Ruby计算数字数组的中位数?

我是初学者,在学习的过程中,我正努力坚持已经教过的东西.因此,我发现的其他问题超出了我的范围.

这是我的笔记和我的尝试:

  1. 按升序对数组进行排序.
  2. 弄清楚它是奇数还是长度.
  3. 如果是奇数,则将排序后的数组长度+1分成两半.这是中位数的指数.返回此值.
  4. 如果是偶数,找到排序数组的中间两个数字并将其除以1/2.返回此值.
  5. 找到中间的两个数字:
  6. 将排序后的数组长度分成两半.这是指数pt.第一个中间数字.
  7. 将排序的数组长度+ 2分成两半.这是指数pt.第二个中间数字.
  8. 取这两个中间数的平均值.

    def median(array)
      ascend = array.sort
      if ascend % 2 != 0
        (ascend.length + 1) / 2.0
      else
        ((ascend.length/2.0) + ((ascend.length + 2)/2.0) / 2.0)
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)

ruby median

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

to_proc方法是什么意思?

我正在学习rails并遵循这个主题.我坚持使用这种to_proc方法.我认为符号只是字符串的替代品(它们就像字符串,但在内存方面更便宜).如果还有其他我想念的符号,那么请告诉我.请以简单的方式解释什么to_proc方法和用途.

ruby syntax symbols block proc

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

ruby 2.0 rails gem安装错误"无法加载此类文件 - openssl"

我正在使用osx 10.8.2安装ruby 2.0和....当试图运行"sudo gem install rails"时得到了这个

$ sudo gem install rails
ERROR:  Loading command: install (LoadError)
    cannot load such file -- openssl
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

我有红宝石1.9.x和rails 3.2.x之前工作正常

ruby ruby-on-rails

44
推荐指数
4
解决办法
5万
查看次数