class Decidim::Proposals::ProposalCreator

This class is responsible for creating the imported proposals and must be included in proposals component's import manifest.

Attributes

context[R]

Public Class Methods

resource_klass() click to toggle source

Retuns the resource class to be created with the provided data.

# File lib/decidim/proposals/proposal_creator.rb, line 9
def self.resource_klass
  Decidim::Proposals::Proposal
end

Public Instance Methods

finish!() click to toggle source

Saves the proposal

Calls superclass method
# File lib/decidim/proposals/proposal_creator.rb, line 23
def finish!
  super # resource.save!
  notify(resource)
  publish(resource)
end
produce() click to toggle source

Produces a proposal from parsed data

Returns a proposal

# File lib/decidim/proposals/proposal_creator.rb, line 16
def produce
  resource.add_coauthor(context[:current_user], user_group: context[:user_group])

  resource
end

Private Instance Methods

available_locales() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 62
def available_locales
  @available_locales ||= component.participatory_space.organization.available_locales
end
body() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 58
def body
  locale_hasher("body", available_locales)
end
category() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 44
def category
  id = data.has_key?(:category) ? data[:category]["id"] : data[:"category/id"].to_i
  Decidim::Category.find_by(id: id)
end
coauthors_followers(proposal) click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 93
def coauthors_followers(proposal)
  @coauthors_followers ||= proposal.authors.flat_map(&:followers)
end
component() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 66
def component
  context[:current_component]
end
notify(proposal) click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 70
def notify(proposal)
  return if proposal.coauthorships.empty?

  Decidim::EventsManager.publish(
    event: "decidim.events.proposals.proposal_published",
    event_class: Decidim::Proposals::PublishProposalEvent,
    resource: proposal,
    followers: coauthors_followers(proposal)
  )
end
publish(proposal) click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 81
def publish(proposal)
  Decidim::EventsManager.publish(
    event: "decidim.events.proposals.proposal_published",
    event_class: Decidim::Proposals::PublishProposalEvent,
    resource: proposal,
    followers: proposal.participatory_space.followers - coauthors_followers(proposal),
    extra: {
      participatory_space: true
    }
  )
end
resource() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 33
def resource
  @resource ||= Decidim::Proposals::Proposal.new(
    category: category,
    scope: scope,
    title: title,
    body: body,
    component: component,
    published_at: Time.current
  )
end
scope() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 49
def scope
  id = data.has_key?(:scope) ? data[:scope]["id"] : data[:"scope/id"].to_i
  Decidim::Scope.find_by(id: id)
end
title() click to toggle source
# File lib/decidim/proposals/proposal_creator.rb, line 54
def title
  locale_hasher("title", available_locales)
end