graphql_connector 0.1.0.beta1 → 0.2.0

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: fc6fbc6e76e115e9f9b9cbc0a17c5e09d6404f0f3f688e69095fa80ef308c59a
4
- data.tar.gz: 2159568d552c24a25a37d8233e06e125eedc3a4598a76f4a201818b105c6e787
3
+ metadata.gz: 8ce0306b4b797a61fd2e4e26036731e5b702c7a3b3772f68f90f8db2f124f1ef
4
+ data.tar.gz: c7afc2f11f5a6c91bc3f788b08fda857de8451cba6905f179691f002ce6ba643
5
5
  SHA512:
6
- metadata.gz: 42ee8bbcdde2f68eea168e251259892aa06b617f5fd67735a7833af78c3d2c1341bb26befd10078df1e63b288ab23cb5f3d94df8754d96836801e09a2ed42895
7
- data.tar.gz: 973006929bc4e2fde380dc6d7b7228f01a506ef2b34ee610c73515643ee6b74052dbad134ce9b33ad2e0bac95c04f9fd54d71132eb48b717f08990136e7ddd49
6
+ metadata.gz: 82de4e8e154f407995fb1fbe865ee59610d9b283f876e54af68bce38d20a2bc80fe00a08b2b104a6c532c551b6e242fb3b4792efdc5f27122fc4ad597b9edf76
7
+ data.tar.gz: da700041749e3f7d1ab40f13258c073556d6fc7f316224f3aa3c91368dce06895d9a3b9b4ac6098c896268b147a1cc370d19fe8072683b6255f028ca1c4a6aa2
@@ -0,0 +1,2 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
@@ -0,0 +1,3 @@
1
+ Lint/DuplicateMethods:
2
+ Exclude:
3
+ - lib/graphql_connector.rb
@@ -1,7 +1,11 @@
1
1
 
2
- ### 0.1.0 Init
2
+ ### 0.2.0
3
+
4
+ ** Features
5
+ * new `raw_query` method. you have to write the graphql query
6
+ string by your self and also you get only the parsed json back.
7
+ * query supports associations for the selected_fields attribute
3
8
 
4
- TBA
5
9
 
6
10
  ### 0.1.0.beta1
7
11
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphql_connector (0.1.0.beta1)
4
+ graphql_connector (0.2.0)
5
5
  httparty (~> 0.17)
6
6
 
7
7
  GEM
@@ -17,7 +17,7 @@ GEM
17
17
  method_source (0.9.2)
18
18
  mime-types (3.3)
19
19
  mime-types-data (~> 3.2015)
20
- mime-types-data (3.2019.0904)
20
+ mime-types-data (3.2019.1009)
21
21
  multi_xml (0.6.0)
22
22
  parallel (1.17.0)
23
23
  parser (2.6.5.0)
