media_types-serialization 0.5.1 → 0.6.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 +4 -4
- data/.idea/.rakeTasks +6 -6
- data/.idea/media_types-serialization.iml +26 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +70 -3
- data/README.md +40 -6
- data/lib/generators/media_types/serialization/api_viewer/api_viewer_generator.rb +25 -0
- data/lib/generators/media_types/serialization/api_viewer/templates/api_viewer.html.erb +94 -0
- data/lib/generators/media_types/serialization/api_viewer/templates/initializer.rb +33 -0
- data/lib/generators/media_types/serialization/api_viewer/templates/template_controller.rb +23 -0
- data/lib/media_types/serialization.rb +45 -12
- data/lib/media_types/serialization/media_type/register.rb +4 -0
- data/lib/media_types/serialization/mime_type_support.rb +5 -5
- data/lib/media_types/serialization/renderer.rb +12 -3
- data/lib/media_types/serialization/version.rb +1 -1
- data/lib/media_types/serialization/wrapper/html_wrapper.rb +4 -1
- data/media_types-serialization.gemspec +18 -16
- metadata +36 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a5256da16f2721f390a507bea65a937dca96ac7b29760a71c67beb6a805d0b78
|
|
4
|
+
data.tar.gz: 6cb02dd865e5ba545b41b0900f7ec60fdc2f51523795fa9de2c1837188a1d592
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 168f94f9374f1f1c42bfa97dd897108f3c46a20c5a864120c7a4b0d8487563cca4e5bc3203ab6e51e958d8d85a6e2287dc7254b6f6f5c9f20b414ac03e32f5c0
|
|
7
|
+
data.tar.gz: 42f202188e3282b03e130d088b185ea9c60294ee95a9a2c9c21bd9081cee17c90489abf9833f9a08b3c2e8e48f021b850b7562e6ae72eaa63d167ab1c6de1f40
|
data/.idea/.rakeTasks
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<Settings><!--This file was automatically generated by Ruby plugin.
|
|
3
|
-
You are allowed to:
|
|
4
|
-
1. Remove rake task
|
|
5
|
-
2. Add existing rake tasks
|
|
6
|
-
To add existing rake tasks automatically delete this file and reload the project.
|
|
7
|
-
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build media_types-serialization-0.
|
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
|
3
|
+
You are allowed to:
|
|
4
|
+
1. Remove rake task
|
|
5
|
+
2. Add existing rake tasks
|
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build media_types-serialization-0.5.1.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install media_types-serialization-0.5.1.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install media_types-serialization-0.5.1.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.5.1 and build and push media_types-serialization-0.5.1.gem to rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run tests" fullCmd="test" taksId="test" /><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
|
@@ -26,30 +26,52 @@
|
|
|
26
26
|
<content url="file://$MODULE_DIR$" />
|
|
27
27
|
<orderEntry type="jdk" jdkName="ruby-2.5.3-p105" jdkType="RUBY_SDK" />
|
|
28
28
|
<orderEntry type="sourceFolder" forTests="false" />
|
|
29
|
-
<orderEntry type="library" scope="PROVIDED" name="
|
|
29
|
+
<orderEntry type="library" scope="PROVIDED" name="actioncable (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
30
|
+
<orderEntry type="library" scope="PROVIDED" name="actionmailer (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
31
|
+
<orderEntry type="library" scope="PROVIDED" name="actionpack (v5.2.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
30
32
|
<orderEntry type="library" scope="PROVIDED" name="actionview (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
31
|
-
<orderEntry type="library" scope="PROVIDED" name="
|
|
33
|
+
<orderEntry type="library" scope="PROVIDED" name="activejob (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
34
|
+
<orderEntry type="library" scope="PROVIDED" name="activemodel (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
35
|
+
<orderEntry type="library" scope="PROVIDED" name="activerecord (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
36
|
+
<orderEntry type="library" scope="PROVIDED" name="activestorage (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
37
|
+
<orderEntry type="library" scope="PROVIDED" name="activesupport (v5.2.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
38
|
+
<orderEntry type="library" scope="PROVIDED" name="arel (v9.0.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
39
|
+
<orderEntry type="library" scope="PROVIDED" name="awesome_print (v1.8.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
32
40
|
<orderEntry type="library" scope="PROVIDED" name="builder (v3.2.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
33
41
|
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.0.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
34
42
|
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.1.4, ruby-2.5.3-p105) [gem]" level="application" />
|
|
35
43
|
<orderEntry type="library" scope="PROVIDED" name="crass (v1.0.4, ruby-2.5.3-p105) [gem]" level="application" />
|
|
36
44
|
<orderEntry type="library" scope="PROVIDED" name="erubi (v1.8.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
45
|
+
<orderEntry type="library" scope="PROVIDED" name="globalid (v0.4.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
37
46
|
<orderEntry type="library" scope="PROVIDED" name="http_headers-accept (v0.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
38
47
|
<orderEntry type="library" scope="PROVIDED" name="http_headers-link (v0.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
39
48
|
<orderEntry type="library" scope="PROVIDED" name="http_headers-utils (v0.2.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
40
49
|
<orderEntry type="library" scope="PROVIDED" name="i18n (v1.6.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
41
50
|
<orderEntry type="library" scope="PROVIDED" name="loofah (v2.2.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
42
|
-
<orderEntry type="library" scope="PROVIDED" name="
|
|
51
|
+
<orderEntry type="library" scope="PROVIDED" name="mail (v2.7.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
52
|
+
<orderEntry type="library" scope="PROVIDED" name="marcel (v0.3.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
53
|
+
<orderEntry type="library" scope="PROVIDED" name="media_types (v0.6.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
54
|
+
<orderEntry type="library" scope="PROVIDED" name="method_source (v0.9.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
55
|
+
<orderEntry type="library" scope="PROVIDED" name="mimemagic (v0.3.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
56
|
+
<orderEntry type="library" scope="PROVIDED" name="mini_mime (v1.0.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
43
57
|
<orderEntry type="library" scope="PROVIDED" name="mini_portile2 (v2.4.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
44
58
|
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.11.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
59
|
+
<orderEntry type="library" scope="PROVIDED" name="nio4r (v2.3.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
45
60
|
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.10.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
46
|
-
<orderEntry type="library" scope="PROVIDED" name="oj (v3.7.
|
|
61
|
+
<orderEntry type="library" scope="PROVIDED" name="oj (v3.7.10, ruby-2.5.3-p105) [gem]" level="application" />
|
|
47
62
|
<orderEntry type="library" scope="PROVIDED" name="rack (v2.0.6, ruby-2.5.3-p105) [gem]" level="application" />
|
|
48
63
|
<orderEntry type="library" scope="PROVIDED" name="rack-test (v1.1.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
64
|
+
<orderEntry type="library" scope="PROVIDED" name="rails (v5.2.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
49
65
|
<orderEntry type="library" scope="PROVIDED" name="rails-dom-testing (v2.0.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
50
66
|
<orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.0.4, ruby-2.5.3-p105) [gem]" level="application" />
|
|
67
|
+
<orderEntry type="library" scope="PROVIDED" name="railties (v5.2.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
51
68
|
<orderEntry type="library" scope="PROVIDED" name="rake (v10.5.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
69
|
+
<orderEntry type="library" scope="PROVIDED" name="sprockets (v3.7.2, ruby-2.5.3-p105) [gem]" level="application" />
|
|
70
|
+
<orderEntry type="library" scope="PROVIDED" name="sprockets-rails (v3.2.1, ruby-2.5.3-p105) [gem]" level="application" />
|
|
71
|
+
<orderEntry type="library" scope="PROVIDED" name="thor (v0.20.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
52
72
|
<orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.6, ruby-2.5.3-p105) [gem]" level="application" />
|
|
53
73
|
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.5, ruby-2.5.3-p105) [gem]" level="application" />
|
|
74
|
+
<orderEntry type="library" scope="PROVIDED" name="websocket-driver (v0.7.0, ruby-2.5.3-p105) [gem]" level="application" />
|
|
75
|
+
<orderEntry type="library" scope="PROVIDED" name="websocket-extensions (v0.1.3, ruby-2.5.3-p105) [gem]" level="application" />
|
|
54
76
|
</component>
|
|
55
77
|
</module>
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
- Add `accept_api_viewer` which is on by default
|
|
6
|
+
- Add `overwrite` parameter to `accept_html`
|
|
7
|
+
- Add `api_viewer_layout` configuration option
|
|
8
|
+
- Add generator to initialize the gem and copy the API Viewer
|
|
9
|
+
|
|
3
10
|
## 0.5.1
|
|
4
11
|
|
|
5
12
|
- Correctly expose `current_media_type` and `current_view`
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
media_types-serialization (0.
|
|
4
|
+
media_types-serialization (0.6.0)
|
|
5
5
|
actionpack (>= 4.0.0)
|
|
6
6
|
activesupport (>= 4.0.0)
|
|
7
7
|
http_headers-accept (< 1.0.0)
|
|
@@ -12,6 +12,16 @@ PATH
|
|
|
12
12
|
GEM
|
|
13
13
|
remote: https://rubygems.org/
|
|
14
14
|
specs:
|
|
15
|
+
actioncable (5.2.2)
|
|
16
|
+
actionpack (= 5.2.2)
|
|
17
|
+
nio4r (~> 2.0)
|
|
18
|
+
websocket-driver (>= 0.6.1)
|
|
19
|
+
actionmailer (5.2.2)
|
|
20
|
+
actionpack (= 5.2.2)
|
|
21
|
+
actionview (= 5.2.2)
|
|
22
|
+
activejob (= 5.2.2)
|
|
23
|
+
mail (~> 2.5, >= 2.5.4)
|
|
24
|
+
rails-dom-testing (~> 2.0)
|
|
15
25
|
actionpack (5.2.2)
|
|
16
26
|
actionview (= 5.2.2)
|
|
17
27
|
activesupport (= 5.2.2)
|
|
@@ -25,15 +35,32 @@ GEM
|
|
|
25
35
|
erubi (~> 1.4)
|
|
26
36
|
rails-dom-testing (~> 2.0)
|
|
27
37
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
38
|
+
activejob (5.2.2)
|
|
39
|
+
activesupport (= 5.2.2)
|
|
40
|
+
globalid (>= 0.3.6)
|
|
41
|
+
activemodel (5.2.2)
|
|
42
|
+
activesupport (= 5.2.2)
|
|
43
|
+
activerecord (5.2.2)
|
|
44
|
+
activemodel (= 5.2.2)
|
|
45
|
+
activesupport (= 5.2.2)
|
|
46
|
+
arel (>= 9.0)
|
|
47
|
+
activestorage (5.2.2)
|
|
48
|
+
actionpack (= 5.2.2)
|
|
49
|
+
activerecord (= 5.2.2)
|
|
50
|
+
marcel (~> 0.3.1)
|
|
28
51
|
activesupport (5.2.2)
|
|
29
52
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
30
53
|
i18n (>= 0.7, < 2)
|
|
31
54
|
minitest (~> 5.1)
|
|
32
55
|
tzinfo (~> 1.1)
|
|
56
|
+
arel (9.0.0)
|
|
57
|
+
awesome_print (1.8.0)
|
|
33
58
|
builder (3.2.3)
|
|
34
59
|
concurrent-ruby (1.1.4)
|
|
35
60
|
crass (1.0.4)
|
|
36
61
|
erubi (1.8.0)
|
|
62
|
+
globalid (0.4.2)
|
|
63
|
+
activesupport (>= 4.2.0)
|
|
37
64
|
http_headers-accept (0.2.1)
|
|
38
65
|
http_headers-utils (>= 0.2.0, < 1.0.0)
|
|
39
66
|
http_headers-link (0.2.1)
|
|
@@ -44,32 +71,72 @@ GEM
|
|
|
44
71
|
loofah (2.2.3)
|
|
45
72
|
crass (~> 1.0.2)
|
|
46
73
|
nokogiri (>= 1.5.9)
|
|
47
|
-
|
|
74
|
+
mail (2.7.1)
|
|
75
|
+
mini_mime (>= 0.1.1)
|
|
76
|
+
marcel (0.3.3)
|
|
77
|
+
mimemagic (~> 0.3.2)
|
|
78
|
+
media_types (0.6.1)
|
|
79
|
+
method_source (0.9.2)
|
|
80
|
+
mimemagic (0.3.3)
|
|
81
|
+
mini_mime (1.0.1)
|
|
48
82
|
mini_portile2 (2.4.0)
|
|
49
83
|
minitest (5.11.3)
|
|
84
|
+
nio4r (2.3.1)
|
|
50
85
|
nokogiri (1.10.1-x64-mingw32)
|
|
51
86
|
mini_portile2 (~> 2.4.0)
|
|
52
|
-
oj (3.7.
|
|
87
|
+
oj (3.7.10)
|
|
53
88
|
rack (2.0.6)
|
|
54
89
|
rack-test (1.1.0)
|
|
55
90
|
rack (>= 1.0, < 3)
|
|
91
|
+
rails (5.2.2)
|
|
92
|
+
actioncable (= 5.2.2)
|
|
93
|
+
actionmailer (= 5.2.2)
|
|
94
|
+
actionpack (= 5.2.2)
|
|
95
|
+
actionview (= 5.2.2)
|
|
96
|
+
activejob (= 5.2.2)
|
|
97
|
+
activemodel (= 5.2.2)
|
|
98
|
+
activerecord (= 5.2.2)
|
|
99
|
+
activestorage (= 5.2.2)
|
|
100
|
+
activesupport (= 5.2.2)
|
|
101
|
+
bundler (>= 1.3.0)
|
|
102
|
+
railties (= 5.2.2)
|
|
103
|
+
sprockets-rails (>= 2.0.0)
|
|
56
104
|
rails-dom-testing (2.0.3)
|
|
57
105
|
activesupport (>= 4.2.0)
|
|
58
106
|
nokogiri (>= 1.6)
|
|
59
107
|
rails-html-sanitizer (1.0.4)
|
|
60
108
|
loofah (~> 2.2, >= 2.2.2)
|
|
109
|
+
railties (5.2.2)
|
|
110
|
+
actionpack (= 5.2.2)
|
|
111
|
+
activesupport (= 5.2.2)
|
|
112
|
+
method_source
|
|
113
|
+
rake (>= 0.8.7)
|
|
114
|
+
thor (>= 0.19.0, < 2.0)
|
|
61
115
|
rake (10.5.0)
|
|
116
|
+
sprockets (3.7.2)
|
|
117
|
+
concurrent-ruby (~> 1.0)
|
|
118
|
+
rack (> 1, < 3)
|
|
119
|
+
sprockets-rails (3.2.1)
|
|
120
|
+
actionpack (>= 4.0)
|
|
121
|
+
activesupport (>= 4.0)
|
|
122
|
+
sprockets (>= 3.0.0)
|
|
123
|
+
thor (0.20.3)
|
|
62
124
|
thread_safe (0.3.6)
|
|
63
125
|
tzinfo (1.2.5)
|
|
64
126
|
thread_safe (~> 0.1)
|
|
127
|
+
websocket-driver (0.7.0)
|
|
128
|
+
websocket-extensions (>= 0.1.0)
|
|
129
|
+
websocket-extensions (0.1.3)
|
|
65
130
|
|
|
66
131
|
PLATFORMS
|
|
67
132
|
x64-mingw32
|
|
68
133
|
|
|
69
134
|
DEPENDENCIES
|
|
135
|
+
awesome_print
|
|
70
136
|
bundler (~> 2.0)
|
|
71
137
|
media_types-serialization!
|
|
72
138
|
minitest (~> 5.0)
|
|
139
|
+
rails (~> 5.2)
|
|
73
140
|
rake (~> 10.0)
|
|
74
141
|
|
|
75
142
|
BUNDLED WITH
|
data/README.md
CHANGED
|
@@ -21,6 +21,19 @@ And then execute:
|
|
|
21
21
|
Or install it yourself as:
|
|
22
22
|
|
|
23
23
|
$ gem install media_types-serialization
|
|
24
|
+
|
|
25
|
+
If you have not done this before, and you're using `rails`, install the necessary parts using:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
rails g media_types:serialization:api_viewer
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This will:
|
|
32
|
+
|
|
33
|
+
- Add the default `html_wrapper` layout which is an API Viewer used as fallback or the `.api_viewer` format
|
|
34
|
+
- Add the default `template_controller` which allows the API Viewer to post templated links
|
|
35
|
+
- Add the `route` for these templated link forms
|
|
36
|
+
- Add an initializer that registers the `media` renderer and `api_viewer` media type
|
|
24
37
|
|
|
25
38
|
## Usage
|
|
26
39
|
|
|
@@ -28,7 +41,7 @@ In order to use media type serialization you only need to do 2 things:
|
|
|
28
41
|
|
|
29
42
|
### Serializer
|
|
30
43
|
|
|
31
|
-
Add a serializer that can serialize a certain media type. The `to_hash` function will be called
|
|
44
|
+
Add a serializer that can serialize a certain media type. The `to_hash` function will be called _explicitly_ in your
|
|
32
45
|
controller, so you can always use your own, favourite serializer here to do the hefty work. This gem does provide some
|
|
33
46
|
easy tools, usually enough to do most serialization.
|
|
34
47
|
|
|
@@ -74,6 +87,7 @@ current `view` (e.g. `create`, `index`, `collection` or ` `). This means that by
|
|
|
74
87
|
the latest version you `MediaType` is reporting. The best way to supply your media type is via the [`media_types`](https://github.com/SleeplessByte/media-types-ruby) gem.
|
|
75
88
|
|
|
76
89
|
#### Multiple suffixes, one serializer
|
|
90
|
+
|
|
77
91
|
By default, the media renderer will automatically detect and inject the following:
|
|
78
92
|
- suffix `+json` if you define `to_json`
|
|
79
93
|
- suffix `+xml` if you define `to_xml`
|
|
@@ -86,6 +100,7 @@ If you don't define `to_html`, but try to make a serializer output `html`, it wi
|
|
|
86
100
|
`serializers/wrapper/html_wrapper.html.erb` (or any other templating extension).
|
|
87
101
|
|
|
88
102
|
#### Migrations (versions)
|
|
103
|
+
|
|
89
104
|
If the serializer can serialize multiple _versions_, you can supply them through `additional_versions: [2, 3]`. A way to
|
|
90
105
|
handle this is via backward migrations, meaning you'll migrate from the current version back to an older version.
|
|
91
106
|
|
|
@@ -129,7 +144,7 @@ end
|
|
|
129
144
|
### Controller
|
|
130
145
|
|
|
131
146
|
In your base controller, or wherever you'd like, include the `MediaTypes::Serialization` concern. In the controller that
|
|
132
|
-
uses the serialization, you need to
|
|
147
|
+
uses the serialization, you need to explicitly `accept` it if you want to use the built-in lookups.
|
|
133
148
|
|
|
134
149
|
```ruby
|
|
135
150
|
require 'media_types/serialization'
|
|
@@ -155,7 +170,8 @@ class BookController < ApiController
|
|
|
155
170
|
end
|
|
156
171
|
```
|
|
157
172
|
|
|
158
|
-
If you have normalized your resources (e.g. into `@resource`), you
|
|
173
|
+
If you have normalized your resources (e.g. into `@resource`), you can add a `render_media` method to your
|
|
174
|
+
`BaseController` and render resources like so:
|
|
159
175
|
|
|
160
176
|
```ruby
|
|
161
177
|
class ApiController < ActionController::API
|
|
@@ -165,13 +181,13 @@ class ApiController < ActionController::API
|
|
|
165
181
|
end
|
|
166
182
|
```
|
|
167
183
|
|
|
168
|
-
And then call `render_media` whenever you're ready to render
|
|
184
|
+
And then call `render_media` whenever you're ready to render.
|
|
169
185
|
|
|
170
186
|
### HTML output
|
|
171
187
|
|
|
172
188
|
You can define HTML outputs for example by creating a serializer that accepts `text/html`. At this moment, there may
|
|
173
|
-
only be one (1) active
|
|
174
|
-
the same preconditions in `before_action` (because how else would it know which one to pick?).
|
|
189
|
+
only be one (1) active `text/html` serializer for each action; a single controller can have multiple registered, but
|
|
190
|
+
never for the same preconditions in `before_action` (because how else would it know which one to pick?).
|
|
175
191
|
|
|
176
192
|
Use the `render` method to generate your HTML:
|
|
177
193
|
```ruby
|
|
@@ -197,10 +213,28 @@ end
|
|
|
197
213
|
```
|
|
198
214
|
|
|
199
215
|
You can change the default `wrapper` / `to_html` implementation by setting:
|
|
216
|
+
|
|
200
217
|
```ruby
|
|
201
218
|
::MediaTypes::Serialization.html_wrapper_layout = '/path/to/wrapper/layout'
|
|
202
219
|
```
|
|
203
220
|
|
|
221
|
+
### API viewer
|
|
222
|
+
|
|
223
|
+
There is a special media type exposed by this gem at `::MediaTypes::Serialization::MEDIA_TYPE_API_VIEWER`. If you're
|
|
224
|
+
using `rails` you'll want to register it. You can do so manually, or by `require`ing:
|
|
225
|
+
|
|
226
|
+
```ruby
|
|
227
|
+
require 'media_types/serialization/media_type/register'
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
If you do so, the `.api_viewer` format becomes available for all actions that call into `render media:`.
|
|
231
|
+
|
|
232
|
+
You can change the default `wrapper` implementation by setting:
|
|
233
|
+
|
|
234
|
+
```ruby
|
|
235
|
+
::MediaTypes::Serialization.api_viewer_layout = '/path/to/wrapper/layout'
|
|
236
|
+
```
|
|
237
|
+
|
|
204
238
|
### Wrapping output
|
|
205
239
|
|
|
206
240
|
By convention, `index` views are wrapped in `_index: [items]`, `collection` views are wrapped in `_embedded: [items]`
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
|
|
3
|
+
module MediaTypes
|
|
4
|
+
module Serialization
|
|
5
|
+
class ApiViewerGenerator < Rails::Generators::Base
|
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
|
7
|
+
|
|
8
|
+
def copy_controllers
|
|
9
|
+
copy_file "template_controller.rb", "app/controllers/api/template_controller.rb"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def copy_views
|
|
13
|
+
copy_file "api_viewer.html.erb", "app/views/serializers/wrapper/html_wrapper.html.erb"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def copy_initializer
|
|
17
|
+
copy_file "initializer.rb", "config/initializers/media_types_serialization.rb"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def add_route
|
|
21
|
+
route "namespace :api do\n match '/template', controller: :template, action: :create, via: %i[get post], as: :template\nend\n\n"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<title>API Viewer</title>
|
|
5
|
+
<%= csrf_meta_tags %>
|
|
6
|
+
<%= csp_meta_tag %>
|
|
7
|
+
|
|
8
|
+
<% # The following expects webpacker to be active, but you can replace these if you use the sprockets pipeline %>
|
|
9
|
+
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
|
10
|
+
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
|
|
11
|
+
</head>
|
|
12
|
+
|
|
13
|
+
<body class="container h-100" style="overflow: auto; justify-content: start">
|
|
14
|
+
|
|
15
|
+
<%# Remove the # below to show a logo %>
|
|
16
|
+
<%# link_to Rails.application.routes.url_helpers.root_path do %>
|
|
17
|
+
<%# render 'shared/logo', assigns: { width: 300, height: 63, style: "flex-shrink: 0; margin: 20px 0 40px" } %>
|
|
18
|
+
<%# end %>
|
|
19
|
+
|
|
20
|
+
<div class="h-auto w-100 mb-4">
|
|
21
|
+
<% links = @serializer.send(:header_links) %>
|
|
22
|
+
<% if links.present? %>
|
|
23
|
+
<nav class="card w-100 mb-4 card--inverse">
|
|
24
|
+
<div class="card-header">
|
|
25
|
+
<h5 class="card-title my-auto">HTTP Links</h5>
|
|
26
|
+
</div>
|
|
27
|
+
<ul class="list-group list-group-flush">
|
|
28
|
+
<% links.each do |key, link| %>
|
|
29
|
+
<% href = link && link[:href] || next %>
|
|
30
|
+
<li class="list-group-item">
|
|
31
|
+
<% if link[:templated] %>
|
|
32
|
+
<%# You need to add this route to your routes file; Use the provided generator %>
|
|
33
|
+
<%# rails g api_viewer %>
|
|
34
|
+
<%= form_tag Rails.application.routes.url_helpers.api_template_path, { method: :get, class: 'link-template-form' } do %>
|
|
35
|
+
<%= hidden_field_tag 'template[href]', href %>
|
|
36
|
+
<button type="submit"><strong><%= key %></strong></button>
|
|
37
|
+
<code><%= href.gsub(/:([a-z][^\/]*)|(?:{|%7B)([a-z][^\/{}]*)(%7D|})/) do |match|
|
|
38
|
+
tag = match.tr(':{}', '').delete('%7B').delete('%7D')
|
|
39
|
+
text_field_tag('template[%s]' % tag, nil, placeholder: tag)
|
|
40
|
+
end.html_safe %></code>
|
|
41
|
+
<% end %>
|
|
42
|
+
<% else %>
|
|
43
|
+
<%= link_to href do %>
|
|
44
|
+
<strong><%= key %></strong>
|
|
45
|
+
<code><%= href %></code>
|
|
46
|
+
<% end %>
|
|
47
|
+
<% end %>
|
|
48
|
+
</li>
|
|
49
|
+
<% end %>
|
|
50
|
+
</ul>
|
|
51
|
+
</nav>
|
|
52
|
+
<% end %>
|
|
53
|
+
|
|
54
|
+
<article class="card w-100 mb-4 card--inverse">
|
|
55
|
+
<div class="card-body">
|
|
56
|
+
<h5 class="card-title"><%= @mime_type %></h5>
|
|
57
|
+
<small class="card-subtitle mb-2 text-muted">Serialized by: <%= @serializer.class.name %></small>
|
|
58
|
+
<pre><code class="code" style="
|
|
59
|
+
white-space: pre-wrap;
|
|
60
|
+
white-space: -moz-pre-wrap;
|
|
61
|
+
white-space: -o-pre-wrap;
|
|
62
|
+
word-wrap: break-word;"><% code = JSON.pretty_generate(@serializer.to_hash).truncate(50_000)
|
|
63
|
+
.gsub('</h1>', "</h1>\n")
|
|
64
|
+
.gsub('</div>', "</div>\n")
|
|
65
|
+
.gsub('<', '<')
|
|
66
|
+
.gsub('>', '>')
|
|
67
|
+
.gsub('\n', "<br>")%>
|
|
68
|
+
<%= code.gsub(/"href": "(http(?:s?:\/\/.*?))"/) { |full_match|
|
|
69
|
+
href = full_match[9...-1]
|
|
70
|
+
'"href": "' + link_to(href.gsub('%7B', '{').gsub('%7D', '}'), href).html_safe + '"' rescue full_match
|
|
71
|
+
}.html_safe %></code></pre>
|
|
72
|
+
</div>
|
|
73
|
+
</article>
|
|
74
|
+
|
|
75
|
+
<nav class="card w-100 mb-4 card--inverse">
|
|
76
|
+
<div class="card-header">
|
|
77
|
+
<h5 class="card-title my-auto">Endpoint representations</h5>
|
|
78
|
+
</div>
|
|
79
|
+
<ul class="list-group list-group-flush">
|
|
80
|
+
<% @representations.each do |representation| %>
|
|
81
|
+
<% mime_type = Mime::Type.lookup(representation) || next %>
|
|
82
|
+
<li class="list-group-item">
|
|
83
|
+
<%= link_to (@url_context + ".#{mime_type.symbol}").sub('/.', '.') do %>
|
|
84
|
+
<strong><%= representation %></strong>
|
|
85
|
+
<code><%= mime_type.symbol %></code>
|
|
86
|
+
<% end %>
|
|
87
|
+
</li>
|
|
88
|
+
<% end %>
|
|
89
|
+
</ul>
|
|
90
|
+
</nav>
|
|
91
|
+
</div>
|
|
92
|
+
</body>
|
|
93
|
+
</html>
|
|
94
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'media_types/serialization'
|
|
2
|
+
|
|
3
|
+
# This registers the renderer as side-effect
|
|
4
|
+
require 'media_types/serialization/renderer/register'
|
|
5
|
+
|
|
6
|
+
# This registers the media type as side-effect
|
|
7
|
+
require 'media_types/serialization/media_type/register'
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# The following options are breaking and therefore disabled by default.
|
|
11
|
+
#
|
|
12
|
+
# When these are true, the +header_links+ and +extract_links+ methods is called
|
|
13
|
+
# when dealing with a .collection or .index view, respectively. It allows you
|
|
14
|
+
# to define +_links+ for the root level from your serializer.
|
|
15
|
+
#
|
|
16
|
+
#
|
|
17
|
+
# MediaTypes::Serialization.collect_links_for_collection = true
|
|
18
|
+
# MediaTypes::Serialization.collect_links_for_index = true
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# The API Viewer template is provided if you used the generator. You can change
|
|
22
|
+
# the view it renders by changing the path below.
|
|
23
|
+
#
|
|
24
|
+
#
|
|
25
|
+
# ::MediaTypes::Serialization.api_viewer_layout = '/path/to/wrapper/layout'
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# When .to_html is not provided by a serializer, it will fall back to render
|
|
29
|
+
# the API Viewer, but this template can be changed by changing the path
|
|
30
|
+
# below.
|
|
31
|
+
#
|
|
32
|
+
#
|
|
33
|
+
# ::MediaTypes::Serialization.html_wrapper_layout = '/path/to/wrapper/layout'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Api
|
|
2
|
+
class TemplateController < ApiController
|
|
3
|
+
def create
|
|
4
|
+
href = params[:template].delete(:href)
|
|
5
|
+
templated_values = params[:template].permit!.to_h
|
|
6
|
+
|
|
7
|
+
response["Location"] = templated_values.reduce(href) do |result, (key, value)|
|
|
8
|
+
result.sub!(%r{:#{key}|{#{key}}|%7B#{key}%7D}, value) || invalid_parameter(key, href)
|
|
9
|
+
end
|
|
10
|
+
head :temporary_redirect
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def invalid_parameter(key, href)
|
|
16
|
+
raise ActionController::BadRequest, format(
|
|
17
|
+
'Received templated value for "%<key>s" which does not exist in templated link "%<href>s"',
|
|
18
|
+
key: key,
|
|
19
|
+
href: href.gsub('%7B', '{').gsub('%7D', '}')
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -13,35 +13,62 @@ require 'media_types/serialization/no_serializer_for_content_type'
|
|
|
13
13
|
require 'media_types/serialization/base'
|
|
14
14
|
require 'media_types/serialization/wrapper/html_wrapper'
|
|
15
15
|
|
|
16
|
+
require 'awesome_print'
|
|
17
|
+
|
|
16
18
|
module MediaTypes
|
|
17
19
|
module Serialization
|
|
18
20
|
|
|
19
|
-
mattr_accessor :common_suffix, :collect_links_for_collection, :collect_links_for_index,
|
|
21
|
+
mattr_accessor :common_suffix, :collect_links_for_collection, :collect_links_for_index,
|
|
22
|
+
:html_wrapper_layout, :api_viewer_layout
|
|
20
23
|
|
|
21
24
|
extend ActiveSupport::Concern
|
|
22
25
|
|
|
23
|
-
HEADER_ACCEPT
|
|
24
|
-
|
|
26
|
+
HEADER_ACCEPT = 'HTTP_ACCEPT'
|
|
27
|
+
|
|
28
|
+
MEDIA_TYPE_HTML = 'text/html'
|
|
29
|
+
MEDIA_TYPE_API_VIEWER = 'application/vnd.xpbytes.api-viewer.v1'
|
|
25
30
|
|
|
26
31
|
# rubocop:disable Metrics/BlockLength
|
|
27
32
|
class_methods do
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# Accept serialization using the passed in +serializer+ for the given +view+
|
|
36
|
+
#
|
|
28
37
|
# @see #freeze_accepted_media!
|
|
29
38
|
#
|
|
30
|
-
|
|
39
|
+
# @param serializer the serializer to use for serialization. Needs to respond to #to_body, but may respond to
|
|
40
|
+
# #to_json if the type accepted is ...+json, or #to_xml if the type accepted is ...+xml or #to_html if the type
|
|
41
|
+
# accepted is text/html
|
|
42
|
+
# @param [(String | NilClass|)[]] view the views it should serializer for. Use nil for no view
|
|
43
|
+
# @param [Boolean] accept_api_viewer if true, accepts this serializer as base for the api viewer
|
|
44
|
+
# @param [Boolean] accept_html if true, accepts this serializer as the html fallback
|
|
45
|
+
#
|
|
46
|
+
def accept_serialization(serializer, view: [nil], accept_api_viewer: true, accept_html: accept_api_viewer, **filter_opts)
|
|
31
47
|
before_action(**filter_opts) do
|
|
32
|
-
|
|
48
|
+
resolved_media_types(serializer, view: view) do |media_type, media_view, _, register|
|
|
33
49
|
opts = { media_type: media_type, media_view: media_view }
|
|
50
|
+
register.call(String(media_type), wrap_media(serializer, **opts))
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
accept_html(serializer, view: view, overwrite: false, **filter_opts) if accept_html
|
|
55
|
+
accept_api_viewer(serializer, view: view, overwrite: false, **filter_opts) if accept_api_viewer
|
|
56
|
+
end
|
|
34
57
|
|
|
35
|
-
|
|
36
|
-
|
|
58
|
+
def accept_html(serializer, view: [nil], overwrite: true, **filter_opts)
|
|
59
|
+
before_action(**filter_opts) do
|
|
60
|
+
resolved_media_types(serializer, view: view) do |_, media_view, registered, register|
|
|
61
|
+
break if registered.call(MEDIA_TYPE_HTML) && !overwrite
|
|
62
|
+
register.call(MEDIA_TYPE_HTML, wrap_html(serializer, media_view: media_view, media_type: MEDIA_TYPE_HTML))
|
|
37
63
|
end
|
|
38
64
|
end
|
|
39
65
|
end
|
|
40
66
|
|
|
41
|
-
def
|
|
67
|
+
def accept_api_viewer(serializer, view: [nil], overwrite: true, **filter_opts)
|
|
42
68
|
before_action(**filter_opts) do
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
resolved_media_types(serializer, view: view) do |_, media_view, registered, register|
|
|
70
|
+
break if registered.call(MEDIA_TYPE_API_VIEWER) && !overwrite
|
|
71
|
+
register.call(MEDIA_TYPE_API_VIEWER, wrap_html(serializer, media_view: media_view, media_type: MEDIA_TYPE_API_VIEWER))
|
|
45
72
|
break
|
|
46
73
|
end
|
|
47
74
|
end
|
|
@@ -76,6 +103,7 @@ module MediaTypes
|
|
|
76
103
|
if self.class.respond_to?(:respond_to)
|
|
77
104
|
self.class.respond_to(*Hash(serializers).keys.map { |type| Mime::Type.lookup(type) })
|
|
78
105
|
end
|
|
106
|
+
|
|
79
107
|
serializers.freeze
|
|
80
108
|
end
|
|
81
109
|
end
|
|
@@ -156,10 +184,15 @@ module MediaTypes
|
|
|
156
184
|
end
|
|
157
185
|
|
|
158
186
|
def resolved_media_types(serializer, view:)
|
|
159
|
-
|
|
187
|
+
self.serializers = Hash(serializers)
|
|
188
|
+
|
|
189
|
+
registered = serializers.method(:key)
|
|
190
|
+
register = serializers.method(:[]=)
|
|
191
|
+
|
|
192
|
+
Array(view).each do |media_view|
|
|
160
193
|
media_view = String(media_view)
|
|
161
194
|
Array(serializer.media_type(view: media_view)).each do |media_type|
|
|
162
|
-
yield media_type, media_view,
|
|
195
|
+
yield media_type, media_view, registered, register
|
|
163
196
|
end
|
|
164
197
|
end
|
|
165
198
|
end
|
|
@@ -38,11 +38,11 @@ module MediaTypes
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
[media_type_view].concat(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
media_type_versions.map { |version| media_type_view&.version(version) },
|
|
42
|
+
media_type_versions.flat_map do |version|
|
|
43
|
+
(suffixes).map { |suffix| media_type_view&.suffix(suffix)&.version(version) }
|
|
44
|
+
end,
|
|
45
|
+
additionals
|
|
46
46
|
).compact.uniq
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -2,11 +2,17 @@ require 'media_types/serialization/no_content_type_given'
|
|
|
2
2
|
require 'active_support/core_ext/object/blank'
|
|
3
3
|
require 'active_support/core_ext/hash/conversions'
|
|
4
4
|
|
|
5
|
+
require 'media_types/serialization'
|
|
6
|
+
|
|
5
7
|
module MediaTypes
|
|
6
8
|
module Serialization
|
|
7
9
|
# noinspection RubyConstantNamingConvention
|
|
8
10
|
Renderer = lambda do |obj, options|
|
|
9
|
-
content_type = options[:content_type] ||
|
|
11
|
+
content_type = options[:content_type] ||
|
|
12
|
+
options[:mime_type]&.to_s ||
|
|
13
|
+
self.content_type&.to_s ||
|
|
14
|
+
obj.current_media_type.to_s
|
|
15
|
+
|
|
10
16
|
raise NoContentTypeGiven if content_type.blank?
|
|
11
17
|
|
|
12
18
|
self.content_type ||= content_type
|
|
@@ -15,8 +21,11 @@ module MediaTypes
|
|
|
15
21
|
obj.respond_to?(:to_json) ? obj.to_json(options) : obj.to_hash.to_json(options)
|
|
16
22
|
elsif content_type.ends_with?('+xml') || Mime::Type.lookup(content_type) == Mime[:xml]
|
|
17
23
|
obj.respond_to?(:to_xml) ? obj.to_xml(options) : obj.to_hash.to_xml(options)
|
|
18
|
-
elsif Mime::Type.lookup(content_type) == Mime[:html]
|
|
19
|
-
obj.
|
|
24
|
+
elsif Mime::Type.lookup(content_type) == Mime[:html] && obj.respond_to?(:to_html)
|
|
25
|
+
obj.to_html
|
|
26
|
+
elsif content_type === MEDIA_TYPE_API_VIEWER && obj.respond_to?(:to_api_viewer)
|
|
27
|
+
self.content_type = 'text/html'
|
|
28
|
+
obj.to_api_viewer
|
|
20
29
|
else
|
|
21
30
|
obj.to_body(content_type: options.delete(:content_type) || content_type, **options)
|
|
22
31
|
end
|
|
@@ -21,9 +21,12 @@ module MediaTypes
|
|
|
21
21
|
|
|
22
22
|
def to_html
|
|
23
23
|
return super if __getobj__.respond_to?(:to_html)
|
|
24
|
+
to_api_viewer(layout: ::MediaTypes::Serialization.html_wrapper_layout)
|
|
25
|
+
end
|
|
24
26
|
|
|
27
|
+
def to_api_viewer(layout: ::MediaTypes::Serialization.api_viewer_layout)
|
|
25
28
|
ActionController::Base.render(
|
|
26
|
-
|
|
29
|
+
layout || 'serializers/wrapper/html_wrapper',
|
|
27
30
|
assigns: {
|
|
28
31
|
serializer: self,
|
|
29
32
|
view: view,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
|
|
2
|
-
lib = File.expand_path(
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
4
|
+
require 'media_types/serialization/version'
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
7
|
+
spec.name = 'media_types-serialization'
|
|
8
8
|
spec.version = MediaTypes::Serialization::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
9
|
+
spec.authors = ['Derk-Jan Karrenbeld']
|
|
10
|
+
spec.email = ['derk-jan@xpbytes.com']
|
|
11
11
|
|
|
12
12
|
spec.summary = 'Add media types supported serialization using your favourite serializer'
|
|
13
13
|
spec.homepage = 'https://github.com/XPBytes/media_types-serialization'
|
|
@@ -16,14 +16,14 @@ Gem::Specification.new do |spec|
|
|
|
16
16
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
17
17
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
18
18
|
if spec.respond_to?(:metadata)
|
|
19
|
-
# spec.metadata[
|
|
19
|
+
# spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com''
|
|
20
20
|
|
|
21
|
-
spec.metadata[
|
|
22
|
-
spec.metadata[
|
|
23
|
-
spec.metadata[
|
|
21
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
22
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
|
23
|
+
spec.metadata['changelog_uri'] = spec.homepage + '/CHANGELOG.md'
|
|
24
24
|
else
|
|
25
|
-
raise
|
|
26
|
-
|
|
25
|
+
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
|
26
|
+
'public gem pushes.'
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Specify which files should be added to the gem when it is released.
|
|
@@ -31,9 +31,9 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
|
32
32
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
33
33
|
end
|
|
34
|
-
spec.bindir =
|
|
34
|
+
spec.bindir = 'exe'
|
|
35
35
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
36
|
-
spec.require_paths = [
|
|
36
|
+
spec.require_paths = ['lib']
|
|
37
37
|
|
|
38
38
|
spec.add_dependency 'actionpack', '>= 4.0.0'
|
|
39
39
|
spec.add_dependency 'activesupport', '>= 4.0.0'
|
|
@@ -42,7 +42,9 @@ Gem::Specification.new do |spec|
|
|
|
42
42
|
spec.add_dependency 'http_headers-accept', '< 1.0.0'
|
|
43
43
|
spec.add_dependency 'http_headers-link', '< 1.0.0'
|
|
44
44
|
|
|
45
|
-
spec.add_development_dependency
|
|
46
|
-
spec.add_development_dependency
|
|
47
|
-
spec.add_development_dependency
|
|
45
|
+
spec.add_development_dependency 'awesome_print'
|
|
46
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
47
|
+
spec.add_development_dependency 'rails', '~> 5.2'
|
|
48
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
49
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
|
48
50
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: media_types-serialization
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Derk-Jan Karrenbeld
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: actionpack
|
|
@@ -94,6 +94,20 @@ dependencies:
|
|
|
94
94
|
- - "<"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: 1.0.0
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: awesome_print
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
112
|
name: bundler
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,6 +122,20 @@ dependencies:
|
|
|
108
122
|
- - "~>"
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
124
|
version: '2.0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: rails
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '5.2'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '5.2'
|
|
111
139
|
- !ruby/object:Gem::Dependency
|
|
112
140
|
name: rake
|
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -163,9 +191,14 @@ files:
|
|
|
163
191
|
- Rakefile
|
|
164
192
|
- bin/console
|
|
165
193
|
- bin/setup
|
|
194
|
+
- lib/generators/media_types/serialization/api_viewer/api_viewer_generator.rb
|
|
195
|
+
- lib/generators/media_types/serialization/api_viewer/templates/api_viewer.html.erb
|
|
196
|
+
- lib/generators/media_types/serialization/api_viewer/templates/initializer.rb
|
|
197
|
+
- lib/generators/media_types/serialization/api_viewer/templates/template_controller.rb
|
|
166
198
|
- lib/media_types/serialization.rb
|
|
167
199
|
- lib/media_types/serialization/base.rb
|
|
168
200
|
- lib/media_types/serialization/error.rb
|
|
201
|
+
- lib/media_types/serialization/media_type/register.rb
|
|
169
202
|
- lib/media_types/serialization/migrations_command.rb
|
|
170
203
|
- lib/media_types/serialization/migrations_support.rb
|
|
171
204
|
- lib/media_types/serialization/mime_type_support.rb
|
|
@@ -204,8 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
204
237
|
- !ruby/object:Gem::Version
|
|
205
238
|
version: '0'
|
|
206
239
|
requirements: []
|
|
207
|
-
|
|
208
|
-
rubygems_version: 2.7.6
|
|
240
|
+
rubygems_version: 3.0.3
|
|
209
241
|
signing_key:
|
|
210
242
|
specification_version: 4
|
|
211
243
|
summary: Add media types supported serialization using your favourite serializer
|