Sha256: 83b68eff7c0ea20a85e4eac563011d4098efbd6534d32b34ca39ed1de1726ae6
Contents?: true
Size: 1.45 KB
Versions: 2
Compression:
Stored size: 1.45 KB
Contents
module Graphlient class Query FRAGMENT_DEFITION = /___(?<const>[A-Z][a-zA-Z0-9_]*(__[A-Z][a-zA-Z0-9_]*)*)/ def initialize(&block) @indents = 0 @query_str = '' @variables = [] evaluate(&block) end private def evaluate(&block) @last_block = block || self (@context ||= {})[@last_block] ||= @last_block.binding instance_eval(&block) end def resolve_fragment_constant(value) return nil unless (match = value.to_s.match(FRAGMENT_DEFITION)) raw_const = match[:const].gsub('__', '::') @context[@last_block].eval(raw_const).tap do |const| msg = "Expected constant #{raw_const} to be GraphQL::Client::FragmentDefinition. Given #{const.class}" raise Graphlient::Errors::Error, msg unless const.is_a? GraphQL::Client::FragmentDefinition end end def append_node(node, args, arg_processor: nil, &block) node = "...#{resolve_fragment_constant(node)}".to_sym if node.to_s.start_with?('___') # add field @query_str << "\n#{indent}#{node}" # add filter hash_arguments = hash_arg(args) @query_str << "(#{args_str(hash_arguments, arg_processor: arg_processor)})" if hash_arguments if block_given? @indents += 1 @query_str << '{' evaluate(&block) @query_str << '}' @indents -= 1 end @query_str << "\n#{indent}" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ecoportal-api-graphql-0.1.10 | lib/ecoportal/api/common/graphql/patches/query.rb |
ecoportal-api-graphql-0.1.9 | lib/ecoportal/api/common/graphql/patches/query.rb |