标签: ruby

在Ruby中将12小时时间转换为24小时格式

如何将"11am"和"10pm"转换为"11:00"和"22:00"?有没有使用日期和时间类的简单方法?

ruby datetime date

9
推荐指数
2
解决办法
9776
查看次数

使用ruby mechanize捕获超时错误

我有一个机械化功能可以让我退出网站,但在非常罕见的情况下它会让我失望.该功能涉及转到特定页面,然后单击注销按钮.偶尔机械化在进入注销页面或单击注销按钮时会出现超时,代码崩溃.所以我进行了一次小规模的救援,它似乎正如第一段代码所示.

def logmeout(agent)
  page = agent.get('http://www.example.com/')
  agent.click(page.link_with(:text => /Log Out/i))
end      
Run Code Online (Sandbox Code Playgroud)

Logmeout with rescue:

def logmeout(agent)
  begin
  page = agent.get('http://www.example.com/')
  agent.click(page.link_with(:text => /Log Out/i))
  rescue Timeout::Error 
    puts "Timeout!"
    retry
  end
end
Run Code Online (Sandbox Code Playgroud)

假设我正确地理解了救援,即使只是点击超时,它也会做两个动作,所以为了提高效率,我想知道我是否可以在这种情况下使用proc并传递代码块.会这样的工作:

def trythreetimes
  tries = 0
  begin
  yield
  rescue
    tries += 1
    puts "Trying again!"
    retry if tries <= 3
  end
end

def logmeout(agent)
  trythreetimes {page = agent.get('http://www.example.com/')}
  trythreetimes {agent.click(page.link_with(:text => /Log Out/i))}
end
Run Code Online (Sandbox Code Playgroud)

请注意,在我的trythreetimes函数中,我将其保留为通用救援,因此该功能将更具可重用性.

非常感谢任何人提供的任何帮助,我知道这里有几个不同的问题,但它们都是我想要学习的东西!

ruby mechanize

9
推荐指数
1
解决办法
5541
查看次数

如何在Rails3应用程序中的所有其他控制器before_filters之后在gem中追加before_filter?

有一个宝石,它附加一个before_filter到Rails应用程序:

class Railtie < Rails::Railtie
  initializer "..." do
    ActiveSupport.on_load(:action_controller) do
      ActionController::Base.send(:include, Filter)

...

module Filter
  extend ActiveSupport::Concern

  included do
    append_before_filter :set_locale
  end

  def set_locale
     ....
Run Code Online (Sandbox Code Playgroud)

这里是应用程序中的一些控制器:

class DesktopsController < ApplicationController
  before_filter :set_language_in_session
Run Code Online (Sandbox Code Playgroud)

现在问题在于,before_filter来自gems的是在before_filter来自DesktopsController 之前的过滤器链中:

