line-message-builder 0.6.1 → 0.7.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/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +9 -0
- data/README.md +53 -0
- data/lib/line/message/builder/base.rb +1 -1
- data/lib/line/message/builder/context.rb +30 -0
- data/lib/line/message/builder/flex/box.rb +1 -0
- data/lib/line/message/builder/flex/bubble.rb +2 -0
- data/lib/line/message/builder/flex/carousel.rb +2 -0
- data/lib/line/message/builder/flex/partial.rb +44 -0
- data/lib/line/message/builder/flex.rb +3 -0
- data/lib/line/message/builder/version.rb +1 -1
- data/lib/line/message/builder.rb +1 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e34932b3afe2a1bbe05967e19991c2d1af583094e2b60be909efa9c773296fe
|
4
|
+
data.tar.gz: 2c7c94550e9b29a943b517aa5b19a9d03ec213a8779df05b1d0c55a886b8872b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c60b5ee94ee4e2f8dc658acace8538af12c9ee374f48b5fb5577c4baf43d93d661b2b47e18d8d09ee7f0e99f9fdbd0cdc3ce05e9bfd54c96ad36acd82b7b0cb6
|
7
|
+
data.tar.gz: afb292eec260c30163e79d8108471a7a5db4a722d6f44d54de7e25ae884375968addb2b6be9271240a6aae58023539acaca99109eeba95fc016e0e4aae94f0c8
|
@@ -1 +1 @@
|
|
1
|
-
{".":"0.
|
1
|
+
{".":"0.7.0"}
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.7.0](https://github.com/elct9620/line-message-builder/compare/v0.6.1...v0.7.0) (2025-05-21)
|
4
|
+
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
* add assigns feature to flex partial with context override ([76c1d34](https://github.com/elct9620/line-message-builder/commit/76c1d34569d031ce6ddf64e948d33cd26a12b231))
|
9
|
+
* add context with assigns support for flex message partials ([1c4c89f](https://github.com/elct9620/line-message-builder/commit/1c4c89f590dd251fb0def48109961469c136bd86))
|
10
|
+
* add partial support for Flex message components ([57ff183](https://github.com/elct9620/line-message-builder/commit/57ff183b173e4c62e7119862df343c9d8a1174bd))
|
11
|
+
|
3
12
|
## [0.6.1](https://github.com/elct9620/line-message-builder/compare/v0.6.0...v0.6.1) (2025-05-13)
|
4
13
|
|
5
14
|
|
data/README.md
CHANGED
@@ -99,6 +99,59 @@ builder = Line::MessageBuilder::Builder.with(context) do
|
|
99
99
|
end
|
100
100
|
```
|
101
101
|
|
102
|
+
### Partial
|
103
|
+
|
104
|
+
> [!WARNING]
|
105
|
+
> This is experimental and may change in the future.
|
106
|
+
|
107
|
+
You can create a partial object to reuse the same structure in the `Carousel`, `Bubble`, or `Box`.
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# Reuse the bubble structure in the Carousel
|
111
|
+
class CardPartial < Line::Message::Builder::Flex::Partial
|
112
|
+
def call
|
113
|
+
body do
|
114
|
+
text "Hello World!"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
builder = Line::MessageBuilder::Builder.with do
|
120
|
+
carousel do
|
121
|
+
3.times do |i|
|
122
|
+
bubble do
|
123
|
+
partial! CardPartial
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
```
|
129
|
+
|
130
|
+
The partial can have `assigns` feature to provide variables to the partial.
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
class CardPartial < Line::Message::Builder::Flex::Partial
|
134
|
+
def call
|
135
|
+
body do
|
136
|
+
text "Card #{idx}!"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
builder = Line::MessageBuilder::Builder.with do
|
142
|
+
carousel do
|
143
|
+
3.times do |i|
|
144
|
+
bubble do
|
145
|
+
partial! CardPartial, idx: i
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
```
|
151
|
+
|
152
|
+
> [!NOTE]
|
153
|
+
> The assigns will override the context variables.
|
154
|
+
|
102
155
|
### RSpec Matcher
|
103
156
|
|
104
157
|
| Matcher | Description |
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Line
|
4
|
+
module Message
|
5
|
+
module Builder
|
6
|
+
# The context is wrapper for the context object to provide assigns support.
|
7
|
+
class Context
|
8
|
+
attr_accessor :assigns
|
9
|
+
|
10
|
+
def initialize(context)
|
11
|
+
@context = context
|
12
|
+
@assigns = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to_missing?(method_name, include_private = false)
|
16
|
+
@assigns.key?(method_name) ||
|
17
|
+
@context.respond_to?(method_name, include_private) ||
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing(method_name, ...)
|
22
|
+
return @assigns[method_name] if @assigns.key?(method_name)
|
23
|
+
return @context.public_send(method_name, ...) if @context.respond_to?(method_name)
|
24
|
+
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Line
|
4
|
+
module Message
|
5
|
+
module Builder
|
6
|
+
module Flex
|
7
|
+
# Define a partial that can be reused in flex message.
|
8
|
+
module HasPartial
|
9
|
+
def partial!(partial, **assigns)
|
10
|
+
raise ArgumentError, "Not a partial" unless partial < Partial
|
11
|
+
|
12
|
+
prev = context.assigns
|
13
|
+
context.assigns = assigns
|
14
|
+
partial.new(context: self).call
|
15
|
+
context.assigns = prev
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# The partial designed to be reused in flex message.
|
20
|
+
class Partial
|
21
|
+
def initialize(context:)
|
22
|
+
@context = context
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(*)
|
26
|
+
raise NotImplementedError, "The #{self.class} class must implement the call method"
|
27
|
+
end
|
28
|
+
|
29
|
+
def respond_to_missing?(method_name, include_private = false)
|
30
|
+
@context.respond_to?(method_name, include_private) || super
|
31
|
+
end
|
32
|
+
|
33
|
+
def method_missing(method_name, ...)
|
34
|
+
if @context.respond_to?(method_name)
|
35
|
+
@context.public_send(method_name, ...)
|
36
|
+
else
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/line/message/builder.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-message-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aotokitsuruya
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- lib/line/message/builder/actions/postback.rb
|
31
31
|
- lib/line/message/builder/base.rb
|
32
32
|
- lib/line/message/builder/container.rb
|
33
|
+
- lib/line/message/builder/context.rb
|
33
34
|
- lib/line/message/builder/flex.rb
|
34
35
|
- lib/line/message/builder/flex/actionable.rb
|
35
36
|
- lib/line/message/builder/flex/box.rb
|
@@ -38,6 +39,7 @@ files:
|
|
38
39
|
- lib/line/message/builder/flex/button.rb
|
39
40
|
- lib/line/message/builder/flex/carousel.rb
|
40
41
|
- lib/line/message/builder/flex/image.rb
|
42
|
+
- lib/line/message/builder/flex/partial.rb
|
41
43
|
- lib/line/message/builder/flex/position.rb
|
42
44
|
- lib/line/message/builder/flex/size.rb
|
43
45
|
- lib/line/message/builder/flex/text.rb
|