ecoportal-api-graphql 0.1.9 → 0.1.11

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: 5a149d79e773d8c7a3036e78bd729fbd9630937284517854656738f97acd0022
4
- data.tar.gz: 491b8e694b341cdad48467f062243dd7677228083f9fde3765f4249b76c270f4
3
+ metadata.gz: f2fc73626ffb4955b88d20778e32206ad4b989fc47bcc6abbdaf748c035244a6
4
+ data.tar.gz: c00e9f570f81de6520ef738c8cd059dbfb6d80fe18613599d2a6f7ad53556416
5
5
  SHA512:
6
- metadata.gz: df671787213260d751f1f381d4ec0706a98fc68690a32d01fdfe8448ff9cf4ae4d3e9d2154ad1ba0fbce6d900a89fbc2ce32015cdf9df047850fa7b1cfa63771
7
- data.tar.gz: 28fe2d48c1ce8417e9803554ae6d6d27b5539129163dee98853f6e4837dd46e78b35f73945ec19e98850505b76932460966a57e3f6812971cc43292d229a1967
6
+ metadata.gz: 04477f6f4c8014bccd9f1fc93625f031991e0f0bd979af476ec859f1802832726686a06f1dfa665c9d0ec8762d38eb03aa5bb621a51a28112b513b0b80ef7f37
7
+ data.tar.gz: 249e23c774b1ee031c18d7e53a5be53948c3bf7f5bfffcb2fe4d679a4ab249d81ab59498878a0e2b209720cf6e0b556fef555b0d8dab1bf710be4b2dd243b0d4
data/CHANGELOG.md CHANGED
@@ -1,19 +1,45 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## [0.1.10] - 2022-09-xx
4
+ ## [0.1.13] - 2022-11-xx
5
5
 
6
6
  ### Added
7
7
  ### Changed
8
8
  ### Fixed
9
9
 
10
10
  ### ToDo
11
- - Make `GraphQL` default fragments work
12
- - Add update/create operations for `ContractorEntity`
11
+ - Add update operation for `ContractorEntity`
13
12
  - Add currentOrganization.action
14
13
  - Analyse how to "DSL" currentOrganization.action.activities
15
14
  - review `path` tracking
16
15
 
16
+ ## [0.1.12] - 2022-11-xx
17
+
18
+ ### Added
19
+ - `Ecoportal::API::GraphQL::Base::Mutation`
20
+ - Added `createContractorEntity`
21
+
22
+ ### Changed
23
+ - Slight internal refactor of `Ecoportal::API::GraphQL::Base::Query`
24
+ - Upgraded `ecoportal-api-v2` **gem** dependency
25
+
26
+ ## [0.1.11] - 2022-11-02
27
+
28
+ ### Added
29
+ ### Changed
30
+ - **upgraded** `graphlient` gem dependency (support for framents)
31
+ - removed patch in this gem
32
+
33
+ ### Fixed
34
+
35
+ ## [0.1.10] - 2022-09-29
36
+
37
+ ### Changed
38
+ - **upgraded** `ecoportal-api-v2` gem dependency
39
+
40
+ ### Fixed
41
+ - Remove debugging message
42
+
17
43
  ## [0.1.9] - 2022-09-26
18
44
 
19
45
  ### Added
@@ -23,6 +49,7 @@ All notable changes to this project will be documented in this file.
23
49
  - **upgraded** `ecoportal-api-v2` gem dependency
24
50
  - added `Ecoportal::API::Common::GraphQL::QueryIntegration`
25
51
  - restructured `Ecoportal::API::GraphQL::Model::Organization` class
52
+ - **Patch** on `Graphlient::Query` for fragments support (**pull request**: https://github.com/ashkan18/graphlient/pull/94)
26
53
 
27
54
  ## [0.1.8] - 2022-09-23
28
55
 
@@ -29,6 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
30
30
  spec.add_development_dependency "pry" , ">= 0.14"
31
31
 
32
- spec.add_dependency 'ecoportal-api-v2', '>= 0.9.1', '< 0.10'
33
- spec.add_dependency 'graphlient', '>= 0.6.0', '< 0.7'
32
+ spec.add_dependency 'ecoportal-api-v2', '>= 0.9.7', '< 0.10'
33
+ spec.add_dependency 'graphlient', '>= 0.7.0', '< 0.8'
34
34
  end
@@ -1 +1 @@
1
- require_relative 'patches/query'
1
+ #require_relative 'patches/query'
@@ -0,0 +1,98 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ class Mutation
6
+ class GenericPayload
7
+ def initialize(*args, **kargs)
8
+ raise "Missuse error. You should define a payload_class for a class that inherits from Mutation class."
9
+ end
10
+ end
11
+
12
+ include Ecoportal::API::Common::GraphQL::ClassHelpers
13
+
14
+ class << self
15
+ # Used to obtain the full `path` in the GraphQL query by using `base_path`
16
+ # @note it is meant for reusability of queries from different end-points
17
+ def field_name(str = nil)
18
+ return @field_name unless str
19
+ @field_name = nil
20
+ @field_name = str.to_s if str
21
+ end
22
+ end
23
+
24
+ class_resolver :payload_class, GenericPayload
25
+ attr_reader :client
26
+ attr_reader :base_path
27
+
28
+ def initialize(client, path: nil, base_path: [])
29
+ @path = path
30
+ @base_path = base_path
31
+ @client = client
32
+ end
33
+
34
+ # Resolves the `path` by using `path` or `base_path` + `class.field_name`.
35
+ def path(field_name = self.class.field_name)
36
+ result = @path
37
+ result ||= default_path if self.respond_to?(:default_path, true)
38
+ result ||= (base_path + [field_name]) if base_path && field_name
39
+ result
40
+ end
41
+
42
+ # Query rely that manages the different blocks.
43
+ # @return [Class] an object of `response_class` with the results hanving from `path`.
44
+ def query(input:, path: self.path, &block)
45
+ request(*path) do
46
+ client.query(input: as_input(input), &basic_block(&block))
47
+ end
48
+ rescue Faraday::ParsingError => e
49
+ puts "Internal Error with these input ('#{input.class}'):"
50
+ pp input
51
+ raise
52
+ end
53
+
54
+ def response_class
55
+ payload_class
56
+ end
57
+
58
+ def access_point(path = [])
59
+ path.last
60
+ end
61
+
62
+ private
63
+
64
+ def basic_block(&block)
65
+ raise "This method should be implemented in the child class #{self.class}"
66
+ end
67
+
68
+ def as_input(value)
69
+ case value
70
+ when Hash
71
+ value
72
+ when Ecoportal::API::GraphQL::Base::Model
73
+ value.as_input
74
+ when Hash
75
+ value = Helpers::Model::HashKeys.keys_to_sym_deep(value)
76
+ Ecoportal::API::Base::Model.as_input(value)
77
+ when Enumerable
78
+ value.map {|v| as_input(v)}
79
+ else
80
+ raise ArgumentError.new("Expecting Hash, GraphQL::Base::Model or Enumerable. Unsupported type '#{value.class}'.")
81
+ end
82
+ end
83
+
84
+ def request(*path)
85
+ response = yield
86
+ wrap_response(response, path)
87
+ end
88
+
89
+ def wrap_response(response, path = [])
90
+ raise "Complete failure on request. Path: #{path}" unless res = response.to_h.dig(*path.dup.unshift("data"))
91
+ data = Ecoportal::API::Common::GraphQL::HashHelpers.deep_dup(res)
92
+ response_class.new(data)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -39,7 +39,6 @@ module Ecoportal
39
39
 
40
40
  class_resolver :item_class, GenericItem
41
41
  attr_reader :client
42
-
43
42
  attr_reader :base_path
44
43
 
45
44
  def initialize(client, path: nil, base_path: nil)
@@ -57,7 +56,7 @@ module Ecoportal
57
56
  end
58
57
 
59
58
  # Query rely that manages the different blocks.
60
- # @return [Class] an object of `response_class` with the results hanving from `path`.
59
+ # @return [Class] an object of `response_class` with the results hanging from `path`.
61
60
  def query(path: self.path, **kargs, &block)
62
61
  graphql_query(path: path, **kargs, &basic_block(&block))
63
62
  end
@@ -72,6 +71,10 @@ module Ecoportal
72
71
 
73
72
  private
74
73
 
74
+ def basic_block
75
+ raise "This method should be implemented in the child class #{self.class}"
76
+ end
77
+
75
78
  def graphql_query(path: self.path, **kargs, &block)
76
79
  query_params = self.class.slice_params(kargs)
77
80
  request(*path) do
@@ -89,7 +92,7 @@ module Ecoportal
89
92
  end
90
93
 
91
94
  def wrap_response(response, path = [])
92
- raise "Complete failure on request. Path: #{path}" unless res = response.to_h.dig("data", *path)
95
+ raise "Complete failure on request. Path: #{path}" unless res = response.to_h.dig(*path.dup.unshift("data"))
93
96
  data = Ecoportal::API::Common::GraphQL::HashHelpers.deep_dup(res)
94
97
  response_class.new(data)
95
98
  end
@@ -18,7 +18,6 @@ module Ecoportal
18
18
  item_class,
19
19
  inherits: Ecoportal::API::Common::Content::CollectionModel
20
20
  ) do |klass|
21
- puts "created class #{klass}: item_class: #{item_class}"
22
21
  klass.klass = item_class
23
22
  end
24
23
  end
@@ -12,6 +12,7 @@ require 'ecoportal/api/graphql/base/date_time'
12
12
  require 'ecoportal/api/graphql/base/id_diff_input'
13
13
  require 'ecoportal/api/graphql/base/page_info'
14
14
  require 'ecoportal/api/graphql/base/query'
15
+ require 'ecoportal/api/graphql/base/mutation'
15
16
  require 'ecoportal/api/graphql/base/connection'
16
17
  require 'ecoportal/api/graphql/base/query_array'
17
18
  require 'ecoportal/api/graphql/base/query_connection'
@@ -0,0 +1,38 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ class CreateContractorEntity < Ecoportal::API::GraphQL::Base::Mutation
6
+ field_name :createContractorEntity
7
+
8
+ #class_resolver :item_class, Ecoportal::API::GraphQL::Model::ContractorEntity
9
+ class_resolver :payload_class, Ecoportal::API::GraphQL::Payload::CreateContractorEntity
10
+
11
+ private
12
+
13
+ def basic_block(&block)
14
+ payload_block = block || default_payload_block
15
+ Proc.new {
16
+ mutation(input: :CreateContractorEntityInput!) {
17
+ createContractorEntity(input: :input, &payload_block)
18
+ }
19
+ }
20
+ end
21
+
22
+ def default_payload_block
23
+ Proc.new {
24
+ clientMutationId
25
+ errors {
26
+ details
27
+ fullMessages
28
+ }
29
+ item {
30
+ ___Fragment__ContractorEntity
31
+ }
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,10 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Mutation
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require 'ecoportal/api/graphql/mutation/create_contractor_entity'
@@ -25,6 +25,17 @@ module Ecoportal
25
25
  def currentOrganization
26
26
  currentOrganizationClass
27
27
  end
28
+
29
+ def createContractorEntity(input:, &block)
30
+ createContractorEntityMutation.query(input: input, &block)
31
+ end
32
+
33
+ private
34
+
35
+ def createContractorEntityMutation
36
+ Ecoportal::API::GraphQL::Mutation::CreateContractorEntity.new(client)
37
+ end
38
+
28
39
  end
29
40
  end
30
41
  end
@@ -37,3 +48,4 @@ require 'ecoportal/api/graphql/payload'
37
48
  require 'ecoportal/api/graphql/input'
38
49
  require 'ecoportal/api/graphql/fragment'
39
50
  require 'ecoportal/api/graphql/query'
51
+ require 'ecoportal/api/graphql/mutation'
@@ -1,5 +1,5 @@
1
1
  module Ecoportal
2
2
  module API
3
- GRAPQL_VERSION = "0.1.9"
3
+ GRAPQL_VERSION = "0.1.11"
4
4
  end
5
5
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'local_libs'
2
+
3
+ api = Ecoportal::API::GraphQL.new
4
+ response = api.createContractorEntity(input: {
5
+ name: "Caras Galathon",
6
+ active: true,
7
+ approved: true,
8
+ associatedPeopleIds: [
9
+ "5adfbef76fb80400047535b3"
10
+ ],
11
+ leadContractorIds: [
12
+ "5adfbef76fb80400047535b3"
13
+ ],
14
+ clientMutationId: ""
15
+ })
16
+
17
+ if response.success? && entity = response.item
18
+ puts "Created contractor entity '#{entity.name}' (approved? #{entity.approved})"
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecoportal-api-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-26 00:00:00.000000000 Z
11
+ date: 2022-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: 0.9.1
133
+ version: 0.9.7
134
134
  - - "<"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0.10'
@@ -140,7 +140,7 @@ dependencies:
140
140
  requirements:
141
141
  - - ">="
142
142
  - !ruby/object:Gem::Version
143
- version: 0.9.1
143
+ version: 0.9.7
144
144
  - - "<"
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0.10'
@@ -150,20 +150,20 @@ dependencies:
150
150
  requirements:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
- version: 0.6.0
153
+ version: 0.7.0
154
154
  - - "<"
155
155
  - !ruby/object:Gem::Version
156
- version: '0.7'
156
+ version: '0.8'
157
157
  type: :runtime
158
158
  prerelease: false
159
159
  version_requirements: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: 0.6.0
163
+ version: 0.7.0
164
164
  - - "<"
165
165
  - !ruby/object:Gem::Version
166
- version: '0.7'
166
+ version: '0.8'
167
167
  description:
168
168
  email:
169
169
  - oscar@ecoportal.co.nz
@@ -195,7 +195,6 @@ files:
195
195
  - lib/ecoportal/api/common/graphql/hash_helpers.rb
196
196
  - lib/ecoportal/api/common/graphql/http_client.rb
197
197
  - lib/ecoportal/api/common/graphql/patches.rb
198
- - lib/ecoportal/api/common/graphql/patches/query.rb
199
198
  - lib/ecoportal/api/common/graphql/query_integration.rb
200
199
  - lib/ecoportal/api/graphql.rb
201
200
  - lib/ecoportal/api/graphql/base.rb
@@ -209,6 +208,7 @@ files:
209
208
  - lib/ecoportal/api/graphql/base/file_container.rb
210
209
  - lib/ecoportal/api/graphql/base/id_diff_input.rb
211
210
  - lib/ecoportal/api/graphql/base/model.rb
211
+ - lib/ecoportal/api/graphql/base/mutation.rb
212
212
  - lib/ecoportal/api/graphql/base/organization.rb
213
213
  - lib/ecoportal/api/graphql/base/page.rb
214
214
  - lib/ecoportal/api/graphql/base/page_info.rb
@@ -253,6 +253,8 @@ files:
253
253
  - lib/ecoportal/api/graphql/model/tag_tree.rb
254
254
  - lib/ecoportal/api/graphql/model/tag_tree_node.rb
255
255
  - lib/ecoportal/api/graphql/model/user.rb
256
+ - lib/ecoportal/api/graphql/mutation.rb
257
+ - lib/ecoportal/api/graphql/mutation/create_contractor_entity.rb
256
258
  - lib/ecoportal/api/graphql/payload.rb
257
259
  - lib/ecoportal/api/graphql/payload/create_contractor_entity.rb
258
260
  - lib/ecoportal/api/graphql/payload/destroy_contractor_entity.rb
@@ -265,6 +267,7 @@ files:
265
267
  - lib/ecoportal/api/graphql_version.rb
266
268
  - tests/actions_get.rb
267
269
  - tests/contractor_entities_get.rb
270
+ - tests/create_contractor_entity.rb
268
271
  - tests/local_libs.rb
269
272
  - tests/tagtree_get.rb
270
273
  - tests/tagtrees_get.rb
@@ -1,49 +0,0 @@
1
- module Graphlient
2
- class Query
3
- FRAGMENT_DEFITION = /___(?<const>[A-Z][a-zA-Z0-9_]*(__[A-Z][a-zA-Z0-9_]*)*)/
4
-
5
- def initialize(&block)
6
- @indents = 0
7
- @query_str = ''
8
- @variables = []
9
- evaluate(&block)
10
- end
11
-
12
- private
13
-
14
- def evaluate(&block)
15
- @last_block = block || self
16
- (@context ||= {})[@last_block] ||= @last_block.binding
17
- instance_eval(&block)
18
- end
19
-
20
- def resolve_fragment_constant(value)
21
- return nil unless (match = value.to_s.match(FRAGMENT_DEFITION))
22
- raw_const = match[:const].gsub('__', '::')
23
- @context[@last_block].eval(raw_const).tap do |const|
24
- msg = "Expected constant #{raw_const} to be GraphQL::Client::FragmentDefinition. Given #{const.class}"
25
- raise Graphlient::Errors::Error, msg unless const.is_a? GraphQL::Client::FragmentDefinition
26
- end
27
- end
28
-
29
- def append_node(node, args, arg_processor: nil, &block)
30
- node = "...#{resolve_fragment_constant(node)}".to_sym if node.to_s.start_with?('___')
31
-
32
- # add field
33
- @query_str << "\n#{indent}#{node}"
34
- # add filter
35
- hash_arguments = hash_arg(args)
36
- @query_str << "(#{args_str(hash_arguments, arg_processor: arg_processor)})" if hash_arguments
37
-
38
- if block_given?
39
- @indents += 1
40
- @query_str << '{'
41
- evaluate(&block)
42
- @query_str << '}'
43
- @indents -= 1
44
- end
45
-
46
- @query_str << "\n#{indent}"
47
- end
48
- end
49
- end