ooor 1.2.8 → 1.2.9

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.
@@ -0,0 +1,26 @@
1
+ #proxies all 'common' class of OpenERP server/bin/service/web_service.py properly
2
+ module CommonService
3
+ def global_login(user, password)
4
+ @config[:username] = user
5
+ @config[:password] = password
6
+ client = OpenObjectResource.client(@base_url + "/common")
7
+ @config[:user_id] = OpenObjectResource.try_with_pretty_error_log { client.call("login", @config[:database], user, password) }
8
+ rescue Exception => error
9
+ @logger.error """login to OpenERP server failed:
10
+ #{error.inspect}
11
+ Are your sure the server is started? Are your login parameters correct? Can this server ping the OpenERP server?
12
+ login XML/RPC url was #{@config[:url].gsub(/\/$/,'') + "/common"}"""
13
+ raise
14
+ end
15
+
16
+ def login(user, password); global_login(user, password); end
17
+
18
+ #we generate methods handles for use in auto-completion tools such as jirb_swing
19
+ [:ir_get, :ir_set, :ir_del, :about, :logout, :timezone_get, :get_available_updates, :get_migration_scripts, :get_server_environment, :login_message, :check_connectivity].each do |meth|
20
+ self.instance_eval do
21
+ define_method meth do |*args|
22
+ OpenObjectResource.try_with_pretty_error_log { OpenObjectResource.client(@base_url + "/common").call(meth.to_s, *args) }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ #proxies all 'db' class of OpenERP server/bin/service/web_service.py properly
2
+ module DbService
3
+ def create(password=@config[:db_password], db_name='ooor_db', demo=true, lang='en-US', user_password=@config[:password] || 'admin')
4
+ process_id = OpenObjectResource.try_with_pretty_error_log { OpenObjectResource.client(@base_url + "/db").call("create", password, db_name, demo, lang, user_password) }
5
+ @config[:database] = db_name
6
+ @config[:username] = user_password
7
+ while get_progress('admin', process_id) == [0, []]
8
+ @logger.info "..."
9
+ sleep(0.5)
10
+ end
11
+ load_models()
12
+ end
13
+
14
+ def drop(password=@config[:db_password], db_name='ooor_db')
15
+ OpenObjectResource.try_with_pretty_error_log { OpenObjectResource.client(@base_url + "/db").call("drop", password, db_name) }
16
+ end
17
+
18
+ #we generate methods handles for use in auto-completion tools such as jirb_swing
19
+ [:get_progress, :dump, :restore, :rename, :db_exist, :list, :change_admin_password, :list_lang, :server_version, :migrate_databases].each do |meth|
20
+ self.instance_eval do
21
+ define_method meth do |*args|
22
+ OpenObjectResource.try_with_pretty_error_log { OpenObjectResource.client(@base_url + "/db").call(meth.to_s, *args) }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,6 +1,7 @@
1
1
  require 'xmlrpc/client'
2
+ require 'rubygems'
2
3
  require 'active_resource'
3
- require 'app/models/open_object_ui'
4
+ require 'app/ui/form_model'
4
5
  require 'app/models/uml'
5
6
  require 'set'
6
7
 
@@ -14,8 +15,8 @@ class OpenObjectResource < ActiveResource::Base
14
15
 
15
16
  cattr_accessor :logger
16
17
  attr_accessor :openerp_id, :info, :access_ids, :name, :openerp_model, :field_ids, :state, #model class attributes assotiated to the OpenERP ir.model
17
- :fields, :fields_defined, :many2one_relations, :one2many_relations, :many2many_relations, :relations_keys,
18
- :openerp_database, :user_id, :scope_prefix, :ooor
18
+ :fields, :fields_defined, :many2one_relations, :one2many_relations, :many2many_relations, :polymorphic_m2o_relations, :relations_keys,
19
+ :database, :user_id, :scope_prefix, :ooor
19
20
 
20
21
  def class_name_from_model_key(model_key=self.openerp_model)
21
22
  model_key.split('.').collect {|name_part| name_part.capitalize}.join
@@ -24,7 +25,7 @@ class OpenObjectResource < ActiveResource::Base
24
25
  #similar to Object#const_get but for OpenERP model key
25
26
  def const_get(model_key)
26
27
  klass_name = class_name_from_model_key(model_key)
