小编Jam*_*sen的帖子

对于Ruby来说,有没有比CGI更好的HTML转义和转义工具?

CGI.escapeHTML是非常糟糕的,但CGI.unescapeHTML完全被塞了.例如:

require 'cgi'

CGI.unescapeHTML('…')
# => "…"                    # correct - an ellipsis

CGI.unescapeHTML('…')
# => "…"             # should be "…"

CGI.unescapeHTML('¢')
# => "\242"                 # correct - a cent

CGI.unescapeHTML('¢')
# => "¢"               # should be "\242"

CGI.escapeHTML("…")
# => "…"                    # should be "…"
Run Code Online (Sandbox Code Playgroud)

看来,unescapeHTML知道所有的数字代码加&,<,>,和".并且escapeHTML只知道最后四个 - 它没有做任何数字代码.我知道转义通常不需要那么强大,因为HTML将允许大多数字符的文字版本,除了CGI.escapeHTML知道的四个字符.但是,失业应该会更好.

有没有更好的工具,至少对于unescaping?

html ruby escaping

19
推荐指数
1
解决办法
4862
查看次数

如何了解解析器组合器?

我已经找到了一些关于这个主题的资源,但它们都需要深入了解SmallTalkHaskell,我都不知道.

monads parsing

18
推荐指数
2
解决办法
7342
查看次数

有没有办法通过记住子节点来加速递归?

例如,查看计算第n个Fibonacci数的代码:

fib(int n)
{
    if(n==0 || n==1)
        return 1;
    return fib(n-1) + fib(n-2);
}
Run Code Online (Sandbox Code Playgroud)

此代码的问题是它将为任何大于15的数字(在大多数计算机中)生成堆栈溢出错误.

假设我们正在计算fib(10).在这个过程中,说fib(5)计算很多次.有没有办法将其存储在内存中以便快速检索,从而提高递归的速度?

我正在寻找一种可用于几乎所有问题的通用技术.

recursion performance

18
推荐指数
3
解决办法
5014
查看次数

如何在Rails测试中使用参数轻松解析URL?

我有一些代码将return_toURL 嵌入到我想要测试的重定向(如OpenID)中:

def test_uses_referrer_for_return_to
  expected_return_to = 'http://test.com/foo'
  @request.env['HTTP_REFERER'] = expected_return_to
  get :fazbot
  # @response.redirected_to looks like http://service.com?...&return_to=[URI-encoded version of URL above]&...
  encoded_return_to = (something_here)[:return_to]
  assert_equal expected_return_to, URI.unencode(encoded_return_to)
end
Run Code Online (Sandbox Code Playgroud)

这是一个Rails ActionController::TestCase,所以我可以访问各种帮助方法; 我找不到合适的人.

当然我可以URI.parse用来获取URL的params部分,然后将其/&|?/拆分然后重新拆分'=',但我希望这已经为我完成了.另外,如果我错过了网址转义或参数解析中的一些模糊规则,该怎么办?有有什么东西在ActionPackActiveSupport要做到这一点,但我不能找到它.

谢谢 :)

ruby testing url parsing ruby-on-rails

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

如何干掉CouchDB视图?

如何在CouchDB中的视图之间共享代码?

例1 - 实用方法

Jesse Hallett 有一些很好的实用方法,包括

function dot(attr) {
  return function(obj) {
      return obj[attr];
  }
}

Array.prototype.map = function(func) {
  var i, r = [],
  for (i = 0; i < this.length; i += 1) {
    r[i] = func(this[i]);
  }
  return r;
};

...
Run Code Online (Sandbox Code Playgroud)

我在哪里可以放置此代码,以便每个视图都可以访问它?

例2 - 常量

类似于我在我的应用程序中使用的常量.我在哪里放

MyApp = {
  A_CONSTANT = "...";
  ANOTHER_CONSTANT = "...";
};
Run Code Online (Sandbox Code Playgroud)

例3 - 过滤器的过滤器:

如果我想要一个过滤"是这个有钱人吗?"的视图怎么办?

function(doc) {
  if (doc.type == 'person' && doc.net_worth > 1000000) {
    emit(doc.id, doc);
  }
} …
Run Code Online (Sandbox Code Playgroud)

javascript couchdb dry

18
推荐指数
3
解决办法
3966
查看次数

如何仅针对特定路径使用Rack中间件?

我想MyMiddleware在我的Rack应用程序中运行,但仅适用于某些路径.我希望使用Rack::Builder或至少Rack::URLMap,但我不知道如何.

这是我认为可行的,但不是:

# in my rackup file or Rails environment.rb:
map '/foo' do
  use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,使用Regexp:

map /^foo/ do
  use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)

map似乎最终需要一个应用程序; 它不会仅仅将控制权传回给它的父母.(undefined method 'each' for nil:NilClass当Rack尝试将该do...end块的结尾转换为时,实际错误为" " app.)

是否有一个中间件需要一系列中间件和一个路径,并且只在路径匹配时运行它们?

ruby rack middleware

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

为什么我的RSpec规格会运行两次?

我在我的定义中有以下RSpec(1.3.0)任务Rakefile:

require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
  spec.libs << 'lib' << 'spec'
  spec.spec_files = FileList['spec/**/*_spec.rb']
end
Run Code Online (Sandbox Code Playgroud)

我有以下内容spec/spec_helper.rb:

require 'rubygems'
require 'spec'
require 'spec/autorun'
require 'rack/test'
require 'webmock/rspec'

include Rack::Test::Methods
include WebMock

require 'omniauth/core'
Run Code Online (Sandbox Code Playgroud)

我有一个声明的规格spec/foo/foo_spec.rb:

require File.dirname(__FILE__) + '/../spec_helper'

describe Foo do
  describe '#bar' do
    it 'be bar-like' do
      Foo.new.bar.should == 'bar'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行时rake spec,单个示例运行两次.我可以通过让示例失败来检查它,给我两个红色的"F".

我想到的一件事是添加specSpecTask's' libs会导致它们被双重定义,但删除它似乎没有任何影响.

ruby unit-testing rspec

17
推荐指数
4
解决办法
5632
查看次数

如何在Javascript中检查Unicode字符串的相等性?

我在Javascript两个字符串:"_strange_chars_µö¬é@zendesk.com.eml"(f1)和"_strange_chars_µö¬é@zendesk.com.eml"(f2).乍一看,它们看起来完全相同(事实上,在StackOverflow上,它们可能是;我不确定将它们粘贴到这样的形式时会发生什么.)然而,在我的应用程序中,

f1[16] // ö
f2[16] // o
f1[17] // ¬
f2[17] // ?
Run Code Online (Sandbox Code Playgroud)

也就是说,在f1使用ö字符,f2使用一个ö和音调符号¨作为一个单独的字符.我能做什么比较才能证明这两个字符串"相等"?

javascript string unicode normalization unicode-normalization

17
推荐指数
1
解决办法
1866
查看次数

为什么我会为DKIM选择简单而轻松的规范化?

DKIM支持两种规范化方案:轻松和简单.前者更宽松,允许中间邮件程序在有限的程度上修改电子邮件.

我能找到的唯一数据是对实现调查,显示绝大多数电子邮件发件人使用标题和正文的轻松规范化.(明显少用于身体的放松,但它仍然是绝对多数.)

DKIM规范说,如果支持DKIM,所有客户都必须支持规范化形式,因此这似乎不是一个主要因素.两种方案都允许中间人添加标题.唯一的区别是,我可以告诉在头名(不是值)和空白的情况下的处理的标头.鉴于此,似乎放松总是至少具有良好的可传递性,这是DKIM的目标.

(当然,如果我想实际签署我的电子邮件以证明他们的内容,我会使用S/MIME和证书.DKIM严格关于可传递性,对吗?)

email dkim

17
推荐指数
1
解决办法
8732
查看次数

我可以在Javascript中"扩展"一个闭包定义的"类"吗?

我有一个Javascript"类"定义如下:

var Welcomer = function(name) {
  var pName = name;
  var pMessage = function() {
    return "Hi, " + pName + "!";
  };

  return {
    sayHi: function() {
      alert(pMessage());
    }
  };
};

new Welcomer('Sue').sayHi();
Run Code Online (Sandbox Code Playgroud)

有没有办法以Welcomer这样的方式"子类化" 我可以重新定义公共方法并可以访问私有方法和变量?以下内容将允许我访问公共方法,但不允许访问私有方法:

var UnhappyWelcomer = function(name) {
  var pSadMessage = function() {
    // won't work, b/c I don't have access to pMessage
    return pMessage() + " Miserable day, innit?";
  };

  return {
    sayHi: function() {
      alert(pSadMessage());
    }
  };
};
UnhappyWelcomer.prototype = Welcomer(); // failed …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance closures scoping

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