Class: Decidim::Component

Inherits:
ApplicationRecord show all
Includes:
HasSettings, Loggable, Publicable, Traceable
Defined in:
app/models/decidim/component.rb

Overview

A Component represents a self-contained group of functionalities usually defined via a ComponentManifest. It’s meant to be able to provide a single component that spans over several steps.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Publicable

#publish!, #published?, #unpublish!

Methods included from HasSettings

#current_settings, #default_step_settings, #default_step_settings=, #settings, #settings=, #step_settings, #step_settings=

Class Method Details

.log_presenter_class_for(_log) ⇒ Object



19
20
21
# File 'app/models/decidim/component.rb', line 19

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

Instance Method Details

#can_participate_in_space?(user) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
80
81
# File 'app/models/decidim/component.rb', line 76

def can_participate_in_space?(user)
  return true unless participatory_space.try(:private_space?)
  return false unless user

  participatory_space.can_participate?(user)
end

#manifestObject

Public: Finds the manifest this component is associated to.

Returns a ComponentManifest.



31
32
33
# File 'app/models/decidim/component.rb', line 31

def manifest
  Decidim.find_component_manifest(manifest_name)
end

#manifest=(manifest) ⇒ Object

Public: Assigns a manifest to this component.

manifest - The ComponentManifest for this Component.

Returns nothing.



40
41
42
# File 'app/models/decidim/component.rb', line 40

def manifest=(manifest)
  self.manifest_name = manifest.name
end

#mounted_admin_engineObject

Public: The name of the admin engine the component is mounted to.



50
51
52
# File 'app/models/decidim/component.rb', line 50

def mounted_admin_engine
  "decidim_admin_#{participatory_space_name}_#{manifest_name}"
end

#mounted_engineObject

Public: The name of the engine the component is mounted to.



45
46
47
# File 'app/models/decidim/component.rb', line 45

def mounted_engine
  "decidim_#{participatory_space_name}_#{manifest_name}"
end

#mounted_paramsObject

Public: The hash of contextual params when the component is mounted.



55
56
57
58
59
60
61
# File 'app/models/decidim/component.rb', line 55

def mounted_params
  {
    host: organization.host,
    component_id: id,
    "#{participatory_space.underscored_name}_slug".to_sym => participatory_space.slug
  }
end

#primary_statObject

Public: Returns the value of the registered primary stat.



64
65
66
# File 'app/models/decidim/component.rb', line 64

def primary_stat
  @primary_stat ||= manifest.stats.filter(primary: true).with_context([self]).map { |name, value| [name, value] }.first&.last
end

#resource_descriptionObject

Public: Returns an empty description



74
# File 'app/models/decidim/component.rb', line 74

def resource_description; end

#resource_titleObject

Public: Returns the component’s name as resource title



69
70
71
# File 'app/models/decidim/component.rb', line 69

def resource_title
  name
end

#siblingsObject

Other components with the same manifest and same participatory space as this one.



24
25
26
# File 'app/models/decidim/component.rb', line 24

def siblings
  @siblings ||= participatory_space.components.where.not(id: id).where(manifest_name: manifest_name)
end