smart_message 0.0.13 → 0.0.16

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +120 -0
  4. data/Gemfile.lock +3 -3
  5. data/README.md +71 -25
  6. data/docs/index.md +2 -0
  7. data/docs/reference/transports.md +46 -21
  8. data/docs/transports/memory-transport.md +2 -1
  9. data/docs/transports/multi-transport.md +484 -0
  10. data/examples/file/00_run_all_file_demos.rb +260 -0
  11. data/examples/file/01_basic_file_transport_demo.rb +237 -0
  12. data/examples/file/02_fifo_transport_demo.rb +289 -0
  13. data/examples/file/03_file_watching_demo.rb +332 -0
  14. data/examples/file/04_multi_transport_file_demo.rb +432 -0
  15. data/examples/file/README.md +257 -0
  16. data/examples/memory/00_run_all_demos.rb +317 -0
  17. data/examples/memory/01_message_deduplication_demo.rb +18 -30
  18. data/examples/memory/02_dead_letter_queue_demo.rb +9 -9
  19. data/examples/memory/03_point_to_point_orders.rb +3 -3
  20. data/examples/memory/04_publish_subscribe_events.rb +15 -15
  21. data/examples/memory/05_many_to_many_chat.rb +19 -19
  22. data/examples/memory/06_stdout_publish_only.rb +145 -0
  23. data/examples/memory/07_proc_handlers_demo.rb +13 -13
  24. data/examples/memory/08_custom_logger_demo.rb +136 -136
  25. data/examples/memory/09_error_handling_demo.rb +7 -7
  26. data/examples/memory/10_entity_addressing_basic.rb +25 -25
  27. data/examples/memory/11_entity_addressing_with_filtering.rb +32 -32
  28. data/examples/memory/12_regex_filtering_microservices.rb +10 -10
  29. data/examples/memory/14_global_configuration_demo.rb +12 -12
  30. data/examples/memory/README.md +34 -17
  31. data/examples/memory/log/demo_app.log.1 +100 -0
  32. data/examples/memory/log/demo_app.log.2 +100 -0
  33. data/examples/multi_transport_example.rb +114 -0
  34. data/examples/redis/01_smart_home_iot_demo.rb +20 -20
  35. data/examples/utilities/box_it.rb +12 -0
  36. data/examples/utilities/doing.rb +19 -0
  37. data/examples/utilities/temp.md +28 -0
  38. data/lib/smart_message/base.rb +5 -7
  39. data/lib/smart_message/errors.rb +3 -0
  40. data/lib/smart_message/header.rb +1 -1
  41. data/lib/smart_message/logger/default.rb +1 -1
  42. data/lib/smart_message/messaging.rb +36 -6
  43. data/lib/smart_message/plugins.rb +46 -4
  44. data/lib/smart_message/serializer/base.rb +1 -1
  45. data/lib/smart_message/serializer.rb +3 -2
  46. data/lib/smart_message/subscription.rb +18 -20
  47. data/lib/smart_message/transport/async_publish_queue.rb +284 -0
  48. data/lib/smart_message/transport/fifo_operations.rb +264 -0
  49. data/lib/smart_message/transport/file_operations.rb +200 -0
  50. data/lib/smart_message/transport/file_transport.rb +149 -0
  51. data/lib/smart_message/transport/file_watching.rb +72 -0
  52. data/lib/smart_message/transport/partitioned_files.rb +46 -0
  53. data/lib/smart_message/transport/stdout_transport.rb +50 -36
  54. data/lib/smart_message/transport/stdout_transport.rb.backup +88 -0
  55. data/lib/smart_message/version.rb +1 -1
  56. metadata +24 -10
  57. data/ideas/README.md +0 -41
  58. data/ideas/agents.md +0 -1001
  59. data/ideas/database_transport.md +0 -980
  60. data/ideas/improvement.md +0 -359
  61. data/ideas/meshage.md +0 -1788
  62. data/ideas/message_discovery.md +0 -178
  63. data/ideas/message_schema.md +0 -1381
  64. data/lib/smart_message/wrapper.rb.bak +0 -132
  65. /data/examples/memory/{06_pretty_print_demo.rb → 16_pretty_print_demo.rb} +0 -0
@@ -0,0 +1,100 @@
1
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 1 - generating content to trigger file rolling when size limit is reached [message:Log entry 1 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
2
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 1 [entry_number:1] [batch:demo] [message:Debug entry 1] [source:15_logger_demo.rb:93]
3
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 2 - generating content to trigger file rolling when size limit is reached [message:Log entry 2 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
4
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 2 [entry_number:2] [batch:demo] [message:Debug entry 2] [source:15_logger_demo.rb:93]
5
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 3 - generating content to trigger file rolling when size limit is reached [message:Log entry 3 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
6
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 3 [entry_number:3] [batch:demo] [message:Debug entry 3] [source:15_logger_demo.rb:93]
7
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 4 - generating content to trigger file rolling when size limit is reached [message:Log entry 4 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
8
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 4 [entry_number:4] [batch:demo] [message:Debug entry 4] [source:15_logger_demo.rb:93]
9
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 5 - generating content to trigger file rolling when size limit is reached [message:Log entry 5 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
10
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 5 [entry_number:5] [batch:demo] [message:Debug entry 5] [source:15_logger_demo.rb:93]
11
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 6 - generating content to trigger file rolling when size limit is reached [message:Log entry 6 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
12
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 6 [entry_number:6] [batch:demo] [message:Debug entry 6] [source:15_logger_demo.rb:93]
13
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 7 - generating content to trigger file rolling when size limit is reached [message:Log entry 7 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
14
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 7 [entry_number:7] [batch:demo] [message:Debug entry 7] [source:15_logger_demo.rb:93]
15
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 8 - generating content to trigger file rolling when size limit is reached [message:Log entry 8 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
16
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 8 [entry_number:8] [batch:demo] [message:Debug entry 8] [source:15_logger_demo.rb:93]
17
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 9 - generating content to trigger file rolling when size limit is reached [message:Log entry 9 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
18
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 9 [entry_number:9] [batch:demo] [message:Debug entry 9] [source:15_logger_demo.rb:93]
19
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 10 - generating content to trigger file rolling when size limit is reached [message:Log entry 10 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
20
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 10 [entry_number:10] [batch:demo] [message:Debug entry 10] [source:15_logger_demo.rb:93]
21
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 11 - generating content to trigger file rolling when size limit is reached [message:Log entry 11 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
22
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 11 [entry_number:11] [batch:demo] [message:Debug entry 11] [source:15_logger_demo.rb:93]
23
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 12 - generating content to trigger file rolling when size limit is reached [message:Log entry 12 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
24
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 12 [entry_number:12] [batch:demo] [message:Debug entry 12] [source:15_logger_demo.rb:93]
25
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 13 - generating content to trigger file rolling when size limit is reached [message:Log entry 13 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
26
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 13 [entry_number:13] [batch:demo] [message:Debug entry 13] [source:15_logger_demo.rb:93]
27
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 14 - generating content to trigger file rolling when size limit is reached [message:Log entry 14 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
28
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 14 [entry_number:14] [batch:demo] [message:Debug entry 14] [source:15_logger_demo.rb:93]
29
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 15 - generating content to trigger file rolling when size limit is reached [message:Log entry 15 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
30
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 15 [entry_number:15] [batch:demo] [message:Debug entry 15] [source:15_logger_demo.rb:93]
31
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 16 - generating content to trigger file rolling when size limit is reached [message:Log entry 16 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
32
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 16 [entry_number:16] [batch:demo] [message:Debug entry 16] [source:15_logger_demo.rb:93]
33
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 17 - generating content to trigger file rolling when size limit is reached [message:Log entry 17 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
34
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 17 [entry_number:17] [batch:demo] [message:Debug entry 17] [source:15_logger_demo.rb:93]
35
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 18 - generating content to trigger file rolling when size limit is reached [message:Log entry 18 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
36
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 18 [entry_number:18] [batch:demo] [message:Debug entry 18] [source:15_logger_demo.rb:93]
37
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 19 - generating content to trigger file rolling when size limit is reached [message:Log entry 19 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
38
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 19 [entry_number:19] [batch:demo] [message:Debug entry 19] [source:15_logger_demo.rb:93]
39
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 20 - generating content to trigger file rolling when size limit is reached [message:Log entry 20 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
40
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 20 [entry_number:20] [batch:demo] [message:Debug entry 20] [source:15_logger_demo.rb:93]
41
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 21 - generating content to trigger file rolling when size limit is reached [message:Log entry 21 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
42
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 21 [entry_number:21] [batch:demo] [message:Debug entry 21] [source:15_logger_demo.rb:93]
43
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 22 - generating content to trigger file rolling when size limit is reached [message:Log entry 22 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
44
+ [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 22 [entry_number:22] [batch:demo] [message:Debug entry 22] [source:15_logger_demo.rb:93]
45
+ [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 23 - generating content to trigger file rolling when size limit is reached [message:Log entry 23 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
46
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 23 [entry_number:23] [batch:demo] [message:Debug entry 23] [source:15_logger_demo.rb:93]
47
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 24 - generating content to trigger file rolling when size limit is reached [message:Log entry 24 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
48
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 24 [entry_number:24] [batch:demo] [message:Debug entry 24] [source:15_logger_demo.rb:93]
49
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 25 - generating content to trigger file rolling when size limit is reached [message:Log entry 25 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
50
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 25 [entry_number:25] [batch:demo] [message:Debug entry 25] [source:15_logger_demo.rb:93]
51
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 26 - generating content to trigger file rolling when size limit is reached [message:Log entry 26 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
52
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 26 [entry_number:26] [batch:demo] [message:Debug entry 26] [source:15_logger_demo.rb:93]
53
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 27 - generating content to trigger file rolling when size limit is reached [message:Log entry 27 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
54
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 27 [entry_number:27] [batch:demo] [message:Debug entry 27] [source:15_logger_demo.rb:93]
55
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 28 - generating content to trigger file rolling when size limit is reached [message:Log entry 28 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
56
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 28 [entry_number:28] [batch:demo] [message:Debug entry 28] [source:15_logger_demo.rb:93]
57
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 29 - generating content to trigger file rolling when size limit is reached [message:Log entry 29 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
58
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 29 [entry_number:29] [batch:demo] [message:Debug entry 29] [source:15_logger_demo.rb:93]
59
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 30 - generating content to trigger file rolling when size limit is reached [message:Log entry 30 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
60
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 30 [entry_number:30] [batch:demo] [message:Debug entry 30] [source:15_logger_demo.rb:93]
61
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 31 - generating content to trigger file rolling when size limit is reached [message:Log entry 31 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
62
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 31 [entry_number:31] [batch:demo] [message:Debug entry 31] [source:15_logger_demo.rb:93]
63
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 32 - generating content to trigger file rolling when size limit is reached [message:Log entry 32 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
64
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 32 [entry_number:32] [batch:demo] [message:Debug entry 32] [source:15_logger_demo.rb:93]
65
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 33 - generating content to trigger file rolling when size limit is reached [message:Log entry 33 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
66
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 33 [entry_number:33] [batch:demo] [message:Debug entry 33] [source:15_logger_demo.rb:93]
67
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 34 - generating content to trigger file rolling when size limit is reached [message:Log entry 34 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
68
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 34 [entry_number:34] [batch:demo] [message:Debug entry 34] [source:15_logger_demo.rb:93]
69
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 35 - generating content to trigger file rolling when size limit is reached [message:Log entry 35 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
70
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 35 [entry_number:35] [batch:demo] [message:Debug entry 35] [source:15_logger_demo.rb:93]
71
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 36 - generating content to trigger file rolling when size limit is reached [message:Log entry 36 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
72
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 36 [entry_number:36] [batch:demo] [message:Debug entry 36] [source:15_logger_demo.rb:93]
73
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 37 - generating content to trigger file rolling when size limit is reached [message:Log entry 37 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
74
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 37 [entry_number:37] [batch:demo] [message:Debug entry 37] [source:15_logger_demo.rb:93]
75
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 38 - generating content to trigger file rolling when size limit is reached [message:Log entry 38 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
76
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 38 [entry_number:38] [batch:demo] [message:Debug entry 38] [source:15_logger_demo.rb:93]
77
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 39 - generating content to trigger file rolling when size limit is reached [message:Log entry 39 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
78
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 39 [entry_number:39] [batch:demo] [message:Debug entry 39] [source:15_logger_demo.rb:93]
79
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 40 - generating content to trigger file rolling when size limit is reached [message:Log entry 40 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
80
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 40 [entry_number:40] [batch:demo] [message:Debug entry 40] [source:15_logger_demo.rb:93]
81
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 41 - generating content to trigger file rolling when size limit is reached [message:Log entry 41 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
82
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 41 [entry_number:41] [batch:demo] [message:Debug entry 41] [source:15_logger_demo.rb:93]
83
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 42 - generating content to trigger file rolling when size limit is reached [message:Log entry 42 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
84
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 42 [entry_number:42] [batch:demo] [message:Debug entry 42] [source:15_logger_demo.rb:93]
85
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 43 - generating content to trigger file rolling when size limit is reached [message:Log entry 43 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
86
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 43 [entry_number:43] [batch:demo] [message:Debug entry 43] [source:15_logger_demo.rb:93]
87
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 44 - generating content to trigger file rolling when size limit is reached [message:Log entry 44 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
88
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 44 [entry_number:44] [batch:demo] [message:Debug entry 44] [source:15_logger_demo.rb:93]
89
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 45 - generating content to trigger file rolling when size limit is reached [message:Log entry 45 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
90
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 45 [entry_number:45] [batch:demo] [message:Debug entry 45] [source:15_logger_demo.rb:93]
91
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 46 - generating content to trigger file rolling when size limit is reached [message:Log entry 46 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
92
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 46 [entry_number:46] [batch:demo] [message:Debug entry 46] [source:15_logger_demo.rb:93]
93
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 47 - generating content to trigger file rolling when size limit is reached [message:Log entry 47 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
94
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 47 [entry_number:47] [batch:demo] [message:Debug entry 47] [source:15_logger_demo.rb:93]
95
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 48 - generating content to trigger file rolling when size limit is reached [message:Log entry 48 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
96
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 48 [entry_number:48] [batch:demo] [message:Debug entry 48] [source:15_logger_demo.rb:93]
97
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 49 - generating content to trigger file rolling when size limit is reached [message:Log entry 49 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
98
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 49 [entry_number:49] [batch:demo] [message:Debug entry 49] [source:15_logger_demo.rb:93]
99
+ [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 50 - generating content to trigger file rolling when size limit is reached [message:Log entry 50 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
100
+ [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 50 [entry_number:50] [batch:demo] [message:Debug entry 50] [source:15_logger_demo.rb:93]
@@ -0,0 +1,100 @@
1
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 1 - generating content to trigger file rolling when size limit is reached [message:Log entry 1 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
2
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 1 [entry_number:1] [batch:demo] [message:Debug entry 1] [source:15_logger_demo.rb:93]
3
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 2 - generating content to trigger file rolling when size limit is reached [message:Log entry 2 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
4
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 2 [entry_number:2] [batch:demo] [message:Debug entry 2] [source:15_logger_demo.rb:93]
5
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 3 - generating content to trigger file rolling when size limit is reached [message:Log entry 3 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
6
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 3 [entry_number:3] [batch:demo] [message:Debug entry 3] [source:15_logger_demo.rb:93]
7
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 4 - generating content to trigger file rolling when size limit is reached [message:Log entry 4 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
8
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 4 [entry_number:4] [batch:demo] [message:Debug entry 4] [source:15_logger_demo.rb:93]
9
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 5 - generating content to trigger file rolling when size limit is reached [message:Log entry 5 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
10
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 5 [entry_number:5] [batch:demo] [message:Debug entry 5] [source:15_logger_demo.rb:93]
11
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 6 - generating content to trigger file rolling when size limit is reached [message:Log entry 6 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
12
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 6 [entry_number:6] [batch:demo] [message:Debug entry 6] [source:15_logger_demo.rb:93]
13
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 7 - generating content to trigger file rolling when size limit is reached [message:Log entry 7 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
14
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 7 [entry_number:7] [batch:demo] [message:Debug entry 7] [source:15_logger_demo.rb:93]
15
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 8 - generating content to trigger file rolling when size limit is reached [message:Log entry 8 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
16
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 8 [entry_number:8] [batch:demo] [message:Debug entry 8] [source:15_logger_demo.rb:93]
17
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 9 - generating content to trigger file rolling when size limit is reached [message:Log entry 9 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
18
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 9 [entry_number:9] [batch:demo] [message:Debug entry 9] [source:15_logger_demo.rb:93]
19
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 10 - generating content to trigger file rolling when size limit is reached [message:Log entry 10 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
20
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 10 [entry_number:10] [batch:demo] [message:Debug entry 10] [source:15_logger_demo.rb:93]
21
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 11 - generating content to trigger file rolling when size limit is reached [message:Log entry 11 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
22
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 11 [entry_number:11] [batch:demo] [message:Debug entry 11] [source:15_logger_demo.rb:93]
23
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 12 - generating content to trigger file rolling when size limit is reached [message:Log entry 12 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
24
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 12 [entry_number:12] [batch:demo] [message:Debug entry 12] [source:15_logger_demo.rb:93]
25
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 13 - generating content to trigger file rolling when size limit is reached [message:Log entry 13 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
26
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 13 [entry_number:13] [batch:demo] [message:Debug entry 13] [source:15_logger_demo.rb:93]
27
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 14 - generating content to trigger file rolling when size limit is reached [message:Log entry 14 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
28
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 14 [entry_number:14] [batch:demo] [message:Debug entry 14] [source:15_logger_demo.rb:93]
29
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 15 - generating content to trigger file rolling when size limit is reached [message:Log entry 15 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
30
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 15 [entry_number:15] [batch:demo] [message:Debug entry 15] [source:15_logger_demo.rb:93]
31
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 16 - generating content to trigger file rolling when size limit is reached [message:Log entry 16 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
32
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 16 [entry_number:16] [batch:demo] [message:Debug entry 16] [source:15_logger_demo.rb:93]
33
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 17 - generating content to trigger file rolling when size limit is reached [message:Log entry 17 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
34
+ [2025-09-10T10:00:46.601 DEBUG (22295) #] Debug entry 17 [entry_number:17] [batch:demo] [message:Debug entry 17] [source:15_logger_demo.rb:93]
35
+ [2025-09-10T10:00:46.601 INFO (22295) #] Log entry 18 - generating content to trigger file rolling when size limit is reached [message:Log entry 18 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
36
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 18 [entry_number:18] [batch:demo] [message:Debug entry 18] [source:15_logger_demo.rb:93]
37
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 19 - generating content to trigger file rolling when size limit is reached [message:Log entry 19 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
38
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 19 [entry_number:19] [batch:demo] [message:Debug entry 19] [source:15_logger_demo.rb:93]
39
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 20 - generating content to trigger file rolling when size limit is reached [message:Log entry 20 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
40
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 20 [entry_number:20] [batch:demo] [message:Debug entry 20] [source:15_logger_demo.rb:93]
41
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 21 - generating content to trigger file rolling when size limit is reached [message:Log entry 21 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
42
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 21 [entry_number:21] [batch:demo] [message:Debug entry 21] [source:15_logger_demo.rb:93]
43
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 22 - generating content to trigger file rolling when size limit is reached [message:Log entry 22 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
44
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 22 [entry_number:22] [batch:demo] [message:Debug entry 22] [source:15_logger_demo.rb:93]
45
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 23 - generating content to trigger file rolling when size limit is reached [message:Log entry 23 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
46
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 23 [entry_number:23] [batch:demo] [message:Debug entry 23] [source:15_logger_demo.rb:93]
47
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 24 - generating content to trigger file rolling when size limit is reached [message:Log entry 24 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
48
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 24 [entry_number:24] [batch:demo] [message:Debug entry 24] [source:15_logger_demo.rb:93]
49
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 25 - generating content to trigger file rolling when size limit is reached [message:Log entry 25 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
50
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 25 [entry_number:25] [batch:demo] [message:Debug entry 25] [source:15_logger_demo.rb:93]
51
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 26 - generating content to trigger file rolling when size limit is reached [message:Log entry 26 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
52
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 26 [entry_number:26] [batch:demo] [message:Debug entry 26] [source:15_logger_demo.rb:93]
53
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 27 - generating content to trigger file rolling when size limit is reached [message:Log entry 27 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
54
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 27 [entry_number:27] [batch:demo] [message:Debug entry 27] [source:15_logger_demo.rb:93]
55
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 28 - generating content to trigger file rolling when size limit is reached [message:Log entry 28 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
56
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 28 [entry_number:28] [batch:demo] [message:Debug entry 28] [source:15_logger_demo.rb:93]
57
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 29 - generating content to trigger file rolling when size limit is reached [message:Log entry 29 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
58
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 29 [entry_number:29] [batch:demo] [message:Debug entry 29] [source:15_logger_demo.rb:93]
59
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 30 - generating content to trigger file rolling when size limit is reached [message:Log entry 30 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
60
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 30 [entry_number:30] [batch:demo] [message:Debug entry 30] [source:15_logger_demo.rb:93]
61
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 31 - generating content to trigger file rolling when size limit is reached [message:Log entry 31 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
62
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 31 [entry_number:31] [batch:demo] [message:Debug entry 31] [source:15_logger_demo.rb:93]
63
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 32 - generating content to trigger file rolling when size limit is reached [message:Log entry 32 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
64
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 32 [entry_number:32] [batch:demo] [message:Debug entry 32] [source:15_logger_demo.rb:93]
65
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 33 - generating content to trigger file rolling when size limit is reached [message:Log entry 33 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
66
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 33 [entry_number:33] [batch:demo] [message:Debug entry 33] [source:15_logger_demo.rb:93]
67
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 34 - generating content to trigger file rolling when size limit is reached [message:Log entry 34 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
68
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 34 [entry_number:34] [batch:demo] [message:Debug entry 34] [source:15_logger_demo.rb:93]
69
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 35 - generating content to trigger file rolling when size limit is reached [message:Log entry 35 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
70
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 35 [entry_number:35] [batch:demo] [message:Debug entry 35] [source:15_logger_demo.rb:93]
71
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 36 - generating content to trigger file rolling when size limit is reached [message:Log entry 36 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
72
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 36 [entry_number:36] [batch:demo] [message:Debug entry 36] [source:15_logger_demo.rb:93]
73
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 37 - generating content to trigger file rolling when size limit is reached [message:Log entry 37 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
74
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 37 [entry_number:37] [batch:demo] [message:Debug entry 37] [source:15_logger_demo.rb:93]
75
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 38 - generating content to trigger file rolling when size limit is reached [message:Log entry 38 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
76
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 38 [entry_number:38] [batch:demo] [message:Debug entry 38] [source:15_logger_demo.rb:93]
77
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 39 - generating content to trigger file rolling when size limit is reached [message:Log entry 39 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
78
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 39 [entry_number:39] [batch:demo] [message:Debug entry 39] [source:15_logger_demo.rb:93]
79
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 40 - generating content to trigger file rolling when size limit is reached [message:Log entry 40 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
80
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 40 [entry_number:40] [batch:demo] [message:Debug entry 40] [source:15_logger_demo.rb:93]
81
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 41 - generating content to trigger file rolling when size limit is reached [message:Log entry 41 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
82
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 41 [entry_number:41] [batch:demo] [message:Debug entry 41] [source:15_logger_demo.rb:93]
83
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 42 - generating content to trigger file rolling when size limit is reached [message:Log entry 42 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
84
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 42 [entry_number:42] [batch:demo] [message:Debug entry 42] [source:15_logger_demo.rb:93]
85
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 43 - generating content to trigger file rolling when size limit is reached [message:Log entry 43 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
86
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 43 [entry_number:43] [batch:demo] [message:Debug entry 43] [source:15_logger_demo.rb:93]
87
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 44 - generating content to trigger file rolling when size limit is reached [message:Log entry 44 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
88
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 44 [entry_number:44] [batch:demo] [message:Debug entry 44] [source:15_logger_demo.rb:93]
89
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 45 - generating content to trigger file rolling when size limit is reached [message:Log entry 45 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
90
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 45 [entry_number:45] [batch:demo] [message:Debug entry 45] [source:15_logger_demo.rb:93]
91
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 46 - generating content to trigger file rolling when size limit is reached [message:Log entry 46 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
92
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 46 [entry_number:46] [batch:demo] [message:Debug entry 46] [source:15_logger_demo.rb:93]
93
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 47 - generating content to trigger file rolling when size limit is reached [message:Log entry 47 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
94
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 47 [entry_number:47] [batch:demo] [message:Debug entry 47] [source:15_logger_demo.rb:93]
95
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 48 - generating content to trigger file rolling when size limit is reached [message:Log entry 48 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
96
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 48 [entry_number:48] [batch:demo] [message:Debug entry 48] [source:15_logger_demo.rb:93]
97
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 49 - generating content to trigger file rolling when size limit is reached [message:Log entry 49 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
98
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 49 [entry_number:49] [batch:demo] [message:Debug entry 49] [source:15_logger_demo.rb:93]
99
+ [2025-09-10T10:00:46.602 INFO (22295) #] Log entry 50 - generating content to trigger file rolling when size limit is reached [message:Log entry 50 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
100
+ [2025-09-10T10:00:46.602 DEBUG (22295) #] Debug entry 50 [entry_number:50] [batch:demo] [message:Debug entry 50] [source:15_logger_demo.rb:93]
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # frozen_string_literal: true
4
+
5
+ # Example demonstrating multi-transport functionality in SmartMessage
6
+ # This example shows how to configure and use multiple transports for a single message
7
+
8
+ require_relative '../lib/smart_message'
9
+
10
+ # Define a simple message class for demonstration
11
+ class MultiTransportMessage < SmartMessage::Base
12
+ property :content, required: true
13
+ property :priority, default: 'normal'
14
+
15
+ # Configure multiple transports for this message
16
+ transport [
17
+ SmartMessage::Transport::StdoutTransport.new(format: :pretty),
18
+ SmartMessage::Transport::MemoryTransport.new(auto_process: false)
19
+ ]
20
+ end
21
+
22
+ # Example 1: Single transport (backward compatibility)
23
+ class SingleTransportMessage < SmartMessage::Base
24
+ property :data, required: true
25
+
26
+ # Single transport works exactly as before
27
+ transport SmartMessage::Transport::StdoutTransport.new
28
+ end
29
+
30
+ puts "=== SmartMessage Multi-Transport Demo ==="
31
+ puts
32
+
33
+ # Test single transport (backward compatibility)
34
+ puts "1. Single Transport Example:"
35
+ single_msg = SingleTransportMessage.new(data: "Hello from single transport", from: "demo_app")
36
+ puts " Transport count: #{single_msg.transports.length}"
37
+ puts " Is single transport? #{single_msg.single_transport?}"
38
+ single_msg.publish
39
+ puts
40
+
41
+ # Test multiple transports
42
+ puts "2. Multiple Transport Example:"
43
+ multi_msg = MultiTransportMessage.new(
44
+ content: "Hello from multiple transports!",
45
+ priority: "high",
46
+ from: "demo_app"
47
+ )
48
+ puts " Transport count: #{multi_msg.transports.length}"
49
+ puts " Is multiple transports? #{multi_msg.multiple_transports?}"
50
+ puts " Transport classes: #{multi_msg.transports.map { |t| t.class.name.split('::').last }.join(', ')}"
51
+ puts " Primary transport (backward compat): #{multi_msg.transport.class.name.split('::').last}"
52
+ multi_msg.publish
53
+ puts
54
+
55
+ # Test instance-level transport override
56
+ puts "3. Instance-level Transport Override:"
57
+ override_msg = MultiTransportMessage.new(content: "Override example", from: "demo_app")
58
+ override_msg.transport(SmartMessage::Transport::StdoutTransport.new(format: :json))
59
+ puts " Override transport count: #{override_msg.transports.length}"
60
+ puts " Override is single? #{override_msg.single_transport?}"
61
+ override_msg.publish
62
+ puts
63
+
64
+ # Test transport failure resilience
65
+ puts "4. Transport Failure Resilience:"
66
+ class FailingTransport < SmartMessage::Transport::Base
67
+ def publish(message)
68
+ raise StandardError, "Simulated transport failure"
69
+ end
70
+ end
71
+
72
+ class ResilientMessage < SmartMessage::Base
73
+ property :message, required: true
74
+
75
+ transport [
76
+ FailingTransport.new,
77
+ SmartMessage::Transport::StdoutTransport.new(format: :compact)
78
+ ]
79
+ end
80
+
81
+ resilient_msg = ResilientMessage.new(message: "Testing failure resilience", from: "demo_app")
82
+ puts " Publishing with one failing transport..."
83
+ begin
84
+ resilient_msg.publish
85
+ puts " ✓ Message published successfully despite transport failure"
86
+ rescue => e
87
+ puts " ✗ Unexpected error: #{e.message}"
88
+ end
89
+ puts
90
+
91
+ # Test all transports failing
92
+ puts "5. All Transports Failing:"
93
+ class AllFailingMessage < SmartMessage::Base
94
+ property :data
95
+
96
+ transport [
97
+ FailingTransport.new,
98
+ FailingTransport.new
99
+ ]
100
+ end
101
+
102
+ failing_msg = AllFailingMessage.new(data: "This will fail", from: "demo_app")
103
+ puts " Publishing with all transports failing..."
104
+ begin
105
+ failing_msg.publish
106
+ puts " ✗ Expected failure did not occur"
107
+ rescue SmartMessage::Errors::PublishError => e
108
+ puts " ✓ Correctly caught PublishError: #{e.message.split(':').first}"
109
+ rescue => e
110
+ puts " ✗ Unexpected error type: #{e.class} - #{e.message}"
111
+ end
112
+ puts
113
+
114
+ puts "=== Demo Complete ==="
@@ -81,8 +81,8 @@ class SensorDataMessage < SmartMessage::Base
81
81
  transport SHARED_TRANSPORT
82
82
  end
83
83
 
84
- def self.process(wrapper)
85
- message_header, message_payload = wrapper.split
84
+ def process(message)
85
+ message_header, message_payload = message
86
86
  sensor_data = JSON.parse(message_payload)
87
87
  icon = case sensor_data['device_type']
88
88
  when 'thermostat' then '🌡️'
@@ -115,8 +115,8 @@ class DeviceCommandMessage < SmartMessage::Base
115
115
  transport SHARED_TRANSPORT
116
116
  end
117
117
 
118
- def self.process(wrapper)
119
- message_header, message_payload = wrapper.split
118
+ def process(message)
119
+ message_header, message_payload = message
120
120
  command_data = JSON.parse(message_payload)
121
121
  puts "🎛️ Command sent: #{command_data['command']} to #{command_data['device_id']} (requested by #{command_data['requested_by']})"
122
122
  end
@@ -147,8 +147,8 @@ class AlertMessage < SmartMessage::Base
147
147
  transport SHARED_TRANSPORT
148
148
  end
149
149
 
150
- def self.process(wrapper)
151
- message_header, message_payload = wrapper.split
150
+ def process(message)
151
+ message_header, message_payload = message
152
152
  alert_data = JSON.parse(message_payload)
153
153
  severity_icon = case alert_data['severity']
154
154
  when 'low' then '💙'
@@ -175,8 +175,8 @@ class DashboardStatusMessage < SmartMessage::Base
175
175
  transport SHARED_TRANSPORT
176
176
  end
177
177
 
178
- def self.process(wrapper)
179
- message_header, message_payload = wrapper.split
178
+ def process(message)
179
+ message_header, message_payload = message
180
180
  status_data = JSON.parse(message_payload)
181
181
  status_icon = case status_data['system_status']
182
182
  when 'normal' then '✅'
@@ -205,8 +205,8 @@ class SmartThermostat
205
205
  DeviceCommandMessage.subscribe("SmartThermostat.handle_command")
206
206
  end
207
207
 
208
- def self.handle_command(wrapper)
209
- message_header, message_payload = wrapper.split
208
+ def handle_command(message)
209
+ message_header, message_payload = message
210
210
  command_data = JSON.parse(message_payload)
211
211
 
212
212
  # Only process commands intended for thermostats with our device ID
@@ -289,8 +289,8 @@ class SecurityCamera
289
289
  DeviceCommandMessage.subscribe("SecurityCamera.handle_command")
290
290
  end
291
291
 
292
- def self.handle_command(wrapper)
293
- message_header, message_payload = wrapper.split
292
+ def handle_command(message)
293
+ message_header, message_payload = message
294
294
  command_data = JSON.parse(message_payload)
295
295
 
296
296
  # Only process commands intended for cameras with our device ID
@@ -400,8 +400,8 @@ class SmartDoorLock
400
400
  DeviceCommandMessage.subscribe("SmartDoorLock.handle_command")
401
401
  end
402
402
 
403
- def self.handle_command(wrapper)
404
- message_header, message_payload = wrapper.split
403
+ def handle_command(message)
404
+ message_header, message_payload = message
405
405
  command_data = JSON.parse(message_payload)
406
406
 
407
407
  # Only process commands intended for door locks with our device ID
@@ -482,20 +482,20 @@ class IoTDashboard
482
482
  DeviceCommandMessage.subscribe("IoTDashboard.log_command")
483
483
  end
484
484
 
485
- def self.handle_sensor_data(wrapper)
486
- message_header, message_payload = wrapper.split
485
+ def handle_sensor_data(message)
486
+ message_header, message_payload = message
487
487
  @@instance ||= new
488
488
  @@instance.process_sensor_data(message_header, message_payload)
489
489
  end
490
490
 
491
- def self.handle_alert(wrapper)
492
- message_header, message_payload = wrapper.split
491
+ def handle_alert(message)
492
+ message_header, message_payload = message
493
493
  @@instance ||= new
494
494
  @@instance.process_alert(message_header, message_payload)
495
495
  end
496
496
 
497
- def self.log_command(wrapper)
498
- message_header, message_payload = wrapper.split
497
+ def log_command(message)
498
+ message_header, message_payload = message
499
499
  @@instance ||= new
500
500
  @@instance.log_device_command(message_header, message_payload)
501
501
  end
@@ -0,0 +1,12 @@
1
+ def box_it(strings, bchar: "#")
2
+ # Ensure we have an array of strings
3
+ rows = Array(strings).map{|s| s.to_s.strip}
4
+ max_width = rows.map(&:length).max || 0
5
+
6
+ border = bchar * (max_width + 4)
7
+ puts border
8
+ rows.each do |s|
9
+ puts "#{bchar} #{s.center(max_width)} #{bchar}"
10
+ end
11
+ puts border
12
+ end
@@ -0,0 +1,19 @@
1
+ # ~/lib/ruby/doing.rb
2
+ # puts feedback stdout content around an action.
3
+
4
+ def doing(action_text = nil, ok: 'done', fail: 'failed')
5
+ action_text ||= 'Working'
6
+ print("#{action_text} ... ")
7
+ STDOUT.flush
8
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
9
+ begin
10
+ result = yield if block_given?
11
+ elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
12
+ elapsed_str = elapsed < 0.01 ? "<0.01s" : "#{elapsed.round(2)}s"
13
+ puts "#{ok} #{elapsed_str}"
14
+ result
15
+ rescue => e
16
+ puts "#{fail} #{e.message}"
17
+ raise
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+
2
+ You: write some ruby code for me: I want a method that takes an Array of left justified Strings an
3
+ d centers each entry based upon the longest entry then outputs these strings to stdout enclosed within a box made
4
+ out of the ascii character for pound sign.
5
+
6
+ AI:
7
+ def boxed_center(strings)
8
+ # Ensure we have an array of strings
9
+ rows = Array(strings).map(&:to_s)
10
+ max_width = rows.map(&:length).max || 0
11
+
12
+ border = "#" * (max_width + 4)
13
+ puts border
14
+ rows.each do |s|
15
+ puts "# #{s.center(max_width)} #"
16
+ end
17
+ puts border
18
+ end
19
+
20
+ # Example:
21
+ # boxed_center(["alpha", "beta", "gamma rays", "delta"])
22
+ # Output:
23
+ # ##############
24
+ # # alpha #
25
+ # # beta #
26
+ # # gamma rays #
27
+ # # delta #
28
+ # ##############
@@ -37,11 +37,9 @@ module SmartMessage
37
37
  include Hashie::Extensions::MethodAccess
38
38
 
39
39
  # Common attrubutes for all messages
40
- # TODO: Need to change the SmartMessage::Header into a
41
- # smartMessage::Wrapper concept where the message
42
- # content is serialized into an element in the wrapper
43
- # where the wrapper contains header/routing information
44
- # in addition to the serialized message data.
40
+ # TODO: This comment is now obsolete - the flat message structure
41
+ # has been implemented where header and message properties
42
+ # exist at the same level in a flat structure.
45
43
  property :_sm_header
46
44
 
47
45
  # Constructor for a messsage definition that allows the
@@ -137,8 +135,8 @@ module SmartMessage
137
135
  JSON.generate(payload_props)
138
136
  end
139
137
 
140
- # Backward compatibility method for handlers that expect wrapper.split
141
- # Returns [header, payload_json] in the old wrapper format
138
+ # Backward compatibility method for handlers that expect message.split
139
+ # Returns [header, payload_json] in the old two-tier format
142
140
  def split
143
141
  [_sm_header, _sm_payload]
144
142
  end
@@ -28,5 +28,8 @@ module SmartMessage
28
28
  # A property validation failed
29
29
  class ValidationError < RuntimeError; end
30
30
 
31
+ # Publishing failed on all configured transports
32
+ class PublishError < RuntimeError; end
33
+
31
34
  end
32
35
  end
@@ -58,7 +58,7 @@ module SmartMessage
58
58
  required: false,
59
59
  description: "Optional unique identifier of the entity that should receive replies to this message. Defaults to 'from' entity if not specified"
60
60
 
61
- # Serialization tracking for wrapper architecture
61
+ # Serialization tracking for message architecture
62
62
  property :serializer,
63
63
  required: false,
64
64
  description: "Class name of the serializer used to encode the payload (e.g., 'SmartMessage::Serializer::Json'). Used by DLQ and cross-serializer gateway patterns"
@@ -10,7 +10,7 @@ module SmartMessage
10
10
  module Logger
11
11
  # Default logger implementation for SmartMessage
12
12
  #
13
- # This logger provides a simple Ruby Logger wrapper with enhanced formatting.
13
+ # This logger provides a simple Ruby Logger message with enhanced formatting.
14
14
  # Applications can easily configure Rails.logger or other loggers through
15
15
  # the global configuration system instead.
16
16
  #
@@ -21,13 +21,43 @@ module SmartMessage
21
21
 
22
22
  raise Errors::TransportNotConfigured if transport_missing?
23
23
 
24
- # Transport now handles serialization - just pass the message instance
25
- (self.class.logger || SmartMessage::Logger.default).debug { "[SmartMessage::Messaging] About to call transport.publish" }
26
- transport.publish(self)
27
- (self.class.logger || SmartMessage::Logger.default).debug { "[SmartMessage::Messaging] transport.publish completed" }
24
+ # Get all configured transports (supports both single and multiple)
25
+ transport_list = transports
26
+ logger = self.class.logger || SmartMessage::Logger.default
28
27
 
29
- # Log the message publish
30
- (self.class.logger || SmartMessage::Logger.default).info { "[SmartMessage] Published: #{self.class.name} via #{transport.class.name.split('::').last}" }
28
+ # Track publication results for each transport
29
+ successful_transports = []
30
+ failed_transports = []
31
+
32
+ # Publish to each configured transport
33
+ transport_list.each do |transport_instance|
34
+ begin
35
+ # Transport handles serialization - just pass the message instance
36
+ logger.debug { "[SmartMessage::Messaging] About to call transport.publish on #{transport_instance.class.name.split('::').last}" }
37
+ transport_instance.publish(self)
38
+ logger.debug { "[SmartMessage::Messaging] transport.publish completed on #{transport_instance.class.name.split('::').last}" }
39
+
40
+ successful_transports << transport_instance.class.name.split('::').last
41
+ rescue => transport_error
42
+ logger.error { "[SmartMessage] Transport #{transport_instance.class.name.split('::').last} failed: #{transport_error.class.name} - #{transport_error.message}" }
43
+ failed_transports << { transport: transport_instance.class.name.split('::').last, error: transport_error }
44
+ end
45
+ end
46
+
47
+ # Log overall publication results
48
+ if successful_transports.any?
49
+ logger.info { "[SmartMessage] Published: #{self.class.name} via #{successful_transports.join(', ')}" }
50
+ end
51
+
52
+ if failed_transports.any?
53
+ logger.warn { "[SmartMessage] Failed transports for #{self.class.name}: #{failed_transports.map { |ft| ft[:transport] }.join(', ')}" }
54
+ end
55
+
56
+ # Raise error only if ALL transports failed
57
+ if successful_transports.empty? && failed_transports.any?
58
+ error_messages = failed_transports.map { |ft| "#{ft[:transport]}: #{ft[:error].message}" }.join('; ')
59
+ raise Errors::PublishError, "All transports failed: #{error_messages}"
60
+ end
31
61
 
32
62
  SS.add(_sm_header.message_class, 'publish')
33
63
  SS.get(_sm_header.message_class, 'publish')