ooor 1.2.7 → 1.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/app/models/open_object_resource.rb +20 -19
- data/lib/ooor.rb +2 -2
- metadata +20 -9
@@ -46,6 +46,13 @@ class OpenObjectResource < ActiveResource::Base
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
@relations_keys = @many2one_relations.merge(@one2many_relations).merge(@many2many_relations).keys
|
49
|
+
(@fields.keys + @relations_keys).each do |meth| #generates method handlers for autompletion tools such as jirb_swing
|
50
|
+
self.instance_eval do
|
51
|
+
define_method meth do |*args|
|
52
|
+
self.send :method_missing, *[meth, *args]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
49
56
|
logger.info "#{fields.size} fields loaded in model #{self.class}"
|
50
57
|
end
|
51
58
|
@fields_defined = true
|
@@ -131,7 +138,9 @@ class OpenObjectResource < ActiveResource::Base
|
|
131
138
|
|
132
139
|
def cast_request_to_openerp!(map)
|
133
140
|
map.each do |k, v|
|
134
|
-
if
|
141
|
+
if v == nil
|
142
|
+
map[k] = false
|
143
|
+
elsif !v.is_a?(Integer) && !v.is_a?(Float) && v.is_a?(Numeric) && v.respond_to?(:to_f)
|
135
144
|
map[k] = v.to_f
|
136
145
|
elsif !v.is_a?(Numeric) && !v.is_a?(Integer) && v.respond_to?(:sec) && v.respond_to?(:year)#really ensure that's a datetime type
|
137
146
|
map[k] = "#{v.year}-#{v.month}-#{v.day} #{v.hour}:#{v.min}:#{v.sec}"
|
@@ -190,9 +199,6 @@ class OpenObjectResource < ActiveResource::Base
|
|
190
199
|
!ids.empty? && ids[0].is_a?(Integer) && find_single(ids, options) || []
|
191
200
|
end
|
192
201
|
|
193
|
-
#TODO, makes sense?
|
194
|
-
def find_one; raise"Not implemented yet, go on!"; end
|
195
|
-
|
196
202
|
# Find a single resource from the default URL
|
197
203
|
def find_single(scope, options)
|
198
204
|
fields = options[:fields] || []
|
@@ -205,7 +211,7 @@ class OpenObjectResource < ActiveResource::Base
|
|
205
211
|
tab = item.split(".")
|
206
212
|
domain = [['name', '=', tab[-1]]]
|
207
213
|
domain += [['module', '=', tab[-2]]] if tab[-2]
|
208
|
-
ir_model_data =
|
214
|
+
ir_model_data = const_get('ir.model.data').find(:first, :domain => domain)
|
209
215
|
ir_model_data && ir_model_data.res_id && search([['id', '=', ir_model_data.res_id]])[0]
|
210
216
|
else
|
211
217
|
item
|
@@ -296,7 +302,7 @@ class OpenObjectResource < ActiveResource::Base
|
|
296
302
|
resource = find_or_create_resource_for(key) #TODO check!
|
297
303
|
@attributes[skey] = resource@attributes[skey].new(value)
|
298
304
|
else
|
299
|
-
@attributes[skey] = value
|
305
|
+
@attributes[skey] = value
|
300
306
|
end
|
301
307
|
end
|
302
308
|
end
|
@@ -310,18 +316,13 @@ class OpenObjectResource < ActiveResource::Base
|
|
310
316
|
end
|
311
317
|
|
312
318
|
def display_available_fields
|
313
|
-
self
|
314
|
-
self.class.
|
315
|
-
self.class.
|
316
|
-
self.class.
|
317
|
-
self.class.
|
318
|
-
|
319
|
-
self.class.
|
320
|
-
self.class.logger.debug ""
|
321
|
-
self.class.many2many_relations.each {|k, v| self.class.logger.debug "many2many --- #{v.relation} --- #{k}"}
|
322
|
-
self.class.logger.debug ""
|
323
|
-
self.class.logger.debug "YOU CAN ALSO USE THE INHERITED FIELDS FROM THE INHERITANCE MANY2ONE RELATIONS OR THE OBJECT METHODS..."
|
324
|
-
self.class.logger.debug ""
|
319
|
+
msg = "\n*** DIRECTLY AVAILABLE FIELDS ON OBJECT #{self} ARE: ***"
|
320
|
+
msg << "\n\n" << self.class.fields.sort {|a,b| a[1].ttype<=>b[1].ttype}.map {|i| "#{i[1].ttype} --- #{i[0]}"}.join("\n")
|
321
|
+
msg << "\n\n" << self.class.many2one_relations.map {|k, v| "many2one --- #{v.relation} --- #{k}"}.join("\n")
|
322
|
+
msg << "\n\n" << self.class.one2many_relations.map {|k, v| "one2many --- #{v.relation} --- #{k}"}.join("\n")
|
323
|
+
msg << "\n\n" << self.class.many2many_relations.map {|k, v| "many2many --- #{v.relation} --- #{k}"}.join("\n")
|
324
|
+
msg << "\n\nYOU CAN ALSO USE THE INHERITED FIELDS FROM THE INHERITANCE MANY2ONE RELATIONS OR THE OBJECT METHODS...\n\n"
|
325
|
+
self.class.logger.debug msg
|
325
326
|
end
|
326
327
|
|
327
328
|
def to_openerp_hash!
|
@@ -340,7 +341,7 @@ class OpenObjectResource < ActiveResource::Base
|
|
340
341
|
else
|
341
342
|
self.class.reload_fields_definition() unless self.class.fields_defined
|
342
343
|
default_get_list ||= Set.new(self.class.many2one_relations.collect {|k, field| self.class.const_get(field.relation).fields.keys}.flatten + self.class.fields.keys).to_a
|
343
|
-
load(self.class.rpc_execute("default_get", default_get_list, context).merge(attributes))
|
344
|
+
load(self.class.rpc_execute("default_get", default_get_list, context).symbolize_keys!.merge(attributes.symbolize_keys!))
|
344
345
|
end
|
345
346
|
end
|
346
347
|
|
data/lib/ooor.rb
CHANGED
@@ -36,7 +36,7 @@ class Ooor
|
|
36
36
|
def initialize(config, env=false)
|
37
37
|
@config = config.is_a?(String) ? Ooor.load_config(config, env) : config
|
38
38
|
@config.symbolize_keys!
|
39
|
-
@logger = ((defined?(RAILS_ENV)
|
39
|
+
@logger = ((defined?(RAILS_ENV) && $0 != 'irb') ? Rails.logger : Logger.new(STDOUT))
|
40
40
|
@logger.level = config[:log_level] if config[:log_level]
|
41
41
|
@base_url = config[:url].gsub(/\/$/,'')
|
42
42
|
@global_context = config[:global_context] || {}
|
@@ -54,7 +54,7 @@ class Ooor
|
|
54
54
|
if config[:models] #we load only a customized subset of the OpenERP models
|
55
55
|
models = @ir_model_class.find(:all, :domain => [['model', 'in', config[:models]]])
|
56
56
|
else #we load all the models
|
57
|
-
models = @ir_model_class.find(:all).reject {|model|
|
57
|
+
models = @ir_model_class.find(:all).reject {|model| ["ir.model", "ir.model.fields", "ir.model.data"].index model.model}
|
58
58
|
end
|
59
59
|
models.each {|openerp_model| define_openerp_model(openerp_model, nil, nil, nil, nil, config[:scope_prefix])}
|
60
60
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ooor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 2
|
8
|
+
- 8
|
9
|
+
version: 1.2.8
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Raphael Valyi - www.akretion.com
|
@@ -9,19 +14,23 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02
|
17
|
+
date: 2010-03-02 00:00:00 -03:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: activeresource
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 3
|
30
|
+
- 1
|
23
31
|
version: 2.3.1
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
description: OOOR exposes business object proxies to your Ruby (Rails or not) application, that map seamlessly to your remote OpenObject/OpenERP server using webservices. It extends the standard ActiveResource API.
|
26
35
|
email: rvalyi@akretion.com
|
27
36
|
executables: []
|
@@ -51,18 +60,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
51
60
|
requirements:
|
52
61
|
- - ">="
|
53
62
|
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
54
65
|
version: "0"
|
55
|
-
version:
|
56
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
67
|
requirements:
|
58
68
|
- - ">="
|
59
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
60
72
|
version: "0"
|
61
|
-
version:
|
62
73
|
requirements: []
|
63
74
|
|
64
75
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.3.
|
76
|
+
rubygems_version: 1.3.6
|
66
77
|
signing_key:
|
67
78
|
specification_version: 3
|
68
79
|
summary: OOOR - OpenObject On Rails
|