Class: Ooor::Session
- Inherits:
-
Object
- Object
- Ooor::Session
- Includes:
- ActiveSupport::Configurable, Transport
- Defined in:
- lib/ooor/session.rb
Instance Attribute Summary collapse
-
#id ⇒ Object
Returns the value of attribute id.
-
#models ⇒ Object
Returns the value of attribute models.
-
#web_session ⇒ Object
Returns the value of attribute web_session.
Instance Method Summary collapse
-
#[](model_key) ⇒ Object
TODO invert: define method here and use [].
- #[]=(key, value) ⇒ Object
- #class_name_from_model_key(model_key) ⇒ Object
- #common ⇒ Object
-
#connection_session ⇒ Object
a part of the config that will be mixed in the context of each session.
- #const_get(model_key, lang = nil) ⇒ Object
- #db ⇒ Object
-
#define_openerp_model(options) ⇒ Object
TODO param to tell if we define constants or not.
- #global_login(options) ⇒ Object
- #helper_paths ⇒ Object
-
#initialize(config, web_session, id) ⇒ Session
constructor
A new instance of Session.
- #load_models(model_names = , reload = ) ⇒ Object
-
#logger ⇒ Object
def models; @models ||= {}; end.
- #object ⇒ Object
- #read_model_data(search_domain) ⇒ Object
- #report ⇒ Object
- #session_context(context = {}) ⇒ Object
- #set_config(configuration) ⇒ Object
- #set_model_template!(klass, options) ⇒ Object
- #with_context(context) ⇒ Object
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
#id ⇒ Object
Returns the value of attribute id.
10 11 12 |
# File 'lib/ooor/session.rb', line 10 def id @id end |
#models ⇒ Object
Returns the value of attribute models.
10 11 12 |
# File 'lib/ooor/session.rb', line 10 def models @models end |
#web_session ⇒ Object
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 |
#common ⇒ Object
12 |
# File 'lib/ooor/session.rb', line 12 def common(); @common_service ||= CommonService.new(self); end |
#connection_session ⇒ Object
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 |
#db ⇒ Object
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() #TODO param to tell if we define constants or not if !models[[:model]] || [:reload]# || !scope.const_defined?(model_class_name) scope_prefix = [:scope_prefix] scope = scope_prefix ? Object.const_get(scope_prefix) : Object model_class_name = class_name_from_model_key([:model]) logger.debug "registering #{model_class_name}" klass = Class.new(Base) set_model_template!(klass, ) klass.name = model_class_name klass.scope_prefix = scope_prefix klass.session = self if [:generate_constants] && ([:reload] || !scope.const_defined?(model_class_name)) scope.const_set(model_class_name, klass) end (Ooor.extensions[[:model]] || []).each do |block| klass.class_eval(&block) end models[[:model]] = klass end models[[:model]] end |
#global_login(options) ⇒ Object
45 46 47 48 |
# File 'lib/ooor/session.rb', line 45 def global_login() config.merge!(.symbolize_keys) load_models(config[:models], [:reload]) end |
#helper_paths ⇒ Object
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| = HashWithIndifferentAccess.new(opts.merge(scope_prefix: config[:scope_prefix], reload: reload, generate_constants: config[:generate_constants])) define_openerp_model() end end |
#logger ⇒ Object
def models; @models ||= {}; end
152 |
# File 'lib/ooor/session.rb', line 152 def logger; Ooor.logger; end |
#object ⇒ Object
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 |
#report ⇒ Object
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, ) template = Ooor.model_registry.get_template(config, [:model]) if template klass.t = template else template = Ooor::ModelSchema.new template.openerp_model = [:model] template.openerp_id = [:id] template.description = [:name] template.state = [: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 |