Sha256: 037fb09db02810b0ce5d9a55015f9253ef42dedda7c6a16d6fa074b7f15f4f8b

Contents?: true

Size: 1.31 KB

Versions: 64

Compression:

Stored size: 1.31 KB

Contents

module CurationConcerns
  class QuickClassificationQuery
    attr_reader :user

    # @param [User] user the current user
    # @param [Hash] options
    # @option options [#call] :concern_name_normalizer (ClassifyConcern.to_class) a proc that translates names to classes
    # @option options [Array<String>] :models the options to display, defaults to everything.
    def initialize(user, options = {})
      @user = user
      @concern_name_normalizer = options.fetch(:concern_name_normalizer, ClassifyConcern.method(:to_class))
      @models = options.fetch(:models, CurationConcerns.config.registered_curation_concern_types)
    end

    def each(&block)
      authorized_models.each(&block)
    end

    # @return true if the requested concerns is same as all avaliable concerns
    def all?
      models == CurationConcerns.config.registered_curation_concern_types
    end

    # @return [Array] a list of all the requested concerns that the user can create
    def authorized_models
      normalized_model_names.select { |klass| user.can?(:create, klass) }
    end

    private

      attr_reader :concern_name_normalizer, :models

      # Transform the list of requested model names into a list of class names
      def normalized_model_names
        models.map { |name| concern_name_normalizer.call(name) }
      end
  end
end

Version data entries

64 entries across 64 versions & 2 rubygems

Version Path
curation_concerns-1.7.8 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.7 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-2.0.0 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-2.0.0.rc2 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.6 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.5 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.4 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.3 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.2 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-2.0.0.rc1 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.1 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.0 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.7.0.beta1 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.6.3 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.6.2 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.6.1 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.6.0 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.5.0 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.4.0 app/models/curation_concerns/quick_classification_query.rb
curation_concerns-1.3.3 app/models/curation_concerns/quick_classification_query.rb