Module: Ooor::Transport::JsonClient::OeAdapter

Defined in:
lib/ooor/transport/json_client.rb

Overview

NOTE use a middleware here?

Instance Method Summary collapse

Instance Method Details

#oe_request(session_info, url, params, method, *args) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ooor/transport/json_client.rb', line 27

def oe_request(session_info, url, params, method, *args)
  if session_info[:req_id]
     session_info[:req_id] += 1
  else
     session_info[:req_id] = 1
  end
  if session_info[:sid] # required on v7 but forbidden in v8
    params.merge!({"session_id" => session_info[:session_id]})
  end
  response = JSON.parse(post do |req|
    req.headers['Cookie'] = session_info[:cookie]
    req.url url
    req.headers['Content-Type'] = 'application/json'
    req.body = {"jsonrpc"=>"2.0","method"=>"call", "params" => params, "id"=>session_info[:req_id]}.to_json
  end.body)
  if response["error"]
    faultCode = response["error"]['data']['fault_code'] || response["error"]['data']['debug']
    raise OpenERPServerError.build(faultCode, response["error"]['message'], method, *args)
  else
    response["result"]
  end
end

#oe_service(session_info, service, obj, method, *args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ooor/transport/json_client.rb', line 8

def oe_service(session_info, service, obj, method, *args)
  if service == :exec_workflow
    url = '/web/dataset/exec_workflow'
    params = {"model"=>obj, "id"=>args[0], "signal"=>method}
  elsif service == :execute
    url = '/web/dataset/call_kw'
    if (i = Ooor.irregular_context_position(method)) && args.size < i
      kwargs = {"context"=> args[i]}
    else
      kwargs = {}
    end
    params = {"model"=>obj, "method"=> method, "kwargs"=> kwargs, "args"=>args}#, "context"=>context}
  else
    url = "/web/dataset/#{service}"
    params = args[0].merge({"model"=>obj})
  end
  oe_request(session_info, url, params, method, *args)
end