Class: Campaign

Inherits:
ApplicationRecord show all
Includes:
Checkable, RequiredUniqueName, RequiredUniqueSlug, Toggleable
Defined in:
app/models/campaign.rb

Overview

Election campaign

Attributes:

active [boolean]
candidates_count [integer]
created_at [DateTime]
date [date], optional
image [SimpleImageUploader], optional
name [string]
region_id [Region], optional
slug [string]
sync_state [JSON]
updated_at [DateTime]
uuid [uuid]

Constant Summary collapse

NAME_LIMIT =
50
SLUG_LIMIT =
50
SLUG_PATTERN =
/\A[a-z][-_a-z0-9]*[a-z0-9]\z/i.freeze
SLUG_PATTERN_HTML =
'^[a-zA-Z][-_a-zA-Z0-9]*[a-zA-Z0-9]$'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.entity_parametersObject



49
50
51
# File 'app/models/campaign.rb', line 49

def self.entity_parameters
  i[active date image name region_id slug]
end

.user_can_join?(user) ⇒ Boolean

Parameters:

  • user (User)

Returns:

  • (Boolean)


54
55
56
57
58
# File 'app/models/campaign.rb', line 54

def self.user_can_join?(user)
  total = list_for_visitors.count
  taken = list_for_visitors.joins(:candidates).where(candidates: { user: user }).count
  total > taken
end

Instance Method Details

#approved?(user) ⇒ Boolean

Parameters:

  • user (User)

Returns:

  • (Boolean)


75
76
77
# File 'app/models/campaign.rb', line 75

def approved?(user)
  candidates.find_by(user: user)&.approved?
end

#candidate?(entity) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


65
66
67
# File 'app/models/campaign.rb', line 65

def candidate?(entity)
  candidates.where(id: entity.id).exists?
end

#regional?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'app/models/campaign.rb', line 60

def regional?
  !region.nil?
end

#user?(entity) ⇒ Boolean

Parameters:

  • entity (User)

Returns:

  • (Boolean)


70
71
72
# File 'app/models/campaign.rb', line 70

def user?(entity)
  candidates.owned_by(entity).exists?
end