render_turbo_stream 0.1.19 → 0.1.21
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/README.md +32 -14
- data/app/views/render_turbo_stream_partials.html.erb +25 -2
- data/lib/render_turbo_stream/test_helpers.rb +31 -16
- data/lib/render_turbo_stream/version.rb +1 -1
- data/lib/render_turbo_stream.rb +2 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b84c79cfe97c99b55813d6a22ebcf0267e6dc7ee66b9a6c8bb922c8f5cf812b
|
4
|
+
data.tar.gz: 420971446a65cbda6c141be9c32941ddf991944cbb3c84f9f2eb259cf077c3b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bc0935233cc25323b8f92e12227308d680b24d6ea532786e685c75d6500158d68991dd9babe5d2bc1424ca8c93f43912528cc8a4abac6363c636331d8929fd5
|
7
|
+
data.tar.gz: f2ee4939746a8b7d4dc06df81920e55baa3c5bce6ee26b04778b91e5067ffb846e436fddeed2c4868f9ea9b0ca5876a8f4e29a65f146fc438c362bfbc7c13c05
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ ApplicationController
|
|
22
22
|
include RenderTurboStream
|
23
23
|
```
|
24
24
|
|
25
|
-
|
25
|
+
Required Configurations for Flash Partial
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
config.x.render_turbo_stream.flash_partial = 'layouts/flash'
|
@@ -34,7 +34,7 @@ The corresponding partials for flashes could look [like this](https://gitlab.com
|
|
34
34
|
|
35
35
|
## Usage
|
36
36
|
|
37
|
-
`turbo_stream_save` is a special method for
|
37
|
+
`turbo_stream_save` is a special method for streamlining `update` or `create` functions for `turbo_stream`, which might look like this:
|
38
38
|
|
39
39
|
```ruby
|
40
40
|
def create
|
@@ -48,7 +48,7 @@ The corresponding partials for flashes could look [like this](https://gitlab.com
|
|
48
48
|
end
|
49
49
|
```
|
50
50
|
|
51
|
-
This
|
51
|
+
This will set a status, generate a flash message and perform `stream_partials', which could result in something like this:
|
52
52
|
|
53
53
|
```ruby
|
54
54
|
stream_partials(
|
@@ -66,7 +66,7 @@ stream_partials(
|
|
66
66
|
)
|
67
67
|
```
|
68
68
|
|
69
|
-
The `stream_partial
|
69
|
+
The `stream_partial' method is nothing more than a singular of `stream_partials'.
|
70
70
|
|
71
71
|
```ruby
|
72
72
|
stream_partial(
|
@@ -79,11 +79,11 @@ stream_partial(
|
|
79
79
|
|
80
80
|
## Testing
|
81
81
|
|
82
|
-
For system testing there is
|
82
|
+
For system testing, there is Capybara.
|
83
83
|
|
84
|
-
For
|
84
|
+
For request-level tests, there are some helpers:
|
85
85
|
|
86
|
-
If request format is not `turbo_stream`, which is the case on request specs, the method responds in a
|
86
|
+
If the request format is not `turbo_stream`, which is the case on request specs, the method responds in a special format html that can be easily checked by included test helpers. So tests could look like this:
|
87
87
|
|
88
88
|
```ruby
|
89
89
|
require 'rails_helper'
|
@@ -91,18 +91,32 @@ include RenderTurboStream::TestHelpers
|
|
91
91
|
|
92
92
|
RSpec.describe "Articles", type: :request do
|
93
93
|
let(:invalid_params) { { article: { title: '', desciption: 'abc' } } }
|
94
|
-
it '
|
95
|
-
|
96
|
-
|
94
|
+
it 'create failed' do
|
95
|
+
post articles_path(params: invalid_params)
|
96
|
+
|
97
97
|
expect(response.status).to eq(422)
|
98
|
-
expect(
|
99
|
-
|
100
|
-
|
98
|
+
expect(partials_count).to eq(2)
|
99
|
+
|
100
|
+
# .._params means: check the params used to generate the partials.
|
101
|
+
expect(partials_paths).to include('articles/form', 'layouts/flash')
|
102
|
+
expect(partials_ids).to include('form', 'flash-box')
|
103
|
+
|
104
|
+
expect(partials_params_by_id['flash-box'].length).to eq(1)
|
105
|
+
expect(partials_params_by_id['flash-box'].first['partial']).to eq('layouts/flash')
|
106
|
+
|
107
|
+
expect(partials_html_by_id['flash-box'].length).to eq(1)
|
108
|
+
expect(partials_html_by_id['flash-box'].first).to include('Article could not be created')
|
109
|
+
|
110
|
+
expect(partials_params_by_path['layouts/flash'].length).to eq(1)
|
111
|
+
expect(partials_params_by_path['layouts/flash'].first['partial']).to eq('layouts/flash')
|
112
|
+
|
113
|
+
expect(partials_html_by_path['layouts/flash'].length).to eq(1)
|
114
|
+
expect(partials_html_by_path['layouts/flash'].first).to include('Article could not be created')
|
101
115
|
end
|
102
116
|
end
|
103
117
|
```
|
104
118
|
|
105
|
-
|
119
|
+
The test for a redirection might look something like this:
|
106
120
|
|
107
121
|
```ruby
|
108
122
|
it 'update success' do
|
@@ -112,6 +126,10 @@ it 'update success' do
|
|
112
126
|
end
|
113
127
|
```
|
114
128
|
|
129
|
+
P.S.:
|
130
|
+
|
131
|
+
Testing the plugin itself: There is a [quick-and-dirty app](https://gitlab.com/sedl/renderturbostream_railsapp) which includes the plugin and has tests done by rspec/request and capybara.
|
132
|
+
|
115
133
|
## Parameters
|
116
134
|
|
117
135
|
`save_action` (first parameter, boolean) true if successful
|
@@ -1,11 +1,34 @@
|
|
1
1
|
<% partials_count = 0 %>
|
2
2
|
<% rendered_partials = [] %>
|
3
|
+
<%# htmls = [] %>
|
4
|
+
<% htmls_by_id = {} %>
|
5
|
+
<% params_by_id = {} %>
|
6
|
+
<% htmls_by_path = {} %>
|
7
|
+
<% params_by_path = {} %>
|
3
8
|
<% streams.each do |s| %>
|
4
|
-
<% render s[:partial], locals: s[:locals], formats: [:html ] %>
|
9
|
+
<% html = (render s[:partial], locals: s[:locals], formats: [:html ]) %>
|
10
|
+
<%# htmls.push(html) %>
|
11
|
+
<% htmls_by_id[s[:id]] ||= [] %>
|
12
|
+
<% htmls_by_id[s[:id]].push(html) %>
|
13
|
+
<% params_by_id[s[:id]] ||= [] %>
|
14
|
+
<% params_by_id[s[:id]].push(s) %>
|
15
|
+
|
16
|
+
<% htmls_by_path[s[:partial]] ||= [] %>
|
17
|
+
<% htmls_by_path[s[:partial]].push(html) %>
|
18
|
+
<% params_by_path[s[:partial]] ||= [] %>
|
19
|
+
<% params_by_path[s[:partial]].push(s) %>
|
20
|
+
|
5
21
|
<% partials_count += 1 %>
|
6
22
|
<% rendered_partials.push(s[:partial]) %>
|
7
23
|
<% end %>
|
8
24
|
|
25
|
+
<%= content_tag :div, htmls_by_id.to_json, id: 'htmls_by_id' %>
|
26
|
+
<%= content_tag :div, params_by_id.to_json, id: 'params_by_id' %>
|
27
|
+
|
28
|
+
<%= content_tag :div, htmls_by_path.to_json, id: 'htmls_by_path' %>
|
29
|
+
<%= content_tag :div, params_by_path.to_json, id: 'params_by_path' %>
|
9
30
|
|
10
31
|
<%= content_tag :div, check.to_json, id: 'check-json' %>
|
11
|
-
|
32
|
+
<%#= content_tag :div, htmls.to_json, id: 'htmls' %>
|
33
|
+
<%= content_tag :div, rendered_partials.to_json, id: 'rendered-partials' %>
|
34
|
+
<%#= content_tag :div, streams.to_json, id: 'streams' %>
|
@@ -1,32 +1,47 @@
|
|
1
1
|
module RenderTurboStream
|
2
2
|
module TestHelpers
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
|
4
|
+
# returns hash of arrays with responded html(as string) contents by ID
|
5
|
+
def partials_html_by_id
|
6
|
+
e = Nokogiri::HTML(response.body).search('#htmls_by_id').first
|
7
|
+
JSON.parse(e.inner_html)
|
6
8
|
end
|
7
|
-
|
8
|
-
|
9
|
+
|
10
|
+
def partials_params_by_id
|
11
|
+
e = Nokogiri::HTML(response.body).search('#params_by_id').first
|
9
12
|
JSON.parse(e.inner_html)
|
10
13
|
end
|
11
14
|
|
12
|
-
# returns
|
13
|
-
|
14
|
-
|
15
|
-
partials = Nokogiri::HTML(response.body).search('#rendered-partials').first
|
15
|
+
# returns hash of arrays with responded html(as string) contents by partial-path
|
16
|
+
def partials_html_by_path
|
17
|
+
e = Nokogiri::HTML(response.body).search('#htmls_by_path').first
|
16
18
|
JSON.parse(e.inner_html)
|
17
|
-
partials.select{|p| p[id] == id }
|
18
19
|
end
|
19
20
|
|
20
|
-
# returns
|
21
|
-
def
|
22
|
-
|
21
|
+
# returns hash of arrays with params by them rendered partials are called
|
22
|
+
def partials_params_by_path
|
23
|
+
e = Nokogiri::HTML(response.body).search('#params_by_path').first
|
23
24
|
JSON.parse(e.inner_html)
|
24
|
-
partials.select{|p| p[id] == id }.first
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
# count of rendered parials
|
28
|
+
def partials_count
|
29
|
+
partials_paths.length
|
29
30
|
end
|
31
|
+
|
32
|
+
# array of strings of rendered partial ids
|
33
|
+
def partials_ids
|
34
|
+
e = Nokogiri::HTML(response.body).search('#check-json').first
|
35
|
+
JSON.parse(e.inner_html).keys
|
36
|
+
end
|
37
|
+
|
38
|
+
# array of strings of paths by them rendered partials are called, example: ['articles/form']
|
39
|
+
def partials_paths
|
40
|
+
e = Nokogiri::HTML(response.body).search('#rendered-partials').first
|
41
|
+
JSON.parse(e.inner_html)
|
42
|
+
end
|
43
|
+
|
44
|
+
# check response status and return redirected_to path
|
30
45
|
def turbo_redirected_to
|
31
46
|
expect(response.status).to eq(302)
|
32
47
|
r = JSON.parse(response.body)
|
data/lib/render_turbo_stream.rb
CHANGED
@@ -138,7 +138,8 @@ module RenderTurboStream
|
|
138
138
|
def stream_partials(array)
|
139
139
|
|
140
140
|
ary = []
|
141
|
-
array.dup.each do |
|
141
|
+
array.dup.each do |pr|
|
142
|
+
props = pr.symbolize_keys
|
142
143
|
part = (props[:partial].present? ? props[:partial] : props[:id]).gsub('-', '_')
|
143
144
|
partial = (part.to_s.include?('/') ? part : [controller_path, part].join('/'))
|
144
145
|
r = props
|