Sha256: 46cddf262092e4b9884c843b2c11f804d071cee2b06e37549f6916112b000ce4

Contents?: true

Size: 1.05 KB

Versions: 56

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

module Motor
  module ApiQuery
    module ApplyScope
      module_function

      def call(rel, scope)
        return rel if scope.blank?

        scope_symbol = scope.to_sym

        if rel.klass.defined_scopes.include?(scope_symbol)
          rel.public_send(scope_symbol)
        else
          apply_filter_scope(rel, scope)
        end
      end

      def apply_filter_scope(rel, scope)
        configs = Motor::Resource.find_by(name: rel.klass.name.underscore)

        return rel unless configs

        scope_configs = configs.preferences[:scopes].find { |s| s[:name] == scope }

        return rel unless scope_configs
        return rel unless scope_configs[:preferences]

        rel = ApiQuery::Filter.call(rel, scope_configs[:preferences][:filter])

        apply_order(rel, scope_configs[:preferences][:sort])
      end

      def apply_order(rel, params)
        return rel if params.blank?

        sort_key, sort_order = params.values_at(:key, :order)

        rel.order(sort_key => sort_order)
      end
    end
  end
end

Version data entries

56 entries across 56 versions & 6 rubygems

Version Path
motor-admin-0.4.36 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.35 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.34 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.33 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.32 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.31 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.30 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.29 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.28 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.35 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.34 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.33 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.32 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.31 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.30 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.29 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.28 lib/motor/api_query/apply_scope.rb
motor-admin-cstham8-0.4.27 lib/motor/api_query/apply_scope.rb
motor-admin-0.4.27 lib/motor/api_query/apply_scope.rb
motor-admin-unosquare-0.4.28 lib/motor/api_query/apply_scope.rb