Sha256: 488ce0c6197eca21563c2f0669292fa7907842da0820e6e41cf3b53741e1cd6d

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

module Trestle
  class Scopes
    class Scope
      attr_reader :name, :options, :block

      def initialize(admin, name, options={}, &block)
        @admin, @name, @options, @block = admin, name, options, block
      end

      def to_param
        name unless default?
      end

      def label
        @options[:label] || @admin.t("scopes.#{name}", default: name.to_s.humanize.titleize)
      end

      def group
        @options[:group]
      end

      def default?
        @options[:default] == true
      end

      def apply(collection)
        if @block
          if @block.arity == 1
            @admin.instance_exec(collection, &@block)
          else
            @admin.instance_exec(&@block)
          end
        else
          collection.public_send(name)
        end
      end

      def count(collection)
        @admin.count(@admin.merge_scopes(collection, apply(collection)))
      end

      def active?(params)
        active_scopes = Array(params[:scope])

        if active_scopes.any?
          active_scopes.include?(to_param.to_s)
        else
          default?
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
trestle-0.9.8 lib/trestle/scopes/scope.rb
trestle-0.9.7 lib/trestle/scopes/scope.rb
trestle-0.9.6 lib/trestle/scopes/scope.rb
trestle-0.9.5 lib/trestle/scopes/scope.rb