--- !ruby/object:Gem::Specification name: wcc-contentful-graphql version: !ruby/object:Gem::Version version: 1.0.0.pre.rc2 platform: ruby authors: - Watermark Dev autorequire: bindir: bin cert_chain: [] date: 2021-02-10 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: coveralls requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: dotenv requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '2.2' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '2.2' - !ruby/object:Gem::Dependency name: httplog requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.0' - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '10.0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '10.0' - !ruby/object:Gem::Dependency name: rspec requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '3.0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '3.0' - !ruby/object:Gem::Dependency name: rspec_junit_formatter requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.3.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.3.0 - !ruby/object:Gem::Dependency name: rubocop requirement: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: '0.68' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: '0.68' - !ruby/object:Gem::Dependency name: simplecov requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.16.1 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.16.1 - !ruby/object:Gem::Dependency name: webmock requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '3.0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '3.0' - !ruby/object:Gem::Dependency name: guard requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '2.14' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '2.14' - !ruby/object:Gem::Dependency name: guard-rspec requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '4.7' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '4.7' - !ruby/object:Gem::Dependency name: guard-rubocop requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.3.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.3.0 - !ruby/object:Gem::Dependency name: guard-shell requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.7.1 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.7.1 - !ruby/object:Gem::Dependency name: generator_spec requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.9.4 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.9.4 - !ruby/object:Gem::Dependency name: sqlite3 requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.3.6 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.3.6 - !ruby/object:Gem::Dependency name: timecop requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.9.1 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 0.9.1 - !ruby/object:Gem::Dependency name: graphql requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.7' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.7' - !ruby/object:Gem::Dependency name: wcc-contentful requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.0.0.pre.rc2 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: 1.0.0.pre.rc2 description: GraphQL interface over WCC::Contentful store email: - dev@watermark.org executables: [] extensions: [] extra_rdoc_files: [] files: - ".rspec" - Guardfile - README.md - Rakefile - doc - lib/wcc/contentful/ext/services.rb - lib/wcc/contentful/graphql.rb - lib/wcc/contentful/graphql/builder.rb - lib/wcc/contentful/graphql/federation.rb - lib/wcc/contentful/graphql/federation/builds_arguments.rb - lib/wcc/contentful/graphql/federation/namespaces_types.rb - lib/wcc/contentful/graphql/field_helper.rb - lib/wcc/contentful/graphql/types.rb - lib/wcc/contentful/graphql/version.rb - wcc-contentful-graphql.gemspec homepage: https://github.com/watermarkchurch/wcc-contentful/wcc-contentful-graphql licenses: - MIT metadata: documentation_uri: https://watermarkchurch.github.io/wcc-contentful/1.0/wcc-contentful-graphql post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '2.3' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">" - !ruby/object:Gem::Version version: 1.3.1 requirements: [] rubyforge_project: rubygems_version: 2.7.6.2 signing_key: specification_version: 4 summary: '[![Gem Version](https://badge.fury.io/rb/wcc-contentful-graphql.svg)](https://rubygems.org/gems/wcc-contentful-graphql) [![Build Status](https://travis-ci.org/watermarkchurch/wcc-contentful.svg?branch=master)](https://travis-ci.org/watermarkchurch/wcc-contentful) [![Coverage Status](https://coveralls.io/repos/github/watermarkchurch/wcc-contentful/badge.svg?branch=master)](https://coveralls.io/github/watermarkchurch/wcc-contentful?branch=master) # WCC::Contentful::Graphql This gem creates a GraphQL schema over your configured [data store](https://www.rubydoc.info/gems/wcc-contentful#Store_API). You can execute queries against this GraphQL schema to get all your contentful data. Under the hood, queries are executed against your backing store to resolve all the requested data. ### Important note! The GraphQL schema currently does not utilize the "include" parameter, so it is a very good idea to configure your store to either `:direct` or `:lazy_sync`. If you don''t do this, you will see a lot of requests to Contentful for specific entries by ID as the GraphQL resolver walks all your links! [More info on configuration can be found here](https://www.rubydoc.info/gems/wcc-contentful/WCC%2FContentful%2FConfiguration:store=) ## Usage Querying directly within your app ```rb schema = WCC::Contentful::Services.instance.graphql_schema => # result = schema.execute(<<~QUERY) { allConference(filter: { code: { eq: "CLC2020" } }) { title startDate code } } QUERY GET https://cdn.contentful.com/spaces/xxxxx/entries?content_type=conference&fields.code.en-US=CLC2020&locale=%2A Status 200 => #{"allConference"=>[{"title"=>"Church Leaders Conference", "startDate"=>"2020-04-28", "code"=>"CLC2020"}]}}> result.to_h => {"data"=> {"allConference"=> [{"title"=>"Church Leaders Conference", "startDate"=>"2020-04-28", "code"=>"CLC2020"}]}} ``` Setting up a controller to respond to GraphQL queries ```rb class Api::GraphqlController < Api::BaseController include WCC::Contentful::ServiceAccessors skip_before_action :authenticate_user!, only: :query def query result = graphql_schema.execute( params[:query], variables: params[:variables] ) render json: result end end ``` ## Advanced Configuration ### Including your Contentful schema inside another GraphQL schema ```rb QueryType = GraphQL::ObjectType.define do # extend this to get ''schema_stitch'' extend WCC::Contentful::Graphql::Federation name ''RootQuery'' field ''a'', types.String schema_stitch(WCC::Contentful::Services.instance.graphql_schema, namespace: ''contentful'') end Schema = GraphQL::Schema.define do query QueryType resolve_type ->(type, obj, ctx) { raise StandardError, "Cannot resolve type #{type} #{obj.inspect} #{ctx.inspect}" } end File.write(''schema.gql'', GraphQL::Schema::Printer.print_schema(Schema)) ``` results in... ```gql schema { query: RootQuery } type Contentful { """ Find a Asset """ Asset(_content_type: Contentful_StringQueryOperatorInput, description: Contentful_StringQueryOperatorInput, id: ID, title: Contentful_StringQueryOperatorInput): Contentful_Asset """ Find a CallToAction """ CallToAction(_content_type: Contentful_StringQueryOperatorInput, id: ID, internalTitle: Contentful_StringQueryOperatorInput, style: Contentful_StringQueryOperatorInput, text: Contentful_StringQueryOperatorInput, title: Contentful_StringQueryOperatorInput): Contentful_CallToAction ... ``` ### Limiting the schema to only a few fields ```rb store = WCC::Contentful::Services.instance.store builder = WCC::Contentful::Graphql::Builder.new( WCC::Contentful.types, store, ).configure do root_types.slice!(''conference'') schema_types[''conference''].define do # change the types of some fields, undefine fields, etc... end end @schema = builder.build_schema ```' test_files: []