graphiti_gql 0.2.33 → 0.2.34

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: 19b3af9f398319f335154dfffbf0eb8b13987a7ce7860bfaf273b18361715a57
4
- data.tar.gz: e2c2e261a65e161817ed1f1a6aca5d07324dce1df984e37c2a40c18694d6fc27
3
+ metadata.gz: 389d9a348fca14259146eef09736c6a7358ff7ad824282fe6c838ee61ebf1ca0
4
+ data.tar.gz: 50dc70797c83ae98540c902df942487c3a3b4f183243331a51b44adc19064baf
5
5
  SHA512:
6
- metadata.gz: 9f0cc9d62355cbf98382b1af4f0085fca190a19546be02d8d17e4bd7d93f548964f5716a13f2acc47083484ea386df604e845776bfd76dc2dbd22a44898d1605
7
- data.tar.gz: 68f697d8c75a8787a9ee23dd0263a96df8bfd70e873015e67f43c34ec7d84e9bf1b07e51766ae550fb503d19cd810a9b014d273902ad0cce2e65dc054d87bb5e
6
+ metadata.gz: c58333b9a7bbd43a68e27974d6a6cfdfdb9087e97ed5ca42d37be102995c15470f4279cd6499eef3ef7157f648dd8749e3df7d8921277139cbef39cd4bbaa34a
7
+ data.tar.gz: 378e41e41e6c1aa19b65274f29233aec4371e9cf44fd3dcf9dbf17404029230454ca8042bde7341177fe6349b9cc7233332546f4c10cae7b4ff4563176a9697d
@@ -2,10 +2,7 @@ module GraphitiGql
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace GraphitiGql
4
4
 
5
- config.to_prepare do
6
- Dir.glob("#{Rails.root}/app/resources/**/*").each { |f| require(f) }
7
- GraphitiGql.schema!
8
-
5
+ config.after_initialize do
9
6
  log_level = ENV.fetch('GRAPHITI_LOG_LEVEL', '1').to_i
10
7
  log_activerecord = false
11
8
  if log_level == -1 && defined?(ActiveRecord)
@@ -128,13 +128,21 @@ module GraphitiGql
128
128
  super
129
129
  # default behavior is to force single: true
130
130
  filters[name][:single] = false if boolean_array
131
-
131
+
132
132
  opts = args.extract_options!
133
133
  if opts[:if]
134
134
  attributes[name][:filterable] = opts[:if]
135
135
  end
136
136
  end
137
137
 
138
+ def sort(name, *args, &blk)
139
+ super
140
+ opts = args.extract_options!
141
+ if opts[:schema] == false
142
+ config[:sorts][name][:schema] = false
143
+ end
144
+ end
145
+
138
146
  def filter_group(filter_names, *args)
139
147
  if filter_names.blank?
140
148
  config[:grouped_filters] = {}
@@ -297,7 +305,7 @@ module GraphitiGql
297
305
  attr_reader :join_table_alias, :edge_magic, :edge_resource
298
306
  end
299
307
  end
300
-
308
+
301
309
  def initialize(name, opts = {})
302
310
  @join_table_alias = opts[:join_table_alias]
303
311
  @edge_magic = opts[:edge_magic] == false ? false : true
@@ -439,7 +447,7 @@ module GraphitiGql
439
447
  clause = {attribute => value}
440
448
  is_not ? scope.where.not(clause) : scope.where(clause)
441
449
  end
442
-
450
+
443
451
  def sanitized_like_for(scope, attribute, value, &block)
444
452
  escape_char = "\\"
445
453
  column = column_for(scope, attribute)
@@ -501,7 +509,7 @@ module GraphitiGql
501
509
  hash
502
510
  end
503
511
  end
504
-
512
+
505
513
  Graphiti::Query.send(:prepend, QueryExtras)
506
514
  module ScopeExtras
507
515
  def initialize(object, resource, query, opts = {})
@@ -607,4 +615,4 @@ module Graphiti
607
615
  level ||= :debug
608
616
  logger.send(level, colored)
609
617
  end
610
- end
618
+ end
@@ -14,7 +14,7 @@ module GraphitiGql
14
14
 
15
15
  def apply(field)
16
16
  define_filters(field) unless @resource.filters.empty?
17
- define_sorts(field) unless @resource.sorts.empty?
17
+ define_sorts(field) unless sorts.empty?
18
18
  end
19
19
 
20
20
  private
@@ -39,7 +39,7 @@ module GraphitiGql
39
39
  required = true if @resource.grouped_filters.any? && !@sideload
40
40
  field.argument :filter, filter_type, required: required
41
41
  end
