inertia_builder 0.2.2 → 0.3.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/lib/inertia_builder/renderer.rb +1 -1
- data/lib/inertia_builder/version.rb +1 -3
- data/lib/inertia_builder.rb +10 -5
- data/test/inertia_builder_test.rb +98 -0
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5d7e71953b0936b8ed91f3b928595e60d6d57680e0b35c0cfb7859b7bdaf7625
|
|
4
|
+
data.tar.gz: 6ff8c51673223bd0986100dd215666220ff7a06a743a18433aa6613064d77d23
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3265c9ac28a8aabd5bb6f9499a9efe7469337f5f2f117986205112d2ae337b40e9830f03030ed341f98dd86424655c031e7ef5c451e950ebacd42841dc56c7ee
|
|
7
|
+
data.tar.gz: 895d95e54656cb6b15ee7dbd8fd3722d8e1d6717509736756cfaaeef3e1d9d8dc64e85a23c8866dcab27bd6c85bf3b88b02312f36ed1d139b783cc515eb5c2c0
|
data/lib/inertia_builder.rb
CHANGED
|
@@ -26,12 +26,16 @@ module InertiaBuilder
|
|
|
26
26
|
_call_inertia_block(:defer, **opts, &block)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
def scroll!(metadata = nil, **opts, &block)
|
|
30
|
+
_call_inertia_block(:scroll, metadata, **opts, &block)
|
|
31
|
+
end
|
|
32
|
+
|
|
29
33
|
def method_missing(name, *args, &block)
|
|
30
34
|
prop = self
|
|
31
35
|
|
|
32
36
|
if @inertia_block
|
|
33
|
-
method, opts = @inertia_block
|
|
34
|
-
_set_value(name, ::InertiaRails.send(method, **opts) { prop.set!(name, *args, &block) })
|
|
37
|
+
method, positional_args, opts = @inertia_block
|
|
38
|
+
_set_value(name, ::InertiaRails.send(method, *positional_args, **opts) { prop.set!(name, *args, &block) })
|
|
35
39
|
elsif !@in_scope
|
|
36
40
|
# Lazy evaluate outermost properties.
|
|
37
41
|
_set_value(name, -> { prop.set!(name, *args, &block); })
|
|
@@ -42,10 +46,10 @@ module InertiaBuilder
|
|
|
42
46
|
|
|
43
47
|
private
|
|
44
48
|
|
|
45
|
-
def _call_inertia_block(method, **opts)
|
|
49
|
+
def _call_inertia_block(method, *args, **opts)
|
|
46
50
|
::Kernel.raise "Nesting #{method}! in a #{@inertia_block[0]}! block is not allowed" if @inertia_block
|
|
47
51
|
|
|
48
|
-
@inertia_block = [method, opts]
|
|
52
|
+
@inertia_block = [method, args, opts]
|
|
49
53
|
yield
|
|
50
54
|
@inertia_block = nil
|
|
51
55
|
end
|
|
@@ -78,7 +82,8 @@ module InertiaBuilder
|
|
|
78
82
|
if current_value.is_a?(::Proc) ||
|
|
79
83
|
current_value.is_a?(::InertiaRails::OptionalProp) ||
|
|
80
84
|
current_value.is_a?(::InertiaRails::AlwaysProp) ||
|
|
81
|
-
current_value.is_a?(::InertiaRails::DeferProp)
|
|
85
|
+
current_value.is_a?(::InertiaRails::DeferProp) ||
|
|
86
|
+
current_value.is_a?(::InertiaRails::ScrollProp)
|
|
82
87
|
updates
|
|
83
88
|
else
|
|
84
89
|
super
|
|
@@ -13,6 +13,23 @@ class Item < Struct.new(:id, :title)
|
|
|
13
13
|
include ActiveModel::Conversion
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
Paginator = Struct.new(:current, :previous, :next, :param_name, keyword_init: true)
|
|
17
|
+
|
|
18
|
+
class PaginatorAdapter
|
|
19
|
+
def match?(metadata)
|
|
20
|
+
metadata.is_a?(Paginator)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def call(metadata, **_options)
|
|
24
|
+
{
|
|
25
|
+
page_name: metadata.param_name,
|
|
26
|
+
previous_page: metadata.previous,
|
|
27
|
+
next_page: metadata.next,
|
|
28
|
+
current_page: metadata.current
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
16
33
|
class InertiaBuilderTest < Minitest::Test
|
|
17
34
|
USER_PARTIAL = <<~INERTIA
|
|
18
35
|
prop.id user.id
|
|
@@ -260,6 +277,79 @@ class InertiaBuilderTest < Minitest::Test
|
|
|
260
277
|
render_view(template, assigns: { user: user }, json: true, headers: partial_headers)
|
|
261
278
|
end
|
|
262
279
|
|
|
280
|
+
def test_scroll_block
|
|
281
|
+
users = [
|
|
282
|
+
User.new(id: 1, first_name: 'John', last_name: 'Smith', email: 'john@email.com'),
|
|
283
|
+
User.new(id: 2, first_name: 'Jane', last_name: 'Smith', email: 'jane@email.com')
|
|
284
|
+
]
|
|
285
|
+
|
|
286
|
+
template = <<~INERTIA
|
|
287
|
+
prop.id 1
|
|
288
|
+
prop.scroll!(page_name: 'page', current_page: 1, previous_page: nil, next_page: 2) do
|
|
289
|
+
prop.users @users, partial: 'users/user', as: :user
|
|
290
|
+
end
|
|
291
|
+
INERTIA
|
|
292
|
+
|
|
293
|
+
expected = inertia_json_with_props(
|
|
294
|
+
{ id: 1, users: users },
|
|
295
|
+
scrollProps: { users: { pageName: 'page', previousPage: nil, nextPage: 2, currentPage: 1, reset: false } },
|
|
296
|
+
mergeProps: ['users']
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
assert_equal expected, render_view(template, assigns: { users: users }, json: true)
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def test_scroll_block_fetching
|
|
303
|
+
users = [
|
|
304
|
+
User.new(id: 3, first_name: 'Alice', last_name: 'Jones', email: 'alice@email.com'),
|
|
305
|
+
User.new(id: 4, first_name: 'Bob', last_name: 'Brown', email: 'bob@email.com')
|
|
306
|
+
]
|
|
307
|
+
|
|
308
|
+
template = <<~INERTIA
|
|
309
|
+
prop.id 1
|
|
310
|
+
prop.scroll!(page_name: 'page', current_page: 2, previous_page: 1, next_page: 3) do
|
|
311
|
+
prop.users @users, partial: 'users/user', as: :user
|
|
312
|
+
end
|
|
313
|
+
INERTIA
|
|
314
|
+
|
|
315
|
+
partial_headers = {
|
|
316
|
+
'X-Inertia-Partial-Data' => 'users',
|
|
317
|
+
'X-Inertia-Partial-Component' => '/'
|
|
318
|
+
}
|
|
319
|
+
expected = inertia_json_with_props(
|
|
320
|
+
{ users: users },
|
|
321
|
+
scrollProps: { users: { pageName: 'page', previousPage: 1, nextPage: 3, currentPage: 2, reset: false } },
|
|
322
|
+
mergeProps: ['users']
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
assert_equal expected, render_view(template, assigns: { users: users }, json: true, headers: partial_headers)
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def test_scroll_block_with_metadata_extractor
|
|
329
|
+
users = [
|
|
330
|
+
User.new(id: 1, first_name: 'John', last_name: 'Smith', email: 'john@email.com')
|
|
331
|
+
]
|
|
332
|
+
|
|
333
|
+
paginator = Paginator.new(current: 1, previous: nil, next: 2, param_name: 'p')
|
|
334
|
+
|
|
335
|
+
template = <<~INERTIA
|
|
336
|
+
prop.id 1
|
|
337
|
+
prop.scroll!(@paginator) do
|
|
338
|
+
prop.users @users, partial: 'users/user', as: :user
|
|
339
|
+
end
|
|
340
|
+
INERTIA
|
|
341
|
+
|
|
342
|
+
with_scroll_metadata_adapater(PaginatorAdapter) do
|
|
343
|
+
expected = inertia_json_with_props(
|
|
344
|
+
{ id: 1, users: users },
|
|
345
|
+
scrollProps: { users: { pageName: 'p', previousPage: nil, nextPage: 2, currentPage: 1, reset: false } },
|
|
346
|
+
mergeProps: ['users']
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
assert_equal expected, render_view(template, assigns: { users: users, paginator: paginator }, json: true)
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
263
353
|
private
|
|
264
354
|
|
|
265
355
|
def render_view(source, **opts)
|
|
@@ -294,4 +384,12 @@ class InertiaBuilderTest < Minitest::Test
|
|
|
294
384
|
clearHistory: false
|
|
295
385
|
}.merge(extra_fields).to_json
|
|
296
386
|
end
|
|
387
|
+
|
|
388
|
+
def with_scroll_metadata_adapater(adapter_class)
|
|
389
|
+
original_adapters = InertiaRails::ScrollMetadata.adapters.dup
|
|
390
|
+
InertiaRails::ScrollMetadata.register_adapter(adapter_class)
|
|
391
|
+
yield
|
|
392
|
+
ensure
|
|
393
|
+
InertiaRails::ScrollMetadata.adapters = original_adapters
|
|
394
|
+
end
|
|
297
395
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inertia_builder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rodrigo Lima
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '3.
|
|
18
|
+
version: '3.12'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '3.
|
|
25
|
+
version: '3.12'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: jbuilder
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -70,8 +70,8 @@ licenses:
|
|
|
70
70
|
- MIT
|
|
71
71
|
metadata:
|
|
72
72
|
bug_tracker_uri: https://github.com/rodrigotavio91/inertia-builder/issues
|
|
73
|
-
changelog_uri: https://github.com/rodrigotavio91/inertia-builder/releases/tag/v0.
|
|
74
|
-
source_code_uri: https://github.com/rodrigotavio91/inertia-builder/tree/v0.
|
|
73
|
+
changelog_uri: https://github.com/rodrigotavio91/inertia-builder/releases/tag/v0.3.0
|
|
74
|
+
source_code_uri: https://github.com/rodrigotavio91/inertia-builder/tree/v0.3.0
|
|
75
75
|
rubygems_mfa_required: 'true'
|
|
76
76
|
rdoc_options: []
|
|
77
77
|
require_paths:
|