27
- klass = (self.scope_prefix ? Object.const_get(self.scope_prefix) : Object).const_defined?(klass_name) ? (self.scope_prefix ? Object.const_get(self.scope_prefix) : Object).const_get(klass_name) : @ooor.define_openerp_model(model_key, nil, nil, nil, nil, self.scope_prefix)
28
+ klass = (self.scope_prefix ? Object.const_get(self.scope_prefix) : Object).const_defined?(klass_name) ? (self.scope_prefix ? Object.const_get(self.scope_prefix) : Object).const_get(klass_name) : @ooor.define_openerp_model(model_key, self.scope_prefix)
28
29
  klass.reload_fields_definition unless klass.fields_defined
29
30
  klass
30
31
  end
@@ -41,15 +42,19 @@ class OpenObjectResource < ActiveResource::Base
41
42
  @one2many_relations[field.attributes['name']] = field
42
43
  when 'many2many'
43
44
  @many2many_relations[field.attributes['name']] = field
45
+ when 'reference'
46
+ @polymorphic_m2o_relations[field.attributes['name']] = field
44
47
  else
45
48
  @fields[field.attributes['name']] = field
46
49
  end
47
50
  end
48
- @relations_keys = @many2one_relations.merge(@one2many_relations).merge(@many2many_relations).keys
51
+ @relations_keys = @many2one_relations.keys + @one2many_relations.keys + @many2many_relations.keys + @polymorphic_m2o_relations.keys
49
52
  (@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
+ unless self.respond_to?(meth)
54
+ self.instance_eval do
55
+ define_method meth do |*args|
56
+ self.send :method_missing, *[meth, *args]
57
+ end
53
58
  end
54
59
  end
55
60
  end
@@ -61,13 +66,13 @@ class OpenObjectResource < ActiveResource::Base
61
66
  # ******************** remote communication ********************
62
67
 
63
68
  #OpenERP search method
64
- def search(domain, offset=0, limit=false, order=false, context={}, count=false)
69
+ def search(domain=[], offset=0, limit=false, order=false, context={}, count=false)
65
70
  rpc_execute('search', domain, offset, limit, order, context, count)
66
71
  end
67
72
 
68
73
  def client(url)
69
74
  @clients ||= {}
70
- @clients[url] ||= XMLRPC::Client.new2(url)
75
+ @clients[url] ||= XMLRPC::Client.new2(url, nil, 180)
71
76
  end
72
77
 
73
78
  #corresponding method for OpenERP osv.execute(self, db, uid, obj, method, *args, **kw) method
@@ -108,8 +113,10 @@ class OpenObjectResource < ActiveResource::Base
108
113
  logger.debug "rpc_execute_with_all: rpc_method: 'create old_wizard_step' #{wizard_name}"
109
114
  wizard_id = try_with_pretty_error_log { cast_answer_to_ruby!(client((@database && @site || @ooor.base_url) + "/wizard").call("create", @database || @ooor.config[:database], @user_id || @ooor.config[:user_id], @password || @ooor.config[:password], wizard_name)) }
110
115
  end
111
- logger.debug "rpc_execute_with_all: rpc_method: 'execute old_wizard_step' #{wizard_id}, #{{'model' => @openerp_model, 'form' => form, 'id' => ids[0], 'report_type' => report_type, 'ids' => ids}.inspect}, #{step}, #{context}"
112
- [wizard_id, try_with_pretty_error_log { cast_answer_to_ruby!(client((@database && @site || @ooor.base_url) + "/wizard").call("execute", @database || @ooor.config[:database], @user_id || @ooor.config[:user_id], @password || @ooor.config[:password], wizard_id, {'model' => @openerp_model, 'form' => form, 'id' => ids[0], 'report_type' => report_type, 'ids' => ids}, step, context)) }]
116
+ params = {'model' => @openerp_model, 'form' => form, 'report_type' => report_type}
117
+ params.merge!({'id' => ids[0], 'ids' => ids}) if ids
118
+ logger.debug "rpc_execute_with_all: rpc_method: 'execute old_wizard_step' #{wizard_id}, #{params.inspect}, #{step}, #{context}"
119
+ [wizard_id, try_with_pretty_error_log { cast_answer_to_ruby!(client((@database && @site || @ooor.base_url) + "/wizard").call("execute", @database || @ooor.config[:database], @user_id || @ooor.config[:user_id], @password || @ooor.config[:password], wizard_id, params, step, context)) }]
113
120
  end
114
121
 
115
122
  #grab the eventual error log from OpenERP response as OpenERP doesn't enforce carefuly
@@ -199,7 +206,7 @@ class OpenObjectResource < ActiveResource::Base
199
206
  !ids.empty? && ids[0].is_a?(Integer) && find_single(ids, options) || []
200
207
  end
201
208
 
202
- # Find a single resource from the default URL
209
+ #actually finds many resources specified with scope = ids_array
203
210
  def find_single(scope, options)
204
211
  fields = options[:fields] || []
205
212
  context = options[:context] || {}
@@ -207,7 +214,7 @@ class OpenObjectResource < ActiveResource::Base
207
214
  is_collection = true
208
215
  scope = [scope] and is_collection = false if !scope.is_a? Array
209
216
  scope.map! do |item|
210
- if item.is_a? String #triggers ir_model_data absolute reference lookup
217
+ if item.is_a?(String) && item.to_i == 0#triggers ir_model_data absolute reference lookup
211
218
  tab = item.split(".")
212
219
  domain = [['name', '=', tab[-1]]]
213
220
  domain += [['module', '=', tab[-2]]] if tab[-2]
@@ -321,6 +328,7 @@ class OpenObjectResource < ActiveResource::Base
321
328
  msg << "\n\n" << self.class.many2one_relations.map {|k, v| "many2one --- #{v.relation} --- #{k}"}.join("\n")
322
329
  msg << "\n\n" << self.class.one2many_relations.map {|k, v| "one2many --- #{v.relation} --- #{k}"}.join("\n")
323
330
  msg << "\n\n" << self.class.many2many_relations.map {|k, v| "many2many --- #{v.relation} --- #{k}"}.join("\n")
331
+ msg << "\n\n" << self.class.polymorphic_m2o_relations.map {|k, v| "polymorphic_m2o --- #{v.relation} --- #{k}"}.join("\n")
324
332
  msg << "\n\nYOU CAN ALSO USE THE INHERITED FIELDS FROM THE INHERITANCE MANY2ONE RELATIONS OR THE OBJECT METHODS...\n\n"
325
333
  self.class.logger.debug msg
326
334
  end
@@ -389,7 +397,7 @@ class OpenObjectResource < ActiveResource::Base
389
397
 
390
398
  def old_wizard_step(wizard_name, step='init', wizard_id=nil, form={}, context={})
391
399
  result = self.class.old_wizard_step(wizard_name, [self.id], step, wizard_id, form, {})
392
- OpenObjectWizard.new(wizard_name, result[0], result[1], [self], self.class.ooor.global_context)
400
+ FormModel.new(wizard_name, result[0], nil, nil, result[1], [self], self.class.ooor.global_context)
393
401
  end
394
402
 
395
403
  def type() method_missing(:type) end #skips deprecated Object#type method
@@ -405,6 +413,9 @@ class OpenObjectResource < ActiveResource::Base
405
413
  load_relation(self.class.one2many_relations[method_name].relation, @relations[method_name], *arguments)
406
414
  elsif self.class.many2many_relations.has_key?(method_name)
407
415
  load_relation(self.class.many2many_relations[method_name].relation, @relations[method_name], *arguments)
416
+ elsif self.class.polymorphic_m2o_relations.has_key?(method_name)
417
+ values = @relations[method_name].split(',')
418
+ load_relation(values[0], values[1].to_i, *arguments)
408
419
  else
409
420
  false
410
421
  end
@@ -441,18 +452,28 @@ class OpenObjectResource < ActiveResource::Base
441
452
 
442
453
  #maybe the relation is inherited or could be inferred from a related field
443
454
  self.class.many2one_relations.each do |k, field| #TODO could be recursive eventually
444
- if @relations[k]
445
- @loaded_relations[k] ||= load_relation(field.relation, @relations[k][0], *arguments)
446
- model = @loaded_relations[k]
447
- model.loaded_relations[method_key] ||= model.relationnal_result(method_key, *arguments)
448
- return model.loaded_relations[method_key] if model.loaded_relations[method_key]
455
+ if @relations[k] #we only care if instance has a relation
456
+ related_model = self.class.const_get(field.relation)
457
+ related_model.reload_fields_definition() unless related_model.fields_defined
458
+ if related_model.relations_keys.index(method_key)
459
+ @loaded_relations[k] ||= load_relation(field.relation, @relations[k][0], *arguments)
460
+ model = @loaded_relations[k]
461
+ model.loaded_relations[method_key] ||= model.relationnal_result(method_key, *arguments)
462
+ return model.loaded_relations[method_key] if model.loaded_relations[method_key]
463
+ end
449
464
  elsif is_assign
450
465
  klazz = self.class.const_get(field.relation)
451
466
  @relations[method_key] = arguments[0] and return if klazz.relations_keys.index(method_key)
452
467
  @attributes[method_key] = arguments[0] and return if klazz.fields.keys.index(method_key)
453
468
  end
454
469
  end
455
- super
470
+
471
+ if id
472
+ arguments += [{}] unless arguments.last.is_a?(Hash)
473
+ self.class.rpc_execute(method_key, [id], *arguments) #we assume that's an action
474
+ else
475
+ super
476
+ end
456
477
 
457
478
  rescue RuntimeError
458
479
  raise
@@ -5,7 +5,7 @@ module UML
5
5
 
6
6
  def print_uml(*options)
7
7
  ooor = self.class.ooor
8
- UML.print_uml(ooor.config[:models] && ooor.all_loaded_models.select {|model| ooor.config[:models].index(model.openerp_model)} || ooor.all_loaded_models, options)
8
+ UML.print_uml(ooor.config[:models] && ooor.loaded_models.select {|model| ooor.config[:models].index(model.openerp_model)} || ooor.loaded_models, options)
9
9
  end
10
10
 
11
11
  module ClassMethods
@@ -0,0 +1,11 @@
1
+ module ActionWindowModule
2
+ def open(mode='tree', ids=nil)
3
+ if view_mode.index(mode)
4
+ the_view_id = false
5
+ relations['views'].each do |tuple|
6
+ the_view_id = tuple[0] if tuple[1] == mode
7
+ end
8
+ self.class.ooor.build_object_view(self.class.ooor.const_get(res_model), the_view_id, mode, domain || [], ids, {})
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ require 'app/ui/form_model'
2
+ require 'app/ui/menu'
3
+ require 'app/ui/action_window'
4
+
5
+ module ClientBase
6
+
7
+ def menu_class
8
+ action_window_class()
9
+ const_get('ir.ui.menu').send :include, MenuModule
10
+ end
11
+
12
+ def action_window_class
13
+ const_get('ir.actions.act_window').send :include, ActionWindowModule
14
+ end
15
+
16
+ def get_init_menu(user_id=@config[:user_id])
17
+ const_get('res.users').read([user_id], ['menu_id', 'name'], @global_context)
18
+ end
19
+
20
+ #Ooor can have wizards that are not object related, for instance to configure the initial database:
21
+ def old_wizard_step(wizard_name, step='init', wizard_id=nil, form={}, context={})
22
+ result = @ir_model_class.old_wizard_step(wizard_name, nil, step, wizard_id, form, {})
23
+ FormModel.new(wizard_name, result[0], nil, nil, result[1], [self], @global_context)#TODO set arch and fields
24
+ end
25
+
26
+ def build_object_view(model_class, view_id, view_mode='form', domain=[], ids=nil, context={}, toolbar=false)
27
+ #TODO put in cache eventually:
28
+ view = model_class.fields_view_get(view_id, view_mode, @global_context, toolbar)
29
+ context = @global_context.merge(context)
30
+ ids = const_get(view['model']).search(domain) unless ids #TODO replace by search_read once OpenERP has that
31
+ values = const_get(view['model']).read(ids, view['fields'], context)
32
+ models = []
33
+ ids.each_with_index do |id, k|
34
+ models << const_get(view['model']).new(values[k], [], context)
35
+ end
36
+
37
+ FormModel.new(view['name'], view['view_id'], view['arch'], view['fields'], nil, models, context, view['view_id'])
38
+ end
39
+ end
@@ -0,0 +1,81 @@
1
+ class FormModel
2
+ attr_accessor :name, :wizard_id, :datas, :arch, :fields, :type, :state, :view_id, :open_object_resources, :view_context
3
+
4
+ def initialize(name, wizard_id, arch, fields, data, open_object_resources, view_context, view_id=nil)
5
+ @arch = arch
6
+ @fields = fields
7
+ @name = name
8
+ @wizard_id = wizard_id
9
+ @open_object_resources = open_object_resources
10
+ @view_context = view_context
11
+ if data #it's a wizard
12
+ @datas = data['datas'].symbolize_keys!
13
+ @type = data['type']
14
+ update_wizard_state(data['state'])
15
+ end
16
+ end
17
+
18
+ def to_html
19
+ "<div>not implemented in OOOR core gem!</div>"
20
+ end
21
+
22
+ def to_s
23
+ content = ""
24
+ content << @name
25
+ @open_object_resources.each do |resource|
26
+ content << "\n---------"
27
+ @fields.each do |k, v| #TODO no need for new call if many2one
28
+ if v['type'] == 'many2one'
29
+ content << "\n#{k}: #{resource.relations[k]}"
30
+ else
31
+ content << "\n#{k}: #{resource.send(k)}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ def old_wizard_step(method_symbol, *arguments)
38
+ values = @datas.merge((arguments[0] || {}).symbolize_keys!)
39
+ context = @view_context.merge(arguments[1] || {})
40
+ if @open_object_resources.size == 1
41
+ open_object_resource = @open_object_resources[0]
42
+ if open_object_resource.is_a? Ooor
43
+ data = open_object_resource.ir_model_class.old_wizard_step(@name, nil, method_symbol, @wizard_id, values, context)
44
+ else
45
+ data = open_object_resource.class.old_wizard_step(@name, [open_object_resource.id], method_symbol, @wizard_id, values, context)
46
+ end
47
+ if data[1]['state'] == 'end'
48
+ if open_object_resource.is_a? Ooor
49
+ return 'end'
50
+ else
51
+ return open_object_resource.reload_from_record!(open_object_resource.class.find(open_object_resource.id, :context => context))
52
+ end
53
+ end
54
+ @arch = data[1]['arch']
55
+ @fields = data[1]['fields']
56
+ @datas.merge!(data[1]['datas'].symbolize_keys!) unless data[1]['datas'].empty?
57
+ @type = data[1]['type']
58
+ update_wizard_state(data[1]['state']) #FIXME ideally we should remove old methods
59
+ return self
60
+ else
61
+ ids = @open_object_resources.collect{ |open_object_resources| open_object_resources.id }
62
+ return open_object_resource.class.old_wizard_step(@name, ids, method_symbol, @wizard_id, values, context)
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def update_wizard_state(state)
69
+ if state.is_a? Array
70
+ @state = state
71
+ @state.each do |state_item| #generates autocompletion handles
72
+ self.class_eval do
73
+ define_method state_item[0] do |*args|
74
+ self.send :old_wizard_step, *[state_item[0], *args]
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,16 @@
1
+ require 'app/ui/action_window'
2
+
3
+ module MenuModule
4
+
5
+ attr_accessor :menu_action
6
+
7
+ def menu_action
8
+ #TODO put in cache eventually:
9
+ action_values = self.class.ooor.const_get('ir.values').rpc_execute('get', 'action', 'tree_but_open', [['ir.ui.menu', id]], false, self.class.ooor.global_context)[0][2]#get already exists
10
+ @menu_action = self.class.ooor.const_get('ir.actions.act_window').new(action_values, []) #TODO deal with action reference instead
11
+ end
12
+
13
+ def open(mode='tree', ids=nil)
14
+ menu_action.open(mode, ids)
15
+ end
16
+ end
@@ -1,12 +1,18 @@
1
1
  require 'logger'
2
- require 'xmlrpc/client'
3
2
  require 'app/models/open_object_resource'
4
3
  require 'app/models/uml'
4
+ require 'app/models/db_service'
5
+ require 'app/models/common_service'
6
+ require 'app/ui/client_base'
5
7
 
6
8
  class Ooor
7
9
  include UML
10
+ include DbService
11
+ include CommonService
12
+ include ClientBase
8
13
 
9
- attr_accessor :logger, :config, :all_loaded_models, :base_url, :global_context, :ir_model_class
14
+ cattr_accessor :default_ooor, :default_config
15
+ attr_accessor :logger, :config, :loaded_models, :base_url, :global_context, :ir_model_class
10
16
 
11
17
  #load the custom configuration
12
18
  def self.load_config(config_file=nil, env=nil)
@@ -20,50 +26,39 @@ class Ooor
20
26
  raise
21
27
  end
22
28
 
23
- def global_login(user, password)
24
- @config[:username] = user
25
- @config[:password] = password
26
- client = OpenObjectResource.client(@base_url + "/common")
27
- OpenObjectResource.try_with_pretty_error_log { client.call("login", @config[:database], user, password)}
28
- rescue Exception => error
29
- @logger.error """login to OpenERP server failed:
30
- #{error.inspect}
31
- Are your sure the server is started? Are your login parameters correct? Can this server ping the OpenERP server?
32
- login XML/RPC url was #{@config[:url].gsub(/\/$/,'') + "/common"}"""
33
- raise
34
- end
35
-
36
29
  def initialize(config, env=false)
37
30
  @config = config.is_a?(String) ? Ooor.load_config(config, env) : config
38
31
  @config.symbolize_keys!
39
- @logger = ((defined?(RAILS_ENV) && $0 != 'irb') ? Rails.logger : Logger.new(STDOUT))
32
+ @logger = ((defined?(Rails) && $0 != 'irb' || config[:force_rails_logger]) ? Rails.logger : Logger.new(STDOUT))
40
33
  @logger.level = config[:log_level] if config[:log_level]
34
+ OpenObjectResource.logger = @logger
41
35
  @base_url = config[:url].gsub(/\/$/,'')
42
- @global_context = config[:global_context] || {}
43
-
36
+ @loaded_models = []
44
37
  scope = Module.new and Object.const_set(config[:scope_prefix], scope) if config[:scope_prefix]
38
+ if config[:database]
39
+ load_models()
40
+ end
41
+ end
45
42
 
46
- config[:user_id] = global_login(config[:username] || 'admin', config[:password] || 'admin')
47
-
48
- @all_loaded_models = []
49
- OpenObjectResource.logger = @logger
50
- @ir_model_class = define_openerp_model("ir.model", nil, nil, nil, nil, config[:scope_prefix])
51
- define_openerp_model("ir.model.fields", nil, nil, nil, nil, config[:scope_prefix])
52
- define_openerp_model("ir.model.data", nil, nil, nil, nil, config[:scope_prefix])
43
+ def const_get(model_key)
44
+ @ir_model_class.const_get(model_key)
45
+ end
53
46
 
54
- if config[:models] #we load only a customized subset of the OpenERP models
55
- models = @ir_model_class.find(:all, :domain => [['model', 'in', config[:models]]])
47
+ def load_models(to_load_models=@config[:models])
48
+ @global_context = @config[:global_context] || {}
49
+ global_login(@config[:username] || 'admin', @config[:password] || 'admin')
50
+ @ir_model_class = define_openerp_model("ir.model", @config[:scope_prefix])
51
+ define_openerp_model("ir.model.fields", @config[:scope_prefix])
52
+ if to_load_models #we load only a customized subset of the OpenERP models
53
+ models = @ir_model_class.find(:all, :domain => [['model', 'in', to_load_models]])
56
54
  else #we load all the models
57
- models = @ir_model_class.find(:all).reject {|model| ["ir.model", "ir.model.fields", "ir.model.data"].index model.model}
55
+ models = @ir_model_class.find(:all).reject {|model| ["ir.model", "ir.model.fields"].index model.model}
58
56
  end
59
- models.each {|openerp_model| define_openerp_model(openerp_model, nil, nil, nil, nil, config[:scope_prefix])}
60
- end
61
-
62
- module Test
63
-
57
+ @global_context.merge!({}).merge!(@config[:global_context] || {})
58
+ models.each {|openerp_model| define_openerp_model(openerp_model, @config[:scope_prefix])}
64
59
  end
65
60
 
66
- def define_openerp_model(arg, url, database, user_id, pass, scope_prefix)
61
+ def define_openerp_model(arg, scope_prefix=nil, url=nil, database=nil, user_id=nil, pass=nil)
67
62
  if arg.is_a?(String) && arg != 'ir.model' && arg != 'ir.model.fields'
68
63
  arg = @ir_model_class.find(:first, :domain => [['model', '=', arg]])
69
64
  end
@@ -73,7 +68,7 @@ class Ooor
73
68
  klass.site = url || @base_url
74
69
  klass.user = user_id
75
70
  klass.password = pass
76
- klass.openerp_database = database
71
+ klass.database = database
77
72
  klass.openerp_model = param['model']
78
73
  klass.openerp_id = url || param['id']
79
74
  klass.info = (param['info'] || '').gsub("'",' ')
@@ -84,20 +79,20 @@ class Ooor
84
79
  klass.many2one_relations = {}
85
80
  klass.one2many_relations = {}
86
81
  klass.many2many_relations = {}
82
+ klass.polymorphic_m2o_relations = {}
87
83
  klass.relations_keys = []
88
84
  klass.fields = {}
89
85
  klass.scope_prefix = scope_prefix
90
86
  model_class_name = klass.class_name_from_model_key
91
87
  @logger.info "registering #{model_class_name} as a Rails ActiveResource Model wrapper for OpenObject #{param['model']} model"
92
88
  (scope_prefix ? Object.const_get(scope_prefix) : Object).const_set(model_class_name, klass)
93
- @all_loaded_models.push(klass)
89
+ @loaded_models.push(klass)
94
90
  klass
95
91
  end
96
92
 
97
93
  end
98
94
 
99
- #Optionnal Rails settings:
100
- if defined?(Rails)
101
- config = Ooor.load_config(false, RAILS_ENV)
102
- OOOR = Ooor.new(config) if config['bootstrap']
95
+ if defined?(Rails) #Optionnal autoload in Rails:
96
+ Ooor.default_config = Ooor.load_config(false, RAILS_ENV)
97
+ Ooor.default_ooor = Ooor.new(Ooor.default_config) if Ooor.default_config['bootstrap']
103
98
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 8
9
- version: 1.2.8
8
+ - 9
9
+ version: 1.2.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Raphael Valyi - www.akretion.com
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-02 00:00:00 -03:00
17
+ date: 2010-03-10 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,10 +43,15 @@ files:
43
43
  - README.md
44
44
  - MIT-LICENSE
45
45
  - lib/ooor.rb
46
+ - ooor.yml
46
47
  - lib/app/models/open_object_resource.rb
47
- - lib/app/models/open_object_ui.rb
48
48
  - lib/app/models/uml.rb
49
- - ooor.yml
49
+ - lib/app/models/db_service.rb
50
+ - lib/app/models/common_service.rb
51
+ - lib/app/ui/action_window.rb
52
+ - lib/app/ui/client_base.rb
53
+ - lib/app/ui/form_model.rb
54
+ - lib/app/ui/menu.rb
50
55
  has_rdoc: true
51
56
  homepage: http://github.com/rvalyi/ooor
52
57
  licenses: []
@@ -1,45 +0,0 @@
1
- class OpenObjectLayoutedFields
2
- attr_accessor :arch, :fields
3
-
4
- def initialize(arch, fields)
5
- @arch = arch
6
- @fields = fields
7
- end
8
- end
9
-
10
- class OpenObjectWizard < OpenObjectLayoutedFields
11
- attr_accessor :name, :id, :datas, :arch, :fields, :type, :state, :open_object_resources
12
-
13
- def initialize(name, id, data, open_object_resources, wizard_context)
14
- super(data['arch'], data['fields'])
15
- @name = name
16
- @id = id
17
- @open_object_resources = open_object_resources
18
- @datas = data['datas'].symbolize_keys!
19
- @type = data['type']
20
- @state = data['state']
21
- @wizard_context = wizard_context
22
- end
23
-
24
- def method_missing(method_symbol, *arguments)
25
- values = @datas.merge((arguments[0] || {}).symbolize_keys!)
26
- context = @wizard_context.merge(arguments[1] || {})
27
- if @open_object_resources.size == 1
28
- open_object_resource = @open_object_resources[0]
29
- data = open_object_resource.class.old_wizard_step(@name, [open_object_resource.id], method_symbol, @id, values, context)
30
- if data[1]['state'] == 'end'
31
- return open_object_resource.reload_from_record!(open_object_resource.class.find(open_object_resource.id, :context => context))
32
- end
33
- @arch = data[1]['arch']
34
- @fields = data[1]['fields']
35
- @datas = data[1]['datas'].symbolize_keys!
36
- @type = data[1]['type']
37
- @state = data[1]['state']
38
- return self
39
- else
40
- ids = @open_object_resources.collect{|open_object_resources| open_object_resources.id}
41
- return open_object_resource.class.old_wizard_step(@name, ids, method_symbol, @id, values, context)
42
- end
43
- end
44
-
45
- end