Sha256: f20f8aeadb87e8f34c7b957551275bda32786b0a86572ab4d59f6f6f54441776

Contents?: true

Size: 1.87 KB

Versions: 6

Compression:

Stored size: 1.87 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
        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

6 entries across 6 versions & 2 rubygems

Version Path
graphiti-1.0.alpha.7 lib/graphiti/util/attribute_check.rb
graphiti-1.0.alpha.6 lib/graphiti/util/attribute_check.rb
graphiti-1.0.alpha.5 lib/graphiti/util/attribute_check.rb
graphiti-1.0.alpha.4 lib/graphiti/util/attribute_check.rb
graphiti-1.0.alpha.1 lib/graphiti/util/attribute_check.rb
graphiti-rb-1.0.alpha.1 lib/graphiti/util/attribute_check.rb