inertia_rails 3.7.1 → 3.8.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/CHANGELOG.md +9 -0
- data/lib/inertia_rails/defer_prop.rb +9 -3
- data/lib/inertia_rails/helper.rb +4 -0
- data/lib/inertia_rails/inertia_rails.rb +8 -2
- data/lib/inertia_rails/merge_prop.rb +8 -4
- data/lib/inertia_rails/middleware.rb +4 -4
- data/lib/inertia_rails/renderer.rb +25 -28
- data/lib/inertia_rails/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c17e6224188fa7a4299b694eb6747091f20259c78a05d26604cac21ed52d8eb
|
4
|
+
data.tar.gz: cf0fc91563c2f5ec178fcf815132354c245eb7ceb6ce0dda7f7f4d29339a57fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 677bc4c32845494734ef8b453ce2a0d9096803bdc9037701ccb09288ac0f815de1a4b9406687c7387aad6c82de329e5cd8eb2d5aa6275a539129849bd01a4c22
|
7
|
+
data.tar.gz: b8ae423e24556d08d4bd51413a0ebf84793f1f41e19c28784dbfc58aab2a8a7330767e5b60a22c3011e38366ace5db70ab62a4e932b1e379799d1c69da0ddd36
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [3.8.0] - 2025-04-12
|
8
|
+
|
9
|
+
* Docs updates
|
10
|
+
* Fix template detection for scaffolds using Tailwind 4 (#202)
|
11
|
+
* Improved inertia route helper (#201)
|
12
|
+
* RSpec tweaks
|
13
|
+
* Add inertia_rendering? helper method (#209)
|
14
|
+
* Add support for new client-side deep merging option (#213)
|
15
|
+
|
7
16
|
## [3.7.1] - 2025-04-01
|
8
17
|
|
9
18
|
* Docs updates
|
@@ -6,16 +6,22 @@ module InertiaRails
|
|
6
6
|
|
7
7
|
attr_reader :group
|
8
8
|
|
9
|
-
def initialize(group: nil, merge: nil, &block)
|
9
|
+
def initialize(group: nil, merge: nil, deep_merge: nil, &block)
|
10
|
+
raise ArgumentError, 'Cannot set both `deep_merge` and `merge` to true' if deep_merge && merge
|
11
|
+
|
10
12
|
super(&block)
|
11
13
|
|
12
14
|
@group = group || DEFAULT_GROUP
|
13
|
-
@merge = merge
|
14
|
-
@
|
15
|
+
@merge = merge || deep_merge
|
16
|
+
@deep_merge = deep_merge
|
15
17
|
end
|
16
18
|
|
17
19
|
def merge?
|
18
20
|
@merge
|
19
21
|
end
|
22
|
+
|
23
|
+
def deep_merge?
|
24
|
+
@deep_merge
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
data/lib/inertia_rails/helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'inertia_rails/base_prop'
|
2
4
|
require 'inertia_rails/ignore_on_first_load_prop'
|
3
5
|
require 'inertia_rails/always_prop'
|
@@ -35,8 +37,12 @@ module InertiaRails
|
|
35
37
|
MergeProp.new(&block)
|
36
38
|
end
|
37
39
|
|
38
|
-
def
|
39
|
-
|
40
|
+
def deep_merge(&block)
|
41
|
+
MergeProp.new(deep_merge: true, &block)
|
42
|
+
end
|
43
|
+
|
44
|
+
def defer(group: nil, merge: nil, deep_merge: nil, &block)
|
45
|
+
DeferProp.new(group: group, merge: merge, deep_merge: deep_merge, &block)
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
@@ -2,13 +2,17 @@
|
|
2
2
|
|
3
3
|
module InertiaRails
|
4
4
|
class MergeProp < BaseProp
|
5
|
-
def initialize(
|
6
|
-
super
|
7
|
-
@
|
5
|
+
def initialize(deep_merge: false, &block)
|
6
|
+
super(&block)
|
7
|
+
@deep_merge = deep_merge
|
8
8
|
end
|
9
9
|
|
10
10
|
def merge?
|
11
|
-
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def deep_merge?
|
15
|
+
@deep_merge
|
12
16
|
end
|
13
17
|
end
|
14
18
|
end
|
@@ -47,7 +47,7 @@ module InertiaRails
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def non_get_redirectable_method?
|
50
|
-
[
|
50
|
+
%w[PUT PATCH DELETE].include? request_method
|
51
51
|
end
|
52
52
|
|
53
53
|
def inertia_non_post_redirect?(status)
|
@@ -63,7 +63,7 @@ module InertiaRails
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def controller
|
66
|
-
@env[
|
66
|
+
@env['action_controller.instance']
|
67
67
|
end
|
68
68
|
|
69
69
|
def request_method
|
@@ -83,7 +83,7 @@ module InertiaRails
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def server_version
|
86
|
-
controller&.send(:inertia_configuration)
|
86
|
+
(controller&.send(:inertia_configuration) || InertiaRails.configuration).version
|
87
87
|
end
|
88
88
|
|
89
89
|
def coerce_version(version)
|
@@ -92,7 +92,7 @@ module InertiaRails
|
|
92
92
|
|
93
93
|
def force_refresh(request)
|
94
94
|
request.flash.keep
|
95
|
-
Rack::Response.new('', 409, {'X-Inertia-Location' => request.original_url}).finish
|
95
|
+
Rack::Response.new('', 409, { 'X-Inertia-Location' => request.original_url }).finish
|
96
96
|
end
|
97
97
|
|
98
98
|
def copy_xsrf_to_csrf!
|
@@ -6,9 +6,6 @@ require_relative 'inertia_rails'
|
|
6
6
|
|
7
7
|
module InertiaRails
|
8
8
|
class Renderer
|
9
|
-
KEEP_PROP = :keep
|
10
|
-
DONT_KEEP_PROP = :dont_keep
|
11
|
-
|
12
9
|
attr_reader(
|
13
10
|
:component,
|
14
11
|
:configuration,
|
@@ -37,6 +34,7 @@ module InertiaRails
|
|
37
34
|
@deep_merge = deep_merge.nil? ? configuration.deep_merge_shared_data : deep_merge
|
38
35
|
@encrypt_history = encrypt_history.nil? ? configuration.encrypt_history : encrypt_history
|
39
36
|
@clear_history = clear_history || controller.session[:inertia_clear_history] || false
|
37
|
+
@controller.instance_variable_set('@_inertia_rendering', true)
|
40
38
|
end
|
41
39
|
|
42
40
|
def render
|
@@ -82,31 +80,17 @@ module InertiaRails
|
|
82
80
|
#
|
83
81
|
# Functionally, this permits using either string or symbol keys in the controller. Since the results
|
84
82
|
# is cast to json, we should treat string/symbol keys as identical.
|
85
|
-
def merge_props(
|
83
|
+
def merge_props(shared_props, props)
|
86
84
|
if @deep_merge
|
87
|
-
|
85
|
+
shared_props.deep_symbolize_keys.deep_merge!(props.deep_symbolize_keys)
|
88
86
|
else
|
89
|
-
|
87
|
+
shared_props.symbolize_keys.merge(props.symbolize_keys)
|
90
88
|
end
|
91
89
|
end
|
92
90
|
|
93
91
|
def computed_props
|
94
92
|
merged_props = merge_props(shared_data, props)
|
95
|
-
|
96
|
-
deep_transform_props merged_props do |prop, path|
|
97
|
-
next [DONT_KEEP_PROP] unless keep_prop?(prop, path)
|
98
|
-
|
99
|
-
transformed_prop = case prop
|
100
|
-
when BaseProp
|
101
|
-
prop.call(controller)
|
102
|
-
when Proc
|
103
|
-
controller.instance_exec(&prop)
|
104
|
-
else
|
105
|
-
prop
|
106
|
-
end
|
107
|
-
|
108
|
-
[KEEP_PROP, transformed_prop]
|
109
|
-
end
|
93
|
+
deep_transform_props(merged_props)
|
110
94
|
end
|
111
95
|
|
112
96
|
def page
|
@@ -122,22 +106,35 @@ module InertiaRails
|
|
122
106
|
deferred_props = deferred_props_keys
|
123
107
|
default_page[:deferredProps] = deferred_props if deferred_props.present?
|
124
108
|
|
125
|
-
|
109
|
+
all_merge_props = merge_props_keys
|
110
|
+
|
111
|
+
deep_merge_props, merge_props = all_merge_props.partition do |key|
|
112
|
+
@props[key].deep_merge?
|
113
|
+
end
|
114
|
+
|
126
115
|
default_page[:mergeProps] = merge_props if merge_props.present?
|
116
|
+
default_page[:deepMergeProps] = deep_merge_props if deep_merge_props.present?
|
127
117
|
|
128
118
|
default_page
|
129
119
|
end
|
130
120
|
|
131
|
-
def deep_transform_props(props, parent_path = []
|
121
|
+
def deep_transform_props(props, parent_path = [])
|
132
122
|
props.each_with_object({}) do |(key, prop), transformed_props|
|
133
123
|
current_path = parent_path + [key]
|
134
124
|
|
135
125
|
if prop.is_a?(Hash) && prop.any?
|
136
|
-
nested = deep_transform_props(prop, current_path
|
137
|
-
transformed_props
|
138
|
-
|
139
|
-
|
140
|
-
|
126
|
+
nested = deep_transform_props(prop, current_path)
|
127
|
+
transformed_props[key] = nested unless nested.empty?
|
128
|
+
elsif keep_prop?(prop, current_path)
|
129
|
+
transformed_props[key] =
|
130
|
+
case prop
|
131
|
+
when BaseProp
|
132
|
+
prop.call(controller)
|
133
|
+
when Proc
|
134
|
+
controller.instance_exec(&prop)
|
135
|
+
else
|
136
|
+
prop
|
137
|
+
end
|
141
138
|
end
|
142
139
|
end
|
143
140
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inertia_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Knoles
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
- Eugene Granovsky
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-04-
|
12
|
+
date: 2025-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|