Sha256: 69adfc1402bb5a5f552f85ab8044e878f5036c553ee6f0bcbc85bdb3014dbe28

Contents?: true

Size: 1.76 KB

Versions: 4

Compression:

Stored size: 1.76 KB

Contents

module Graphiti
  module ActiveGraph
    module Resource
      def relation_resource?
        config[:relation_resource] || false
      end

      def relationship_resource=(value)
        config[:relation_resource] = value
      end

      def with_preloaded_obj(obj, params)
        id = params[:data].try(:[], :id) || params.delete(:id)
        params[:filter] ||= {}
        params[:filter][:id] = id if id

        build(params, nil, raise_on_missing: false, preloaded: obj, bypass_required_filters: true)
      end

      def all_with_preloaded(obj_arr, params)
        build(params, nil, single: false, raise_on_missing: false, preloaded: obj_arr)
      end

      def guard_nil_id!(params)
      end
    end

    module ResourceInstanceMethods
      def relation_resource?
        self.class.relation_resource?
      end

      def sideload_name_arr(query)
        query.sideloads.keys.map(&:to_sym)
      end

      def resolve(scope)
        adapter.resolve(scope, relation_resource?)
      end

      def typecast(name, value, flag)
        att = get_attr!(name, flag, request: true)

        # in case of attribute is not declared on resource
        # do not throw error, return original value without typecast
        return value unless att

        type_name = att[:type]
        if flag == :filterable
          type_name = filters[name][:type]
        end
        type = Graphiti::Types[type_name]
        return if value.nil? && type[:kind] != "array"
        begin
          flag = :read if flag == :readable
          flag = :write if flag == :writable
          flag = :params if [:sortable, :filterable].include?(flag)
          type[flag][value]
        rescue => e
          raise Errors::TypecastFailed.new(self, name, value, e, type_name)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
graphiti-activegraph-0.1.21 lib/graphiti/active_graph/resource.rb
graphiti-activegraph-0.1.20 lib/graphiti/active_graph/resource.rb
graphiti-activegraph-0.1.19 lib/graphiti/active_graph/resource.rb
graphiti-activegraph-0.1.18 lib/graphiti/active_graph/resource.rb