Class: Decidim::ShareToken

Inherits:
ApplicationRecord show all
Includes:
Traceable
Defined in:
decidim-core/app/models/decidim/share_token.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.log_presenter_class_for(_log) ⇒ Object



17
18
19
# File 'decidim-core/app/models/decidim/share_token.rb', line 17

def self.log_presenter_class_for(_log)
  Decidim::AdminLog::ShareTokenPresenter
end

.ransackable_associations(_auth_object = nil) ⇒ Object



58
59
60
# File 'decidim-core/app/models/decidim/share_token.rb', line 58

def self.ransackable_associations(_auth_object = nil)
  %w(organization token_for user)
end

.ransackable_attributes(_auth_object = nil) ⇒ Object



54
55
56
# File 'decidim-core/app/models/decidim/share_token.rb', line 54

def self.ransackable_attributes(_auth_object = nil)
  %w(token expires_at last_used_at registered_only times_used)
end

.use!(token_for:, token:, user: nil) ⇒ Object



21
22
23
24
# File 'decidim-core/app/models/decidim/share_token.rb', line 21

def self.use!(token_for:, token:, user: nil)
  record = find_by!(token_for:, token:)
  record.use!(user:)
end

Instance Method Details

#componentObject



48
49
50
51
52
# File 'decidim-core/app/models/decidim/share_token.rb', line 48

def component
  return token_for if token_for.is_a?(Decidim::Component)

  token_for.component if token_for.respond_to?(:component)
end

#expired?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'decidim-core/app/models/decidim/share_token.rb', line 33

def expired?
  expires_at.past? unless expires_at.nil?
end

#participatory_spaceObject



41
42
43
44
45
46
# File 'decidim-core/app/models/decidim/share_token.rb', line 41

def participatory_space
  return token_for if token_for.try(:manifest).is_a?(Decidim::ParticipatorySpaceManifest)
  return token_for.participatory_space if token_for.respond_to?(:participatory_space)

  component&.participatory_space
end

#urlObject



37
38
39
# File 'decidim-core/app/models/decidim/share_token.rb', line 37

def url
  token_for.shareable_url(self)
end

#use!(user: nil) ⇒ Object



26
27
28
29
30
31
# File 'decidim-core/app/models/decidim/share_token.rb', line 26

def use!(user: nil)
  return raise StandardError, "Share token '#{token}' for '#{token_for_type}' with id = #{token_for_id} has expired." if expired?
  return raise StandardError, "Share token '#{token}' for '#{token_for_type}' with id = #{token_for_id} requires a registered user." if registered_only? && user.nil?

  update!(times_used: times_used + 1, last_used_at: Time.zone.now)
end