GraphQL :: Client :: DynamicQueryError Ожидаемое определение, которое будет назначено статической константе - PullRequest
0 голосов
/ 17 мая 2018

Как правильно сделать ShopifyAPI :: GraphQL метод в Rails.

Попытка кода ниже в rails console работает нормально. Но когда я попытался поместить этот код и создать метод в контроллере / модели Rails, я получил:

GraphQL::Client::DynamicQueryError Expected definition to be assigned to a static constant

shopify_client
client = ShopifyAPI::GraphQL.new

SHOP_NAME_QUERY = client.parse <<-'GRAPHQL'
 {
  shop {
   name
  }
 }
GRAPHQL

result = client.query(SHOP_NAME_QUERY)

Я пытался поиграть с variables следующий https://github.com/github/graphql-client/blob/master/guides/dynamic-query-error.md но безуспешно .

Как создать метод с использованием вышеуказанной функции, который не будет возвращать вышеупомянутую ошибку.

Пример метода модели :

def trial
  shopify_client
  client = ShopifyAPI::GraphQL.new
  shop_query = client.parse <<-'GRAPHQL'
    {
     shop {
      name
     }
    }
  GRAPHQL

  client.query(shop_query)
end

В Gemfile : gem 'shopify_api', git: 'https://github.com/Shopify/shopify_api', branch: 'graphql-support'

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Наконец-то получил один рабочий .

# On top of my Rails Controller || Model
SHOPIFY_CLIENT = shopify_client # (hash data e.g. {"User-Agent"=>"xxx", "X-Shopify-Access-Token"=>"xxx"})
CLIENT = ShopifyAPI::GraphQL.new

SHOP_NAME_QUERY = CLIENT.parse <<-'GRAPHQL'
  {
    shop{
      name
    }
  }
GRAPHQL

# ex. method
def get_info
   CLIENT.query(SHOP_NAME_QUERY).data
end

Теперь я могу продолжить работу с другими запросами ... Надеюсь, это кому-нибудь поможет :)

0 голосов
/ 04 августа 2018

У меня была похожая проблема несколько дней назад, мне пришлось использовать const_set для динамического задания константы.Итак, используя ваш пример, который переведет в

class Foo
  def trial
   #code to initialize shopify session here 
   set_query
   client.query(ProductQuery)
  end

  private 

  def set_query 
     query = <<-GRAPHQL
        {
          shop {
          name
        }
      }
    GRAPHQL
    Kernel.const_set(:ProductQuery, client.parse(query))
  end

  def client
    ShopifyAPI::GraphQL.new
  end
end

Функция GraphQL от Shopify использует Ruby-клиент Github GraphQL , который требует, чтобы запрос определялся в константе.Кроме того, shopify_api gem предписывает существование сеанса Shopify, прежде чем вы сможете использовать этот метод, в зависимости от вашей настройки у вас может не быть определенного сеанса, если константа находится в теле класса, поскольку она выполняется сначала интерпретатором ruby.Обойти это можно, установив константу динамически

0 голосов
/ 17 мая 2018

Работает ли это, если вы используете:

class MyModel
  ShopQuery = ShopifyAPI::GraphQL.new.parse <<-'GRAPHQL'
  {
    shop {
      name
      }
  }
  GRAPHQL

  # ....
  def trial
    shopify_client

    ShopifyAPI::GraphQL.new.query(ShopQuery)
  end

end

Примечание: shop_query -> ShopQuery, потому что вам нужно использовать константу.

...