Module: Maestrano::Connector::Rails::Concerns::Organization

Extended by:
ActiveSupport::Concern
Included in:
Organization
Defined in:
app/models/maestrano/connector/rails/concerns/organization.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#add_member(user) ⇒ Object



84
85
86
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 84

def add_member(user)
  user_organization_rels.create(user: user) if tenant == user.tenant && !member?(user)
end

#clear_omniauthObject



105
106
107
108
109
110
111
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 105

def clear_omniauth
  self.oauth_uid = nil
  self.oauth_token = nil
  self.refresh_token = nil
  self.sync_enabled = false
  save
end

#displayable_synchronized_entitiesObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 69

def displayable_synchronized_entities
  result = {}
  synchronized_entities.each do |entity, hash|
    begin
      # Transform entity name from entities_list to class name
      # ex. :item => Entities::Item
      clazz = "Entities::#{entity.to_s.titleize.tr(' ', '')}".constantize
    rescue
      next
    end
    result[entity] = {connec_name: clazz.public_connec_entity_name, external_name: clazz.public_external_entity_name}.merge(hash)
  end
  result
end

#enable_historical_data(enabled) ⇒ Object

Enable historical data sharing (prior to account linking)



114
115
116
117
118
119
120
121
122
123
124
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 114

def enable_historical_data(enabled)
  # Historical data sharing cannot be unset
  return if historical_data

  if enabled
    self.date_filtering_limit = nil
    self.historical_data = true
  else
    self.date_filtering_limit ||= Time.now.getlocal
  end
end

#from_omniauth(auth) ⇒ Object



96
97
98
99
100
101
102
103
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 96

def from_omniauth(auth)
  self.oauth_provider = auth.provider
  self.oauth_uid = auth.uid
  self.oauth_token = auth.credentials.token
  self.refresh_token = auth.credentials.refresh_token
  self.instance_url = auth.credentials.instance_url
  save
end

#historical_not_enabled_and_not_first_syncObject



139
140
141
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 139

def historical_not_enabled_and_not_first_sync
  !historical_data && synchronizations&.first&.created_at
end

#initialize(attributes = nil, options = {}) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 48

def initialize(attributes = nil, options = {})
  super(attributes, options)

  self.synchronized_entities = {}
  Maestrano::Connector::Rails::External.entities_list.each do |entity|
    begin
      # Transform entity name from entities_list to class name
      # ex. :item => Entities::Item
      clazz = "Entities::#{entity.to_s.titleize.tr(' ', '')}".constantize
    rescue
      clazz = nil
    end

    # Check if Entity or ComplexEntity and set entity_push_to_connec and entity_push_to_external
    entity_push_to_connec = clazz && clazz < Maestrano::Connector::Rails::Entity ? clazz.can_write_connec? : true
    entity_push_to_external = clazz && clazz < Maestrano::Connector::Rails::Entity ? clazz.can_write_external? : true

    synchronized_entities[entity.to_sym] = {can_push_to_connec: entity_push_to_connec, can_push_to_external: entity_push_to_external}
  end
end

#last_successful_synchronizationObject



131
132
133
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 131

def last_successful_synchronization
  synchronizations.where(status: 'SUCCESS', partial: false).order(updated_at: :desc).first
end

#last_synchronization_dateObject



135
136
137
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 135

def last_synchronization_date
  last_successful_synchronization&.updated_at || historical_not_enabled_and_not_first_sync || date_filtering_limit
end

#last_three_synchronizations_failed?Boolean

Returns:

  • (Boolean)


126
127
128
129
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 126

def last_three_synchronizations_failed?
  arr = synchronizations.last(3).map(&:error?)
  arr.count == 3 && arr.uniq == [true]
end

#member?(user) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 88

def member?(user)
  user_organization_rels.where(user_id: user.id).count.positive?
end

#push_to_connec_enabled?(entity) ⇒ Boolean

Returns:

  • (Boolean)


158
159
160
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 158

def push_to_connec_enabled?(entity)
  synchronized_entities.dig(Maestrano::Connector::Rails::EntityHelper.snake_name(entity), :can_push_to_connec) && entity&.class&.can_write_connec?
end

#push_to_external_enabled?(entity) ⇒ Boolean

Returns:

  • (Boolean)


162
163
164
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 162

def push_to_external_enabled?(entity)
  synchronized_entities.dig(Maestrano::Connector::Rails::EntityHelper.snake_name(entity), :can_push_to_external) && entity&.class&.can_write_external?
end

#remove_member(user) ⇒ Object



92
93
94
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 92

def remove_member(user)
  user_organization_rels.where(user_id: user.id).delete_all
end

#reset_synchronized_entities(default = false) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'app/models/maestrano/connector/rails/concerns/organization.rb', line 143

def reset_synchronized_entities(default = false)
  synchronized_entities.slice!(*Maestrano::Connector::Rails::External.entities_list.map(&:to_sym))
  Maestrano::Connector::Rails::External.entities_list.each do |entity|
    if synchronized_entities[entity.to_sym].is_a?(Hash)
      can_push_to_external = synchronized_entities[entity.to_sym][:can_push_to_external]
      can_push_to_connec = synchronized_entities[entity.to_sym][:can_push_to_connec]
    else
      can_push_to_external = synchronized_entities[entity.to_sym]
      can_push_to_connec = synchronized_entities[entity.to_sym]
    end
    synchronized_entities[entity.to_sym] = {can_push_to_connec: (can_push_to_connec || default), can_push_to_external: (can_push_to_external || default)}
  end
  save
end