DesktopsController._process_action_callbacks.select { |c| c.kind == :before }.collect { |filter| filter.filter }
=> [
    [0] :set_locale,
    [1] :set_language_in_session
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能使before_filter从宝石(set_locale)放后所有其他过滤器?秘密可能在于这一行:

ActiveSupport.on_load(:action_controller) do
Run Code Online (Sandbox Code Playgroud)

但我尝试了不同的图书馆,没有任何运气......

顺便说一句.这是宝石的完整代码.Ruby 1.9.2,Rails 3.0.5.

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

9
推荐指数
1
解决办法
5609
查看次数

在RSpec中,存根有什么区别!和存根?

我已经看过很多次了,从来没有真正停下来质疑它.现在让我想知道存根和存根之间是否存在差异!

在那儿?还是历史性的?存根!意味着它存在一次?并返回正常的方法调用?

ruby rspec rspec2

9
推荐指数
1
解决办法
1561
查看次数

Vim详细说明了Rails的自动完成功能

我找到了很好的python细节自动完成功能

在此输入图像描述

是否类似于Ruby on Rails的方法描述?

ruby vim autocomplete

9
推荐指数
1
解决办法
7112
查看次数

修复了不可读的ghostscript字体

我正在使用ruby Scruffy gem来创建一些图形.它依赖于RMagick来渲染文本并创建png.当我运行我的ruby脚本时,我收到此错误.

sh: gs: command not found
sh: gs: command not found
/Users/natebird/.rvm/gems/ree-1.8.7-2011.03/gems/scruffy-0.2.6/lib/scruffy/rasterizers/rmagick_rasterizer.rb:15:in `from_blob': unable to read font `/usr/local/share/ghostscript/fonts/n019003l.pfb' @ error/annotate.c/RenderFreetype/1128: `(null)' (Magick::ImageMagickError)
    from /Users/natebird/.rvm/gems/ree-1.8.7-2011.03/gems/scruffy-0.2.6/lib/scruffy/rasterizers/rmagick_rasterizer.rb:15:in `rasterize'
    from /Users/natebird/.rvm/gems/ree-1.8.7-2011.03/gems/scruffy-0.2.6/lib/scruffy/graph.rb:164:in `render'
    from autobench_grapher.rb:61:in `generate_graph'
    from autobench_grapher.rb:30:in `run'
    from autobench_grapher.rb:15:in `run'
    from autobench_grapher.rb:91
Run Code Online (Sandbox Code Playgroud)

ruby ghostscript

9
推荐指数
1
解决办法
2200
查看次数

获取资产管道路径中的Gem供应商文件

我创建了一个gem,其中包含来自bootstrap-sass和bootstrap本身的样式表和javascripts的供应商目录.

目录结构是bootstrap-sass-gem/vendor/assets/javascripts

和

引导 - 萨斯 - 宝石/供应商/资产/样式表

我在测试项目中需要gem,但每当我尝试从gem中获取某些东西时,我都会收到Sprockets::FileNotFound错误.

例如,在application.css中我添加了*= require bootstrap.bootstrap位于,bootstrap-sass-gem/vendor/assets/stylesheets/bootstrap.scss因此我的计算应该包含在资产管道中.

我正在运行RVM Ruby 1.9.2和Rails 3.1.

这是我的配置文件:

 $:.push File.expand_path("../lib", __FILE__)

 # Maintain your gem's version:
 require "bootstrap-sass-gem/version"

 # Describe your gem and declare its dependencies:
 Gem::Specification.new do |s|
    s.name        = "bootstrap-sass-gem"
    s.version     = BootstrapSassGem::VERSION
    s.authors     = ["James Smith"]
    s.email       = ["James@smithware.co.uk"]
    s.homepage    = "http://www.smithware.co.uk"
    s.summary     = "The Bootstrap-sass project Gemified"
    s.description = "Description of BootstrapSassGem."

    s.files = Dir["{lib,vendor,rdoc}/**/*"] + Dir["*"]
    #s.test_files = …
Run Code Online (Sandbox Code Playgroud)

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

9
推荐指数
1
解决办法
4158
查看次数

Mongoid:通过数组ID查找

我通过MapReduce获取了一些id.我按照某些标准对这些ID进行了排序,现在我需要按照这个特定的顺序获取这些对象:

MyModel.find(ids)
Run Code Online (Sandbox Code Playgroud)

对?但它返回的对象不是存储ids的顺序.看起来像是一样的

MyModel.where(:_id.in => ids)
Run Code Online (Sandbox Code Playgroud)

它不会以与存储的id相同的顺序返回获取的对象.

现在我可以做到这一点

ids.map{|id| MyModel.find(id)}
Run Code Online (Sandbox Code Playgroud)

这将完成这项工作,但它会多次敲打数据库.

ruby ruby-on-rails mongodb mongoid

9
推荐指数
2
解决办法
5328
查看次数

Rails:如何在没有表单的情况下插入text_field来测试布局?

我现在正在为我的应用程序做布局,我想插入一个text.field,它只是为了看它的外观.我怎样才能做到这一点?

ruby forms ruby-on-rails input

9
推荐指数
1
解决办法
6024
查看次数

为什么不是File.new符号的参数而不是字符串?

我想知道为什么编写File库的人决定制作参数来确定文件以字符串而不是符号打开的模式.

例如,现在就是这样:

f = File.new('file', 'rw')
Run Code Online (Sandbox Code Playgroud)

但这不是一个更好的设计

f = File.new('file', :rw)
Run Code Online (Sandbox Code Playgroud)

甚至

f = File.new(:file, :rw)
Run Code Online (Sandbox Code Playgroud)

例如?这似乎是使用它们的最佳位置,因为参数肯定不需要是可变的.

我有兴趣知道它为什么会这样出现.


更新:我刚读完一个关于符号与字符串的相关问题,我认为共识是符号不像字符串那样众所周知,并且每个人都习惯使用字符串来索引哈希表.但是,我不认为Ruby标准库的设计者对符号主题的无知是有效的,所以我不认为这就是原因.

ruby symbols language-design

9
推荐指数
1
解决办法
163
查看次数