小编Bor*_*cky的帖子

从Ruby中的modules/mixins继承类方法

众所周知,在Ruby中,类方法得到了继承:

class P
  def self.mm; puts 'abc' end
end
class Q < P; end
Q.mm # works
Run Code Online (Sandbox Code Playgroud)

然而,令我惊讶的是它不适用于mixins:

module M
  def self.mm; puts 'mixin' end
end
class N; include M end
M.mm # works
N.mm # does not work!
Run Code Online (Sandbox Code Playgroud)

我知道#extend方法可以做到这一点:

module X; def mm; puts 'extender' end end
Y = Class.new.extend X
X.mm # works
Run Code Online (Sandbox Code Playgroud)

但我正在编写一个包含实例方法和类方法的mixin(或者,更愿意写):

module Common
  def self.class_method; puts "class method here" end
  def instance_method; puts "instance method here" end
end
Run Code Online (Sandbox Code Playgroud)

现在我想做的是:

class A; include Common
  # custom …
Run Code Online (Sandbox Code Playgroud)

ruby mixins

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

一些JS运行后如何让Capybara检查可见性?

加载页面后,我有运行和隐藏的代码,并根据xhr返回的数据显示各种项目.

我的集成测试看起来像这样:

it "should not show the blah" do
    page.find('#blah').visible?.should be_true
end 
Run Code Online (Sandbox Code Playgroud)

当我在上下文中手动转到该测试运行的页面时,#blah 并不像我预期的那样可见.我怀疑Capybara正在查看页面的初始状态(在这种情况下是不可见的),在JS运行之前评估DOM的状态并且未通过测试.

是的,我设置:js => true了包含的描述块:)

任何想法将不胜感激!我希望我不必在这里故意拖延,感觉不稳定,会减慢速度.

ruby integration-testing rspec capybara

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

为什么Ruby中的'a = a``nil`?

我看了这个视频.为什么a = a评估nil是否a未定义?

a = a # => nil
b = c = q = c # => nil
Run Code Online (Sandbox Code Playgroud)

ruby local-variables variable-assignment

38
推荐指数
1
解决办法
2305
查看次数

Date,Time和DateTime类是否必要?

当有一个可以同时处理这两个类的类时,拥有DateTime类的目的是什么DateTime

ruby

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

Ruby for循环陷阱?

在对Ruby循环的讨论中,与每个循环相比,Niklas B.最近谈到了循环"不引入新范围".我想看一些人们如何看待这个问题的例子.

好吧,我扩展了一个问题:在Ruby的其他地方我们看到了什么apears做/结束块分隔符,但实际上里面没有范围?还有什么别的...做...结束?

好的,问题的另一个扩展,是否有办法用花括号{block}编写循环?

ruby

16
推荐指数
1
解决办法
4422
查看次数

Devise + Omniauth:未定义的方法`user_omniauth_authorize_path'

我一直在关注facebookomn​​iauth + devise集成指南,当我点击链接登录facebook链接时,我一直收到此错误.

未定义的方法user_omniauth_authorize_path#<#<Class:0x0000000253a550>:0x000000035ea490>

我已经仔细检查了指南中的代码,我似乎无法弄清楚问题是什么.我的gemfile:

source 'https://rubygems.org'

gem 'sendgrid'
gem 'omniauth-facebook'
gem 'gravatar'
gem 'will_paginate'
gem 'faker'
gem 'devise'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.6'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.15'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views …
Run Code Online (Sandbox Code Playgroud)

facebook ruby-on-rails devise

16
推荐指数
1
解决办法
5830
查看次数

如何解析URL并提取所需的子字符串

说我有这样的字符串: "http://something.example.com/directory/"

我想要做的是解析这个字符串,并"something"从字符串中提取.

第一步,显然要检查以确保字符串包含"http://"- 否则,它应该忽略该字符串.

但是,我如何才能"something"在该字符串中提取?假设所有将要评估的字符串将具有类似的结构(即我正在尝试提取URL的子域 - 如果正在检查的字符串确实是有效的URL - 其中有效的开头"http://").

谢谢.

PS我知道如何检查第一部分,即我可以简单地将字符串拆分,"http://"但这并不能解决完整的问题,因为这会产生"http://something.example.com/directory/".我只想要的是"something",没有别的.

ruby parsing

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

如何匹配dna序列模式

我找不到解决这个问题的方法.

输入输出序列如下:

 **input1 :** aaagctgctagag 
 **output1 :** a3gct2ag2

 **input2 :** aaaaaaagctaagctaag 
 **output2 :** a6agcta2ag
Run Code Online (Sandbox Code Playgroud)

输入序列可以是10 ^ 6个字符,并且将考虑最大的连续模式.

例如,对于input2"agctaagcta"输出将不是"agcta2gcta",但它将是"agcta2".

任何帮助赞赏.

algorithm sequence matching dna-sequence

15
推荐指数
2
解决办法
4901
查看次数

修剪尾随.0

我有一个包含部件号的Excel列.这是一个例子

正如你所看到的,也可以是多种不同的数据类型:Float,Int,和String.我正在使用roogem来读取文件.问题是roo将整数单元解释为Float,向它们添加尾随零(16431 => 16431.0).我想修剪这个尾随零.我无法使用,to_i因为它将修剪其中需要小数的单元格的所有尾随数字(上例中的第一行),并将在行中的字符串char String(上例中的最后一行)之后剪切所有内容.

目前,我有一个方法,检查单元格的最后两个字符,如果它们是".0"则修剪它们

def trim(row)
    if row[0].to_s[-2..-1] == ".0"
        row[0] = row[0].to_s[0..-3]
    end
end
Run Code Online (Sandbox Code Playgroud)

这很有效,但感觉非常糟糕.将Excel文件内容转换为Ruby数据结构的正确方法是什么?

ruby excel ruby-2.0 roo-gem

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

如何查找模块的位置

我的情况是foo_bar我写的na gem ,我使用如下:

require 'foo_bar'
include FooBar
Run Code Online (Sandbox Code Playgroud)

突然Baz出现,不断出现:

defined? Baz #=> :constant
Baz.class #=> Module
Run Code Online (Sandbox Code Playgroud)

我忘了我在哪里定义Baz.如果它有任何实例方法,我可以使用#source_location方法来查找我定义的文件Baz.但它没有:

Baz.instance_methods #=> []
Run Code Online (Sandbox Code Playgroud)

如何找到在我的顶级命名空间中弹出的模块在哪个文件(或哪里)?

额外的添加和发现:我所说的常数是Net,它的外观与我的宝石(http://gihub.com/boris-s/sy)的include FooBar另一行无关,你可以通过它安装.通过踩宝石(https://github.com/boris-s/sy/blob/master/lib/sy.rb),我发现没有任何需要的行,或者直到行的顶行都没有触发出现.的定义一样.requiresygem install symodule SYNetmodule SY

此外,我找到了答案务实NetNet作为Net::HTTP.作者没有假设有人会使用其他类型的网络而不是互联网,我没有想到Net::HTTP,因为我正在使用Petri网并定义自己的Net类.虽然我解决了我的实际问题,但找到找到模块源的一般答案仍然很有意思.

ruby

12
推荐指数
2
解决办法
1980
查看次数