如何访问块内的实例变量

时间:2021-03-30 09:07:11

标签: ruby-on-rails ruby graphql block

我正在使用 gem graphql-client 并希望针对不同的 URL 和令牌使其动态化。

gem 文档和其他地方给出的示例具有硬编码的 URL 和令牌。

我正在尝试访问 @shop.tokendef headers 块内的 GraphQL::Client::HTTP

class Graphql

  def initialize(shop_id)
    @shop = Shop.find_by(shop_id)
  end

  def http
    GraphQL::Client::HTTP.new("http://graphql-swapi.parseapp.com/") do
      def headers(context)
        { 
          "User-Agent": "My Client",
          "Token" : @shop.token
        }
      end
    end
  end

  def client
      schema = GraphQL::Client.load_schema(http{@shop})
      
      @client ||= GraphQL::Client.new(schema: schema, execute: http{@shop}).tap do |client|
        client.allow_dynamic_queries = true
      end
  end

end

Rails 可以通过 yieldself.instance_eval(&block) 提供访问块内的实例变量 但是我们可以在 headers 方法中访问 @shop 来使令牌成为动态的。

graphql-client http 类定义为 here

0 个答案:

没有答案
相关问题