graphql_query_argument 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bafa6da3f6713eee15690ff2d483e6e5681c1c13781f465cfb67b8edb8b0546
4
- data.tar.gz: 395735019ff60d6c11a7c73e63d95219f48152816ff27e2a85d3e9fded700d5f
3
+ metadata.gz: 30fa1d9843e491992f2505e94eed4496300257303878d00c320ed3d0117d3e96
4
+ data.tar.gz: bb067d7c66aa00191b04c98724ce640d1d6baff1fe1e7b2861d59d356188dc07
5
5
  SHA512:
6
- metadata.gz: 6bbacc624e7f88acb5b1eb31e0435310a05c5b78cbe817132ab11def16a68d08c4939bd32b3b1df72143fb44d9a917953480df369358dbb8c0cb715ae9ed056a
7
- data.tar.gz: 6602a3415b97045f7b965fa6d815b0bc9495a928226a443ea7e1f42d332e3f49dfb9b01eaa8ac587d8d2ac8705dfad3177115427ce07866f1896468ed84fdaaf
6
+ metadata.gz: 8896bbc0007c24e03f3c6c0a21858471d8cdabbe48e7a5c818f9ecf27299e07e2dec3b857694b66cb3716266112ee70bada3456b6d036b72a60fec30f7e96b7a
7
+ data.tar.gz: 6d574c85f1404925c4af46525c0f849990e6b958de6f8773e1509b86d945406430a8c7ff4eb7eb9c6b9e7d9fb8f3c4d8cbe554c704984f46c6ccaf7e7e68f2f3
data/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # GraphQL::QueryArgument
2
+ A simple query argument for resolver module
3
+
4
+ ## Installation
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'graphql_query_argument'
9
+ ```
10
+
11
+ And then execute:
12
+ ```bash
13
+ $ bundle
14
+ ```
15
+
16
+ Or install it yourself as:
17
+ ```bash
18
+ $ gem install graphql_query_argument
19
+ ```
20
+ ## Usage
21
+ ```ruby
22
+ require 'graphql/query_argument'
23
+
24
+ # In your field resolver
25
+ # `Products < Resolvers::Base` & a CategoryQueryInputs & a `CompanyType` GraphQL type:
26
+ #
27
+ module Resolvers
28
+ class Products < Resolvers::Base
29
+ include GraphQL::QueryArgument
30
+
31
+ type [Types::ProductType], null: false
32
+
33
+ query_argument :name, type: [String], required: false do |scope, value|
34
+ scope.where(name: value)
35
+ end
36
+ query_argument :categories, type: Types::CategoryQueryInputs, required: false do |scope, value|
37
+ scope.joins(:categories).where(categieies: { **value })
38
+ end
39
+ end
40
+ end
41
+ ```
42
+ ```ruby
43
+ # `CompanyType`
44
+ class CompanyType < Types::BaseObject
45
+ field :products, null: false, resolver: Resolvers::Products
46
+
47
+ def products
48
+ object.products
49
+ end
50
+ end
51
+ ```
52
+ ```ruby
53
+ # `CategoryQueryInputs`
54
+ module Types
55
+ class CategoryQueryInputs < Types::BaseInputObject
56
+ argument :name, [String], required: false
57
+ end
58
+ end
59
+ ```
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'graphql_query_argument'
3
- s.version = '0.0.1'
3
+ s.version = '0.0.2'
4
4
  s.summary = 'Graphql query argument'
5
5
  s.description = 'For Graphql custom query argument module'
6
6
  s.authors = ['Shang']
@@ -0,0 +1,5 @@
1
+ module GraphQL
2
+ module QueryArgument
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,41 @@
1
+ module GraphQL
2
+ module QueryArgument
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ base.instance_eval do
6
+ @config = {
7
+ query_arguments: {}
8
+ }
9
+ end
10
+ end
11
+
12
+ def initialize(object:, context:, field:)
13
+ puts field.name.class
14
+ @scope = context[:current_object].send(field.name.underscore)
15
+ @query_arguments = self.class.config[:query_arguments]
16
+ super object: object, context: context, field: field
17
+ end
18
+
19
+ def resolve(**args)
20
+ args.inject(@scope) do |scope, (name, value)|
21
+ return scope unless @query_arguments[name]
22
+
23
+ instance_exec scope, value, &@query_arguments[name]
24
+ end
25
+ end
26
+
27
+ module ClassMethods
28
+ attr_reader :config
29
+
30
+ def inherited(base)
31
+ base.instance_variable_set '@config', @config
32
+ super(base)
33
+ end
34
+
35
+ def query_argument(name, options = {}, &block)
36
+ argument(name, options)
37
+ config[:query_arguments][name] = block
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe GraphQL::QueryArgument do
4
+ class GraphQLSchema < GraphQL::Schema
5
+ class QueryType < GraphQL::Schema::Object
6
+ field :products, resolver: ProductsResolver
7
+
8
+ def products
9
+ [OpenStruct.new(name: 'Product A'),
10
+ OpenStruct.new(name: 'Product B'),
11
+ OpenStruct.new(name: 'Product C')]
12
+ end
13
+ end
14
+
15
+ query(QueryType)
16
+ end
17
+
18
+ context 'query products' do
19
+ it 'returns specify products' do
20
+ query_str = <<-GRAPHQL
21
+ query {
22
+ products(names: ["Product B", "Product C"]) {
23
+ name
24
+ }
25
+ }
26
+ GRAPHQL
27
+ result = GraphQLSchema.execute(query_str)
28
+ expect(result['data']['products']).to eq([
29
+ { 'name' => 'Product B' }, { 'name' => 'Product C'}
30
+ ])
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ require 'graphql'
2
+ require 'graphql/query_argument'
3
+ require 'support/graphql_schema'
4
+
5
+ class String
6
+ def underscore
7
+ word = self.dup
8
+ word.gsub!(/::/, '/')
9
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
10
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
11
+ word.tr!("-", "_")
12
+ word.downcase!
13
+ word
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ require 'graphql'
2
+ require 'graphql/query_argument'
3
+
4
+ class ProductType < GraphQL::Schema::Object
5
+ field :id, ID
6
+ field :name, String
7
+
8
+ def name
9
+ object.name
10
+ end
11
+ end
12
+
13
+ class ProductsResolver < GraphQL::Schema::Resolver
14
+ include GraphQL::QueryArgument
15
+
16
+ type [ProductType], null: true
17
+
18
+ query_argument :names, type: [String], required: false do |scope, value|
19
+ scope.select { |product| value.include?(product.name) }
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_query_argument
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shang
@@ -44,9 +44,13 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
+ - README.md
47
48
  - graphql_query_argument.gemspec
48
- - lib/graphql/resolvers/query_argument.rb
49
- - lib/graphql/resolvers/query_argument/version.rb
49
+ - lib/graphql/query_argument.rb
50
+ - lib/graphql/query_argument/version.rb
51
+ - spec/graphql/query_argument_spec.rb
52
+ - spec/spec_helper.rb
53
+ - spec/support/graphql_schema.rb
50
54
  homepage: https://github.com/shangweilin7/graphql_query_argument
51
55
  licenses:
52
56
  - MIT
@@ -1,7 +0,0 @@
1
- module GraphQL
2
- module Resolvers
3
- module QueryArgument
4
- VERSION = '0.0.1'
5
- end
6
- end
7
- end
@@ -1,42 +0,0 @@
1
- module Graphql
2
- module Resolvers
3
- module QueryArgument
4
- def self.included(base)
5
- base.extend ClassMethods
6
- base.instance_eval do
7
- @config = {
8
- query_arguments: {}
9
- }
10
- end
11
- end
12
-
13
- def initialize(object:, context:, field:)
14
- @scope = context[:current_object].send(field.name.underscore)
15
- @query_arguments = self.class.config[:query_arguments]
16
- super object: object, context: context, field: field
17
- end
18
-
19
- def resolve(**args)
20
- args.inject(@scope) do |scope, (name, value)|
21
- return scope unless @query_arguments[name]
22
-
23
- instance_exec scope, value, &@query_arguments[name]
24
- end
25
- end
26
-
27
- module ClassMethods
28
- attr_reader :config
29
-
30
- def inherited(base)
31
- base.instance_variable_set '@config', @config
32
- super(base)
33
- end
34
-
35
- def query_argument(name, options = {}, &block)
36
- argument(name, options)
37
- config[:query_arguments][name] = block
38
- end
39
- end
40
- end
41
- end
42
- end