42
-
42
+
43
43
  def generate_filter_type(field)
44
44
  type_name = "#{registry.key_for(@resource)}Filter"
45
45
  if (registered = registry[type_name])
@@ -65,7 +65,7 @@ module GraphitiGql
65
65
  registry[type_name] = { type: klass }
66
66
  klass
67
67
  end
68
-
68
+
69
69
  def generate_filter_attribute_type(type_name, filter_name, filter_config)
70
70
  klass = Class.new(GraphQL::Schema::InputObject)
71
71
  filter_graphql_name = "#{type_name}Filter#{filter_name.to_s.camelize(:lower)}"
@@ -82,13 +82,13 @@ module GraphitiGql
82
82
  if (allowlist = filter_config[:allow])
83
83
  type = define_allowlist_type(filter_graphql_name, allowlist)
84
84
  end
85
-
85
+
86
86
  type = [type] unless !!filter_config[:single]
87
87
  klass.argument operator, type, required: false
88
88
  end
89
89
  klass
90
90
  end
91
-
91
+
92
92
  def define_allowlist_type(filter_graphql_name, allowlist)
93
93
  name = "#{filter_graphql_name}Allow"
94
94
  if (registered = registry[name])
@@ -103,6 +103,12 @@ module GraphitiGql
103
103
  klass
104
104
  end
105
105
 
106
+ def sorts
107
+ @resource.sorts.reject do |key, value|
108
+ value[:schema] == false
109
+ end
110
+ end
111
+
106
112
  def define_sorts(field)
107
113
  sort_type = generate_sort_type
108
114
  field.argument :sort, [sort_type], required: false
@@ -116,13 +122,13 @@ module GraphitiGql
116
122
  klass = Class.new(GraphQL::Schema::Enum) {
117
123
  graphql_name(type_name)
118
124
  }
119
- @resource.sorts.each_pair do |name, config|
125
+ sorts.each_pair do |name, config|
120
126
  klass.value name.to_s.camelize(:lower), "Sort by #{name}"
121
127
  end
122
128
  registry[type_name] = { type: klass }
123
129
  klass
124
130
  end
125
-
131
+
126
132
  def generate_sort_type
127
133
  type_name = "#{registry.key_for(@resource)}Sort"
128
134
  if (registered = registry[type_name])
@@ -139,4 +145,4 @@ module GraphitiGql
139
145
  end
140
146
  end
141
147
  end
142
- end
148
+ end
@@ -102,8 +102,24 @@ module GraphitiGql
102
102
  @resources = resources
103
103
  end
104
104
 
105
+ def self.resource_types!
106
+ resources = Graphiti.resources.reject(&:abstract_class?)
107
+ resources.each { |resource| ResourceType.new(resource).build }
108
+ # add relationships
109
+ registry.resource_types.each do |registered|
110
+ resource, type = registered[:resource], registered[:type]
111
+ ResourceType.add_relationships(resource, type)
112
+ end
113
+ # add_value_objects
114
+ registry.resource_types(value_objects: false).each do |registered|
115
+ resource, type = registered[:resource], registered[:type]
116
+ ResourceType.add_value_objects(resource, type)
117
+ end
118
+ end
119
+
105
120
  def generate
106
- klass = Class.new(::GraphQL::Schema)
121
+ klass = Class.new(::GraphitiGql.config.base_schema || ::GraphQL::Schema)
122
+ # TODO inherit from klass.query if exists
107
123
  klass.query(Query.new(@resources).build)
108
124
  klass.use(GraphQL::Batch)
109
125
  klass.connections.add(ResponseShim, Connection)
@@ -1,3 +1,3 @@
1
1
  module GraphitiGql
2
- VERSION = "0.2.33"
2
+ VERSION = "0.2.34"
3
3
  end
data/lib/graphiti_gql.rb CHANGED
@@ -35,7 +35,10 @@ module GraphitiGql
35
35
  class Error < StandardError; end
36
36
 
37
37
  class Configuration
38
- attr_accessor :exception_handler, :error_handling, :logging
38
+ attr_accessor :base_schema,
39
+ :exception_handler,
40
+ :error_handling,
41
+ :logging
39
42
 
40
43
  def exception_handler
41
44
  @exception_handler ||= ExceptionHandler
@@ -57,7 +60,7 @@ module GraphitiGql
57
60
  end
58
61
 
59
62
  def self.schema
60
- @schema
63
+ @schema ||= schema!
61
64
  end
62
65
 
63
66
  def self.config
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiti_gql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.33
4
+ version: 0.2.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-05 00:00:00.000000000 Z
11
+ date: 2022-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql