module Eco module API #TODO move as part of API::Session and inherit from < API::Common::Session::BaseModel #TODO boost autoconfiguration (via file <- FileManager.dir) class Organization DUMMY_USER_EXTERNAL_ID = 'dummy' attr_reader :tag_tree, :policy_groups, :person_schemas attr_reader :default_person, :default_schema, :default_schema_id attr_reader :default_policy_group_ids, :default_filter_tags, :default_login_provider_ids attr_reader :login_providers attr_reader :account_presets, :account_preferences def initialize(init = {}) api = init.fetch('api', nil) @@api = api&.instance_of?(Ecoportal::API::Internal) && api # todo: maps { 'policy_group' : 'preset'} set_settings(init, override: true) end def set_settings(init = {}, override: false) set_defaults(init) @login_providers = init['login_providers'] || @@api&.login_providers&.to_a || \ @login_providers || [] if (!@login_providers || :override) @tag_tree = init['tag_tree'] || @default_filter_tags || @tag_tree || [] if (!@tag_tree || :override) @policy_groups = init['policy_groups'] || @@api&.policy_groups&.to_a || \ @policy_groups || [] if (!@policy_groups || :override) @person_schemas = init['person_schemas'] || @@api&.person_schemas&.to_a || @person_schemas || \ [@default_schema] || [] if (!@person_schemas || :override) end def default_schema=(value) @default_schema = value || @person_schemas&.first self.default_schema_id = @default_schema&.id || @default_schema&.schema_id || @default_schema_id end def default_schema_id=(value) @default_schema_id = value end private def set_defaults(init = {}) @account_presets = Account::Presets.new(init.fetch('presets', nil)) @account_preferences = Account::Preferences.new @default_person = get_default_person(init) @default_policy_group_ids = init['default_policy_group_ids'] || @default_person&.account&.policy_group_ids || [] @default_filter_tags = init['default_filter_tags'] || @default_person&.account&.filter_tags || [] @default_login_provider_ids = init['default_login_provider_ids'] || @default_person&.account&.login_provider_ids || [] default_schema = get_schema_from_person(@default_person) self.default_schema = init['default_schema'] || default_schema end def get_default_person(init = {}) return nil if !@@api return init.fetch('default_person', (@@api && @@api.people.get(DUMMY_USER_EXTERNAL_ID)).result || nil) end def get_schema_from_person(person) return nil if !person doc = person.details.doc doc['id'] = doc['schema_id'] doc.delete('schema_id') schema = Ecoportal::API::Internal::PersonSchema.new(doc) return schema end end end end