data/README.md CHANGED
@@ -5,8 +5,8 @@ Version](https://badge.fury.io/rb/graphql_connector.svg)](https://badge.fury.io/
5
5
  [![Build
6
6
  Status](https://travis-ci.org/Garllon/graphql_connector.svg?branch=master)](https://travis-ci.org/Garllon/graphql_connector)
7
7
 
8
- An easy connector to call your `graphql` server.
9
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/graphql_connector`. To experiment with that code, run `bin/console` for an interactive prompt.
8
+ An easy connector to call your `graphql` server. Currently there is no schema
9
+ check in the code, but i will add this.
10
10
 
11
11
  ## Installation
12
12
 
@@ -34,16 +34,42 @@ GraphqlConnector.configure do |config|
34
34
  end
35
35
  ```
36
36
 
37
+ ### raw_query
38
+
37
39
  Then you can call your graphql_endpoint:
38
40
  ```ruby
39
41
  GraphqlConnector.query(model, condition, selected_fields)
40
42
  ```
41
43
 
42
- | Variable | DataType | Example |
43
- | ----------------|------------------| ---------------|
44
- | model | String | 'product' |
45
- | condition | Hash(key, value) | { id: 1 } |
46
- | selected_fields | Array of Strings | ['id', 'name'] |
44
+ ### query
45
+
46
+ Or your are using the more comfortable `query`:
47
+ ```ruby
48
+ GraphqlConnector.query(model, condition, selected_fields)
49
+ ```
50
+
51
+ | Variable | DataType | Example |
52
+ |----------------|-------------------------|------------------------------------------|
53
+ | model | String | 'product' |
54
+ | condition | Hash(key, value) | { id: 1 } |
55
+ | selected_fields | Array of Strings/Hashes | ['id', 'name', productCategory: ['id']] |
56
+
57
+ > Caution:
58
+ > You get an OpenStruct back. Currently only the first level attributes are
59
+ > supported with OpenStruct, associated objects are still a normal array of
60
+ > hashes.
61
+
62
+ #### selected_fields
63
+
64
+ The synatx for the associations looks like the following:
65
+ ```
66
+ ['<attribute_name>', <association_name>: ['<attribute_name_of_the_association>']]
67
+ ```
68
+
69
+ Example:
70
+ ```ruby
71
+ ['id', 'name', productCategory: ['id', 'name']]
72
+ ```
47
73
 
48
74
  ## Development
49
75
 
@@ -53,7 +79,10 @@ bundle install
53
79
  ```
54
80
 
55
81
  Then, run
56
- ```bundle exec rspec spec` to run the tests.
82
+ ```shell
83
+ bundle exec rspec spec
84
+ ```
85
+ to run the tests.
57
86
  You can also run `bin/console` for an interactive prompt that will allow you to experiment.
58
87
 
59
88
  ## Contributing
@@ -10,8 +10,9 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['Garllon']
11
11
  spec.email = ['palluthe.bennet@gmail.com']
12
12
 
13
- spec.summary = 'Hallo'
14
- spec.description = 'Hallo'
13
+ spec.summary = 'Simple GraphQL client'
14
+ spec.description = 'Simple grahql client to query with your own raw string'\
15
+ 'or with the samll helper method query.'
15
16
  spec.homepage = 'https://github.com/Garllon/graphql_connector/blob/master/README.md'
16
17
  spec.license = 'MIT'
17
18
 
@@ -20,7 +21,8 @@ Gem::Specification.new do |spec|
20
21
  spec.metadata['changelog_uri'] = 'https://github.com/Garllon/graphql_connector/blob/master/CHANGELOG.md'
21
22
 
22
23
  # Specify which files should be added to the gem when it is released.
23
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added
25
+ # into git.
24
26
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
27
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|features)/}) }
26
28
  end
@@ -3,8 +3,12 @@
3
3
  require 'graphql_connector/version'
4
4
  require 'graphql_connector/query_builder'
5
5
  require 'graphql_connector/configuration'
6
+ require 'graphql_connector/custom_attribute_error'
6
7
  require 'httparty'
7
8
 
9
+ # Main file of the GraphQLConnector
10
+ # the main methods to configure the gem
11
+ # and to run a raw_query or a normal query.
8
12
  module GraphqlConnector
9
13
  class << self
10
14
  attr_accessor :configuration
@@ -24,10 +28,20 @@ module GraphqlConnector
24
28
 
25
29
  def self.query(model, conditions, selected_fields)
26
30
  query_string = QueryBuilder.new(model, conditions, selected_fields).create
31
+ parsed_body = raw_query(query_string)
32
+ OpenStruct.new(parsed_body['data'][model])
33
+ end
34
+
35
+ def self.raw_query(query_string)
27
36
  response = HTTParty.post(GraphqlConnector.configuration.host,
28
37
  headers: GraphqlConnector.configuration.headers,
29
38
  body: { query: query_string })
30
39
  parsed_body = JSON.parse(response.body)
31
- OpenStruct.new(parsed_body['data'][model])
40
+
41
+ if parsed_body.key? 'errors'
42
+ raise CustomAttributeError, parsed_body['errors']
43
+ end
44
+
45
+ parsed_body
32
46
  end
33
47
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlConnector
4
+ # The configuration template file for the gem.
4
5
  class Configuration
5
6
  attr_accessor :host, :headers
6
7
 
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CustomAttributeError < StandardError; end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlConnector
4
+ # create the graphql query_string out of the given attributes.
4
5
  class QueryBuilder
5
6
  def initialize(model, conditions, selected_fields)
6
7
  @model = model
@@ -9,7 +10,7 @@ module GraphqlConnector
9
10
  end
10
11
 
11
12
  def create
12
- "query { #{@model}(#{main_filter}) { #{@selected_fields.join(' ')} } }"
13
+ "query { #{main_filter} { #{parse_fields(@selected_fields)} } }"
13
14
  end
14
15
 
15
16
  private
@@ -21,7 +22,7 @@ module GraphqlConnector
21
22
  array << "#{key}: #{value_as_parameter(value)}"
22
23
  end
23
24
 
24
- conditions.join(', ')
25
+ "#{@model}(#{conditions.join(', ')})"
25
26
  end
26
27
 
27
28
  def value_as_parameter(value)
@@ -35,5 +36,24 @@ module GraphqlConnector
35
36
  '"' + value.to_s + '"'
36
37
  end
37
38
  end
39
+
40
+ def parse_fields(selected_fields)
41
+ results = selected_fields.map do |field|
42
+ case field
43
+ when Hash
44
+ handle_association(field)
45
+ else
46
+ field
47
+ end
48
+ end
49
+
50
+ results.join(' ')
51
+ end
52
+
53
+ def handle_association(hash)
54
+ hash.map do |key, fields|
55
+ "#{key} { #{parse_fields(fields)} }"
56
+ end
57
+ end
38
58
  end
39
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlConnector
4
- VERSION = '0.1.0.beta1'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_connector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.beta1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garllon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-06 00:00:00.000000000 Z
11
+ date: 2019-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -94,7 +94,8 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.75'
97
- description: Hallo
97
+ description: Simple grahql client to query with your own raw stringor with the samll
98
+ helper method query.
98
99
  email:
99
100
  - palluthe.bennet@gmail.com
100
101
  executables: []
@@ -103,6 +104,8 @@ extra_rdoc_files: []
103
104
  files:
104
105
  - ".gitignore"
105
106
  - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".rubocop_todo.yml"
106
109
  - ".travis.yml"
107
110
  - CHANGELOG.md
108
111
  - CODE_OF_CONDUCT.md
@@ -114,6 +117,7 @@ files:
114
117
  - graphql_connector.gemspec
115
118
  - lib/graphql_connector.rb
116
119
  - lib/graphql_connector/configuration.rb
120
+ - lib/graphql_connector/custom_attribute_error.rb
117
121
  - lib/graphql_connector/query_builder.rb
118
122
  - lib/graphql_connector/version.rb
119
123
  homepage: https://github.com/Garllon/graphql_connector/blob/master/README.md
@@ -134,12 +138,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
138
  version: '0'
135
139
  required_rubygems_version: !ruby/object:Gem::Requirement
136
140
  requirements:
137
- - - ">"
141
+ - - ">="
138
142
  - !ruby/object:Gem::Version
139
- version: 1.3.1
143
+ version: '0'
140
144
  requirements: []
141
145
  rubygems_version: 3.0.6
142
146
  signing_key:
143
147
  specification_version: 4
144
- summary: Hallo
148
+ summary: Simple GraphQL client
145
149
  test_files: []