render_turbo_stream 0.1.16 → 0.1.18

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: 3d66da3caed655e785c5387c8fe154dfafa59596aabddfa78e66c78f3447db23
4
- data.tar.gz: 9825d6878ed1f2df13c518e74383a714ead6c70c19514282f1afe55260c7e005
3
+ metadata.gz: fd4172769edde2afebf684b4a53c6497e255b1acf0e03b5ca8fe2ba93b64437d
4
+ data.tar.gz: 1c99586db62a402be30535c39bf3d60b279fdb269000b2b362b49e1fa935308d
5
5
  SHA512:
6
- metadata.gz: 1819b9a272d55ffe7fb3abde7e36fc060c952669880767727b3e1e052a7fd16420ee367c63fe7e382b88197972f9a4abe54cb0521c6298a18c977b6f82c4fe3a
7
- data.tar.gz: 134b4a2ed93a6d4b76e9ba47107f565d856bada2dfff5f2db4f07e4b323da1b4ce4620c5f1c333223531c1f291f12035669a6460935c985d0adfc6d2f77b0340
6
+ metadata.gz: 510284ee5f2b48df8161f0dc7a4552b5f9785b8c6d49a6b71dcdd98f37804bd22874a63e2f8f2f3b4967454fedfed8d3e2eb98bbfb85645a7e4cf83f4311c4d8
7
+ data.tar.gz: e0336ad09c42899b3c1b9d6d717cd1ec7b6a5781df932bf52956b643304170418dabd2334f4b99509e0059fa37f7a81f6a6672e22b9705890d400cd02a812eb0
data/README.md CHANGED
@@ -4,7 +4,7 @@ Defining templates like `(create|update).turbo_stream.haml` annoyed me.
4
4
 
5
5
  Working consistently with turbo_stream means shooting lots of partials from the backend to the frontend, which always needs the same attributes: ID, partial, and maybe some locals. This gem serializes that: Partials can be controlled directly from the controller.
6
6
 
7
- It sets the status, generates a flash message, handles redirection, pushes it all to the front and prepares a response for request-specs.
7
+ It sets the status, generates a flash message, handles redirection, pushes it all to the front and comes with predefined helpers for enabling request-specs.
8
8
 
9
9
  ## Installation
10
10
 
@@ -79,22 +79,26 @@ stream_partial(
79
79
 
80
80
  ## Testing
81
81
 
82
- For system testing you need capybara.
82
+ For system testing there is capybara.
83
83
 
84
- For enabling request specs:
84
+ For Tests on request level there are some helpers:
85
85
 
86
- If `request.format` is not `turbo_stream` the method responds as `json` with status.
87
- `response.body` returns a `json` where the key is the `html-ID` that is used by turbo-stream with the properties of the partials. Testing by rspec could look like this:
86
+ If request format is not `turbo_stream`, which is the case on request specs, the method responds in a html by a special format that can easily be checked by included test-helpers. So, tests could look like this:
88
87
 
89
88
  ```ruby
90
- it 'update failed' do
91
- a = FactoryBot.create(:article)
92
- patch article_path(a, params: invalid_params)
93
- expect(response.status).to eq(422)
94
- h = JSON.parse(response.body)
95
- expect(h['form']['partial']).to eq('articles/form')
96
- expect(h['flash-box']['partial']).to eq('layouts/flash')
97
- expect(h.keys.length).to eq(2)
89
+ require 'rails_helper'
90
+ include RenderTurboStream::TestHelpers
91
+
92
+ RSpec.describe "Articles", type: :request do
93
+ let(:invalid_params) { { article: { title: '', desciption: 'abc' } } }
94
+ it 'update failed' do
95
+ a = FactoryBot.create(:article)
96
+ patch article_path(a, params: invalid_params)
97
+ expect(response.status).to eq(422)
98
+ expect(rendered_partials_count).to eq(2)
99
+ expect(rendered_partials).to include('articles/form', 'layouts/flash')
100
+ expect(streamed_ids).to include('form', 'flash-box')
101
+ end
98
102
  end
99
103
  ```
100
104
 
@@ -102,11 +106,9 @@ Test for a redirection could look like this:
102
106
 
103
107
  ```ruby
104
108
  it 'update success' do
105
- a = FactoryBot.create(:article)
106
- patch article_path(a, params: valid_params)
107
- expect(response.status).to eq(302)
108
- r = JSON.parse(response.body)
109
- expect(r['redirected_to']).to eq(articles_path)
109
+ a = FactoryBot.create(:article)
110
+ patch article_path(a, params: valid_params)
111
+ expect(turbo_redirected_to).to eq(articles_path) #=> turbo_redirected_to includes a «expect(response.status).to eq(302)»
110
112
  end
111
113
  ```
112
114
 
@@ -0,0 +1,11 @@
1
+ <% partials_count = 0 %>
2
+ <% rendered_partials = [] %>
3
+ <% streams.each do |s| %>
4
+ <% render s[:partial], locals: s[:locals], formats: [:html ] %>
5
+ <% partials_count += 1 %>
6
+ <% rendered_partials.push(s[:partial]) %>
7
+ <% end %>
8
+
9
+
10
+ <%= content_tag :div, check.to_json, id: 'check-json' %>
11
+ <%= content_tag :div, rendered_partials.to_json, id: 'rendered-partials' %>
@@ -0,0 +1,36 @@
1
+ module RenderTurboStream
2
+ module TestHelpers
3
+ def rendered_ids
4
+ e = Nokogiri::HTML(response.body).search('#check-json').first
5
+ JSON.parse(e.inner_html).keys
6
+ end
7
+ def rendered_partials
8
+ e = Nokogiri::HTML(response.body).search('#rendered-partials').first
9
+ JSON.parse(e.inner_html)
10
+ end
11
+
12
+ # returns all partials that would be streamed to a given ID
13
+ # note: if more than one partial by turbo_stream.replace are streamed to same ID, render_turbo_stream, in test mode already throws a error
14
+ def rendered_partials_where_id(id)
15
+ partials = Nokogiri::HTML(response.body).search('#rendered-partials').first
16
+ JSON.parse(e.inner_html)
17
+ partials.select{|p| p[id] == id }
18
+ end
19
+
20
+ # returns the first partial that would be streamed to a given ID
21
+ def rendered_partials_find_id(id)
22
+ partials = Nokogiri::HTML(response.body).search('#rendered-partials').first
23
+ JSON.parse(e.inner_html)
24
+ partials.select{|p| p[id] == id }.first
25
+ end
26
+
27
+ def rendered_partials_count
28
+ rendered_partials.length
29
+ end
30
+ def turbo_redirected_to
31
+ expect(response.status).to eq(302)
32
+ r = JSON.parse(response.body)
33
+ r['redirected_to']
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module RenderTurboStream
2
- VERSION = "0.1.16"
2
+ VERSION = "0.1.18"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  require "render_turbo_stream/version"
2
2
  require "render_turbo_stream/railtie"
3
3
  require 'render_turbo_stream/engine'
4
+ require 'render_turbo_stream/test_helpers'
4
5
 
5
6
  module RenderTurboStream
6
7
 
@@ -149,13 +150,24 @@ module RenderTurboStream
149
150
  if request.format.to_sym == :turbo_stream
150
151
  render template: 'render_turbo_stream_partials', locals: { streams: ary }, layout: false
151
152
  else
153
+ if Rails.env.test?
154
+ check_ids = {}
155
+ ary.each do |a|
156
+ if a[:action] == 'replace'
157
+ check_ids[a[:id]] ||= 0
158
+ check_ids[a[:id]] += 1
159
+ throw "More than one partial rendered to ID «#{a[:id]}» by replace" if check_ids[a[:id]] >= 2
160
+ end
161
+ end
162
+ end
152
163
  check = {}
153
164
  ary.each do |a|
154
165
  b = a.dup
155
166
  b.delete(:id)
156
167
  check[a[:id]] = b
157
168
  end
158
- render json: check
169
+ # render json: check
170
+ render template: 'render_turbo_stream_partials', locals: { check: check, streams: ary }, layout: false, formats: :html
159
171
  end
160
172
  end
161
173
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: render_turbo_stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - christian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-17 00:00:00.000000000 Z
11
+ date: 2023-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,10 +24,10 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.0.4.3
27
- description: 'Writing views like (create|update).turbo_stream.haml annoyed me. This
28
- gem handles translated flash messages, sets status, and renders partials by turbo-stream.
29
- You can control them directly from the controller. It also handles redirection:
30
- turbo_power is included.'
27
+ description: |-
28
+ Writing views like (create|update).turbo_stream.haml annoyed me. This gem handles translated flash messages, sets status, and renders partials by turbo-stream. You can control them directly from the controller. It also handles redirection: turbo_power is included.
29
+
30
+ Comes with predefined helpers for enabling request-specs.
31
31
  email:
32
32
  - christian@sedlmair.ch
33
33
  executables: []
@@ -37,11 +37,13 @@ files:
37
37
  - README.md
38
38
  - Rakefile
39
39
  - app/controllers/render_turbo_stream/application_controller.rb
40
+ - app/views/render_turbo_stream_partials.html.erb
40
41
  - app/views/render_turbo_stream_partials.turbo_stream.erb
41
42
  - app/views/render_turbo_stream_redirect.turbo_stream.erb
42
43
  - lib/render_turbo_stream.rb
43
44
  - lib/render_turbo_stream/engine.rb
44
45
  - lib/render_turbo_stream/railtie.rb
46
+ - lib/render_turbo_stream/test_helpers.rb
45
47
  - lib/render_turbo_stream/version.rb
46
48
  - lib/tasks/render_turbo_stream_tasks.rake
47
49
  homepage: https://gitlab.com/sedl/renderturbostream