Class: Preference
  
  
  
  
    - Inherits:
 
    - 
      Sequel::Model
      
        
          - Object
 
          
            - Sequel::Model
 
          
            - Preference
 
          
        
        show all
      
       
    
  
  
    
  
    
      - Includes:
 
      - ASModel
 
      
    
  
  
  
    - Defined in:
 
    - backend/app/model/preference.rb
 
  
  
    
      Class Method Summary
      (collapse)
    
    
  
    
      Instance Method Summary
      (collapse)
    
    
  
  
  
  
  
  
  
  
  
  Methods included from ASModel
  all_models, included, update_publish_flag, update_suppressed_flag
  
  
  
  
  
  
  
  
  Methods included from JSONModel
  JSONModel, #JSONModel, add_error_handler, all, allow_unmapped_enum_value, backend_url, client_mode?, custom_validations, destroy_model, enum_default_value, enum_values, handle_error, load_schema, #models, models, parse_jsonmodel_ref, parse_reference, repository, repository_for, schema_src, set_repository, strict_mode, strict_mode?, with_repository
  
  
    Class Method Details
    
      
  
  
    + (Object) create_from_json(json, opts = {}) 
  
  
  
  
    
      
150
151
152 
     | 
    
      # File 'backend/app/model/preference.rb', line 150
def self.create_from_json(json, opts = {})
  super(json, opts.merge('defaults' => JSON(json.defaults || {})))
end
     | 
  
 
    
      
  
  
    + (Object) current_preferences(repo_id = RequestContext.get(:repo_id)) 
  
  
  
  
    
      
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 
     | 
    
      # File 'backend/app/model/preference.rb', line 93
def self.current_preferences(repo_id = RequestContext.get(:repo_id))
  return {} unless RequestContext.get(:current_username)
  user_id = User[:username => RequestContext.get(:current_username)].id
  filter = {:repo_id => repo_id, :user_uniq => [user_id.to_s, 'GLOBAL_USER']}
  json_prefs = {'defaults' => {}}
  prefs = {}
  defaults = {}
  if repo_id != Repository.global_repo_id
    self.filter(filter).each do |pref|
      if pref.user_uniq == 'GLOBAL_USER'
        json_prefs['repo'] = self.to_jsonmodel(pref)
        prefs[:repo] = pref
      else
        json_prefs['user_repo'] = self.to_jsonmodel(pref)
        prefs[:user_repo] = pref
      end
    end
  end
  RequestContext.in_global_repo do
    filter = {:repo_id => Repository.global_repo_id, :user_uniq => [user_id.to_s, 'GLOBAL_USER']}
    self.filter(filter).each do |pref|
      if pref.user_uniq == 'GLOBAL_USER'
        json_prefs['global'] = self.to_jsonmodel(pref)
        prefs[:global] = pref
      else
        json_prefs['user_global'] = self.to_jsonmodel(pref)
        prefs[:user_global] = pref
      end
    end
  end
  [:global, :user_global, :repo, :user_repo].each do |k|
    if prefs[k]
      json_prefs['defaults'].merge!(prefs[k].parsed_defaults)
      json_prefs["defaults_#{k}"] = json_prefs['defaults'].clone
    end
  end
  json_prefs['defaults'].delete('jsonmodel_type')
  json_prefs
end
     | 
  
 
    
      
  
  
    + (Object) defaults 
  
  
  
  
    
      
83
84
85
86
87
88
89
90 
     | 
    
      # File 'backend/app/model/preference.rb', line 83
def self.defaults
  if RequestContext.get(:current_username)
    user_defs = self.parsed_defaults_for(:user_id => User[:username => RequestContext.get(:current_username)].id)
    self.repo_defaults.merge(user_defs)
  else
    self.repo_defaults
  end
end
     | 
  
 
    
      
  
  
    + (Object) global_defaults 
  
  
  
  
    
      
59
60
61
62
63 
     | 
    
      # File 'backend/app/model/preference.rb', line 59
def self.global_defaults
  RequestContext.open(:repo_id => Repository.global_repo_id) do
    self.parsed_defaults_for(:user_id => nil)
  end
end
     | 
  
 
    
      
  
  
    + (Object) init 
  
  
  
  
    
      
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 
     | 
    
      # File 'backend/app/model/preference.rb', line 7
def self.init
  defs_file = File.join(ASUtils.find_base_directory("common"), "config", "preference_defaults.rb")
  defaults = {}
  if File.exists?(defs_file)
    found_defs_file = true
    Log.info("Loading preference defaults file at #{defs_file}")
    defaults = eval(File.read(defs_file))
  end
  RequestContext.in_global_repo do
    filter = {:repo_id => Repository.global_repo_id, :user_id => nil}
    if self.filter(filter).count == 0
      Log.info("Creating system preferences")
      Preference.create_from_json(JSONModel(:preference).from_hash({
                                                                     :user_id => nil,
                                                                     :defaults => defaults
                                                                   }),
                                  :repo_id => Repository.global_repo_id)
    else
      if found_defs_file
        Log.info("Updating system preferences")
        pref = self.filter(filter).first
        pref.update_from_json(JSONModel(:preference).from_hash({:defaults => defaults}),
                              :lock_version => pref.lock_version)
      end
    end
  end    
end
     | 
  
 
    
      
  
  
    + (Object) parsed_defaults_for(filter) 
  
  
  
  
    
      
53
54
55
56 
     | 
    
      # File 'backend/app/model/preference.rb', line 53
def self.parsed_defaults_for(filter)
  pref = self[filter.merge(:repo_id => RequestContext.get(:repo_id))]
  pref ? pref.parsed_defaults : {}
end
     | 
  
 
    
      
  
  
    + (Object) repo_defaults 
  
  
  
  
    
      
78
79
80 
     | 
    
      # File 'backend/app/model/preference.rb', line 78
def self.repo_defaults
  self.user_global_defaults.merge(self.parsed_defaults_for(:user_id => nil))
end
 
     | 
  
 
    
      
  
  
    + (Object) sequel_to_jsonmodel(objs, opts = {}) 
  
  
  
  
    
      
139
140
141
142
143
144
145
146
147 
     | 
    
      # File 'backend/app/model/preference.rb', line 139
def self.sequel_to_jsonmodel(objs, opts = {})
  jsons = super
  jsons.zip(objs).each do |json, obj|
    json['defaults'] = JSONModel(:defaults).from_json(obj.defaults)
  end
  jsons
end
     | 
  
 
    
      
  
  
    + (Object) user_global_defaults 
  
  
  
  
    
      
66
67
68
69
70
71
72
73
74
75 
     | 
    
      # File 'backend/app/model/preference.rb', line 66
def self.user_global_defaults
  RequestContext.open(:repo_id => Repository.global_repo_id) do
    if RequestContext.get(:current_username)
      user_defs = self.parsed_defaults_for(:user_id => User[:username => RequestContext.get(:current_username)].id)
      self.global_defaults.merge(user_defs)
    else
      self.global_defaults
    end
  end
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    - (Object) after_save 
  
  
  
  
    
      
43
44
45 
     | 
    
      # File 'backend/app/model/preference.rb', line 43
def after_save
  Notifications.notify("REFRESH_PREFERENCES")
end
     | 
  
 
    
      
  
  
    - (Object) before_save 
  
  
  
  
    
      
37
38
39
40 
     | 
    
      # File 'backend/app/model/preference.rb', line 37
def before_save
  super
  self.user_uniq = self.user_id || 'GLOBAL_USER'
end
 
     | 
  
 
    
      
  
  
    - (Object) parsed_defaults 
  
  
  
  
    
      
48
49
50 
     | 
    
      # File 'backend/app/model/preference.rb', line 48
def parsed_defaults
  ASUtils.json_parse(self.defaults)
end
 
     | 
  
 
    
      
  
  
    - (Object) update_from_json(json, opts = {}, apply_nested_records = true) 
  
  
  
  
    
      
155
156
157
158 
     | 
    
      # File 'backend/app/model/preference.rb', line 155
def update_from_json(json, opts = {}, apply_nested_records = true)
  super(json, opts.merge('defaults' => JSON(json.defaults)),
        apply_nested_records)
end
     |