我有一个Rails 4应用程序,这是我的lib/foobar:
jan@rmbp ~/D/r/v/l/foobar> tree
.
??? foo_bar.rb
??? foobar_spec.rb
0 directories, 2 files
Run Code Online (Sandbox Code Playgroud)
和文件:
foobar_spec.rb
require "spec_helper"
describe "FooBar" do
subject { FooBar.new }
its(:foo) { should == "foo"}
#stubbed version of test crashes
#FooBar.stub(:foo).and_return("bar")
#subject { FooBar.new }
#its(:foo) { should == "bar"}
end
Run Code Online (Sandbox Code Playgroud)
foo_bar.rb
class FooBar
def foo
"foo"
end
end
Run Code Online (Sandbox Code Playgroud)
spec_helper.rb:
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
# commented for zeus …Run Code Online (Sandbox Code Playgroud) 我有一个Rails应用程序,它汇集了来自Google API的大量数据.我目前在MongoDB中存储JSON响应(所以我的Rails应用程序同时包含pg和mongo).但是,今天,我遇到了PostgreSQL Hstore扩展,我决定尝试一下.
不幸的是,我遇到了一个问题.API提供的JSON是多层深度的,因此Ruby Hash JSON.parse包含哈希,其中包含新的哈希值.但是,Hstore是字符串键/值存储,它只有1级深度.所以第一个哈希中的哈希就变成了字符串.
我发现真正令人讨厌的黑客攻击eval是变成字符串的哈希:
eval("{ "foo" => "bar" }")
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个.有关怎么做的提示?我应该继续使用MongoDB还是有更好的方法在PG中存储多级深度哈希值?
我知道AppEngine会这样做,但我不是为它编码.
我尝试使用GuardRuby世界,监听.go文件的变化,并执行以下命令:
killall foo
go build -race
./foo &
Run Code Online (Sandbox Code Playgroud)
但它永远不会发送foo到后台,它只是无限期地挂起.
你们是怎么解决这个问题的?解决方案也必须是跨平台的(GNU/Linux和Mac).
我已按照本指南安装AppEngine SDK. https://developers.google.com/appengine/docs/go/gettingstarted/introduction
我最初使用Brew安装了Go 1.2(在OSX上).我设定了自己的路径:
export GOPATH=$HOME/Documents/go
export PATH=$GOPATH/bin:$PATH
export PATH=$HOME/Documents/go/go_appengine:$PATH
Run Code Online (Sandbox Code Playgroud)
我复制/粘贴了你好世界的应用程序,然后运行它goapp serve.都好.
现在,一旦我尝试使用appengine:
import (
"appengine"
)
Run Code Online (Sandbox Code Playgroud)
我得到编译时错误:
api.go:5:5: cannot find package "appengine" in any of:
/usr/local/Cellar/go/1.2/libexec/src/pkg/appengine (from $GOROOT)
/Users/jan/Documents/go/src/appengine (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
起始指南文档没有说明这一点.似乎SDK有自己的$GOPATHdir with /src,/pkg和/bin.我假设我必须一直手动切换$GOPATHSDK和本机Go之间,这没有任何意义,甚至不适合我(因为我主要处理非appengine的东西).
我在这里显然做错了.我错过了什么?
编辑:看起来实际的appengine服务器正在编译并运行正常,但是我的整个设置都被破坏了(测试,Vim ......).有没有解决方法?
我正在寻找行为导向,英语听起来像测试实用程序Go.像Ruby中的RSpec或JavaScript中的Jasmine.
我go-spec在GitHub上找到了它,但它已经坏了(2年后没有更新,也不适用于Go 1.
我在OSX ML上的Ruby 2.0.0和Rails 4配置上遇到此问题.我的Arch Linux工作站上没有这个问题.
之所以出现这种警告是很讨厌,就在于它打破我的Vim的插件(SweetVimRspec),并因此杀死了我的Vim的开发工作流程,因为我无法测试.
我在这里尝试了每个upvoted解决方案: Mac用户并获得警告:Nokogiri是针对LibXML版本2.7.8构建的,但已动态加载2.7.3
我无法摆脱它(实际上我已经摆脱它nokogiri本身,但rspec and rails console根本没有).
假设我有一个结构Foo.
Foo struct {
Bar, Baz int
}
Run Code Online (Sandbox Code Playgroud)
我想把这个结构编组成json如下:
{bar : 1, baz : 2}
我怎么能实现这一点,而不是Bar, Baz int使用标签将我的单行多名称声明()分成两个单独的行.
这有效:
Run Code Online (Sandbox Code Playgroud)Foo struct { Bar int `json:"bar"` Baz int `json:"baz"` }
但我想:
Run Code Online (Sandbox Code Playgroud)Foo struct { Bar, Baz int `json:???` }
后者甚至可能吗?
我使用https://github.com/nsf/gocode和https://github.com/Shougo/neocomplete.vim进行Go自动完成.
除了一件小事之外,它的效果非常好.当我输入像
fmt.pri
我这样的自动完成选项时:
fmt.Println(a ...interface{}) (n int, err error)
由于我是Go的新手,这非常有用,因为现在我知道该方法采用了什么参数,类型是什么,以及它返回了什么.不幸的是,一旦我写了过去括号,信息就消失了.
fmt.Println(
因此,对于我第一次使用的更复杂的方法,我陷入困境,必须跳转到源定义,或运行godoc.
在某处可以获得这些信息要容易得多,最好是在命令/状态行所在的Vim底部.
有谁知道如何实现这样的事情?
编辑:预览窗口打破我的Vim所以它不是一个选项.
使用Tmux和Vim有时会很痛苦.对我来说其中一个碰撞是Control-S.我在Vim中使用它来打开split中的缓冲区,但是当使用Tmux时,那么......
Tmux用它做了些蠢事,我无法弄清楚它的目的是什么.但基本上,当C-s在Tmux中按下时,屏幕会冻结.它解冻了C-q.我不知道什么是好的,如果有的话.
unbind C-s
unbind C-q
Run Code Online (Sandbox Code Playgroud)
我试图在tmux.conf中取消绑定Cs,但它没有用.我怎么解开呢?
我还从终端释放了绑定 .bashrc
stty -ixon -ixoff
Run Code Online (Sandbox Code Playgroud) Go(Golang)编程语言附带了一个名为的工具go fmt.它是一个代码格式化程序,可以自动格式化代码(对齐,字母排序,制表,间距,习语......).它非常棒.
所以我发现这个小自动命令在Vim中使用它,每次缓冲区都保存到文件中.
au FileType go au BufWritePre <buffer> Fmt
Fmt是Go vim插件附带的功能.
这真的很棒,但它有一个问题.每次格式化程序写入缓冲区时,它都会在撤消/重做历史记录中创建跳转.在尝试撤消/重做更改时会变得非常痛苦,因为每次第二次更改都是格式化程序(使光标跳转到第1行).
所以我想知道,有没有办法在触发后丢弃撤消/重做历史记录的最新变化Fmt?
编辑:
好的,到目前为止我有:
au FileType go au BufWritePre <buffer> undojoin | Fmt
但它还不是很好.根据:h undojoin,撤消后不允许使用undojoin.当然,当我尝试:w撤消后,它会触发错误.
那么我如何实现像这样的伪代码:
if lastAction != undo then
au FileType go au BufWritePre <buffer> undojoin | Fmt
end
Run Code Online (Sandbox Code Playgroud)
如果我弄清楚最后一点,我想我有一个解决方案.