Sha256: 78a63c21d060f0e39f0a3727a3412223036196bc0263d828479b8d55d0eb223e

Contents?: true

Size: 1.9 KB

Versions: 55

Compression:

Stored size: 1.9 KB

Contents

# frozen_string_literal: true

require_relative 'project/function_evaluator'

module Checkoff
  module SelectorClasses
    # Project selector classes
    module Project
      # :due_date function
      class DueDateFunctionEvaluator < FunctionEvaluator
        FUNCTION_NAME = :due_date

        def matches?
          fn?(selector, FUNCTION_NAME)
        end

        # @param resource [Asana::Resources::Project]
        # @return [String, nil]
        def evaluate(resource)
          resource.due_date
        end
      end

      # :ready? function
      class ReadyPFunctionEvaluator < FunctionEvaluator
        FUNCTION_NAME = :ready?

        def matches?
          fn?(selector, FUNCTION_NAME)
        end

        # @param project [Asana::Resources::Project]
        # @param period [Symbol<:now_or_before,:this_week>]
        # @return [Boolean]
        def evaluate(project, period = :now_or_before)
          @projects.project_ready?(project, period: period)
        end
      end

      # :in_portfolio_named? function
      class InPortfolioNamedPFunctionEvaluator < FunctionEvaluator
        FUNCTION_NAME = :in_portfolio_named?

        def matches?
          fn?(selector, FUNCTION_NAME)
        end

        # @param project [Asana::Resources::Project]
        # @param portfolio_name [String]
        # @param workspace_name [String, nil]
        # @param extra_project_fields [Array<String>]
        #
        # @return [Boolean]
        def evaluate(project, portfolio_name, workspace_name: nil, extra_project_fields: [])
          workspace_name ||= project.workspace&.name
          workspace_name ||= @workspaces.default_workspace.name
          projects = @portfolios.projects_in_portfolio(workspace_name, portfolio_name,
                                                       extra_project_fields: extra_project_fields)
          projects.any? { |p| p.name == project.name }
        end
      end
    end
  end
end

Version data entries

55 entries across 55 versions & 1 rubygems

Version Path
checkoff-0.221.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.220.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.219.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.218.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.217.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.216.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.215.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.214.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.213.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.212.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.211.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.210.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.209.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.208.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.207.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.206.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.205.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.204.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.203.0 lib/checkoff/internal/selector_classes/project.rb
checkoff-0.201.0 lib/checkoff/internal/selector_classes/project.rb