pragmatic_ql 0.1.0.1 → 0.2
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 +4 -4
- data/Gemfile.lock +26 -27
- data/docs/00_philosophy.md +116 -0
- data/docs/01_stupid_simple_implementation.md +2 -2
- data/docs/02_serializer_example.md +3 -2
- data/lib/pragmatic_ql/version.rb +1 -1
- data/pragmatic_ql.gemspec +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db43534747874c7bc19d631804a18968be7fce6b5b3cacbc29e27f7e4378d4a0
|
4
|
+
data.tar.gz: 21000233f0760251b44b859403e7ab0fe57826bf94062fb46081adac04886f90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37ac077510f771f4a1e993dd153d4426459260218fb138cd017a7c0d9755313fbbfa015146e1afd5ec6cf0d56d7e1aa3f0e18581ed1e07153b7e174c7b063068
|
7
|
+
data.tar.gz: 8c92696e114c518b725c2f75e06baeb7dc94d0b7d7cec34c7c799c451f9f584b748eebeb15a4eeba5e0517616aff9b8695147274fbfb120819100cc530921f67
|
data/Gemfile.lock
CHANGED
@@ -1,50 +1,49 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pragmatic_ql (0.
|
4
|
+
pragmatic_ql (0.2)
|
5
5
|
activesupport (> 4)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (6.
|
10
|
+
activesupport (6.1.3.2)
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
-
i18n (>=
|
13
|
-
minitest (
|
14
|
-
tzinfo (~>
|
15
|
-
zeitwerk (~> 2.
|
16
|
-
concurrent-ruby (1.1.
|
17
|
-
diff-lcs (1.
|
18
|
-
i18n (1.
|
12
|
+
i18n (>= 1.6, < 2)
|
13
|
+
minitest (>= 5.1)
|
14
|
+
tzinfo (~> 2.0)
|
15
|
+
zeitwerk (~> 2.3)
|
16
|
+
concurrent-ruby (1.1.8)
|
17
|
+
diff-lcs (1.4.4)
|
18
|
+
i18n (1.8.10)
|
19
19
|
concurrent-ruby (~> 1.0)
|
20
|
-
minitest (5.
|
20
|
+
minitest (5.14.4)
|
21
21
|
rake (10.5.0)
|
22
|
-
rspec (3.
|
23
|
-
rspec-core (~> 3.
|
24
|
-
rspec-expectations (~> 3.
|
25
|
-
rspec-mocks (~> 3.
|
26
|
-
rspec-core (3.
|
27
|
-
rspec-support (~> 3.
|
28
|
-
rspec-expectations (3.
|
22
|
+
rspec (3.10.0)
|
23
|
+
rspec-core (~> 3.10.0)
|
24
|
+
rspec-expectations (~> 3.10.0)
|
25
|
+
rspec-mocks (~> 3.10.0)
|
26
|
+
rspec-core (3.10.1)
|
27
|
+
rspec-support (~> 3.10.0)
|
28
|
+
rspec-expectations (3.10.1)
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
|
-
rspec-support (~> 3.
|
31
|
-
rspec-mocks (3.
|
30
|
+
rspec-support (~> 3.10.0)
|
31
|
+
rspec-mocks (3.10.2)
|
32
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
-
rspec-support (~> 3.
|
34
|
-
rspec-support (3.
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
zeitwerk (2.1.9)
|
33
|
+
rspec-support (~> 3.10.0)
|
34
|
+
rspec-support (3.10.2)
|
35
|
+
tzinfo (2.0.4)
|
36
|
+
concurrent-ruby (~> 1.0)
|
37
|
+
zeitwerk (2.4.2)
|
39
38
|
|
40
39
|
PLATFORMS
|
41
40
|
ruby
|
42
41
|
|
43
42
|
DEPENDENCIES
|
44
|
-
bundler (
|
43
|
+
bundler (> 2.0)
|
45
44
|
pragmatic_ql!
|
46
45
|
rake (~> 10.0)
|
47
46
|
rspec (~> 3.0)
|
48
47
|
|
49
48
|
BUNDLED WITH
|
50
|
-
|
49
|
+
2.2.17
|
@@ -0,0 +1,116 @@
|
|
1
|
+
## Philosophy
|
2
|
+
|
3
|
+
Most critical part is how to implement the tool not the tool itself.
|
4
|
+
Incrorectly implemented solution can do more harm so pls read this.
|
5
|
+
|
6
|
+
|
7
|
+
### By default return only ID
|
8
|
+
|
9
|
+
|
10
|
+
When you don't include anythnig you will get only the ID back
|
11
|
+
|
12
|
+
|
13
|
+
`GET /v3/students`
|
14
|
+
|
15
|
+
```json
|
16
|
+
[
|
17
|
+
{ "id": 123 },
|
18
|
+
{ "id": 234 },
|
19
|
+
{ "id": 456 }
|
20
|
+
]
|
21
|
+
```
|
22
|
+
|
23
|
+
|
24
|
+
`GET /v3/student/123`
|
25
|
+
|
26
|
+
```json
|
27
|
+
{
|
28
|
+
"id": 123
|
29
|
+
}
|
30
|
+
```
|
31
|
+
|
32
|
+
Even if you require nested associations without any definition you will
|
33
|
+
get just their IDs
|
34
|
+
|
35
|
+
```json
|
36
|
+
{
|
37
|
+
"id": 123,
|
38
|
+
"work_list": [
|
39
|
+
{ "id": 111 },
|
40
|
+
{ "id": 222 },
|
41
|
+
]
|
42
|
+
}
|
43
|
+
```
|
44
|
+
|
45
|
+
This is design intention. You want to provide FE with minimum
|
46
|
+
information as possible. If FE need more than just `id` FE will ask
|
47
|
+
for it.
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
### Associations are seperate includes
|
52
|
+
|
53
|
+
|
54
|
+
`?include=student.work_list`
|
55
|
+
|
56
|
+
```json
|
57
|
+
{
|
58
|
+
"id": 123,
|
59
|
+
"work_list": [
|
60
|
+
{ "id": 111 },
|
61
|
+
{ "id": 222 },
|
62
|
+
]
|
63
|
+
}
|
64
|
+
```
|
65
|
+
|
66
|
+
|
67
|
+
`?include=student.comment_list`
|
68
|
+
|
69
|
+
```json
|
70
|
+
{
|
71
|
+
"id": 123,
|
72
|
+
"comment_list": [
|
73
|
+
{ "id": 999 },
|
74
|
+
{ "id": 888 },
|
75
|
+
]
|
76
|
+
}
|
77
|
+
```
|
78
|
+
|
79
|
+
If frontend needs multiple it will ask for it:
|
80
|
+
|
81
|
+
`?include=student.comment_list,student.work_list`
|
82
|
+
|
83
|
+
```json
|
84
|
+
{
|
85
|
+
"id": 123,
|
86
|
+
"comment_list": [
|
87
|
+
{ "id": 999 },
|
88
|
+
{ "id": 888 },
|
89
|
+
],
|
90
|
+
"work_list": [
|
91
|
+
{ "id": 111 },
|
92
|
+
{ "id": 222 },
|
93
|
+
]
|
94
|
+
}
|
95
|
+
```
|
96
|
+
|
97
|
+
**DON'T** wrap muliple associations into one key
|
98
|
+
|
99
|
+
|
100
|
+
`?include=student.stuff` DON'T
|
101
|
+
|
102
|
+
```json
|
103
|
+
{
|
104
|
+
"id": 123,
|
105
|
+
"comment_list": [
|
106
|
+
{ "id": 999 },
|
107
|
+
{ "id": 888 },
|
108
|
+
],
|
109
|
+
"work_list": [
|
110
|
+
{ "id": 111 },
|
111
|
+
{ "id": 222 },
|
112
|
+
]
|
113
|
+
}
|
114
|
+
```
|
115
|
+
|
116
|
+
|
@@ -27,9 +27,9 @@ class StudentsController < ApplicationController
|
|
27
27
|
resp.merge!({
|
28
28
|
first_name: student.first_name,
|
29
29
|
last_name: student.last_name
|
30
|
-
}) if student_im.
|
30
|
+
}) if student_im.inclusive_of(:names)
|
31
31
|
|
32
|
-
resp.merge!(date_of_birth: student.first_name) if student_im.include
|
32
|
+
resp.merge!(date_of_birth: student.first_name) if student_im.include(:dob)
|
33
33
|
|
34
34
|
render json: resp
|
35
35
|
end
|
@@ -23,7 +23,7 @@ end
|
|
23
23
|
|
24
24
|
```ruby
|
25
25
|
# app/model/image.rb
|
26
|
-
class
|
26
|
+
class Image < ApplicationRecord
|
27
27
|
# model has fields: "id", "priority", "work_id"
|
28
28
|
|
29
29
|
belongs_to :work
|
@@ -82,7 +82,7 @@ class StudentSerializer
|
|
82
82
|
|
83
83
|
private
|
84
84
|
|
85
|
-
# feel free to group multiple fields uder one include key
|
85
|
+
# feel free to group multiple fields uder one include key as long as they make Domain and performance sense
|
86
86
|
def name_hash
|
87
87
|
{
|
88
88
|
first_name: student.first_name,
|
@@ -306,3 +306,4 @@ When you query `/students/123?include=student.name,student.work_list,student.wor
|
|
306
306
|
]
|
307
307
|
}
|
308
308
|
```
|
309
|
+
|
data/lib/pragmatic_ql/version.rb
CHANGED
data/pragmatic_ql.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
26
|
spec.add_dependency "activesupport", "> 4" # I use goodies like .try?() .blank?()
|
27
|
-
spec.add_development_dependency "bundler", "
|
27
|
+
spec.add_development_dependency "bundler", "> 2.0"
|
28
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
29
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pragmatic_ql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Valent
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: exe
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: activesupport
|
@@ -33,16 +33,16 @@ dependencies:
|
|
33
33
|
name: bundler
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
36
|
-
- - "
|
36
|
+
- - ">"
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
38
|
+
version: '2.0'
|
39
39
|
type: :development
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
|
-
- - "
|
43
|
+
- - ">"
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
45
|
+
version: '2.0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: rake
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- Rakefile
|
91
91
|
- bin/console
|
92
92
|
- bin/setup
|
93
|
+
- docs/00_philosophy.md
|
93
94
|
- docs/01_stupid_simple_implementation.md
|
94
95
|
- docs/02_serializer_example.md
|
95
96
|
- lib/pragmatic_ql.rb
|
@@ -118,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
119
|
- !ruby/object:Gem::Version
|
119
120
|
version: '0'
|
120
121
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
122
|
+
rubygems_version: 3.2.17
|
122
123
|
signing_key:
|
123
124
|
specification_version: 4
|
124
125
|
summary: Simple query language for JSON based APIs
|