Sha256: 4247f139e3667946fedf53e62ac63f8704d3186a1f007be066a9f5afde276b90

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require 'cancan'
require 'active_model_serializers'

module ActiveModel
  class Serializer
    module Associations #:nodoc:
      class Config #:nodoc:

        def authorize?
          !!option(:authorize)
        end

        def current_ability
          Ability.new(source_serializer.options[:scope])
        end

        def can?(*args)
          current_ability.can? *args
        end

        def cannot?
          current_ability.cannot? *args
        end

      end

      class HasMany #:nodoc:

        def serialize_with_cancan
          return serialize_without_cancan unless authorize?
          associated_object.select{|o| current_ability.can?(:read, o)}.map do |item|
            find_serializable(item).serializable_hash
          end
        end
        alias_method_chain :serialize, :cancan

      end

      class HasOne #:nodoc:

        def serialize_with_cancan
          return nil unless !authorize? || current_ability.can?(:read, associated_object)
          serialize_without_cancan
        end
        alias_method_chain :serialize, :cancan

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_model_serializers-cancan-0.0.1 lib/active_model_serializers/cancan/associations.rb