Module: Decidim::Scopable

Extended by:
ActiveSupport::Concern
Defined in:
decidim-core/lib/decidim/scopable.rb

Overview

A concern with the components needed when you want a model to have a scope.

The including model needs to implement the following interface:

@abstract An instance method that returns the id of the scope
@method decidim_scope_id
  @return [Integer]

@abstract An instance method that states whether scopes are enabled or not
@method scopes_enabled
  @return [Boolean]

@abstract An method that gives an associated organization
@method organization
  @return [Decidim::Organization]

Instance Method Summary collapse

Instance Method Details

#has_subscopes?Boolean

Whether the resource has subscopes or not.

Returns a boolean.

Returns:

  • (Boolean)

50
51
52
# File 'decidim-core/lib/decidim/scopable.rb', line 50

def has_subscopes?
  scopes_enabled? && subscopes.any?
end

#out_of_scope?(subscope) ⇒ Boolean

Whether the passed subscope is out of the resource's scope.

Returns a boolean

Returns:

  • (Boolean)

57
58
59
# File 'decidim-core/lib/decidim/scopable.rb', line 57

def out_of_scope?(subscope)
  scope && !scope.ancestor_of?(subscope)
end

#previous_scopeObject

If any, gets the previous scope of the object.

Returns a Decidim::Scope


65
66
67
68
69
# File 'decidim-core/lib/decidim/scopable.rb', line 65

def previous_scope
  return if versions.count <= 1

  Decidim::Scope.find_by(id: versions.last.reify.decidim_scope_id)
end

#scopes_enabled?Boolean

Whether the resource has scopes enabled or not.

Returns a boolean.

Returns:

  • (Boolean)

34
35
36
# File 'decidim-core/lib/decidim/scopable.rb', line 34

def scopes_enabled?
  scopes_enabled
end

#subscopesObject

Gets the children scopes of the object's scope.

If it's global, returns the organization's top scopes.

Returns an ActiveRecord::Relation.


43
44
45
# File 'decidim-core/lib/decidim/scopable.rb', line 43

def subscopes
  scope ? scope.children : organization.top_scopes
end