我试图改变依赖于变量req
的代码的过程,你可以在这里看到:
@res = @conn.post do |request| if req == 'post'
@res = @conn.get do |request| if req == 'get'
问题在于这似乎引发了一个错误:
stack.rb:89: syntax error, unexpected end-of-input, expecting keyword_end
user2.send_csr
我的问题是,为了避免这个问题,我需要改变什么?如果您需要有关我的代码的更多信息:
def send(req,ww,text1=nil,text2=nil)
@conn = Faraday.new 'https://zombo.de/rest', :ssl => {:verify => false}
@conn.basic_auth(@username,@password)
@res = @conn.post do |request| if req == 'post'
@res = @conn.get do |request| if req == 'get'
request.url ww
request.headers['Content-Type'] = text1 unless text1 == nil
request.body = text2 unless text2 == nil
end
puts @res.body
end
def send_csr
send('post','csr','text/plain',"#{File.read(@csr[0..-5])}")
end
user2.send_csr
答案 0 :(得分:2)
如果你扩展你的代码怎么办?添加一些格式并更改块中的内容?
def send(req, ww, text1=nil, text2=nil)
@conn = Faraday.new 'https://zombo.de/rest', :ssl => {:verify => false}
@conn.basic_auth(@username,@password)
@res = @conn.post { |request| handle_request(request) } if req == 'post'
@res = @conn.get { |request| handle_request(request) } if req == 'get'
@res.body
end
def handle_request request
request.url ww
request.headers['Content-Type'] = text1 unless text1 == nil
request.body = text2 unless text2 == nil
request
end
def send_csr
send('post','csr','text/plain',"#{File.read(@csr[0..-5])}")
end
user2.send_csr
答案 1 :(得分:1)
无法按照您的要求放置修复后if
,因为从技术上讲,它位于您想要传递到获取或发布的块的中间。
你可以这样做:
@res = @conn.get do |request|
request.url ww
request.headers['Content-Type'] = text1 unless text1 == nil
request.body = text2 unless text2 == nil
end if req == 'get'
但这需要您为每种情况重复代码块。此外,我建议在长时间阻止后修复后修复条件,以后在阅读代码时很难发现它们。
所以这个语法,使用send
可能最适合你(因为你的字符串匹配方法名称,所以它有效)
@conn.send(req) do |request|
request.url ww
request.headers['Content-Type'] = text1 unless text1 == nil
request.body = text2 unless text2 == nil
end
答案 2 :(得分:1)
法拉第的post
和get
方法调用run_request
:
run_request(method, url, body, headers)
您也可以这样做:
def send(req, ww, text1=nil, text2=nil)
@conn = Faraday.new 'https://zombo.de/rest', :ssl => {:verify => false}
@conn.basic_auth(@username, @password)
headers = text1 && {'Content-Type' => text1 }
@res = @conn.run_request(req.to_sym, ww, text2, headers)
puts @res.body
end
我正在传递req.to_sym
因为run_request
需要一个符号(:post
而不是"post"
),而不是设置url
,body
块中的headers
,我也正在传递它们。
也许您应该重命名一些变量并用本地变量替换实例变量:
def send(method, url, content_type=nil, body=nil)
conn = Faraday.new 'https://zombo.de/rest', :ssl => {:verify => false}
conn.basic_auth(@username, @password)
headers = content_type && {'Content-Type' => content_type }
res = conn.run_request(method.to_sym, url, body, headers)
puts res.body
end