标签: ruby

使用lambda在单个实例上重新定义单个ruby方法

在Ruby中,有没有办法使用proc重新定义类的特定实例的方法?例如:

class Foo
  def bar()
    return "hello"
  end
end

x = Foo.new
y = Foo.new
Run Code Online (Sandbox Code Playgroud)

(就像是):

y.method(:bar) = lambda { return "goodbye" }

x.bar
y.bar
Run Code Online (Sandbox Code Playgroud)

生产:

hello
goodbye
Run Code Online (Sandbox Code Playgroud)

谢谢.

ruby oop

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

如何计算Ruby数组中的重复项

你如何计算ruby数组中的重复项?

例如,如果我的数组有三个a,我怎么能算这个

ruby arrays duplicate-data count

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

轨道单元测试 - 带回形针的模型

我正在尝试使用回形针为带有图片的模型编写测试.我正在使用测试框架默认,没有shoulda或rspec.在这种情况下,我该如何测试呢?我应该真的上传文件吗?我该如何在夹具中添加文件?

ruby unit-testing ruby-on-rails paperclip

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

如何打印有关NET:HTTPRequest的信息以进行调试?

我是来自Java的Ruby的新手.我正在尝试发出一个http get请求,我得到一个400的http响应代码.我通过http调用的服务非常特别,我很确定我的请求不完全正确.req在我执行head请求(下面)之后"查看" 对象是有帮助的,以便仔细检查正在发送的request_headers是我认为我正在发送的内容.有没有办法打印出req对象?

req = Net::HTTP.new(url.host, url.port)
req.use_ssl = true

res = req.head(pathWithScope, request_headers)

code = res.code.to_i
puts "Response code: #{code}"
Run Code Online (Sandbox Code Playgroud)

我试过这个:puts "Request Debug: #{req.inspect}"但它只打印这个:#<Net::HTTP www.blah.com:443 open=false>

ruby https http

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

C#中的保留字类型是否有Ruby等价物?

我有一个C#方法,我需要从一个需要System.Type参数的Ruby调用.在C#中是否有类似于Ruby的Ruby?在C#中调用看起来像这样......

var CustomClasInstance = Container.GetInstance(typeof(ICustomClass))

c# ruby

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

如何记录Ruby程序中调用的每个方法?

我继承了一大堆Ruby代码,坦率地说,对于像我这样的凡人来说,几乎无法理解.它实际上是Rspec单元测试代码,但结构"非常不寻常"很好地说.

我希望能够做的是运行代码,并在某处记录以下信息:

  • 每个被调用的方法,包括定义方法的类的名称,以及定义调用方法的文件名(是的,我们在多个不同的文件中定义了相同的类/方法,而且很难知道被调用的)
  • (可选)传递给调用的每个方法的参数

有了这个,我可以开始尝试重构它.如果没有它,由于代码库的大小(20k +单元测试用例),将它理顺起来将是一项非常困难的任务.

我无法进入并对正在运行的代码执行批量编辑,因为当你甚至在它周围使用苛刻的语言时(即经常),它会中断.相反,我需要能够在现有状态下对代码进行检测,或者对现有的代码进行最小的更改.

有没有一种方法可以记录这种级别的详细信息,而无需对代码库进行大量更改?我已经看过Ruby分析器,看看它是否有用,它可能会有所帮助; 我很好奇是否有更好的方法(特别是记录包含调用方法的文件名).

提前致谢

ruby methods logging

33
推荐指数
3
解决办法
8829
查看次数

在允许用户使用devise(rails)登录之前检查用户是否处于活动状态

我正在使用设计并创建了一个名为:active的用户字段,该字段为true或false.在允许用户登录之前,我必须手动使用户处于活动状态(true).至少这是意图.我试过这个......

class SessionsController < Devise::SessionsController
  # POST /resource/sign_in
  def create
    "resource/signin CREATE"
    self.resource = warden.authenticate!(auth_options)
    unless resource.active?
      sign_out
      redirect_to :sorry_not_active_url
      return
    end
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  end  
end
Run Code Online (Sandbox Code Playgroud)

但是,这并没有捕获用户可以登录的所有位置,例如,当用户更改其密码时,该站点会自动将其自动登录.但是,如果用户不活动,我不希望他们被允许登录,而是被重定向到sorry_not_active_url.

如果用户不活动,阻止用户登录的最佳方法是什么?

谢谢.

ruby ruby-on-rails devise

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

Ruby 2.0中的垃圾收集器调优

我想知道用于ruby 1.9.x的GC调优是否仍然与2.0的新实现相关.如果是这样,我们可以在新版本上配置任何新内容吗?

我说的是以下设置

RUBY_HEAP_MIN_SLOTS=600000 
RUBY_GC_MALLOC_LIMIT=59000000
RUBY_HEAP_FREE_MIN=100000
Run Code Online (Sandbox Code Playgroud)

ruby performance garbage-collection ruby-2.0

33
推荐指数
2
解决办法
8377
查看次数

从github存储库全局安装ruby gem

我想全局安装ruby gem(sudo gem install capybara-webkit)但是我希望它从github存储库中的master安装.我知道这可以使用bundler完成,但我想从命令行完成,因为我主要使用pry进行编码.

ruby gem command-line github

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

错误:执行gem时...(Gem :: FilePermissionError)

我检查了所有其他类似的答案,没有一个与我的完全一样,这些解决方案都没有为我工作.

gem environmentsudo gem environment给出相同的结果:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.5.3
  - RUBY VERSION: 1.8.7 (2011-12-28 patchlevel 357) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/1.8
     - /home/ava/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/
Run Code Online (Sandbox Code Playgroud)

rvm -v : rvm …

ruby macos gem sudo osx-mountain-lion

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