Как я могу построить GQL из ruby га sh? - PullRequest
1 голос
/ 30 апреля 2020

Я создаю rspe c помощник для проверки моих запросов в GraphQL.

Пока это мой помощник:

def mutation_params(name, attributes:, return_types:)
  {
    query:
      <<~GQL
          mutation {
          #{name}(
            input: { attributes: #{attributes} })
            #{return_types}
        }
      GQL
  }
end    

, и я должен объявить attributes следующим образом:

let(:attributes) do
  <<~GQL
    {
      email: "#{email_param}",
      password: "#{password_param}"
    }
  GQL
end

Теперь я хочу знать, что я может сделать так, чтобы можно было просто передать мой arguments как ha sh и заставить метод mutations_params построить GQL из этого ha sh, перебирая их.

let(:attributes) do
  {
    email: email_param,
    password: password_param
  }
end

Что-то вроде:

def mutation_params(name, attributes:, return_types)
  gql_attributes = <<~GQL 
                    { 
                    }
                  GQL
  attributes.each do |key, value|
    gql_attributes merge with 
    <<~GQL
        "#{key}": "#{value}"
    GQL
  end

  {
  query:
    <<~GQL
        mutation {
        #{name}(
          input: { attributes: #{gql_attributes} })
          #{return_types}
      }
    GQL
  }
end

, но это, очевидно, не работает. Я думаю, что моя проблема в том, что я не совсем понимаю, что это за <<~GQL и как им манипулировать.

1 Ответ

1 голос
/ 30 апреля 2020

Вы ищете волнистое наследство c, которое было введено в Ruby 2.3. Это похоже на нормальное наследство c, но оно оставляет за собой ведущие отступы. https://ruby-doc.org/core-2.5.0/doc/syntax/literals_rdoc.html

Другими словами, это просто строка! Бит GQL является произвольным, но это хороший способ сообщить о цели heredo c.

. Вы можете написать такой помощник, чтобы превращать хэши в строки GraphQL

def hash_to_mutation(hash)
  attr_gql_str = attributes.map{|k,v| "#{k}: #{v.inspect}"}.join(", ")
  " { #{attr_gql_str} } "
end

Тогда предположим, что атрибуты это ха sh, как в вашем примере вы могли бы просто

def mutation_params(name, attributes:, return_types:)
  {
    query:
      <<~GQL
          mutation {
          #{name}(
            input: { attributes: #{hash_to_gql(attributes)} })
            #{return_types}
        }
      GQL
  }
end  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...