Class: RegionManager

Inherits:
Object
  • Object
show all
Defined in:
app/services/region_manager.rb

Constant Summary collapse

PRIVILEGES =
%w[head chief_editor deputy_chief_editor reporter civic_reporter central_reporter]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user) ⇒ RegionManager

Returns a new instance of RegionManager.

Parameters:

  • user (User)


7
8
9
# File 'app/services/region_manager.rb', line 7

def initialize(user)
  @user = user
end

Instance Attribute Details

#userObject

Returns the value of attribute user.



4
5
6
# File 'app/services/region_manager.rb', line 4

def user
  @user
end

Instance Method Details

#available_region_idsObject



37
38
39
# File 'app/services/region_manager.rb', line 37

def available_region_ids
  available_regions.map(&:subbranch_ids).flatten.compact.uniq
end

#available_regionsObject



32
33
34
35
# File 'app/services/region_manager.rb', line 32

def available_regions
  criteria = { user: @user, privilege_id: regional_privilege_ids }
  Region.where(id: UserPrivilege.where(criteria).pluck(:region_id))
end

#filter?Boolean

Нужно ли ограничивать список доступных регионов для текущего пользователя

Returns:

  • (Boolean)


42
43
44
45
46
47
48
49
50
51
52
# File 'app/services/region_manager.rb', line 42

def filter?
  return false if @user.super_user?

  selection     = UserPrivilege.owned_by(@user)
  privilege_ids = Privilege.where(slug: PRIVILEGES).pluck(:id)
  if selection.where(privilege_id: privilege_ids).exists?
    false
  else
    selection.where(privilege_id: regional_privilege_ids).exists?
  end
end

#filtered_tree(parent_id) ⇒ Object



20
21
22
23
24
25
26
# File 'app/services/region_manager.rb', line 20

def filtered_tree(parent_id)
  if parent_id.to_i < 1
    available_regions.ordered_by_name
  else
    Region.where(id: available_region_ids).visible.for_tree(nil, parent_id)
  end
end

#for_tree(parent_id) ⇒ Object

Parameters:

  • parent_id (Integer)


12
13
14
15
16
17
18
# File 'app/services/region_manager.rb', line 12

def for_tree(parent_id)
  if filter?
    filtered_tree(parent_id)
  else
    Region.visible.for_tree(nil, parent_id)
  end
end

#regional_privilege_idsObject



28
29
30
# File 'app/services/region_manager.rb', line 28

def regional_privilege_ids
  @regional_privilege_ids ||= prepare_regional_privilege_ids
end