Sha256: 8e781eafa9aa483e1982109dcab239c697857d2f27d91421635e77c24f2f09be

Contents?: true

Size: 1.46 KB

Versions: 28

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Decidim
  module Proposals
    # Class used to retrieve similar collaborative_drafts.
    class SimilarCollaborativeDrafts < Rectify::Query
      include Decidim::TranslationsHelper

      # Syntactic sugar to initialize the class and return the queried objects.
      #
      # component - Decidim::CurrentComponent
      # collaborative_draft - Decidim::Proposals::CollaborativeDraft
      def self.for(component, collaborative_draft)
        new(component, collaborative_draft).query
      end

      # Initializes the class.
      #
      # component - Decidim::CurrentComponent
      # collaborative_draft - Decidim::Proposals::CollaborativeDraft
      def initialize(component, collaborative_draft)
        @component = component
        @collaborative_draft = collaborative_draft
      end

      # Retrieves similar collaborative_drafts
      def query
        Decidim::Proposals::CollaborativeDraft
          .where(component: @component)
          .where(
            "GREATEST(#{title_similarity}, #{body_similarity}) >= ?",
            @collaborative_draft[:title],
            @collaborative_draft[:body],
            Decidim::Proposals.similarity_threshold
          )
          .limit(Decidim::Proposals.similarity_limit)
      end

      private

      attr_reader :collaborative_draft

      def title_similarity
        "similarity(title, ?)"
      end

      def body_similarity
        "similarity(body, ?)"
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
decidim-proposals-0.23.6 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.5 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.4 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.3 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.2 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.1.rc1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.23.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.22.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.21.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.20.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.20.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.19.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.18.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.19.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.17.2 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.18.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.17.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.16.1 app/queries/decidim/proposals/similar_collaborative_drafts.rb
decidim-proposals-0.17.0 app/queries/decidim/proposals/similar_collaborative_drafts.rb