module GraphqlConnector::ServiceClassable::Queryable

Module that allows to build query methods within the context of service class

Constants

CONDITIONS

Public Instance Methods

add_mutation(params: [], returns:, **method_to_query) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 41
def add_mutation(params: [], returns:, **method_to_query)
  class_method_name = method_to_query.first[0]
  query_type = method_to_query.first[1]
  ReturnFieldsValidator.validate(returns)
  ClassMethodValidator.validate_class_method(class_method_name, self)
  ClassMethodValidator.validate_element_class_type(query_type, Symbol)

  if params.empty?
    return mutation_method(class_method_name, query_type, returns)
  end

  ParamsValidator.validate(params)
  mutation_keyword_method(class_method_name, query_type, params, returns)
end
add_query(params: [], returns:, **method_to_query) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 12
def add_query(params: [], returns:, **method_to_query)
  class_method_name = method_to_query.first[0]
  query_type = method_to_query.first[1]
  ReturnFieldsValidator.validate(returns)
  ClassMethodValidator.validate_class_method(class_method_name, self)
  ClassMethodValidator.validate_element_class_type(query_type, Symbol)

  if params.empty?
    return query_method(class_method_name, query_type, returns)
  end

  ParamsValidator.validate(params)
  query_keyword_method(class_method_name, query_type, params, returns)
end
add_raw_query(params: [], **method_to_raw_query) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 27
def add_raw_query(params: [], **method_to_raw_query)
  class_method_name = method_to_raw_query.first[0]
  query_string = method_to_raw_query.first[1]
  ClassMethodValidator.validate_class_method(class_method_name, self)
  ClassMethodValidator.validate_element_class_type(query_string, String)

  if params.empty?
    return raw_query_method(class_method_name, query_string)
  end

  ParamsValidator.validate(params)
  raw_query_keyword_method(class_method_name, query_string, params)
end

Private Instance Methods

mutation_keyword_method(name, query_type, keywords, return_fields) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 96
      def mutation_keyword_method(name, query_type, keywords, return_fields)
        keywords = [keywords].flatten
        instance_eval <<-METHOD, __FILE__, __LINE__ + 1
          def #{name}(#{keywords.map { |keyword| "#{keyword}:" }.join(', ')})
            http_client.mutation("#{query_type}",
                                  #{CONDITIONS},
                                  #{return_fields.to_a})
          end
        METHOD
      end
mutation_method(class_method_name, query_type, return_fields) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 90
def mutation_method(class_method_name, query_type, return_fields)
  define_singleton_method class_method_name do
    http_client.mutation(query_type, {}, return_fields.to_a)
  end
end
query_keyword_method(name, query_type, keywords, return_fields) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 70
      def query_keyword_method(name, query_type, keywords, return_fields)
        keywords = [keywords].flatten
        instance_eval <<-METHOD, __FILE__, __LINE__ + 1
          def #{name}(#{keywords.map { |keyword| "#{keyword}:" }.join(', ')})
            http_client.query("#{query_type}",
                              #{CONDITIONS},
                              #{return_fields.to_a})
          end
        METHOD
      end
query_method(class_method_name, query_type, return_fields) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 58
def query_method(class_method_name, query_type, return_fields)
  define_singleton_method class_method_name do
    http_client.query(query_type, {}, return_fields.to_a)
  end
end
raw_query_keyword_method(name, query_string, keywords) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 81
      def raw_query_keyword_method(name, query_string, keywords)
        keywords = [keywords].flatten
        instance_eval <<-METHOD, __FILE__, __LINE__ + 1
          def #{name}(#{keywords.map { |keyword| "#{keyword}:" }.join(', ')})
            http_client.raw_query("#{query_string}", variables: #{CONDITIONS})
          end
        METHOD
      end
raw_query_method(class_method_name, query_string) click to toggle source
# File lib/graphql_connector/service_classable/queryable.rb, line 64
def raw_query_method(class_method_name, query_string)
  define_singleton_method class_method_name do
    http_client.raw_query(query_string)
  end
end