class Decidim::ResourceManifest
Components
inside a component can expose different Resources, these resources will be used to be linked between each other and other possible components.
This class sets a scheme to expose these resources. It shouldn't be used directly, you should use `register_resource` inside a component.
Example:
component.register_resource(:my_model) do |resource| resource.model_class = Decidim::MyEngine::MyModel resource.template = "decidim/myengine/myengine/linked_models" end
Public Instance Methods
Finds the current class with the given `model_class_name` in order to avoid problems with Rails' autoloading.
Returns a class.
# File lib/decidim/resource_manifest.rb, line 79 def model_class model_class_name.constantize end
Finds an ActiveRecord::Relation of the resource `model_class`, scoped to the given component. This way you can find resources from another engine without actually coupling both engines. If no `component_manifest` is set for this manifest, it returns an empty collection.
component - a Decidim::Component
Returns an ActiveRecord::Relation.
# File lib/decidim/resource_manifest.rb, line 66 def resource_scope(component) return model_class.none unless component_manifest component_ids = Decidim::Component.where(participatory_space: component.participatory_space, manifest_name: component_manifest.name).pluck(:id) return model_class.none if component_ids.empty? model_class.joins(:component).where(decidim_components: { id: component_ids }) end
The name of the named Rails route to create the url to the resource.
Returns a String.
# File lib/decidim/resource_manifest.rb, line 86 def route_name super || model_class_name.demodulize.underscore end