graphiform 0.2.4 → 0.2.9

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: ad1663df91a2cb043ecca554ce73964f977b6a5af2878334df72105177bddb04
4
- data.tar.gz: f70a256ef76ce3ba4d91d25d2194bc1481d3c89e601a1b48a9f1ef6fe09bafd4
3
+ metadata.gz: 841f7ddfa6fd9f56cda166df64e77ec0d94fac684c872ce44b5fc024afe3d433
4
+ data.tar.gz: 10c339a1f949bf05dfa2dcf94a8bf3332f3a1c468699c605ab8ac60966644fd0
5
5
  SHA512:
6
- metadata.gz: 2e77bbf7632faeb956acd2f7aa067428b7d2375f3c96b1ca71af95bd1d5ac12b5a8aa2d4229a9718c5dce7b566cd077f1018c84b5a251969a6a6579654cf07bb
7
- data.tar.gz: 8ecfa9e57aa9b7692236114ff695aa5fad197a7c608127e93fca500b1a94a7ff7156cd093f1ac2a5d28438f93b86e4d1cdda4deb61186a5802212df216434d29
6
+ metadata.gz: e72009f747cf7bf8b6655940eb443900cf2c08e419cb25e1786aafc1b36347fb0f6916bc7d837a82681e46280a6bc5b6fe617b80ba081556f7acf319f01ed40b
7
+ data.tar.gz: d13b40bf891ccad27f83e7a23c55b20b5c94c594bc83d28ee07b762aca7a5740030aeaec20789d2cccc590ca701a566e0257555d5e0c2ee67fe02608e61c25ec
data/lib/graphiform.rb CHANGED
@@ -5,6 +5,7 @@ require 'graphiform/skeleton'
5
5
  require 'graphiform/active_record_helpers'
6
6
  require 'graphiform/core'
7
7
  require 'graphiform/fields'
8
+ require 'graphiform/sort_enum'
8
9
 
9
10
  module Graphiform
10
11
  def self.included(base)
@@ -52,6 +52,15 @@ module Graphiform
52
52
  end
53
53
  end
54
54
 
55
+ def graphql_grouping
56
+ local_demodulized_name = demodulized_name
57
+ Helpers.get_const_or_create(local_demodulized_name, ::Inputs::Groupings) do
58
+ Class.new(::Inputs::Groupings::BaseGrouping) do
59
+ graphql_name "#{local_demodulized_name}Grouping"
60
+ end
61
+ end
62
+ end
63
+
55
64
  def graphql_edge
56
65
  Helpers.get_const_or_create("#{demodulized_name}Edge", ::Types) do
57
66
  node_type = graphql_type
@@ -99,9 +108,10 @@ module Graphiform
99
108
  @value
100
109
  end
101
110
 
102
- def apply_built_ins(where: nil, sort: nil, **)
111
+ def apply_built_ins(where: nil, sort: nil, group: nil, **)
103
112
  @value = @value.apply_filters(where.to_h) if where.present? && @value.respond_to?(:apply_filters)
104
113
  @value = @value.apply_sorts(sort.to_h) if sort.present? && @value.respond_to?(:apply_sorts)
114
+ @value = @value.apply_groupings(group.to_h) if group.present? && @value.respond_to?(:apply_groupings)
105
115
 
106
116
  @value
107
117
  end
@@ -115,6 +125,7 @@ module Graphiform
115
125
 
116
126
  local_graphql_filter = graphql_filter
117
127
  local_graphql_sort = graphql_sort
128
+ local_graphql_grouping = graphql_grouping
118
129
 
119
130
  model = self
120
131
  @base_resolver.class_eval do
@@ -126,6 +137,7 @@ module Graphiform
126
137
 
127
138
  argument :where, local_graphql_filter, required: false
128
139
  argument :sort, local_graphql_sort, required: false unless local_graphql_sort.arguments.empty?
140
+ argument :group, local_graphql_grouping, required: false unless local_graphql_grouping.arguments.empty?
129
141
  end
130
142
  end
131
143
 
@@ -21,6 +21,7 @@ module Graphiform
21
21
 
22
22
  graphql_add_scopes_to_filter(name, as || name)
23
23
  graphql_field_to_sort(name, as || name)
24
+ graphql_field_to_grouping(name, as || name)
24
25
  end
25
26
 
26
27
  def graphql_writable_field(
@@ -120,9 +121,11 @@ module Graphiform
120
121
  type = association_def.klass.graphql_filter
121
122
  end
122
123
 
123
- non_sort_by_scopes = added_scopes.select { |scope_def| !scope_def.options || scope_def.options[:type] != :sort }
124
+ filter_only_by_scopes = added_scopes.select do |scope_def|
125
+ !scope_def.options || scope_def.options[:type].blank? || scope_def.options[:type] == :enum
126
+ end
124
127
 
125
- non_sort_by_scopes.each do |added_scope|
128
+ filter_only_by_scopes.each do |added_scope|
126
129
  scope_argument_type = type || added_scope.options[:argument_type]
127
130
  if added_scope.options[:type] == :enum
128
131
  enum = graphql_create_enum(name)
@@ -157,7 +160,7 @@ module Graphiform
157
160
  column_def = column(as || name)
158
161
  association_def = association(as || name)
159
162
 
160
- type = ::Enums::Sort if column_def.present?
163
+ type = ::Graphiform::SortEnum if column_def.present?
161
164
  type = association_def.klass.graphql_sort if Helpers.association_arguments_valid?(association_def, :graphql_sort)
162
165
 
163
166
  return if type.blank?
@@ -175,6 +178,28 @@ module Graphiform
175
178
  end
176
179
  end
177
180
 
181
+ def graphql_field_to_grouping(name, as)
182
+ column_def = column(as || name)
183
+ association_def = association(as || name)
184
+
185
+ type = GraphQL::Types::Boolean if column_def.present?
186
+ type = association_def.klass.graphql_grouping if Helpers.association_arguments_valid?(association_def, :graphql_grouping)
187
+
188
+ return if type.blank?
189
+
190
+ local_graphql_grouping = graphql_grouping
191
+
192
+ local_graphql_grouping.class_eval do
193
+ argument(
194
+ name,
195
+ type,
196
+ required: false,
197
+ as: as,
198
+ method_access: false
199
+ )
200
+ end
201
+ end
202
+
178
203
  def graphql_add_field_to_type(
179
204
  field_name,
180
205
  type,
@@ -45,6 +45,14 @@ module Graphiform
45
45
  Class.new(::GraphQL::Schema::InputObject)
46
46
  end
47
47
 
48
+ Helpers.get_const_or_create('Groupings', ::Inputs) do
49
+ Module.new
50
+ end
51
+
52
+ Helpers.get_const_or_create('BaseGrouping', ::Inputs::Groupings) do
53
+ Class.new(::GraphQL::Schema::InputObject)
54
+ end
55
+
48
56
  # Resolvers
49
57
  Helpers.get_const_or_create('Resolvers') do
50
58
  Module.new
@@ -80,12 +88,5 @@ module Graphiform
80
88
  Helpers.get_const_or_create('BaseEnum', ::Enums) do
81
89
  Class.new(::GraphQL::Schema::Enum)
82
90
  end
83
-
84
- Helpers.get_const_or_create('Sort', ::Enums) do
85
- Class.new(::Enums::BaseEnum) do
86
- value 'ASC', 'Sort results in ascending order'
87
- value 'DESC', 'Sort results in descending order'
88
- end
89
- end
90
91
  end
91
92
  end
@@ -0,0 +1,8 @@
1
+ require 'graphql'
2
+
3
+ module Graphiform
4
+ class SortEnum < ::GraphQL::Schema::Enum
5
+ value 'ASC', 'Sort results in ascending order'
6
+ value 'DESC', 'Sort results in descending order'
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module Graphiform
2
- VERSION = '0.2.4'.freeze
2
+ VERSION = '0.2.9'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - jayce.pulsipher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2021-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.2.2
47
+ version: 0.2.7
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.2
54
+ version: 0.2.7
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: appraisal
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -124,6 +124,7 @@ files:
124
124
  - lib/graphiform/fields.rb
125
125
  - lib/graphiform/helpers.rb
126
126
  - lib/graphiform/skeleton.rb
127
+ - lib/graphiform/sort_enum.rb
127
128
  - lib/graphiform/version.rb
128
129
  - lib/tasks/graphiform_tasks.rake
129
130
  homepage: https://github.com/3-form/graphiform
@@ -145,7 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
146
  - !ruby/object:Gem::Version
146
147
  version: '0'
147
148
  requirements: []
148
- rubygems_version: 3.0.3
149
+ rubyforge_project:
150
+ rubygems_version: 2.7.7
149
151
  signing_key:
150
152
  specification_version: 4
151
153
  summary: Generate GraphQL types, inputs, resolvers, queries, and connections based