ooor 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/ooor/field_methods.rb +2 -2
- data/lib/ooor/locale.rb +2 -4
- data/lib/ooor/naming.rb +9 -3
- data/lib/ooor/rack.rb +41 -23
- data/lib/ooor/services.rb +6 -4
- data/lib/ooor/version.rb +1 -1
- metadata +12 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22e71fb9d4c4cea9db686436090802d441be0b84
|
4
|
+
data.tar.gz: 60dd0f5380c63fdec5184d8befe4538bb294855b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee6dc17416c26483fdb596efd393127826d282be9ea9587c479bb57c8604a2f4ed394692991fc0265e128c0cd9e83638f599c4c4848fc0d83bae63d965df067b
|
7
|
+
data.tar.gz: 8a316e8d2c3f78c84d470561cd6861596eebd9a8c0b8fe22dd9c01103367aa330fa9a8e314262695e2a4f89aa266cc2f96af683278d516d62bb2492b96133b46
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Related projects - a full web stack!
|
|
18
18
|
------------------------------------
|
19
19
|
|
20
20
|
* [Ooorest](http://github.com/akretion/ooorest), Ooor is the **Model** layer of **MVC**. Ooorest is the **Controller** layer, enforcing a clean Railish **REST API** and offering handy **helper** to use OpenERP in your Rails application.
|
21
|
-
* [Aktooor](http://github.com/akretion/aktooor),
|
21
|
+
* [Aktooor](http://github.com/akretion/aktooor), Aktooor is the missing **View** layer of **MVC**. It's based on [SimpleForm](https://github.com/plataformatec/simple_form), that is a clean minimalist framework that extend Rails form framework over [Twitter Bootstrap](http://getbootstrap.com)
|
22
22
|
* [Erpify](http://github.com/akretion/erpify), Erpify is OpenERP inside the Liquid non evaling language, that is the templating language of Shopify or LocomotiveCMS for instance.
|
23
23
|
* [Locomotive-erpify](http://github.com/akretion/locomtive-erpify), Erpify for LocomotiveCMS, both the engine and the Wagon local editor
|
24
24
|
* [Solarize](http://github.com/akretion/solarize), pulling data from OpenERP relational database may not scale to your need. No problem with Solarize: you can index your OpenERP data with the [Solerp](http://github.com/akretion/solerp) OpenERP module, then search it using SolR API and even load it from SolR without even hitting OpenERP!
|
data/lib/ooor/field_methods.rb
CHANGED
@@ -29,7 +29,7 @@ module Ooor
|
|
29
29
|
fields[k]["type"] != "binary" && (options[:include_functions] || !fields[k]["function"])
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
private
|
34
34
|
|
35
35
|
def generate_accessors #TODO we should cache this is a module cached like the template, or eventually generate source code or both
|
@@ -126,7 +126,7 @@ module Ooor
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def get_attribute(meth, *args)
|
129
|
-
lazy_load(meth, *args) if @lazy && @attributes["id"]
|
129
|
+
lazy_load(meth, *args) if @lazy && @attributes["id"] && !@attributes.has_key?(meth)
|
130
130
|
if @attributes.has_key?(meth)
|
131
131
|
@attributes[meth]
|
132
132
|
elsif @attributes["id"] # if field is computed for instance
|
data/lib/ooor/locale.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
module Ooor
|
2
2
|
module Locale
|
3
|
-
#
|
3
|
+
# Odoo requires a locale+zone mapping while Rails uses locale only, so mapping is likely to be required
|
4
4
|
def self.to_erp_locale(locale)
|
5
|
-
|
6
|
-
mapping = Ooor.default_config[:locale_mapping]
|
7
|
-
else
|
5
|
+
unless mapping = Ooor.default_config[:locale_mapping]
|
8
6
|
mapping = {'fr' => 'fr_FR', 'en' => 'en_US'}
|
9
7
|
end
|
10
8
|
(mapping[locale.to_s] || locale.to_s).gsub('-', '_')
|
data/lib/ooor/naming.rb
CHANGED
@@ -11,7 +11,7 @@ module Ooor
|
|
11
11
|
@plural = klass.openerp_model # OpenERP doesn't enforce plural / singular conventions sadly...
|
12
12
|
@element = klass.openerp_model
|
13
13
|
@human = klass.description || klass.openerp_model
|
14
|
-
@param_key = klass.openerp_model.gsub('.', '_')
|
14
|
+
@param_key = klass.openerp_model.gsub('.', '_')
|
15
15
|
@i18n_key = klass.openerp_model
|
16
16
|
@route_key = klass.openerp_model.gsub('.', '-')
|
17
17
|
@singular_route_key = klass.openerp_model.gsub('.', '-')
|
@@ -58,8 +58,14 @@ module Ooor
|
|
58
58
|
|
59
59
|
def find_by_permalink(param, options={})
|
60
60
|
# NOTE in v8, see if we can use PageConverter here https://github.com/akretion/openerp-addons/blob/trunk-website-al/website/models/ir_http.py#L138
|
61
|
-
param
|
62
|
-
|
61
|
+
param.gsub!('-', ' ')
|
62
|
+
if param.split(' ').last.to_i != 0
|
63
|
+
options.merge!(domain: {:id => param.split(' ').last.to_i})
|
64
|
+
elsif param.to_i == 0
|
65
|
+
options.merge!(domain: [param_field, 'ilike', param])
|
66
|
+
else
|
67
|
+
options.merge!(domain: {:id => param.to_i})
|
68
|
+
end
|
63
69
|
find(:first, options)
|
64
70
|
end
|
65
71
|
|
data/lib/ooor/rack.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
require 'active_support/concern'
|
2
2
|
|
3
3
|
module Ooor
|
4
|
-
class Rack
|
5
4
|
|
6
5
|
DEFAULT_OOOR_SESSION_CONFIG_MAPPER = Proc.new do |env|
|
7
6
|
Ooor.logger.debug "\n\nWARNING: using DEFAULT_OOOR_SESSION_CONFIG_MAPPER, you should probably define your own instead!
|
8
7
|
You can define an Ooor::Rack.ooor_session_config_mapper block that will be evaled
|
9
8
|
in the context of the rack middleware call after user is authenticated using Warden.
|
10
9
|
Use it to map a Warden authentication to the OpenERP authentication you want.\n"""
|
11
|
-
|
10
|
+
{}
|
12
11
|
end
|
13
12
|
|
13
|
+
DEFAULT_OOOR_PUBLIC_SESSION_CONFIG_MAPPER = DEFAULT_OOOR_SESSION_CONFIG_MAPPER
|
14
|
+
|
14
15
|
module RackBehaviour
|
15
16
|
extend ActiveSupport::Concern
|
16
17
|
module ClassMethods
|
@@ -18,10 +19,16 @@ module Ooor
|
|
18
19
|
@ooor_session_config_mapper = block if block
|
19
20
|
@ooor_session_config_mapper || DEFAULT_OOOR_SESSION_CONFIG_MAPPER
|
20
21
|
end
|
22
|
+
|
23
|
+
def ooor_public_session_config_mapper(&block)
|
24
|
+
@ooor_public_session_config_mapper = block if block
|
25
|
+
@ooor_public_session_config_mapper || DEFAULT_OOOR_PUBLIC_SESSION_CONFIG_MAPPER
|
26
|
+
end
|
21
27
|
end
|
22
28
|
|
23
29
|
def set_ooor!(env)
|
24
30
|
ooor_session = self.get_ooor_session(env)
|
31
|
+
ooor_public_session = self.get_ooor_public_session(env)
|
25
32
|
if defined?(I18n) && I18n.locale
|
26
33
|
lang = Ooor::Locale.to_erp_locale(I18n.locale)
|
27
34
|
elsif http_lang = env["HTTP_ACCEPT_LANGUAGE"]
|
@@ -30,16 +37,29 @@ module Ooor
|
|
30
37
|
lang = ooor_session.config['lang'] || 'en_US'
|
31
38
|
end
|
32
39
|
context = {'lang' => lang} #TODO also deal with timezone
|
33
|
-
env['ooor'] = {'context' => context, 'ooor_session'=> ooor_session}
|
40
|
+
env['ooor'] = {'context' => context, 'ooor_session'=> ooor_session, 'ooor_public_session' => ooor_public_session}
|
41
|
+
end
|
42
|
+
|
43
|
+
def session_key
|
44
|
+
if defined?(Rails)
|
45
|
+
Rails.application.config.session_options[:key]
|
46
|
+
else
|
47
|
+
'rack.session'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_ooor_public_session(env)
|
52
|
+
config = Ooor::Rack.ooor_public_session_config_mapper.call(env)
|
53
|
+
Ooor.session_handler.retrieve_session(config)
|
34
54
|
end
|
35
55
|
|
36
56
|
def get_ooor_session(env)
|
37
57
|
cookies_hash = env['rack.request.cookie_hash'] || ::Rack::Request.new(env).cookies
|
38
|
-
session = Ooor.session_handler.sessions[cookies_hash[
|
58
|
+
session = Ooor.session_handler.sessions[cookies_hash[self.session_key()]]
|
39
59
|
session ||= Ooor.session_handler.sessions[cookies_hash['session_id']]
|
40
60
|
unless session # session could have been used by an other worker, try getting it
|
41
|
-
config = Ooor::Rack.ooor_session_config_mapper.call(env)
|
42
|
-
spec = config[:session_sharing] ? cookies_hash['session_id'] : cookies_hash[
|
61
|
+
config = Ooor.default_config.merge(Ooor::Rack.ooor_session_config_mapper.call(env))
|
62
|
+
spec = config[:session_sharing] ? cookies_hash['session_id'] : cookies_hash[self.session_key()]
|
43
63
|
web_session = Ooor.session_handler.get_web_session(spec) if spec # created by some other worker?
|
44
64
|
unless web_session
|
45
65
|
if config[:session_sharing]
|
@@ -51,10 +71,11 @@ module Ooor
|
|
51
71
|
end
|
52
72
|
end
|
53
73
|
session = Ooor.session_handler.retrieve_session(config, spec, web_session)
|
54
|
-
|
74
|
+
session.config[:params] = {email: env['warden'].try(:user).try(:email)}
|
75
|
+
end
|
55
76
|
session
|
56
77
|
end
|
57
|
-
|
78
|
+
|
58
79
|
def set_ooor_session!(env, status, headers, body)
|
59
80
|
case headers["Set-Cookie"]
|
60
81
|
when nil, ''
|
@@ -62,19 +83,15 @@ module Ooor
|
|
62
83
|
when Array
|
63
84
|
headers["Set-Cookie"] = headers["Set-Cookie"].join("\n")
|
64
85
|
end
|
65
|
-
|
86
|
+
|
66
87
|
ooor_session = env['ooor']['ooor_session']
|
67
88
|
if ooor_session.config[:session_sharing]
|
68
89
|
share_openerp_session!(headers, ooor_session)
|
69
|
-
else # NOTE: we don't put that in a Rails session because we want to remain server agnostic
|
70
|
-
headers["Set-Cookie"] = [headers["Set-Cookie"],
|
71
|
-
"ooor_session_id=#{ooor_session.id}; Path=/",
|
72
|
-
].join("\n")
|
73
90
|
end
|
74
91
|
response = ::Rack::Response.new body, status, headers
|
75
92
|
response.finish
|
76
93
|
end
|
77
|
-
|
94
|
+
|
78
95
|
def share_openerp_session!(headers, ooor_session)
|
79
96
|
if ooor_session.config[:username] == 'admin'
|
80
97
|
if ooor_session.config[:force_session_sharing]
|
@@ -98,17 +115,18 @@ module Ooor
|
|
98
115
|
|
99
116
|
end
|
100
117
|
|
101
|
-
|
118
|
+
class Rack
|
119
|
+
include RackBehaviour
|
102
120
|
|
103
|
-
|
104
|
-
|
105
|
-
|
121
|
+
def initialize(app=nil)
|
122
|
+
@app=app
|
123
|
+
end
|
106
124
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
125
|
+
def call(env)
|
126
|
+
set_ooor!(env)
|
127
|
+
status, headers, body = @app.call(env)
|
128
|
+
set_ooor_session!(env, status, headers, body)
|
129
|
+
end
|
111
130
|
end
|
112
131
|
|
113
|
-
end
|
114
132
|
end
|
data/lib/ooor/services.rb
CHANGED
@@ -29,7 +29,7 @@ module Ooor
|
|
29
29
|
class CommonService < Service
|
30
30
|
define_service(:common, %w[ir_get ir_set ir_del about ooor_alias_login logout timezone_get get_available_updates get_migration_scripts get_server_environment login_message check_connectivity about get_stats list_http_services version authenticate get_available_updates set_loglevel get_os_time get_sqlcount])
|
31
31
|
|
32
|
-
def login(db, username, password)
|
32
|
+
def login(db, username, password, kw={})
|
33
33
|
@session.logger.debug "OOOR login - db: #{db}, username: #{username}"
|
34
34
|
|
35
35
|
if @session.config[:force_xml_rpc]
|
@@ -39,7 +39,7 @@ module Ooor
|
|
39
39
|
response = conn.post do |req|
|
40
40
|
req.url '/web/session/authenticate'
|
41
41
|
req.headers['Content-Type'] = 'application/json'
|
42
|
-
req.body = {method: 'call', params: {
|
42
|
+
req.body = {method: 'call', params: {db: db, login: username, password: password, base_location: kw}}.to_json
|
43
43
|
end
|
44
44
|
@session.web_session[:cookie] = response.headers["set-cookie"]
|
45
45
|
json_response = JSON.parse(response.body)
|
@@ -52,8 +52,10 @@ module Ooor
|
|
52
52
|
end
|
53
53
|
|
54
54
|
@session.web_session[:session_id] = json_response['result']['session_id']
|
55
|
-
user_id = json_response['result']
|
55
|
+
user_id = json_response['result'].delete('uid')
|
56
56
|
@session.config[:user_id] = user_id
|
57
|
+
@session.web_session.merge!(json_response['result'].delete('user_context'))
|
58
|
+
@session.config.merge!(json_response['result'])
|
57
59
|
Ooor.session_handler.register_session(@session)
|
58
60
|
user_id
|
59
61
|
else
|
@@ -96,7 +98,7 @@ module Ooor
|
|
96
98
|
|
97
99
|
def object_service(service, obj, method, *args)
|
98
100
|
unless @session.config[:user_id]
|
99
|
-
@session.common.login(@session.config[:database], @session.config[:username], @session.config[:password])
|
101
|
+
@session.common.login(@session.config[:database], @session.config[:username], @session.config[:password], @session.config[:params])
|
100
102
|
end
|
101
103
|
args = inject_session_context(service, method, *args)
|
102
104
|
uid = @session.config[:user_id]
|
data/lib/ooor/version.rb
CHANGED
metadata
CHANGED
@@ -1,46 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ooor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raphael Valyi - www.akretion.com
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2013-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: activemodel
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
18
|
version: 3.2.0
|
20
|
-
|
19
|
+
name: activemodel
|
21
20
|
prerelease: false
|
21
|
+
type: :runtime
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
30
|
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: '0'
|
34
|
-
|
33
|
+
name: faraday
|
35
34
|
prerelease: false
|
35
|
+
type: :runtime
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: OOOR exposes OpenERP business object proxies to your Ruby (Rails or not)
|
42
|
-
application. It extends the standard ActiveResource API. Running on JRuby, OOOR
|
43
|
-
also offers a convenient bridge between OpenERP and the Java eco-system
|
41
|
+
description: OOOR exposes OpenERP business object proxies to your Ruby (Rails or not) application. It extends the standard ActiveResource API. Running on JRuby, OOOR also offers a convenient bridge between OpenERP and the Java eco-system
|
44
42
|
email: raphael.valyi@akretion.com
|
45
43
|
executables:
|
46
44
|
- ooor
|
@@ -88,7 +86,7 @@ files:
|
|
88
86
|
homepage: http://github.com/akretion/ooor
|
89
87
|
licenses: []
|
90
88
|
metadata: {}
|
91
|
-
post_install_message:
|
89
|
+
post_install_message:
|
92
90
|
rdoc_options: []
|
93
91
|
require_paths:
|
94
92
|
- lib
|
@@ -103,11 +101,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
101
|
- !ruby/object:Gem::Version
|
104
102
|
version: '0'
|
105
103
|
requirements: []
|
106
|
-
rubyforge_project:
|
107
|
-
rubygems_version: 2.4
|
108
|
-
signing_key:
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.6.4
|
106
|
+
signing_key:
|
109
107
|
specification_version: 4
|
110
108
|
summary: OOOR - OpenObject On Ruby
|
111
109
|
test_files:
|
112
|
-
- spec/helpers/test_helper.rb
|
113
110
|
- spec/ooor_spec.rb
|
111
|
+
- spec/helpers/test_helper.rb
|