Class: Ooor::Session

Inherits:
Object
  • Object
show all
Includes:
ActiveSupport::Configurable, Transport
Defined in:
lib/ooor/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Transport

#base_jsonrpc2_url, #base_url, #get_client

Constructor Details

#initialize(config, web_session, id) ⇒ Session

Returns a new instance of Session.



17
18
19
20
21
22
23
24
# File 'lib/ooor/session.rb', line 17

def initialize(config, web_session, id)
  set_config(_config(config))
  Object.const_set(config[:scope_prefix], Module.new) if config[:scope_prefix]
  @models = {}
  @local_context = {}
  @web_session = web_session || {}
  @id = id || web_session[:session_id]
end

Instance Attribute Details

#idObject

Returns the value of attribute id.



10
11
12
# File 'lib/ooor/session.rb', line 10

def id
  @id
end

#modelsObject

Returns the value of attribute models.



10
11
12
# File 'lib/ooor/session.rb', line 10

def models
  @models
end

#web_sessionObject

Returns the value of attribute web_session.



10
11
12
# File 'lib/ooor/session.rb', line 10

def web_session
  @web_session
end

Instance Method Details

#[](model_key) ⇒ Object

TODO invert: define method here and use []



75
76
77
# File 'lib/ooor/session.rb', line 75

def [](key)
  self[key]
end

#[]=(key, value) ⇒ Object



41
42
43
# File 'lib/ooor/session.rb', line 41

def []=(key, value)
  self[key] = value
end

#class_name_from_model_key(model_key) ⇒ Object



158
159
160
# File 'lib/ooor/session.rb', line 158

def class_name_from_model_key(model_key)
  model_key.split('.').collect {|name_part| name_part.capitalize}.join
end

#commonObject



12
# File 'lib/ooor/session.rb', line 12

def common(); @common_service ||= CommonService.new(self); end

#connection_sessionObject

a part of the config that will be mixed in the context of each session



33
34
35
# File 'lib/ooor/session.rb', line 33

def connection_session
  HashWithIndifferentAccess.new(config[:connection_session] || {})
end

#const_get(model_key, lang = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ooor/session.rb', line 60

def const_get(model_key, lang=nil);
  if config[:aliases]
    if lang && alias_data = config[:aliases][lang]
      openerp_model = alias_data[model_key] || model_key
    elsif alias_data = config[:aliases][connection_session['lang'] || :en_US]
      openerp_model = alias_data[model_key] || model_key
    else
      openerp_model = model_key
    end
  else
    openerp_model = model_key
  end
  define_openerp_model(model: openerp_model, scope_prefix: config[:scope_prefix], generate_constants: config[:generate_constants])
end

#dbObject



13
# File 'lib/ooor/session.rb', line 13

def db(); @db_service ||= DbService.new(self); end

#define_openerp_model(options) ⇒ Object

TODO param to tell if we define constants or not



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/ooor/session.rb', line 128

def define_openerp_model(options) #TODO param to tell if we define constants or not
  if !models[options[:model]] || options[:reload]# || !scope.const_defined?(model_class_name)
    scope_prefix = options[:scope_prefix]
    scope = scope_prefix ? Object.const_get(scope_prefix) : Object
    model_class_name = class_name_from_model_key(options[:model])
    logger.debug "registering #{model_class_name}"
    klass = Class.new(Base)
    set_model_template!(klass, options)
    klass.name = model_class_name
    klass.scope_prefix = scope_prefix
    klass.session = self
    if options[:generate_constants] && (options[:reload] || !scope.const_defined?(model_class_name))
      scope.const_set(model_class_name, klass)
    end
    (Ooor.extensions[options[:model]] || []).each do |block|
      klass.class_eval(&block)
    end
    models[options[:model]] = klass
  end
  models[options[:model]]
end

#global_login(options) ⇒ Object



45
46
47
48
# File 'lib/ooor/session.rb', line 45

def (options)
  config.merge!(options.symbolize_keys)
  load_models(config[:models], options[:reload])
end

#helper_pathsObject



154
155
156
# File 'lib/ooor/session.rb', line 154

def helper_paths
  [File.dirname(__FILE__) + '/helpers/*', *config[:helper_paths]]
end

#load_models(model_names = , reload = ) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/ooor/session.rb', line 79

def load_models(model_names=config[:models], reload=config[:reload])
  helper_paths.each do |dir|
    ::Dir[dir].each { |file| require file }
  end
  search_domain = model_names ? [['model', 'in', model_names]] : []
  models_records = read_model_data(search_domain)
  models_records.reject {|opts| opts['model'] == '_unknown' }.each do |opts|
    options = HashWithIndifferentAccess.new(opts.merge(scope_prefix: config[:scope_prefix],
                                                       reload: reload,
                                                       generate_constants: config[:generate_constants]))
    define_openerp_model(options)
  end
end

#loggerObject

def models; @models ||= {}; end



152
# File 'lib/ooor/session.rb', line 152

def logger; Ooor.logger; end

#objectObject



14
# File 'lib/ooor/session.rb', line 14

def object(); @object_service ||= ObjectService.new(self); end

#read_model_data(search_domain) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/ooor/session.rb', line 93

def read_model_data(search_domain)
  if config[:force_xml_rpc]
    model_ids = object.object_service(:execute, "ir.model", :search, search_domain, 0, false, false, {}, false)
    models_records = object.object_service(:execute, "ir.model", :read, model_ids, ['model', 'name'])
  else
    response = object.object_service(:search_read, "ir.model", 'search_read', 
            fields: ['model', 'name'],
            offset: 0,
            limit: false,
            domain: search_domain,
            sort: false,
            context: {})
    models_records = response["records"]
  end
end

#reportObject



15
# File 'lib/ooor/session.rb', line 15

def report(); @report_service ||= ReportService.new(self); end

#session_context(context = {}) ⇒ Object



56
57
58
# File 'lib/ooor/session.rb', line 56

def session_context(context={})
  connection_session.merge(web_session.slice('lang', 'tz')).merge(@local_context).merge(context) # not just lang and tz?
end

#set_config(configuration) ⇒ Object



26
27
28
29
30
# File 'lib/ooor/session.rb', line 26

def set_config(configuration)
  configuration.each do |k, v|
    config.send "#{k}=", v
  end
end

#set_model_template!(klass, options) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/ooor/session.rb', line 109

def set_model_template!(klass, options)
  template = Ooor.model_registry.get_template(config, options[:model])
  if template
    klass.t = template
  else
    template = Ooor::ModelSchema.new
    template.openerp_model = options[:model]
    template.openerp_id = options[:id]
    template.description = options[:name]
    template.state = options[:state]
    template.many2one_associations = {}
    template.one2many_associations = {}
    template.many2many_associations = {}
    template.polymorphic_m2o_associations = {}
    template.associations_keys = []
    klass.t = template
  end
end

#with_context(context) ⇒ Object



50
51
52
53
54
# File 'lib/ooor/session.rb', line 50

def with_context(context)
  @local_context = context
  yield
  @local_context = {}
end