Sha256: e23713b2130e0ea39b0171f8ea843f065d39b37f06e6db00e799c51f0f4e2114

Contents?: true

Size: 1.88 KB

Versions: 11

Compression:

Stored size: 1.88 KB

Contents

# Private, tested in resource specs
module Graphiti
  module Util
    class AttributeCheck
      attr_reader :resource, :name, :flag, :request, :raise_error

      def self.run(resource, name, flag, request, raise_error)
        new(resource, name, flag, request, raise_error).run
      end

      def initialize(resource, name, flag, request, raise_error)
        @resource = resource
        @name = name.to_sym
        @flag = flag
        @request = request
        @raise_error = raise_error
      end

      def run
        if attribute?
          if supported?
            if guarded?
              if guard_passes?
                attribute
              else
                maybe_raise(request: true, guard: attribute[flag])
              end
            else
              attribute
            end
          else
            maybe_raise(exists: true)
          end
        else
          maybe_raise(exists: false)
        end
      end

      def maybe_raise(opts = {})
        default = {request: request, exists: true}
        opts = default.merge(opts)
        if raise_error?(opts[:exists])
          raise error_class.new(resource, name, flag, opts)
        else
          false
        end
      end

      def guard_passes?
        !!resource.send(attribute[flag])
      end

      def guarded?
        request? &&
          attribute[flag].is_a?(Symbol) &&
          attribute[flag] != :required
      end

      def error_class
        Errors::AttributeError
      end

      def supported?
        attribute[flag] != false
      end

      def attribute
        @attribute ||= resource.all_attributes[name]
      end

      def attribute?
        !!attribute
      end

      def raise_error?(exists)
        if raise_error == :only_unsupported
          exists ? true : false
        else
          !!raise_error
        end
      end

      def request?
        !!request
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
graphiti-1.0.3 lib/graphiti/util/attribute_check.rb
graphiti-1.0.2 lib/graphiti/util/attribute_check.rb
graphiti-1.0.1 lib/graphiti/util/attribute_check.rb
graphiti-1.0.0 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.28 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.27 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.26 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.25 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.24 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.23 lib/graphiti/util/attribute_check.rb
graphiti-1.0.rc.22 lib/graphiti/util/attribute_check.rb