ooor 1.9.0 → 1.9.1

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.
@@ -24,10 +24,19 @@ module Ooor
24
24
  class << self
25
25
 
26
26
  cattr_accessor :logger
27
- attr_accessor :openerp_id, :info, :access_ids, :name, :openerp_model, :field_ids, :state, #model class attributes associated to the OpenERP ir.model
27
+ attr_accessor :openerp_id, :info, :access_ids, :name, :description, :openerp_model, :field_ids, :state, #class attributes associated to the OpenERP ir.model
28
28
  :fields, :fields_defined, :many2one_associations, :one2many_associations, :many2many_associations, :polymorphic_m2o_associations, :associations_keys,
29
29
  :database, :user_id, :scope_prefix, :ooor, :association
30
30
 
31
+ def model_name
32
+ @_model_name ||= begin
33
+ namespace = self.parents.detect do |n|
34
+ n.respond_to?(:use_relative_model_naming?) && n.use_relative_model_naming?
35
+ end
36
+ ActiveModel::Name.new(self, namespace, description)
37
+ end
38
+ end
39
+
31
40
  def print_uml(options={})
32
41
  UML.print_uml([self], options)
33
42
  end
@@ -231,9 +240,10 @@ module Ooor
231
240
 
232
241
  #actually finds many resources specified with scope = ids_array
233
242
  def find_single(scope, options)
243
+ context = options[:context] || {}
244
+ reload_fields_definition(false, context)
234
245
  all_fields = @fields.merge(@many2one_associations).merge(@one2many_associations).merge(@many2many_associations).merge(@polymorphic_m2o_associations)
235
246
  fields = options[:fields] || options[:only] || all_fields.keys.select {|k| all_fields[k]["type"] != "binary" && (options[:include_functions] || !all_fields[k]["function"])}
236
- context = options[:context] || {}
237
247
  # prefix_options, query_options = split_options(options[:params])
238
248
  is_collection = true
239
249
  scope = [scope] and is_collection = false if !scope.is_a? Array
@@ -292,33 +302,34 @@ module Ooor
292
302
  self.class.rpc_execute_with_all(object_db, object_uid, object_pass, self.class.openerp_model, method, *args)
293
303
  end
294
304
 
295
- def reload_from_record!(record) load(record.attributes, record.associations) end
305
+ def reload_from_record!(record) load(record.attributes.merge(record.associations)) end
296
306
 
297
- def load(attributes, associations={})#an attribute might actually be a association too, will be determined here
307
+ def load(attributes, remove_root=false)#an attribute might actually be a association too, will be determined here
298
308
  self.class.reload_fields_definition(false, object_session)
299
309
  raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
300
310
  @prefix_options, attributes = split_options(attributes)
301
- @associations = associations
302
- @attributes = {}
311
+ @associations ||= {}
312
+ @attributes ||= {}
303
313
  @loaded_associations = {}
304
314
  attributes.each do |key, value|
305
315
  skey = key.to_s
306
- if self.class.associations_keys.index(skey) || value.is_a?(Array)
307
- associations[skey] = value #the association because we want the method to load the association through method missing
316
+ if self.class.associations_keys.index(skey) || value.is_a?(Array) #FIXME may miss m2o with inherits!
317
+ @associations[skey] = value #the association because we want the method to load the association through method missing
308
318
  else
309
- @attributes[skey] = value
319
+ @attributes[skey] = (value == false)? nil : value
310
320
  end
311
321
  end
312
322
  self
313
323
  end
314
324
 
315
325
  def available_fields
316
- msg = "\n*** AVAILABLE FIELDS ON OBJECT #{self.class.name} ARE: ***"
326
+ msg = "\n*** AVAILABLE FIELDS ON #{self.class.name} ARE: ***"
317
327
  msg << "\n\n" << self.class.fields.sort {|a,b| a[1]['type']<=>b[1]['type']}.map {|i| "#{i[1]['type']} --- #{i[0]}"}.join("\n")
318
- msg << "\n\n" << self.class.many2one_associations.map {|k, v| "many2one --- #{v['relation']} --- #{k}"}.join("\n")
319
- msg << "\n\n" << self.class.one2many_associations.map {|k, v| "one2many --- #{v['relation']} --- #{k}"}.join("\n")
320
- msg << "\n\n" << self.class.many2many_associations.map {|k, v| "many2many --- #{v['relation']} --- #{k}"}.join("\n")
321
- msg << "\n\n" << self.class.polymorphic_m2o_associations.map {|k, v| "polymorphic_m2o --- #{v['relation']} --- #{k}"}.join("\n")
328
+ %w[many2one one2many many2many polymorphic_m2o].each do |kind|
329
+ msg << "\n\n"
330
+ msg << (self.class.send "#{kind}_associations").map {|k, v| "{kind} --- #{v['relation']} --- #{k}"}.join("\n")
331
+ end
332
+ msg
322
333
  end
323
334
 
324
335
  #takes care of reading OpenERP default field values.
@@ -381,7 +392,7 @@ module Ooor
381
392
  self.class.logger.info result["warning"]["title"]
382
393
  self.class.logger.info result["warning"]["message"]
383
394
  end
384
- load(@attributes.merge({field_name => field_value}).merge(result["value"]), @associations)
395
+ load(@attributes.merge({field_name => field_value}).merge(result["value"]))
385
396
  end
386
397
 
387
398
  #wrapper for OpenERP exec_workflow Business Process Management engine
@@ -468,7 +479,7 @@ module Ooor
468
479
  end
469
480
 
470
481
  def reload_fields(context)
471
- records = self.class.find(self.id, :context => context, :fields => @attributes.keys)
482
+ records = self.class.find(self.id, :context => context, :fields => @attributes.keys + @associations.keys)
472
483
  reload_from_record!(records)
473
484
  end
474
485
  end
data/lib/ooor.rb CHANGED
@@ -98,7 +98,7 @@ module Ooor
98
98
  ([File.dirname(__FILE__) + '/app/helpers/*'] + (@config[:helper_paths] || [])).each {|dir| Dir[dir].each { |file| require file }}
99
99
  @ir_model_class = define_openerp_model({'model' => 'ir.model'}, @config[:scope_prefix])
100
100
  model_ids = model_names && @ir_model_class.search([['model', 'in', model_names]]) || @ir_model_class.search() - [1]
101
- models = @ir_model_class.read(model_ids, ['model'])#['name', 'model', 'id', 'info', 'state', 'field_id', 'access_ids'])
101
+ models = @ir_model_class.read(model_ids, ['model', 'name'])#['name', 'model', 'id', 'info', 'state', 'field_id', 'access_ids'])
102
102
  @global_context.merge!({}).merge!(@config[:global_context] || {}) #TODO ensure it's required
103
103
  models.each {|openerp_model| define_openerp_model(openerp_model, @config[:scope_prefix], nil, nil, nil, nil, reload)}
104
104
  end
@@ -117,6 +117,7 @@ module Ooor
117
117
  klass.openerp_id = url || param['id']
118
118
  klass.info = (param['info'] || '').gsub("'",' ')
119
119
  klass.name = model_class_name
120
+ klass.description = param['name']
120
121
  klass.state = param['state']
121
122
  #klass.field_ids = param['field_id']
122
123
  #klass.access_ids = param['access_ids']
data/spec/ooor_spec.rb CHANGED
@@ -9,7 +9,7 @@ require File.dirname(__FILE__) + '/../lib/ooor'
9
9
  #Run the file with the rspec command from the rspec gem
10
10
  describe Ooor do
11
11
  before(:all) do
12
- @url = 'http://localhost:8069/xmlrpc'
12
+ @url = 'http://localhost:8169/xmlrpc'
13
13
  @db_password = 'admin'
14
14
  @username = 'admin'
15
15
  @password = 'admin'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ooor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-22 00:00:00.000000000 Z
12
+ date: 2013-05-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource