graphiform 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f568ee911e1cd7c4dc85decd8913292d3abcfb2d6038ff247e7a99b861168060
4
- data.tar.gz: 74eef82837648da958be37d5bd8672a03e27b618321a9ef0ea6cf6ee440eb164
3
+ metadata.gz: 526c94bd74004084cc768835a9053591a755f8eccfdebefae6ed4bd44a972399
4
+ data.tar.gz: 913464048608818458ede08de55cfdda5c8cc3cd4855ee98bbb44763d1c1423b
5
5
  SHA512:
6
- metadata.gz: 6e42cf06adab34fb2db93633578b2418b8127749a16b25488fc9a8abd8ea3b2b529d49310b8cb2e437c7f04e1812242b40b530b443131dd8e489b6b85d79cb03
7
- data.tar.gz: 656299a9d3c659197dc5650e93bea7f193043e1f6d2e0690a6e1c9e40a9b83111e3e20560fb8f57bde32860d91bdf63407a7b1ab9afff6a38be2b57fd6f2b916
6
+ metadata.gz: 0e8eb91cf3db0dd05c907b9e2d5cd31d5a262a939c491ae6d7b791b9ac4bee9853c80475d031ee2fdfb38e944ea35fa0d80c2af6bf15061045a9b0c3b674bbec
7
+ data.tar.gz: 9fc6e350f1b2603a3e8205e5ce4d762f7107959040ac9cee557e912c52891cca1e315ffe0a86847538ab14aaa659f9842bcaabde018915ed970240aab619125d
@@ -9,17 +9,18 @@ module Graphiform
9
9
  module ClassMethods
10
10
  def graphql_readable_field(
11
11
  name,
12
+ as: nil,
12
13
  **options
13
14
  )
14
- column_def = column(name)
15
- association_def = association(name)
15
+ column_def = column(as || name)
16
+ association_def = association(as || name)
16
17
 
17
- graphql_add_column_field(name, column_def, **options) if column_def.present?
18
- graphql_add_association_field(name, association_def, **options) if association_def.present?
19
- graphql_add_method_field(name, **options) unless column_def.present? || association_def.present?
18
+ graphql_add_column_field(name, column_def, as: as, **options) if column_def.present?
19
+ graphql_add_association_field(name, association_def, as: as, **options) if association_def.present?
20
+ graphql_add_method_field(name, as: as, **options) unless column_def.present? || association_def.present?
20
21
 
21
- graphql_add_scopes_to_filter(name)
22
- graphql_field_to_sort(name)
22
+ graphql_add_scopes_to_filter(name, as || name)
23
+ graphql_field_to_sort(name, as || name)
23
24
  end
24
25
 
25
26
  def graphql_writable_field(
@@ -31,25 +32,30 @@ module Graphiform
31
32
  description: nil,
32
33
  default_value: ::GraphQL::Schema::Argument::NO_DEFAULT,
33
34
  as: nil,
34
- **_options
35
+ **
35
36
  )
36
37
  name = name.to_sym
37
- argument_name = graphql_resolve_argument_name(name)
38
- argument_type = graphql_resolve_argument_type(name, type)
38
+ has_nested_attributes_method = instance_methods.include?("#{as || name}_attributes=".to_sym)
39
+
40
+ argument_name = has_nested_attributes_method ? "#{name}_attributes".to_sym : name
41
+ argument_type = graphql_resolve_argument_type(as || name, type)
42
+ as = has_nested_attributes_method ? "#{as}_attributes".to_sym : as.to_sym if as
39
43
 
40
44
  return Helpers.logger.warn "Graphiform: Missing `type` for argument #{name}" if argument_type.nil?
41
45
 
42
46
  prepare = write_prepare || prepare
43
47
 
44
48
  graphql_input.class_eval do
45
- argument \
49
+ argument(
46
50
  argument_name,
47
51
  argument_type,
48
52
  required: required,
49
53
  prepare: prepare,
50
54
  description: description,
51
55
  default_value: default_value,
52
- as: as
56
+ as: as,
57
+ method_access: false
58
+ )
53
59
  end
54
60
  end
55
61
 
@@ -84,14 +90,6 @@ module Graphiform
84
90
 
85
91
  private
86
92
 
87
- def graphql_resolve_argument_name(name)
88
- attributes_name = "#{name}_attributes"
89
-
90
- return attributes_name.to_sym if instance_methods.include?("#{attributes_name}=".to_sym)
91
-
92
- name
93
- end
94
-
95
93
  def graphql_resolve_argument_type(name, type)
96
94
  type = graphql_create_enum(name) if type.blank? && enum_attribute?(name)
97
95
 
@@ -109,12 +107,12 @@ module Graphiform
109
107
  has_many ? [association_def.klass.graphql_input] : association_def.klass.graphql_input
110
108
  end
111
109
 
112
- def graphql_add_scopes_to_filter(name)
113
- added_scopes = auto_scopes_by_attribute(name)
110
+ def graphql_add_scopes_to_filter(name, as)
111
+ added_scopes = auto_scopes_by_attribute(as)
114
112
 
115
113
  return if added_scopes.empty?
116
114
 
117
- association_def = association(name)
115
+ association_def = association(as)
118
116
 
119
117
  if association_def.present?
120
118
  return unless Helpers.association_arguments_valid?(association_def, :graphql_filter)
@@ -130,15 +128,15 @@ module Graphiform
130
128
  enum = graphql_create_enum(name)
131
129
  scope_argument_type = scope_argument_type.is_a?(Array) ? [enum] : enum
132
130
  end
133
- add_scope_def_to_filter(added_scope, scope_argument_type)
131
+ add_scope_def_to_filter(name, added_scope, scope_argument_type)
134
132
  end
135
133
  end
136
134
 
137
- def add_scope_def_to_filter(scope_def, argument_type)
135
+ def add_scope_def_to_filter(name, scope_def, argument_type)
138
136
  return unless argument_type
139
137
 
140
138
  argument_type = Helpers.graphql_type(argument_type)
141
- argument_attribute = scope_def.attribute
139
+ argument_attribute = name
142
140
  argument_prefix = scope_def.prefix
143
141
  argument_suffix = scope_def.suffix == '_is' ? '' : scope_def.suffix
144
142
  argument_name = "#{argument_prefix}#{argument_attribute}#{argument_suffix}".underscore
@@ -149,14 +147,15 @@ module Graphiform
149
147
  argument_name,
150
148
  argument_type,
151
149
  required: false,
152
- as: scope_name
150
+ as: scope_name,
151
+ method_access: false
153
152
  )
154
153
  end
155
154
  end
156
155
 
157
- def graphql_field_to_sort(name)
158
- column_def = column(name)
159
- association_def = association(name)
156
+ def graphql_field_to_sort(name, as)
157
+ column_def = column(as || name)
158
+ association_def = association(as || name)
160
159
 
161
160
  type = ::Enums::Sort if column_def.present?
162
161
  type = association_def.klass.graphql_sort if Helpers.association_arguments_valid?(association_def, :graphql_sort)
@@ -169,7 +168,9 @@ module Graphiform
169
168
  argument(
170
169
  name,
171
170
  type,
172
- required: false
171
+ required: false,
172
+ as: as,
173
+ method_access: false
173
174
  )
174
175
  end
175
176
  end
@@ -181,18 +182,20 @@ module Graphiform
181
182
  description: nil,
182
183
  deprecation_reason: nil,
183
184
  method: nil,
185
+ as: nil,
184
186
  read_prepare: nil,
185
- **_options
187
+ **
186
188
  )
189
+ type = Helpers.graphql_type(type)
190
+ is_resolver = Helpers.resolver?(type)
191
+
187
192
  field_name = field_name.to_sym
188
193
  field_options = {
189
194
  description: description,
190
195
  deprecation_reason: deprecation_reason,
191
- method: method,
196
+ method: is_resolver ? nil : method || as,
192
197
  }
193
198
 
194
- type = Helpers.graphql_type(type)
195
-
196
199
  if Helpers.resolver?(type)
197
200
  field_options[:resolver] = type
198
201
  else
@@ -212,16 +215,16 @@ module Graphiform
212
215
  end
213
216
  end
214
217
 
215
- def graphql_add_column_field(field_name, column_def, type: nil, null: nil, **options)
216
- is_enum = type.blank? && enum_attribute?(field_name)
218
+ def graphql_add_column_field(field_name, column_def, type: nil, null: nil, as: nil, **options)
219
+ is_enum = type.blank? && enum_attribute?(as || field_name)
217
220
  if is_enum
218
- enum = graphql_create_enum(field_name)
221
+ enum = graphql_create_enum(as || field_name)
219
222
  type = enum
220
223
  end
221
224
  type ||= column_def.type
222
225
  null = column_def.null if null.nil?
223
226
 
224
- graphql_add_field_to_type(field_name, type, null, **options)
227
+ graphql_add_field_to_type(field_name, type, null, as: as, **options)
225
228
  end
226
229
 
227
230
  def graphql_add_association_field(field_name, association_def, type: nil, null: nil, include_connection: true, read_prepare: nil, **options)
@@ -1,3 +1,3 @@
1
1
  module Graphiform
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.2.1'.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.0
4
+ version: 0.2.1
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-04-30 00:00:00.000000000 Z
11
+ date: 2020-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord