line-message-builder 0.7.0 → 0.9.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.document +3 -0
  3. data/.release-please-manifest.json +1 -1
  4. data/.rubocop.yml +2 -0
  5. data/CHANGELOG.md +35 -0
  6. data/CONVENTIONS.md +36 -0
  7. data/README.md +49 -31
  8. data/lib/line/message/builder/actions/message.rb +67 -1
  9. data/lib/line/message/builder/actions/postback.rb +71 -1
  10. data/lib/line/message/builder/actions.rb +18 -1
  11. data/lib/line/message/builder/base.rb +113 -3
  12. data/lib/line/message/builder/container.rb +125 -5
  13. data/lib/line/message/builder/context.rb +111 -3
  14. data/lib/line/message/builder/flex/actionable.rb +46 -1
  15. data/lib/line/message/builder/flex/box.rb +191 -15
  16. data/lib/line/message/builder/flex/bubble.rb +96 -8
  17. data/lib/line/message/builder/flex/builder.rb +74 -8
  18. data/lib/line/message/builder/flex/button.rb +104 -17
  19. data/lib/line/message/builder/flex/carousel.rb +71 -8
  20. data/lib/line/message/builder/flex/image.rb +105 -20
  21. data/lib/line/message/builder/flex/partial.rb +94 -9
  22. data/lib/line/message/builder/flex/position.rb +122 -12
  23. data/lib/line/message/builder/flex/separator.rb +41 -0
  24. data/lib/line/message/builder/flex/size.rb +65 -7
  25. data/lib/line/message/builder/flex/span.rb +110 -0
  26. data/lib/line/message/builder/flex/text.rb +176 -28
  27. data/lib/line/message/builder/flex.rb +56 -12
  28. data/lib/line/message/builder/quick_reply.rb +16 -4
  29. data/lib/line/message/builder/text.rb +12 -1
  30. data/lib/line/message/builder/version.rb +1 -1
  31. data/lib/line/message/builder.rb +33 -3
  32. data/lib/line/message/rspec/matchers/have_flex_component.rb +11 -0
  33. data/lib/line/message/rspec/matchers/have_flex_separator.rb +20 -0
  34. data/lib/line/message/rspec/matchers.rb +1 -0
  35. data/lib/line/message/rspec.rb +14 -0
  36. data/llm.txt +437 -0
  37. metadata +6 -1
data/llm.txt ADDED
@@ -0,0 +1,437 @@
1
+ # Line Message Builder DSL Documentation
2
+
3
+ This document provides a comprehensive guide on using the Line Message Builder DSL to construct various types of LINE messages.
4
+
5
+ ## Basic Usage
6
+
7
+ To start building messages, use the `Line::Message::Builder.with` method. This method accepts an optional context object and a block where you define your messages.
8
+
9
+ ```ruby
10
+ require 'line/message/builder'
11
+
12
+ messages = Line::Message::Builder.with do
13
+ # ... message definitions go here ...
14
+ end
15
+
16
+ # The `messages` variable will now hold an array of LINE message objects.
17
+ # You can convert them to JSON for sending to the LINE API:
18
+ # json_output = messages.to_json
19
+ ```
20
+
21
+ ### Coding Style
22
+
23
+ When using the `Line::Message::Builder` DSL, following is recommended:
24
+
25
+ ```ruby
26
+ Line::Message::Builder.with do
27
+ flex alt_text: "Hello, World!" do
28
+ bubble do
29
+ header do
30
+ text "Welcome to LINE Messaging API"
31
+ end
32
+ body do
33
+ text "This is a sample message."
34
+ end
35
+ end
36
+ end
37
+ end
38
+ ```
39
+
40
+ DO NOT use `do |container|` syntax as following:
41
+
42
+ ```ruby
43
+ Line::Message::Builder.with do |builder|
44
+ builder.flex alt_text: "Hello, World!" do
45
+ builder.bubble do
46
+ builder.header do
47
+ builder.text "Welcome to LINE Messaging API"
48
+ end
49
+ builder.body do
50
+ builder.text "This is a sample message."
51
+ end
52
+ end
53
+ end
54
+ end
55
+ ```
56
+
57
+ ### Context
58
+
59
+ The builder can accept a context object. Methods called within the builder block will first attempt to resolve against this context object. This allows for dynamic message content based on your application's data.
60
+
61
+ ```ruby
62
+ class MyCustomContext
63
+ def user_name
64
+ "Alex"
65
+ end
66
+
67
+ def order_status
68
+ "shipped"
69
+ end
70
+ end
71
+
72
+ context = MyCustomContext.new
73
+
74
+ Line::Message::Builder.with(context) do
75
+ text "Hello, #{user_name}! Your order status is: #{order_status}."
76
+ end
77
+ # Generates: "Hello, Alex! Your order status is: shipped."
78
+ ```
79
+ If a method is not found in your custom context, the builder will check its own methods.
80
+
81
+ ### Loops and Conditionals
82
+
83
+ Standard Ruby loops (e.g., `each`, `times`) and conditionals (`if`, `unless`, `case`) can be used directly within the DSL to generate messages dynamically.
84
+
85
+ ```ruby
86
+ Line::Message::Builder.with do
87
+ # Loop example
88
+ ['apple', 'banana', 'cherry'].each do |fruit|
89
+ text "I like #{fruit}."
90
+ end
91
+
92
+ # Conditional example
93
+ user_is_premium = true
94
+ if user_is_premium
95
+ text "Welcome to our premium service!"
96
+ else
97
+ text "Consider upgrading to premium."
98
+ end
99
+ end
100
+ ```
101
+
102
+ ## Text Messages
103
+
104
+ Create simple text messages using the `text` method.
105
+
106
+ ```ruby
107
+ Line::Message::Builder.with do
108
+ text "This is a plain text message."
109
+ text "Another one here."
110
+ end
111
+ ```
112
+ You can also include emojis in text messages. A `quick_reply` can be attached (see Quick Replies section).
113
+
114
+ ## Actions
115
+
116
+ Actions define what happens when a user interacts with a button or a tappable area in a message. They are used in Flex Message components (like buttons, or even entire boxes/images) and Quick Reply buttons.
117
+
118
+ The primary action types defined by helper methods are:
119
+
120
+ ### Message Action
121
+ Sends a text message from the user's perspective.
122
+ - `label`: (String, Required for Flex Buttons, Optional for Quick Reply if `text` is short) The text displayed on the button.
123
+ - `text`: (String, Required) The text message to be sent when the button is tapped.
124
+
125
+ ```ruby
126
+ # Example in a Flex Button (action is a required parameter for button)
127
+ button label: "Say Hello", action: message(label: "Say Hello", text: "Hello there!")
128
+
129
+ # Example in a Quick Reply
130
+ # For quick reply, the first argument to `message` is the text to be sent.
131
+ quick_reply do
132
+ message "Yes, please!", label: "Yes" # label is optional if text is short
133
+ end
134
+ ```
135
+
136
+ ### Postback Action
137
+ Sends a postback event to your bot's webhook. This is useful for triggering backend logic without displaying a message in the chat.
138
+ - `label`: (String, Required for Flex Buttons, Optional for Quick Reply) The text displayed on the button.
139
+ - `data`: (String, Required) The data string sent in the postback event to your webhook.
140
+ - `display_text`: (String, Optional) Text displayed in the chat as if the user had typed it after tapping the button.
141
+
142
+ ```ruby
143
+ # Example in a Flex Button
144
+ button label: "Add to Cart", action: postback(label: "Add to Cart", data: "action=add_item&item_id=101", display_text: "Added to cart!")
145
+
146
+ # Example in a Quick Reply
147
+ quick_reply do
148
+ postback "action=view_profile", label: "View Profile"
149
+ end
150
+ ```
151
+ Other action types like URI, Datetime Picker, Camera, Camera Roll, Location can also be defined by passing a hash that conforms to the LINE API's action object structure directly to the `action` parameter of a component (e.g., `action: { type: :uri, label: "Visit Website", uri: "https://example.com" }`).
152
+
153
+ ## Quick Replies
154
+
155
+ Quick Replies provide users with suggested responses or actions they can tap. They appear at the bottom of the chat screen and are dismissed once a button is tapped. Quick Replies are attached to a message (e.g., `text`, `flex`).
156
+
157
+ To add Quick Replies, nest a `quick_reply` block within a message definition (e.g., inside a `text` or `flex` message block).
158
+
159
+ ```ruby
160
+ Line::Message::Builder.with do
161
+ text "How can I help you today?" do
162
+ quick_reply do
163
+ # Quick Reply buttons defined here
164
+ message "Show products", label: "Products"
165
+ postback "action=contact_support", label: "Support", display_text: "Contacting support..."
166
+ # You can add an optional image_url to quick reply buttons
167
+ message "Special Offers", label: "Offers", image_url: "https://example.com/offer_icon.png"
168
+ end
169
+ end
170
+ end
171
+ ```
172
+
173
+ ### Quick Reply Buttons
174
+ Inside the `quick_reply` block:
175
+ - `message(text, label:, image_url: nil)`:
176
+ - `text`: The message sent by the user.
177
+ - `label:`: The label for the button.
178
+ - `image_url:`: (Optional) URL of an icon for the button (HTTPS, max 1MB, 24x24 pixels recommended).
179
+ - `postback(data, label:, display_text: nil, image_url: nil)`:
180
+ - `data`: Data sent in the postback event.
181
+ - `label:`: The label for the button.
182
+ - `display_text:`: (Optional) Text displayed in chat after tap.
183
+ - `image_url:`: (Optional) URL of an icon.
184
+
185
+ A maximum of 13 quick reply buttons can be attached to a message.
186
+
187
+ ## Flex Messages
188
+
189
+ Flex Messages allow for rich, customizable layouts. They are built using a hierarchy of containers and components. Start a Flex Message with the `flex` method, providing `alt_text` (alternative text shown in chat lists and notifications). A `quick_reply` can also be attached.
190
+
191
+ ```ruby
192
+ Line::Message::Builder.with do
193
+ flex alt_text: "Your order confirmation" do
194
+ # Flex container (bubble or carousel) goes here
195
+ end
196
+ end
197
+ ```
198
+
199
+ ### Flex Message Containers
200
+
201
+ Containers hold the structure of your Flex Message.
202
+
203
+ #### Carousel Container
204
+ A `carousel` holds multiple `bubble` containers, allowing users to swipe horizontally. Maximum of 12 bubbles.
205
+ ```ruby
206
+ flex alt_text: "Product Showcase" do
207
+ carousel do
208
+ bubble do # First bubble
209
+ body { text "First Item" }
210
+ end
211
+ bubble do # Second bubble
212
+ body { text "Second Item" }
213
+ end
214
+ # ... up to 12 bubbles
215
+ end
216
+ end
217
+ ```
218
+
219
+ #### Bubble Container
220
+ A `bubble` is a single message unit within a Flex Message. It can have a header, hero (image/video), body, and footer.
221
+ - `size`: (Symbol, Optional) Specifies the size of the bubble. Common values based on LINE API: `:nano`, `:micro`, `:kilo`, `:mega`, `:giga`. Default size varies depending on context (e.g., a bubble in a carousel might default differently than a standalone bubble).
222
+ - `styles`: (Hash, Optional) Advanced styling for `block` (the bubble itself), `header`, `hero`, `body`, `footer`. Allows specifying CSS-like properties, e.g., `{ footer: { separator: true, separatorColor: '#FF0000' } }`. Refer to official LINE documentation for details on the style object structure.
223
+
224
+ ```ruby
225
+ flex alt_text: "Recipe Card" do
226
+ bubble size: :mega, styles: { footer: { separator: true } } do
227
+ header do
228
+ text "Delicious Pasta", weight: :bold, size: :xl
229
+ end
230
+ # hero_image is a shorthand for a hero box containing a single image component
231
+ hero_image "https://example.com/pasta.jpg", aspect_ratio: "16:9"
232
+ # Alternatively, for a more complex hero:
233
+ # hero do
234
+ # box layout: :vertical do
235
+ # # ... components for hero ...
236
+ # end
237
+ # end
238
+ body do
239
+ box layout: :vertical, spacing: :md do
240
+ text "A classic pasta recipe everyone will love."
241
+ # ... more components ...
242
+ end
243
+ end
244
+ footer do
245
+ button label: "View Recipe", action: { type: :uri, label: "View Recipe", uri: "http://example.com/recipe" }
246
+ end
247
+ end
248
+ end
249
+ ```
250
+
251
+ ### Flex Message Components
252
+
253
+ Components are the building blocks placed inside container sections (`header`, `hero`, `body`, `footer`) or within other `box` components.
254
+
255
+ #### Box Component
256
+ A `box` arranges other components.
257
+ - `layout`: (Symbol, Required) Defines the orientation of children. Valid values: `:horizontal`, `:vertical`, `:baseline`.
258
+ - `contents`: (Array) Implicitly defined by nesting other components within the `box` block.
259
+ - Layout options:
260
+ - `justify_content`: (Symbol, Optional) Horizontal alignment of children within the box. Valid values: `:flex_start`, `:center`, `:flex_end`, `:space_between`, `:space_around`, `:space_evenly`.
261
+ - `align_items`: (Symbol, Optional) Vertical alignment of children within the box. Valid values: `:flex_start`, `:center`, `:flex_end`.
262
+ - `spacing`: (Symbol or String, Optional) Spacing between components within the box. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'10px'`).
263
+ - Positioning:
264
+ - `padding_all`, `padding_top`, `padding_bottom`, `padding_start`, `padding_end`: (Symbol or String, Optional) Padding around the content. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'5px'`).
265
+ - `margin`: (Symbol or String, Optional) Margin around the box itself. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'10px'`).
266
+ - `position`: (Symbol, Optional) Positioning method. Valid values: `:relative`, `:absolute`.
267
+ - `offset_top`, `offset_bottom`, `offset_start`, `offset_end`: (String, Optional) Offset from the edges. E.g., `'10px'`, `'5%'`.
268
+ - Sizing:
269
+ - `width`, `max_width`, `height`, `max_height`: (String, Optional) Pixel or percentage strings (e.g., `'100px'`, `'50%'`).
270
+ - `flex`: (Integer, Optional) Flex factor determining how much space this box takes relative to siblings.
271
+ - `action`: (Action Object, Optional) Makes the entire box tappable. See Actions section.
272
+
273
+ ```ruby
274
+ box layout: :vertical, spacing: :md, padding_all: :lg, action: message(text: "Box tapped!") do
275
+ text "Item 1"
276
+ text "Item 2"
277
+ end
278
+ ```
279
+
280
+ #### Text Component
281
+ Displays text.
282
+ - `text`: (String, Required) The text content.
283
+ - Styling:
284
+ - `wrap`: (Boolean, Optional) `true` to allow text to wrap. Default `false`.
285
+ - `line_spacing`: (String, Optional) Spacing between lines, e.g., `'4px'`, `'1.5em'`.
286
+ - `color`: (String, Optional) Hex color code (e.g., `'#RRGGBB'`, `'#RRGGBBAA'`).
287
+ - Layout:
288
+ - `align`: (Symbol, Optional) Horizontal alignment of the text. Valid values: `:start`, `:center`, `:end`.
289
+ - `gravity`: (Symbol, Optional) Vertical alignment of the text within its allocated space. Valid values: `:top`, `:center`, `:bottom`.
290
+ - `margin`: (Symbol or String, Optional) Margin around the text component. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'10px'`).
291
+ - Sizing:
292
+ - `size`: (Symbol or String, Optional) Font size. Valid keywords: `:xxs`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`, `:3xl`, `:4xl`, `:5xl`. Also accepts pixel values (e.g., `'16px'`).
293
+ - `weight`: (Symbol, Optional) Font weight. Valid values: `:regular`, `:bold`.
294
+ - `flex`: (Integer, Optional) Flex factor.
295
+ - `adjust_mode`: (Symbol, Optional) How text adjusts when it overflows. Valid value: `:shrink_to_fit` (reduces font size).
296
+ - `action`: (Action Object, Optional) Makes the text tappable.
297
+ - `span`: Within a Text component, you can add Span components to style parts of the text differently.
298
+
299
+ ```ruby
300
+ # Simple text component
301
+ text "Special Offer!", size: :xl, weight: :bold, color: "#FF0000", align: :center, action: postback(data: "offer_details")
302
+
303
+ # Text with spans for different styling of segments
304
+ text "Welcome to our service:" do
305
+ span "Special ", color: "#FF0000"
306
+ span "Offer", weight: :bold
307
+ span "!", decoration: :underline
308
+ end
309
+ ```
310
+
311
+ #### Button Component
312
+ An actionable button.
313
+ - `action`: (Action Object, **Required**) Defines the action performed on tap. See Actions section.
314
+ - `style`: (Symbol, Optional) Visual style of the button. Valid values: `:primary`, `:secondary`, `:link`. Default is `:link`.
315
+ - `height`: (Symbol, Optional) Height of the button. Valid values: `:sm`, `:md`. Default is `:md`.
316
+ - Layout:
317
+ - `gravity`: (Symbol, Optional) Vertical alignment if the box containing it has extra space. Valid values: `:top`, `:center`, `:bottom`.
318
+ - `margin`: (Symbol or String, Optional) Margin around the button. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'10px'`).
319
+ - Sizing:
320
+ - `flex`: (Integer, Optional) Flex factor.
321
+ - `adjust_mode`: (Symbol, Optional) How the button adjusts its content. Valid value: `:shrink_to_fit`.
322
+
323
+ ```ruby
324
+ button label: "Confirm", style: :primary, height: :md, action: postback(data: "confirm_order", label: "Confirm")
325
+ ```
326
+
327
+ #### Image Component
328
+ Displays an image.
329
+ - `url`: (String, Required) URL of the image (HTTPS).
330
+ - Styling:
331
+ - `aspect_ratio`: (String, Optional) Aspect ratio as `"width:height"`, e.g., `"1:1"`, `"16:9"`, `"4:3"`.
332
+ - `aspect_mode`: (Symbol, Optional) How the image fits the `aspect_ratio`. Valid values: `:cover` (default, crops to fill) or `:fit` (fits within, may letterbox).
333
+ - Layout:
334
+ - `align`: (Symbol, Optional) Horizontal alignment of the image. Valid values: `:start`, `:center`, `:end`.
335
+ - `gravity`: (Symbol, Optional) Vertical alignment of the image. Valid values: `:top`, `:center`, `:bottom`.
336
+ - `margin`: (Symbol or String, Optional) Margin around the image. Valid keywords: `:none`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`. Also accepts pixel values (e.g., `'10px'`).
337
+ - Sizing:
338
+ - `size`: (Symbol or String, Optional) Size of the image. Valid keywords: `:xxs`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`, `:3xl`, `:4xl`, `:5xl`, `:full`. Also accepts pixel or percentage strings (e.g. `'100px'`, `'50%'`).
339
+ - `flex`: (Integer, Optional) Flex factor.
340
+ - `action`: (Action Object, Optional) Makes the image tappable.
341
+
342
+ ```ruby
343
+ image "https://example.com/product_image.png", size: :full, aspect_ratio: "1:1", aspect_mode: :cover, action: message(text: "View product")
344
+ ```
345
+
346
+ #### Span Component
347
+ Spans are used within a Text component to apply different styling to specific portions of text. They cannot be used directly within boxes or other containers; they must be placed inside a Text component block.
348
+
349
+ - `text`: (String, Required) The text content of the span.
350
+ - Styling:
351
+ - `color`: (String, Optional) Hex color code (e.g., `'#RRGGBB'`, `'#RRGGBBAA'`).
352
+ - `size`: (Symbol or String, Optional) Font size. Valid keywords: `:xxs`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`, `:xxl`, `:3xl`, `:4xl`, `:5xl`. Also accepts pixel values (e.g., `'16px'`).
353
+ - `weight`: (Symbol, Optional) Font weight. Valid values: `:regular`, `:bold`.
354
+ - `decoration`: (Symbol, Optional) Text decoration. Valid values: `:none`, `:underline`, `:line-through`.
355
+
356
+ Spans also support helper methods to easily apply common styles:
357
+ - `bold!`: Sets the weight to `:bold`.
358
+ - `underline!`: Sets the decoration to `:underline`.
359
+ - `line_through!`: Sets the decoration to `:line-through`.
360
+
361
+ ```ruby
362
+ # Basic span usage
363
+ text "This message contains:" do
364
+ span "colored", color: "#FF0000"
365
+ span " and "
366
+ span "bold", weight: :bold
367
+ span " text."
368
+ end
369
+
370
+ # Using helper methods
371
+ text "This message has:" do
372
+ span "underlined" do
373
+ underline!
374
+ end
375
+ span " and "
376
+ span "bold" do
377
+ bold!
378
+ end
379
+ span " text."
380
+ end
381
+ ```
382
+
383
+ #### Separator Component
384
+ A `separator` draws a horizontal line to create visual separation between components.
385
+
386
+ ```ruby
387
+ box layout: :vertical do
388
+ text "Section 1"
389
+ separator
390
+ text "Section 2"
391
+ end
392
+ ```
393
+
394
+ #### Spacers
395
+ Create space between components using:
396
+ - `spacing` property on a parent `box` container.
397
+ - `margin` property on individual components (e.g., `text "Hello", margin: :xl`).
398
+ - An empty `box` with a defined `flex` value or `height`/`width` (e.g., `box height: "30px"`).
399
+
400
+ ### Flex Message Partials
401
+
402
+ Partials allow you to define reusable segments of Flex Message layouts. This is useful for complex components that appear multiple times.
403
+
404
+ 1. **Define a Partial Class**: Create a class that inherits from `Line::Message::Builder::Flex::Partial`. Implement a `call` method where you use the DSL to define the partial's content.
405
+ ```ruby
406
+ class MyCustomPartial < Line::Message::Builder::Flex::Partial
407
+ def call
408
+ # You can use Flex DSL methods here (box, text, button, etc.)
409
+ # Access passed variables via methods (e.g., `title_text`, `button_label`)
410
+ # which are made available from the `assigns` hash passed to `partial!`.
411
+ box layout: :vertical do
412
+ text title_text, weight: :bold # 'title_text' from assigns
413
+ button label: button_label, action: message(text: "Action for #{title_text}") # 'button_label' from assigns
414
+ end
415
+ end
416
+ end
417
+ ```
418
+
419
+ 2. **Use the Partial**: Call `partial!` within a Flex container or component block. Pass variables to the partial as keyword arguments (assigns).
420
+ ```ruby
421
+ Line::Message::Builder.with do
422
+ flex alt_text: "Partials Example" do
423
+ bubble do
424
+ body do
425
+ # Using the partial
426
+ partial! MyCustomPartial, title_text: "Section 1", button_label: "Go to 1"
427
+ # Separator Box
428
+ box height: "1px", background_color: "#EEEEEE", margin: :md
429
+ partial! MyCustomPartial, title_text: "Section 2", button_label: "Explore 2"
430
+ end
431
+ end
432
+ end
433
+ end
434
+ ```
435
+ Inside the partial, variables passed via `partial!` (e.g., `title_text`, `button_label`) are accessible as methods.
436
+
437
+ This comprehensive guide should help in effectively using the Line Message Builder DSL. For very specific or advanced features, always refer to the official LINE Messaging API documentation for Flex Messages.
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.7.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aotokitsuruya
@@ -16,6 +16,7 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - ".document"
19
20
  - ".release-please-manifest.json"
20
21
  - ".rspec"
21
22
  - ".rubocop.yml"
@@ -41,7 +42,9 @@ files:
41
42
  - lib/line/message/builder/flex/image.rb
42
43
  - lib/line/message/builder/flex/partial.rb
43
44
  - lib/line/message/builder/flex/position.rb
45
+ - lib/line/message/builder/flex/separator.rb
44
46
  - lib/line/message/builder/flex/size.rb
47
+ - lib/line/message/builder/flex/span.rb
45
48
  - lib/line/message/builder/flex/text.rb
46
49
  - lib/line/message/builder/quick_reply.rb
47
50
  - lib/line/message/builder/text.rb
@@ -54,9 +57,11 @@ files:
54
57
  - lib/line/message/rspec/matchers/have_flex_bubble.rb
55
58
  - lib/line/message/rspec/matchers/have_flex_component.rb
56
59
  - lib/line/message/rspec/matchers/have_flex_message.rb
60
+ - lib/line/message/rspec/matchers/have_flex_separator.rb
57
61
  - lib/line/message/rspec/matchers/have_quick_reply.rb
58
62
  - lib/line/message/rspec/matchers/have_text_message.rb
59
63
  - lib/line/message/rspec/matchers/utils.rb
64
+ - llm.txt
60
65
  - release-please-config.json
61
66
  - sig/line/message/builder.rbs
62
67
  homepage: https://github.com/elct9620/line-message-builder