Rubyist在这里编写Python.我有一些看起来像这样的代码:
result = database.Query('complicated sql with an id: %s' % id)
Run Code Online (Sandbox Code Playgroud)
database.Query被模拟了,我想测试ID是否被正确注入而不将整个SQL语句硬编码到我的测试中.在Ruby/RR中,我会这样做:
mock(database).query(/#{id}/)
Run Code Online (Sandbox Code Playgroud)
但是我无法在unittest.mock中看到像这样设置'选择性模拟'的方法,至少没有一些毛茸茸的side_effect逻辑.所以我尝试在断言中使用正则表达式:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
instance.Query.assert_called_once_with(re.compile("%s" % id))
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.这种方法确实有效,但它很难看:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
self.assertIn(id, instance.Query.call_args[0][0])
Run Code Online (Sandbox Code Playgroud)
好主意?
所以我试图在PHP中解析传入的请求,该请求具有以下标头集:
Authorization: Custom Username
Run Code Online (Sandbox Code Playgroud)
简单的问题:我怎么能得到它的手?如果是的话Authorization: Basic,我可以从中获取用户名$_SERVER["PHP_AUTH_USER"].如果是的话X-Custom-Authorization: Username,我可以从中获取用户名$_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"].但这些都不是由自定义授权设置的,var_dump($_SERVER)没有提到标题(特别AUTH_TYPE是缺少),PHP5函数get_headers()只能处理对传出请求的响应.我在Apache上使用开箱即用的Ubuntu安装运行PHP 5.
简短版 - 如何在ruby中使用Python rsplit()?
更长的版本 - 如果我想在第一个'.'将一个字符串拆分为两个部分(名称,后缀).性格,这很好地完成了工作:
name, suffix = name.split('.', 2)
Run Code Online (Sandbox Code Playgroud)
但如果我想在最后(最右边)分开'.' 性格,我还没有能够提出比这更优雅的东西:
idx = name.rindex('.')
name, suffix = name[0..idx-1], name[idx+1..-1] if idx
Run Code Online (Sandbox Code Playgroud)
请注意,原始名称字符串可能根本没有点,在这种情况下,名称应该是不变的,后缀应该是nil; 它也可能有多个点,在这种情况下,只有最后一个后面的位应该是后缀.
所以我正在尝试使用Rails URL帮助程序(page_url)来创建包含特殊字符的URL,包括&符号.大多数情况的工作方式与您期望的一样:
(rdb:1) page_url('foo', :host => 'host')
"http://host/pages/foo"
(rdb:1) page_url('foo_%_bar', :host => 'host')
"http://host/pages/foo_%25_bar"
Run Code Online (Sandbox Code Playgroud)
但由于一些奇怪的原因,&符号没有被转义:
(rdb:1) page_url('foo_&_bar', :host => 'host')
"http://host/pages/foo_&_bar"
Run Code Online (Sandbox Code Playgroud)
如果我预先逃脱它们,它们就会被破坏:
(rdb:1) page_url('foo_%26_bar', :host => 'host')
"http://host/pages/foo_%2526_bar"
Run Code Online (Sandbox Code Playgroud)
CGI::escape另一方面,他们逃脱了罚款:
(rdb:1) CGI::escape('foo_&_bar')
"foo_%26_bar"
Run Code Online (Sandbox Code Playgroud)
发生了什么,我该如何解决这个问题?(有更好的东西gsub('&', '%26'),就是这样.)
在这里打了一堵砖墙.我正在尝试将包含换行符的字符串(\n,由JSON.stringify转换为\ u000a)作为JSON对象的一部分发送到Rails应用程序:
{"bob":{"id":46,"notes":"foo\u000abar\u000abaz"}}
Run Code Online (Sandbox Code Playgroud)
这样就越过电线,\ u000a转义为%5Cu000a:
http://localhost/bobs/46?draft=true&%7B%22bob%22%3A%7B%22id%22%3A46%2C%22notes%22%3A%22foo%5Cu000abar%5Cu000abaz%22%7D%7D=
Run Code Online (Sandbox Code Playgroud)
但是第二个请求击中了Rubyland,新行消失在一个以太的空间中,变成了空格:
Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo bar baz", "id"=>46}
Run Code Online (Sandbox Code Playgroud)
而且它不仅仅是一些日志工件,而且它们也会以这种方式进入数据库:
ree-1.8.7-2010.02 > Bob.find_by_id(46)
=> #<Bob id: 46, notes: "foo bar baz"...>
Run Code Online (Sandbox Code Playgroud)
如果我发送例如."\\n"而不是"\n",它们通过罚款:
Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo\\nbar\\nbaz", "id"=>46}
Run Code Online (Sandbox Code Playgroud)
发生了什么事,为什么?
更新:一位同事模糊地回忆起听说Passenger被怀疑放弃了一些特殊的字符,但他找不到提及这一点,我也不能......?
我想知道Skiena 算法设计手册(第2版)中问题2-44的正确答案是什么.
问题如下:
我们有1,000个数据项存储在1,000个节点上.每个节点可以存储三个不同项目的副本.提出复制方案,以在节点发生故障时将数据丢失降至最低.当三个随机节点发生故障时,丢失的数据条目的预期数量是多少?
我在考虑节点n有n,n + 1和n + 2的数据项.
因此,如果3个连续节点丢失,那么我们将丢失1个项目.
有更好的解决方案吗?
通过邮件重置用户密码的正常流程如下:
但是,维护一个表并使旧字符串等过期似乎有点不必要的麻烦.这种替代方法有任何明显的缺陷吗?
请注意,用户的密码已经以散列和盐渍形式存储,我只是再次对其进行哈希处理,以获得唯一但可重复的字符串.
是的,有一个明显的"缺陷":这样生成的重置链接在用户更改密码(点击链接)之前不会过期.我真的不明白为什么这会成为一个问题 - 如果邮箱被泄露,用户无论如何都会被搞砸.并且没有重复使用的风险,因为一旦用户的密码更改,重置链接将不再匹配.
jQuery有一个可爱的,有点错误的名为nearest()的方法,它在DOM树中寻找匹配的元素.例如,如果我有这个HTML:
<table src="foo">
<tr>
<td>Yay</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
假设element设置为<td>,那么我可以src像这样计算值:
element.closest('table')['src']
Run Code Online (Sandbox Code Playgroud)
如果缺少表元素或其src属性,那将彻底返回"undefined".
在Javascriptland中习惯了这个,我很想在Rubyland中找到与Nokogiri相同的东西,但是我能够想出的最接近的是使用祖先()的这种明显不优雅的黑客攻击:
ancestors = element.ancestors('table')
src = ancestors.any? ? first['src'] : nil
Run Code Online (Sandbox Code Playgroud)
需要三元组,因为如果在空数组上调用,则返回nil.好主意?
我有一个ActiveRecord调用Name,其中包含各种名称Languages.
class Name < ActiveRecord::Base
belongs_to :language
class Language < ActiveRecord::Base
has_many :names
Run Code Online (Sandbox Code Playgroud)
用一种语言查找名称很容易:
Language.find(1).names.find(whatever)
Run Code Online (Sandbox Code Playgroud)
但我需要找到匹配的对,其中语言1和语言2具有相同的名称.在SQL中,这需要一个简单的自联接:
SELECT n1.id,n2.id FROM names AS n1, names AS n2
WHERE n1.language_id=1 AND n2.language_id=2
AND n1.normalized=n2.normalized AND n1.id != n2.id;
Run Code Online (Sandbox Code Playgroud)
如何使用ActiveRecord执行此类查询?请注意,我需要找到一对名称(=匹配的两侧),而不仅仅是语言1中恰好与某些内容匹配的名称列表.
对于奖励积分,替换n1.normalized=n2.normalized为n1.normalized LIKE n2.normalized,因为该字段可能包含SQL通配符.
我也对以不同方式建模数据的想法持开放态度,但如果可以的话,我宁愿避免为每种语言使用单独的表.
所以土耳其最近决定为他们的里拉创造一个新的标志:

Unicode 6.2(2012年9月发布)将其添加到其保留曲目中U+20BA ? TURKISH LIRA SIGN,并且我被要求在我正在构建的Web应用程序中开始使用它.问题是没有人支持这个(除了显然是Windows 8),它并没有显示为通常的方形,问号或块十六进制,而是各种其他随机的东西.通常可靠的fileformat.info认为它应该是这样的:

...这也是我在OS X 上得到的.Charbase也错了,但不同:

实际问题:有没有合理的解决方法?最大的复杂因素是该字符应该被允许在任意的,用户可编辑的文本中,因此任何基于图像的解决方案都在窗外.
理论上的问题是:据我所知,U + 20BA从未有过分配给它的角色,那么这些奇怪的符号从何处传入?我没有得到同样的问题U+20B9 ? INDIAN RUPEE SIGN,这几乎是新的和非常支持的,但至少失败更优雅.