Sha256: dc0bea6447f8940639330768391498eb82523321c7e5398244cde180ef18a99b

Contents?: true

Size: 1.46 KB

Versions: 14

Compression:

Stored size: 1.46 KB

Contents

module Spree
  module Taxons
    class Find
      def initialize(scope:, params:)
        @scope = scope
        @ids      = String(params.dig(:filter, :ids)).split(',')
        @parent   = params.dig(:filter, :parent_id)
        @taxonomy = params.dig(:filter, :taxonomy_id)
        @name     = params.dig(:filter, :name)
        @roots    = params.dig(:filter, :roots)
      end

      def execute
        taxons = by_ids(scope)
        taxons = by_parent(taxons)
        taxons = by_taxonomy(taxons)
        taxons = by_roots(taxons)
        taxons = by_name(taxons)

        taxons
      end

      private

      attr_reader :ids, :parent, :taxonomy, :roots, :name, :scope

      def ids?
        ids.present?
      end

      def parent?
        parent.present?
      end

      def taxonomy?
        taxonomy.present?
      end

      def roots?
        roots.present?
      end

      def name?
        name.present?
      end

      def by_ids(taxons)
        return taxons unless ids?

        taxons.where(id: ids)
      end

      def by_parent(taxons)
        return taxons unless parent?

        taxons.where(parent_id: parent)
      end

      def by_taxonomy(taxons)
        return taxons unless taxonomy?

        taxons.where(taxonomy_id: taxonomy)
      end

      def by_roots(taxons)
        return taxons unless roots?

        taxons.roots
      end

      def by_name(taxons)
        return taxons unless name?

        taxons.where(name: name)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
spree_core-3.7.14.1 app/finders/spree/taxons/find.rb
spree_core-3.7.14 app/finders/spree/taxons/find.rb
spree_core-3.7.13 app/finders/spree/taxons/find.rb
spree_core-3.7.12 app/finders/spree/taxons/find.rb
spree_core-3.7.11 app/finders/spree/taxons/find.rb
spree_core-3.7.10 app/finders/spree/taxons/find.rb
spree_core-3.7.9 app/finders/spree/taxons/find.rb
spree_core-3.7.8 app/finders/spree/taxons/find.rb
spree_core-4.0.1 app/finders/spree/taxons/find.rb
spree_core-3.7.7 app/finders/spree/taxons/find.rb
spree_core-4.0.0 app/finders/spree/taxons/find.rb
spree_core-4.0.0.rc3 app/finders/spree/taxons/find.rb
spree_core-3.7.6 app/finders/spree/taxons/find.rb
spree_core-3.7.5 app/finders/spree/taxons/find.rb