reflexion 0.5.3 → 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.
Files changed (309) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +56 -7
  3. data/.doc/ext/reflex/capture_event.cpp +1 -1
  4. data/.doc/ext/reflex/chase_constraint.cpp +84 -0
  5. data/.doc/ext/reflex/clipboard.cpp +65 -0
  6. data/.doc/ext/reflex/color_event.cpp +76 -0
  7. data/.doc/ext/reflex/color_picker.cpp +113 -0
  8. data/.doc/ext/reflex/constraint.cpp +135 -0
  9. data/.doc/ext/reflex/contact_event.cpp +1 -1
  10. data/.doc/ext/reflex/control_change_event.cpp +1 -1
  11. data/.doc/ext/reflex/device.cpp +1 -1
  12. data/.doc/ext/reflex/device_event.cpp +1 -1
  13. data/.doc/ext/reflex/draw_event.cpp +1 -1
  14. data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
  15. data/.doc/ext/reflex/event.cpp +1 -1
  16. data/.doc/ext/reflex/file_dialog.cpp +181 -0
  17. data/.doc/ext/reflex/file_event.cpp +103 -0
  18. data/.doc/ext/reflex/filter.cpp +1 -1
  19. data/.doc/ext/reflex/focus_event.cpp +1 -1
  20. data/.doc/ext/reflex/frame_event.cpp +1 -1
  21. data/.doc/ext/reflex/gamepad.cpp +48 -0
  22. data/.doc/ext/reflex/image_view.cpp +1 -1
  23. data/.doc/ext/reflex/key_event.cpp +1 -274
  24. data/.doc/ext/reflex/line_shape.cpp +1 -1
  25. data/.doc/ext/reflex/link_constraint.cpp +178 -0
  26. data/.doc/ext/reflex/menu.cpp +303 -0
  27. data/.doc/ext/reflex/midi.cpp +9 -2
  28. data/.doc/ext/reflex/midi_event.cpp +1 -1
  29. data/.doc/ext/reflex/motion_event.cpp +1 -1
  30. data/.doc/ext/reflex/native.cpp +40 -10
  31. data/.doc/ext/reflex/note_event.cpp +1 -1
  32. data/.doc/ext/reflex/pin.cpp +156 -0
  33. data/.doc/ext/reflex/pointer.cpp +3 -1
  34. data/.doc/ext/reflex/pointer_event.cpp +3 -3
  35. data/.doc/ext/reflex/polygon_shape.cpp +1 -1
  36. data/.doc/ext/reflex/rect_shape.cpp +1 -1
  37. data/.doc/ext/reflex/reflex.cpp +606 -237
  38. data/.doc/ext/reflex/screen.cpp +27 -1
  39. data/.doc/ext/reflex/scroll_event.cpp +1 -1
  40. data/.doc/ext/reflex/selector.cpp +5 -5
  41. data/.doc/ext/reflex/shape.cpp +1 -1
  42. data/.doc/ext/reflex/snap_constraint.cpp +125 -0
  43. data/.doc/ext/reflex/style.cpp +1 -1
  44. data/.doc/ext/reflex/style_length.cpp +4 -3
  45. data/.doc/ext/reflex/text_event.cpp +104 -0
  46. data/.doc/ext/reflex/timer.cpp +1 -1
  47. data/.doc/ext/reflex/timer_event.cpp +1 -1
  48. data/.doc/ext/reflex/update_event.cpp +1 -1
  49. data/.doc/ext/reflex/view.cpp +206 -79
  50. data/.doc/ext/reflex/wheel_constraint.cpp +142 -0
  51. data/.doc/ext/reflex/wheel_event.cpp +1 -1
  52. data/.doc/ext/reflex/window.cpp +282 -31
  53. data/.github/workflows/release-gem.yml +2 -40
  54. data/.github/workflows/tag.yml +5 -28
  55. data/.github/workflows/test.yml +1 -28
  56. data/ChangeLog.md +79 -0
  57. data/Gemfile.lock +13 -8
  58. data/README.md +1 -0
  59. data/Rakefile +13 -2
  60. data/Reflex.podspec +2 -2
  61. data/VERSION +1 -1
  62. data/ext/reflex/application.cpp +62 -7
  63. data/ext/reflex/capture_event.cpp +1 -1
  64. data/ext/reflex/chase_constraint.cpp +89 -0
  65. data/ext/reflex/clipboard.cpp +69 -0
  66. data/ext/reflex/color_event.cpp +80 -0
  67. data/ext/reflex/color_picker.cpp +121 -0
  68. data/ext/reflex/constraint.cpp +146 -0
  69. data/ext/reflex/contact_event.cpp +1 -1
  70. data/ext/reflex/control_change_event.cpp +1 -1
  71. data/ext/reflex/device.cpp +1 -1
  72. data/ext/reflex/device_event.cpp +1 -1
  73. data/ext/reflex/draw_event.cpp +1 -1
  74. data/ext/reflex/ellipse_shape.cpp +1 -1
  75. data/ext/reflex/event.cpp +1 -1
  76. data/ext/reflex/extconf.rb +4 -2
  77. data/ext/reflex/file_dialog.cpp +194 -0
  78. data/ext/reflex/file_event.cpp +108 -0
  79. data/ext/reflex/filter.cpp +1 -1
  80. data/ext/reflex/focus_event.cpp +1 -1
  81. data/ext/reflex/frame_event.cpp +1 -1
  82. data/ext/reflex/gamepad.cpp +50 -0
  83. data/ext/reflex/image_view.cpp +1 -1
  84. data/ext/reflex/key_event.cpp +1 -275
  85. data/ext/reflex/line_shape.cpp +1 -1
  86. data/ext/reflex/link_constraint.cpp +194 -0
  87. data/ext/reflex/menu.cpp +331 -0
  88. data/ext/reflex/midi.cpp +11 -3
  89. data/ext/reflex/midi_event.cpp +1 -1
  90. data/ext/reflex/motion_event.cpp +1 -1
  91. data/ext/reflex/native.cpp +40 -10
  92. data/ext/reflex/note_event.cpp +1 -1
  93. data/ext/reflex/pin.cpp +165 -0
  94. data/ext/reflex/pointer.cpp +3 -1
  95. data/ext/reflex/pointer_event.cpp +3 -3
  96. data/ext/reflex/polygon_shape.cpp +1 -1
  97. data/ext/reflex/rect_shape.cpp +1 -1
  98. data/ext/reflex/reflex.cpp +608 -237
  99. data/ext/reflex/screen.cpp +31 -2
  100. data/ext/reflex/scroll_event.cpp +1 -1
  101. data/ext/reflex/selector.cpp +5 -5
  102. data/ext/reflex/selector.h +10 -10
  103. data/ext/reflex/shape.cpp +1 -1
  104. data/ext/reflex/snap_constraint.cpp +135 -0
  105. data/ext/reflex/style.cpp +1 -1
  106. data/ext/reflex/style_length.cpp +4 -3
  107. data/ext/reflex/text_event.cpp +111 -0
  108. data/ext/reflex/timer.cpp +1 -1
  109. data/ext/reflex/timer_event.cpp +1 -1
  110. data/ext/reflex/update_event.cpp +1 -1
  111. data/ext/reflex/view.cpp +236 -96
  112. data/ext/reflex/wheel_constraint.cpp +154 -0
  113. data/ext/reflex/wheel_event.cpp +1 -1
  114. data/ext/reflex/window.cpp +318 -40
  115. data/include/reflex/application.h +19 -0
  116. data/include/reflex/clipboard.h +53 -0
  117. data/include/reflex/color_picker.h +65 -0
  118. data/include/reflex/constraint.h +275 -0
  119. data/include/reflex/defs.h +204 -195
  120. data/include/reflex/event.h +180 -88
  121. data/include/reflex/file_dialog.h +73 -0
  122. data/include/reflex/gamepad.h +3 -0
  123. data/include/reflex/menu.h +120 -0
  124. data/include/reflex/midi.h +3 -0
  125. data/include/reflex/pin.h +68 -0
  126. data/include/reflex/pointer.h +4 -0
  127. data/include/reflex/reflex.h +2 -0
  128. data/include/reflex/ruby/application.h +6 -1
  129. data/include/reflex/ruby/clipboard.h +23 -0
  130. data/include/reflex/ruby/color_picker.h +89 -0
  131. data/include/reflex/ruby/constraint.h +94 -0
  132. data/include/reflex/ruby/event.h +62 -29
  133. data/include/reflex/ruby/file_dialog.h +89 -0
  134. data/include/reflex/ruby/gamepad.h +46 -0
  135. data/include/reflex/ruby/menu.h +103 -0
  136. data/include/reflex/ruby/pin.h +40 -0
  137. data/include/reflex/ruby/reflex.h +3 -0
  138. data/include/reflex/ruby/view.h +123 -39
  139. data/include/reflex/ruby/window.h +96 -19
  140. data/include/reflex/ruby.h +3 -0
  141. data/include/reflex/screen.h +11 -2
  142. data/include/reflex/view.h +66 -27
  143. data/include/reflex/window.h +57 -12
  144. data/include/reflex.h +8 -0
  145. data/lib/reflex/application.rb +5 -5
  146. data/lib/reflex/autoinit.rb +3 -1
  147. data/lib/reflex/button.rb +3 -3
  148. data/lib/reflex/chase_constraint.rb +15 -0
  149. data/lib/reflex/clipboard.rb +19 -0
  150. data/lib/reflex/color_event.rb +16 -0
  151. data/lib/reflex/color_picker.rb +45 -0
  152. data/lib/reflex/constraint.rb +29 -0
  153. data/lib/reflex/control_change_event.rb +17 -0
  154. data/lib/reflex/extension.rb +1 -1
  155. data/lib/reflex/file_dialog.rb +70 -0
  156. data/lib/reflex/file_event.rb +37 -0
  157. data/lib/reflex/helper.rb +79 -0
  158. data/lib/reflex/key_event.rb +14 -14
  159. data/lib/reflex/link_constraint.rb +31 -0
  160. data/lib/reflex/menu.rb +92 -0
  161. data/lib/reflex/model.rb +19 -19
  162. data/lib/reflex/note_event.rb +1 -1
  163. data/lib/reflex/pin.rb +39 -0
  164. data/lib/reflex/pointer.rb +30 -1
  165. data/lib/reflex/pointer_event.rb +13 -2
  166. data/lib/reflex/reflex.rb +5 -0
  167. data/lib/reflex/shape.rb +14 -14
  168. data/lib/reflex/snap_constraint.rb +28 -0
  169. data/lib/reflex/style.rb +16 -16
  170. data/lib/reflex/text_event.rb +40 -0
  171. data/lib/reflex/timer.rb +3 -3
  172. data/lib/reflex/view.rb +85 -18
  173. data/lib/reflex/wheel_constraint.rb +28 -0
  174. data/lib/reflex/wheel_event.rb +19 -1
  175. data/lib/reflex/window.rb +25 -13
  176. data/lib/reflex.rb +23 -8
  177. data/pod.rake +1 -1
  178. data/reflex.gemspec +4 -4
  179. data/samples/constraint.rb +152 -0
  180. data/samples/ime.rb +100 -0
  181. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
  182. data/samples/menu.rb +32 -0
  183. data/samples/model.rb +3 -3
  184. data/samples/test/alert.rb +93 -0
  185. data/samples/test/always_on.rb +76 -0
  186. data/samples/test/app_background.rb +51 -0
  187. data/samples/test/boundary.rb +75 -0
  188. data/samples/test/callback_exception.rb +101 -0
  189. data/samples/test/cancel.rb +53 -0
  190. data/samples/test/color_picker.rb +63 -0
  191. data/samples/test/file_dialog.rb +102 -0
  192. data/samples/window_style.rb +156 -0
  193. data/src/application.cpp +180 -20
  194. data/src/application.h +95 -5
  195. data/src/clipboard.cpp +81 -0
  196. data/src/color_picker.cpp +113 -0
  197. data/src/color_picker.h +36 -0
  198. data/src/constraint.cpp +1662 -0
  199. data/src/constraint.h +64 -0
  200. data/src/event.cpp +416 -252
  201. data/src/event.h +13 -2
  202. data/src/file_dialog.cpp +163 -0
  203. data/src/file_dialog.h +52 -0
  204. data/src/gamepad.cpp +42 -5
  205. data/src/gamepad.h +4 -0
  206. data/src/ios/app_delegate.mm +5 -3
  207. data/src/ios/application.mm +29 -0
  208. data/src/ios/clipboard.mm +44 -0
  209. data/src/ios/color_picker.mm +19 -0
  210. data/src/ios/event.h +6 -2
  211. data/src/ios/event.mm +31 -12
  212. data/src/ios/file_dialog.mm +21 -0
  213. data/src/ios/gamepad.mm +4 -4
  214. data/src/ios/menu.mm +41 -0
  215. data/src/ios/reflex.mm +8 -0
  216. data/src/ios/screen.mm +26 -0
  217. data/src/ios/view_controller.mm +47 -42
  218. data/src/ios/window.mm +44 -9
  219. data/src/menu.cpp +387 -0
  220. data/src/menu.h +81 -0
  221. data/src/midi.cpp +61 -31
  222. data/src/osx/app_delegate.h +4 -0
  223. data/src/osx/app_delegate.mm +168 -139
  224. data/src/osx/application.mm +103 -5
  225. data/src/osx/clipboard.mm +45 -0
  226. data/src/osx/color_picker.mm +112 -0
  227. data/src/osx/event.h +10 -0
  228. data/src/osx/event.mm +114 -30
  229. data/src/osx/file_dialog.mm +168 -0
  230. data/src/osx/gamepad.mm +2 -2
  231. data/src/osx/gamepad_hid.mm +1 -1
  232. data/src/osx/menu.h +25 -0
  233. data/src/osx/menu.mm +516 -0
  234. data/src/osx/native_window.h +16 -2
  235. data/src/osx/native_window.mm +141 -57
  236. data/src/osx/opengl_view.h +2 -1
  237. data/src/osx/opengl_view.mm +229 -37
  238. data/src/osx/reflex.mm +38 -0
  239. data/src/osx/screen.mm +36 -0
  240. data/src/osx/window.mm +117 -24
  241. data/src/pin.cpp +137 -0
  242. data/src/pointer.cpp +36 -16
  243. data/src/pointer.h +10 -0
  244. data/src/rays.h +46 -0
  245. data/src/sdl/application.cpp +73 -8
  246. data/src/sdl/clipboard.cpp +39 -0
  247. data/src/sdl/color_picker.cpp +18 -0
  248. data/src/sdl/event.cpp +44 -6
  249. data/src/sdl/event.h +18 -3
  250. data/src/sdl/file_dialog.cpp +20 -0
  251. data/src/sdl/gamepad.cpp +3 -7
  252. data/src/sdl/menu.cpp +40 -0
  253. data/src/sdl/reflex.cpp +20 -0
  254. data/src/sdl/screen.cpp +36 -0
  255. data/src/sdl/window.cpp +168 -37
  256. data/src/shape.cpp +15 -10
  257. data/src/view.cpp +583 -233
  258. data/src/view.h +22 -4
  259. data/src/vk.h +416 -0
  260. data/src/win32/application.cpp +167 -12
  261. data/src/win32/application.h +20 -0
  262. data/src/win32/clipboard.cpp +210 -0
  263. data/src/win32/color_picker.cpp +82 -0
  264. data/src/win32/event.cpp +123 -11
  265. data/src/win32/event.h +22 -3
  266. data/src/win32/file_dialog.cpp +226 -0
  267. data/src/win32/gamepad.cpp +9 -2
  268. data/src/win32/menu.cpp +490 -0
  269. data/src/win32/menu.h +35 -0
  270. data/src/win32/opengl.cpp +2 -9
  271. data/src/win32/reflex.cpp +44 -3
  272. data/src/win32/screen.cpp +164 -3
  273. data/src/win32/screen.h +8 -0
  274. data/src/win32/tray.cpp +191 -0
  275. data/src/win32/tray.h +22 -0
  276. data/src/win32/vk.cpp +11 -0
  277. data/src/win32/window.cpp +858 -135
  278. data/src/win32/window.h +9 -0
  279. data/src/window.cpp +929 -183
  280. data/src/window.h +77 -33
  281. data/src/world.cpp +86 -15
  282. data/src/world.h +9 -2
  283. data/test/helper.rb +24 -0
  284. data/test/test_application.rb +101 -1
  285. data/test/test_chase_constraint.rb +122 -0
  286. data/test/test_clipboard.rb +54 -0
  287. data/test/test_color_event.rb +36 -0
  288. data/test/test_color_picker.rb +62 -0
  289. data/test/test_constraint.rb +184 -0
  290. data/test/test_event.rb +1 -1
  291. data/test/test_file_dialog.rb +48 -0
  292. data/test/test_file_event.rb +43 -0
  293. data/test/test_has_text_preedit.rb +54 -0
  294. data/test/test_key_event.rb +23 -2
  295. data/test/test_link_constraint.rb +237 -0
  296. data/test/test_menu.rb +237 -0
  297. data/test/test_pin.rb +65 -0
  298. data/test/test_pointer.rb +50 -26
  299. data/test/test_pointer_event.rb +25 -10
  300. data/test/test_reflex.rb +36 -0
  301. data/test/test_screen.rb +24 -2
  302. data/test/test_snap_constraint.rb +140 -0
  303. data/test/test_text_event.rb +54 -0
  304. data/test/test_view.rb +152 -25
  305. data/test/test_wheel_constraint.rb +125 -0
  306. data/test/test_wheel_event.rb +24 -10
  307. data/test/test_window.rb +205 -43
  308. metadata +154 -10
  309. data/.github/workflows/utils.rb +0 -127
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reflexion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-23 00:00:00.000000000 Z
11
+ date: 2026-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.15
19
+ version: 0.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.15
26
+ version: 0.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rucy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.3.15
33
+ version: 0.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.3.15
40
+ version: 0.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rays
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.16
47
+ version: 0.5.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.3.16
54
+ version: 0.5.0
55
55
  description: This library helps you to develop interactive graphical user interface.
56
56
  email: xordog@gmail.com
57
57
  executables: []
@@ -60,6 +60,11 @@ extensions:
60
60
  extra_rdoc_files:
61
61
  - ".doc/ext/reflex/application.cpp"
62
62
  - ".doc/ext/reflex/capture_event.cpp"
63
+ - ".doc/ext/reflex/chase_constraint.cpp"
64
+ - ".doc/ext/reflex/clipboard.cpp"
65
+ - ".doc/ext/reflex/color_event.cpp"
66
+ - ".doc/ext/reflex/color_picker.cpp"
67
+ - ".doc/ext/reflex/constraint.cpp"
63
68
  - ".doc/ext/reflex/contact_event.cpp"
64
69
  - ".doc/ext/reflex/control_change_event.cpp"
65
70
  - ".doc/ext/reflex/device.cpp"
@@ -68,17 +73,23 @@ extra_rdoc_files:
68
73
  - ".doc/ext/reflex/ellipse_shape.cpp"
69
74
  - ".doc/ext/reflex/event.cpp"
70
75
  - ".doc/ext/reflex/exception.cpp"
76
+ - ".doc/ext/reflex/file_dialog.cpp"
77
+ - ".doc/ext/reflex/file_event.cpp"
71
78
  - ".doc/ext/reflex/filter.cpp"
72
79
  - ".doc/ext/reflex/focus_event.cpp"
73
80
  - ".doc/ext/reflex/frame_event.cpp"
81
+ - ".doc/ext/reflex/gamepad.cpp"
74
82
  - ".doc/ext/reflex/image_view.cpp"
75
83
  - ".doc/ext/reflex/key_event.cpp"
76
84
  - ".doc/ext/reflex/line_shape.cpp"
85
+ - ".doc/ext/reflex/link_constraint.cpp"
86
+ - ".doc/ext/reflex/menu.cpp"
77
87
  - ".doc/ext/reflex/midi.cpp"
78
88
  - ".doc/ext/reflex/midi_event.cpp"
79
89
  - ".doc/ext/reflex/motion_event.cpp"
80
90
  - ".doc/ext/reflex/native.cpp"
81
91
  - ".doc/ext/reflex/note_event.cpp"
92
+ - ".doc/ext/reflex/pin.cpp"
82
93
  - ".doc/ext/reflex/pointer.cpp"
83
94
  - ".doc/ext/reflex/pointer_event.cpp"
84
95
  - ".doc/ext/reflex/polygon_shape.cpp"
@@ -88,17 +99,25 @@ extra_rdoc_files:
88
99
  - ".doc/ext/reflex/scroll_event.cpp"
89
100
  - ".doc/ext/reflex/selector.cpp"
90
101
  - ".doc/ext/reflex/shape.cpp"
102
+ - ".doc/ext/reflex/snap_constraint.cpp"
91
103
  - ".doc/ext/reflex/style.cpp"
92
104
  - ".doc/ext/reflex/style_length.cpp"
105
+ - ".doc/ext/reflex/text_event.cpp"
93
106
  - ".doc/ext/reflex/timer.cpp"
94
107
  - ".doc/ext/reflex/timer_event.cpp"
95
108
  - ".doc/ext/reflex/update_event.cpp"
96
109
  - ".doc/ext/reflex/view.cpp"
110
+ - ".doc/ext/reflex/wheel_constraint.cpp"
97
111
  - ".doc/ext/reflex/wheel_event.cpp"
98
112
  - ".doc/ext/reflex/window.cpp"
99
113
  files:
100
114
  - ".doc/ext/reflex/application.cpp"
101
115
  - ".doc/ext/reflex/capture_event.cpp"
116
+ - ".doc/ext/reflex/chase_constraint.cpp"
117
+ - ".doc/ext/reflex/clipboard.cpp"
118
+ - ".doc/ext/reflex/color_event.cpp"
119
+ - ".doc/ext/reflex/color_picker.cpp"
120
+ - ".doc/ext/reflex/constraint.cpp"
102
121
  - ".doc/ext/reflex/contact_event.cpp"
103
122
  - ".doc/ext/reflex/control_change_event.cpp"
104
123
  - ".doc/ext/reflex/device.cpp"
@@ -107,17 +126,23 @@ files:
107
126
  - ".doc/ext/reflex/ellipse_shape.cpp"
108
127
  - ".doc/ext/reflex/event.cpp"
109
128
  - ".doc/ext/reflex/exception.cpp"
129
+ - ".doc/ext/reflex/file_dialog.cpp"
130
+ - ".doc/ext/reflex/file_event.cpp"
110
131
  - ".doc/ext/reflex/filter.cpp"
111
132
  - ".doc/ext/reflex/focus_event.cpp"
112
133
  - ".doc/ext/reflex/frame_event.cpp"
134
+ - ".doc/ext/reflex/gamepad.cpp"
113
135
  - ".doc/ext/reflex/image_view.cpp"
114
136
  - ".doc/ext/reflex/key_event.cpp"
115
137
  - ".doc/ext/reflex/line_shape.cpp"
138
+ - ".doc/ext/reflex/link_constraint.cpp"
139
+ - ".doc/ext/reflex/menu.cpp"
116
140
  - ".doc/ext/reflex/midi.cpp"
117
141
  - ".doc/ext/reflex/midi_event.cpp"
118
142
  - ".doc/ext/reflex/motion_event.cpp"
119
143
  - ".doc/ext/reflex/native.cpp"
120
144
  - ".doc/ext/reflex/note_event.cpp"
145
+ - ".doc/ext/reflex/pin.cpp"
121
146
  - ".doc/ext/reflex/pointer.cpp"
122
147
  - ".doc/ext/reflex/pointer_event.cpp"
123
148
  - ".doc/ext/reflex/polygon_shape.cpp"
@@ -127,19 +152,21 @@ files:
127
152
  - ".doc/ext/reflex/scroll_event.cpp"
128
153
  - ".doc/ext/reflex/selector.cpp"
129
154
  - ".doc/ext/reflex/shape.cpp"
155
+ - ".doc/ext/reflex/snap_constraint.cpp"
130
156
  - ".doc/ext/reflex/style.cpp"
131
157
  - ".doc/ext/reflex/style_length.cpp"
158
+ - ".doc/ext/reflex/text_event.cpp"
132
159
  - ".doc/ext/reflex/timer.cpp"
133
160
  - ".doc/ext/reflex/timer_event.cpp"
134
161
  - ".doc/ext/reflex/update_event.cpp"
135
162
  - ".doc/ext/reflex/view.cpp"
163
+ - ".doc/ext/reflex/wheel_constraint.cpp"
136
164
  - ".doc/ext/reflex/wheel_event.cpp"
137
165
  - ".doc/ext/reflex/window.cpp"
138
166
  - ".github/PULL_REQUEST_TEMPLATE.md"
139
167
  - ".github/workflows/release-gem.yml"
140
168
  - ".github/workflows/tag.yml"
141
169
  - ".github/workflows/test.yml"
142
- - ".github/workflows/utils.rb"
143
170
  - CLAUDE.md
144
171
  - CONTRIBUTING.md
145
172
  - ChangeLog.md
@@ -152,6 +179,11 @@ files:
152
179
  - VERSION
153
180
  - ext/reflex/application.cpp
154
181
  - ext/reflex/capture_event.cpp
182
+ - ext/reflex/chase_constraint.cpp
183
+ - ext/reflex/clipboard.cpp
184
+ - ext/reflex/color_event.cpp
185
+ - ext/reflex/color_picker.cpp
186
+ - ext/reflex/constraint.cpp
155
187
  - ext/reflex/contact_event.cpp
156
188
  - ext/reflex/control_change_event.cpp
157
189
  - ext/reflex/defs.h
@@ -162,17 +194,23 @@ files:
162
194
  - ext/reflex/event.cpp
163
195
  - ext/reflex/exception.cpp
164
196
  - ext/reflex/extconf.rb
197
+ - ext/reflex/file_dialog.cpp
198
+ - ext/reflex/file_event.cpp
165
199
  - ext/reflex/filter.cpp
166
200
  - ext/reflex/focus_event.cpp
167
201
  - ext/reflex/frame_event.cpp
202
+ - ext/reflex/gamepad.cpp
168
203
  - ext/reflex/image_view.cpp
169
204
  - ext/reflex/key_event.cpp
170
205
  - ext/reflex/line_shape.cpp
206
+ - ext/reflex/link_constraint.cpp
207
+ - ext/reflex/menu.cpp
171
208
  - ext/reflex/midi.cpp
172
209
  - ext/reflex/midi_event.cpp
173
210
  - ext/reflex/motion_event.cpp
174
211
  - ext/reflex/native.cpp
175
212
  - ext/reflex/note_event.cpp
213
+ - ext/reflex/pin.cpp
176
214
  - ext/reflex/pointer.cpp
177
215
  - ext/reflex/pointer_event.cpp
178
216
  - ext/reflex/polygon_shape.cpp
@@ -183,36 +221,52 @@ files:
183
221
  - ext/reflex/selector.cpp
184
222
  - ext/reflex/selector.h
185
223
  - ext/reflex/shape.cpp
224
+ - ext/reflex/snap_constraint.cpp
186
225
  - ext/reflex/style.cpp
187
226
  - ext/reflex/style_length.cpp
227
+ - ext/reflex/text_event.cpp
188
228
  - ext/reflex/timer.cpp
189
229
  - ext/reflex/timer_event.cpp
190
230
  - ext/reflex/update_event.cpp
191
231
  - ext/reflex/view.cpp
232
+ - ext/reflex/wheel_constraint.cpp
192
233
  - ext/reflex/wheel_event.cpp
193
234
  - ext/reflex/window.cpp
194
235
  - include/reflex.h
195
236
  - include/reflex/application.h
237
+ - include/reflex/clipboard.h
238
+ - include/reflex/color_picker.h
239
+ - include/reflex/constraint.h
196
240
  - include/reflex/debug.h
197
241
  - include/reflex/defs.h
198
242
  - include/reflex/device.h
199
243
  - include/reflex/event.h
200
244
  - include/reflex/exception.h
245
+ - include/reflex/file_dialog.h
201
246
  - include/reflex/filter.h
202
247
  - include/reflex/gamepad.h
203
248
  - include/reflex/image_view.h
249
+ - include/reflex/menu.h
204
250
  - include/reflex/midi.h
251
+ - include/reflex/pin.h
205
252
  - include/reflex/pointer.h
206
253
  - include/reflex/reflex.h
207
254
  - include/reflex/ruby.h
208
255
  - include/reflex/ruby/application.h
256
+ - include/reflex/ruby/clipboard.h
257
+ - include/reflex/ruby/color_picker.h
258
+ - include/reflex/ruby/constraint.h
209
259
  - include/reflex/ruby/defs.h
210
260
  - include/reflex/ruby/device.h
211
261
  - include/reflex/ruby/event.h
212
262
  - include/reflex/ruby/exception.h
263
+ - include/reflex/ruby/file_dialog.h
213
264
  - include/reflex/ruby/filter.h
265
+ - include/reflex/ruby/gamepad.h
214
266
  - include/reflex/ruby/image_view.h
267
+ - include/reflex/ruby/menu.h
215
268
  - include/reflex/ruby/midi.h
269
+ - include/reflex/ruby/pin.h
216
270
  - include/reflex/ruby/pointer.h
217
271
  - include/reflex/ruby/reflex.h
218
272
  - include/reflex/ruby/screen.h
@@ -237,13 +291,21 @@ files:
237
291
  - lib/reflex/button.rb
238
292
  - lib/reflex/camera.rb
239
293
  - lib/reflex/capture_event.rb
294
+ - lib/reflex/chase_constraint.rb
295
+ - lib/reflex/clipboard.rb
240
296
  - lib/reflex/color.rb
297
+ - lib/reflex/color_event.rb
298
+ - lib/reflex/color_picker.rb
241
299
  - lib/reflex/color_space.rb
300
+ - lib/reflex/constraint.rb
242
301
  - lib/reflex/contact_event.rb
302
+ - lib/reflex/control_change_event.rb
243
303
  - lib/reflex/draw_event.rb
244
304
  - lib/reflex/ellipse_shape.rb
245
305
  - lib/reflex/ext.rb
246
306
  - lib/reflex/extension.rb
307
+ - lib/reflex/file_dialog.rb
308
+ - lib/reflex/file_event.rb
247
309
  - lib/reflex/filter.rb
248
310
  - lib/reflex/fixture.rb
249
311
  - lib/reflex/focus_event.rb
@@ -254,14 +316,17 @@ files:
254
316
  - lib/reflex/image_view.rb
255
317
  - lib/reflex/key_event.rb
256
318
  - lib/reflex/line_shape.rb
319
+ - lib/reflex/link_constraint.rb
257
320
  - lib/reflex/list_view.rb
258
321
  - lib/reflex/matrix.rb
322
+ - lib/reflex/menu.rb
259
323
  - lib/reflex/midi_event.rb
260
324
  - lib/reflex/model.rb
261
325
  - lib/reflex/model_owner.rb
262
326
  - lib/reflex/model_view.rb
263
327
  - lib/reflex/note_event.rb
264
328
  - lib/reflex/painter.rb
329
+ - lib/reflex/pin.rb
265
330
  - lib/reflex/point.rb
266
331
  - lib/reflex/pointer.rb
267
332
  - lib/reflex/pointer_event.rb
@@ -275,13 +340,16 @@ files:
275
340
  - lib/reflex/selector.rb
276
341
  - lib/reflex/shader.rb
277
342
  - lib/reflex/shape.rb
343
+ - lib/reflex/snap_constraint.rb
278
344
  - lib/reflex/style.rb
279
345
  - lib/reflex/style_length.rb
346
+ - lib/reflex/text_event.rb
280
347
  - lib/reflex/text_view.rb
281
348
  - lib/reflex/timer.rb
282
349
  - lib/reflex/timer_event.rb
283
350
  - lib/reflex/update_event.rb
284
351
  - lib/reflex/view.rb
352
+ - lib/reflex/wheel_constraint.rb
285
353
  - lib/reflex/wheel_event.rb
286
354
  - lib/reflex/window.rb
287
355
  - lib/reflexion.rb
@@ -292,11 +360,13 @@ files:
292
360
  - samples/bats.rb
293
361
  - samples/camera.rb
294
362
  - samples/checker.rb
363
+ - samples/constraint.rb
295
364
  - samples/fans.rb
296
365
  - samples/fps.rb
297
366
  - samples/grid.rb
298
367
  - samples/hello.rb
299
368
  - samples/image.rb
369
+ - samples/ime.rb
300
370
  - samples/ios/hello/hello.xcodeproj/project.pbxproj
301
371
  - samples/ios/hello/hello/Images.xcassets/AppIcon.appiconset/Contents.json
302
372
  - samples/ios/hello/hello/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -306,6 +376,7 @@ files:
306
376
  - samples/ios/hello/hello/main.cpp
307
377
  - samples/key.rb
308
378
  - samples/layout.rb
379
+ - samples/menu.rb
309
380
  - samples/model.rb
310
381
  - samples/multi_window.rb
311
382
  - samples/osx/hello/hello.xcodeproj/project.pbxproj
@@ -326,18 +397,34 @@ files:
326
397
  - samples/repl.rb
327
398
  - samples/shader.rb
328
399
  - samples/shapes.rb
400
+ - samples/test/alert.rb
401
+ - samples/test/always_on.rb
402
+ - samples/test/app_background.rb
403
+ - samples/test/boundary.rb
404
+ - samples/test/callback_exception.rb
405
+ - samples/test/cancel.rb
406
+ - samples/test/color_picker.rb
407
+ - samples/test/file_dialog.rb
329
408
  - samples/text.rb
330
409
  - samples/tree.rb
331
410
  - samples/views.rb
332
411
  - samples/visuals.rb
412
+ - samples/window_style.rb
333
413
  - src/application.cpp
334
414
  - src/application.h
335
415
  - src/body.cpp
336
416
  - src/body.h
417
+ - src/clipboard.cpp
418
+ - src/color_picker.cpp
419
+ - src/color_picker.h
420
+ - src/constraint.cpp
421
+ - src/constraint.h
337
422
  - src/device.cpp
338
423
  - src/event.cpp
339
424
  - src/event.h
340
425
  - src/exception.cpp
426
+ - src/file_dialog.cpp
427
+ - src/file_dialog.h
341
428
  - src/filter.cpp
342
429
  - src/fixture.cpp
343
430
  - src/fixture.h
@@ -348,10 +435,14 @@ files:
348
435
  - src/ios/app_delegate.mm
349
436
  - src/ios/application.h
350
437
  - src/ios/application.mm
438
+ - src/ios/clipboard.mm
439
+ - src/ios/color_picker.mm
351
440
  - src/ios/device.mm
352
441
  - src/ios/event.h
353
442
  - src/ios/event.mm
443
+ - src/ios/file_dialog.mm
354
444
  - src/ios/gamepad.mm
445
+ - src/ios/menu.mm
355
446
  - src/ios/reflex.mm
356
447
  - src/ios/screen.h
357
448
  - src/ios/screen.mm
@@ -359,18 +450,25 @@ files:
359
450
  - src/ios/view_controller.mm
360
451
  - src/ios/window.h
361
452
  - src/ios/window.mm
453
+ - src/menu.cpp
454
+ - src/menu.h
362
455
  - src/midi.cpp
363
456
  - src/midi.h
364
457
  - src/osx/app_delegate.h
365
458
  - src/osx/app_delegate.mm
366
459
  - src/osx/application.h
367
460
  - src/osx/application.mm
461
+ - src/osx/clipboard.mm
462
+ - src/osx/color_picker.mm
368
463
  - src/osx/device.mm
369
464
  - src/osx/event.h
370
465
  - src/osx/event.mm
466
+ - src/osx/file_dialog.mm
371
467
  - src/osx/gamepad.mm
372
468
  - src/osx/gamepad_gc.mm
373
469
  - src/osx/gamepad_hid.mm
470
+ - src/osx/menu.h
471
+ - src/osx/menu.mm
374
472
  - src/osx/native_window.h
375
473
  - src/osx/native_window.mm
376
474
  - src/osx/opengl_view.h
@@ -380,15 +478,21 @@ files:
380
478
  - src/osx/screen.mm
381
479
  - src/osx/window.h
382
480
  - src/osx/window.mm
481
+ - src/pin.cpp
383
482
  - src/pointer.cpp
384
483
  - src/pointer.h
385
484
  - src/queue.h
485
+ - src/rays.h
386
486
  - src/reflex.cpp
387
487
  - src/sdl/application.cpp
488
+ - src/sdl/clipboard.cpp
489
+ - src/sdl/color_picker.cpp
388
490
  - src/sdl/device.cpp
389
491
  - src/sdl/event.cpp
390
492
  - src/sdl/event.h
493
+ - src/sdl/file_dialog.cpp
391
494
  - src/sdl/gamepad.cpp
495
+ - src/sdl/menu.cpp
392
496
  - src/sdl/opengl.cpp
393
497
  - src/sdl/opengl.h
394
498
  - src/sdl/reflex.cpp
@@ -406,17 +510,27 @@ files:
406
510
  - src/timer.h
407
511
  - src/view.cpp
408
512
  - src/view.h
513
+ - src/vk.h
409
514
  - src/win32/application.cpp
515
+ - src/win32/application.h
516
+ - src/win32/clipboard.cpp
517
+ - src/win32/color_picker.cpp
410
518
  - src/win32/device.cpp
411
519
  - src/win32/event.cpp
412
520
  - src/win32/event.h
521
+ - src/win32/file_dialog.cpp
413
522
  - src/win32/gamepad.cpp
414
523
  - src/win32/gamepad.h
524
+ - src/win32/menu.cpp
525
+ - src/win32/menu.h
415
526
  - src/win32/opengl.cpp
416
527
  - src/win32/opengl.h
417
528
  - src/win32/reflex.cpp
418
529
  - src/win32/screen.cpp
419
530
  - src/win32/screen.h
531
+ - src/win32/tray.cpp
532
+ - src/win32/tray.h
533
+ - src/win32/vk.cpp
420
534
  - src/win32/window.cpp
421
535
  - src/win32/window.h
422
536
  - src/window.cpp
@@ -426,30 +540,45 @@ files:
426
540
  - test/helper.rb
427
541
  - test/test_application.rb
428
542
  - test/test_capture_event.rb
543
+ - test/test_chase_constraint.rb
544
+ - test/test_clipboard.rb
545
+ - test/test_color_event.rb
546
+ - test/test_color_picker.rb
547
+ - test/test_constraint.rb
429
548
  - test/test_contact_event.rb
430
549
  - test/test_device.rb
431
550
  - test/test_draw_event.rb
432
551
  - test/test_event.rb
552
+ - test/test_file_dialog.rb
553
+ - test/test_file_event.rb
433
554
  - test/test_focus_event.rb
434
555
  - test/test_frame_event.rb
435
556
  - test/test_has_frame.rb
557
+ - test/test_has_text_preedit.rb
436
558
  - test/test_key_event.rb
559
+ - test/test_link_constraint.rb
560
+ - test/test_menu.rb
437
561
  - test/test_midi_event.rb
438
562
  - test/test_model.rb
439
563
  - test/test_model_owner.rb
440
564
  - test/test_note_event.rb
565
+ - test/test_pin.rb
441
566
  - test/test_pointer.rb
442
567
  - test/test_pointer_event.rb
568
+ - test/test_reflex.rb
443
569
  - test/test_reflex_init.rb
444
570
  - test/test_screen.rb
445
571
  - test/test_scroll_event.rb
446
572
  - test/test_selector.rb
447
573
  - test/test_shape.rb
574
+ - test/test_snap_constraint.rb
448
575
  - test/test_style.rb
449
576
  - test/test_style_length.rb
577
+ - test/test_text_event.rb
450
578
  - test/test_timer_event.rb
451
579
  - test/test_update_event.rb
452
580
  - test/test_view.rb
581
+ - test/test_wheel_constraint.rb
453
582
  - test/test_wheel_event.rb
454
583
  - test/test_window.rb
455
584
  homepage: https://github.com/xord/reflex
@@ -471,7 +600,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
471
600
  - !ruby/object:Gem::Version
472
601
  version: '0'
473
602
  requirements: []
474
- rubygems_version: 3.4.19
603
+ rubygems_version: 3.5.22
475
604
  signing_key:
476
605
  specification_version: 4
477
606
  summary: A Graphical User Interface Tool Kit.
@@ -479,29 +608,44 @@ test_files:
479
608
  - test/helper.rb
480
609
  - test/test_application.rb
481
610
  - test/test_capture_event.rb
611
+ - test/test_chase_constraint.rb
612
+ - test/test_clipboard.rb
613
+ - test/test_color_event.rb
614
+ - test/test_color_picker.rb
615
+ - test/test_constraint.rb
482
616
  - test/test_contact_event.rb
483
617
  - test/test_device.rb
484
618
  - test/test_draw_event.rb
485
619
  - test/test_event.rb
620
+ - test/test_file_dialog.rb
621
+ - test/test_file_event.rb
486
622
  - test/test_focus_event.rb
487
623
  - test/test_frame_event.rb
488
624
  - test/test_has_frame.rb
625
+ - test/test_has_text_preedit.rb
489
626
  - test/test_key_event.rb
627
+ - test/test_link_constraint.rb
628
+ - test/test_menu.rb
490
629
  - test/test_midi_event.rb
491
630
  - test/test_model.rb
492
631
  - test/test_model_owner.rb
493
632
  - test/test_note_event.rb
633
+ - test/test_pin.rb
494
634
  - test/test_pointer.rb
495
635
  - test/test_pointer_event.rb
636
+ - test/test_reflex.rb
496
637
  - test/test_reflex_init.rb
497
638
  - test/test_screen.rb
498
639
  - test/test_scroll_event.rb
499
640
  - test/test_selector.rb
500
641
  - test/test_shape.rb
642
+ - test/test_snap_constraint.rb
501
643
  - test/test_style.rb
502
644
  - test/test_style_length.rb
645
+ - test/test_text_event.rb
503
646
  - test/test_timer_event.rb
504
647
  - test/test_update_event.rb
505
648
  - test/test_view.rb
649
+ - test/test_wheel_constraint.rb
506
650
  - test/test_wheel_event.rb
507
651
  - test/test_window.rb
@@ -1,127 +0,0 @@
1
- require 'shellwords'
2
-
3
- ALL_REPO = 'xord/all'
4
- ALL_DIR = '../all'
5
- ALL_FETCH_DEPTH = 100
6
-
7
- RENAMES = {reflex: 'reflexion'}
8
-
9
- def sh(cmd)
10
- puts cmd
11
- system cmd
12
- end
13
-
14
- def setup_dependencies(only: nil)
15
- gemspec_path = `git ls-files`.lines(chomp: true).find {|l| l =~ /\.gemspec$/}
16
- return unless gemspec_path
17
-
18
- gemspec = File.read gemspec_path
19
- name = File.basename gemspec_path, '.gemspec'
20
-
21
- exts = File.readlines('Rakefile')
22
- .map {|l| l[%r|^\s*require\W+([\w\-\_]+)/extension\W+$|, 1]}
23
- .compact
24
- .reject {|ext| ext == name}
25
- exts = exts & [only].flatten.map(&:to_s) if only
26
- return if exts.empty?
27
-
28
- unless setup_dependencies_via_monorepo(exts)
29
- setup_dependencies_via_each_repo_by_version(gemspec, exts)
30
- end
31
-
32
- exts.each {|ext| sh %( cd ../#{ext} && rake ext )}
33
- end
34
-
35
- def setup_dependencies_via_monorepo(exts)
36
- return false unless checkout_monorepo
37
- exts.each {|ext| sh %( ln -snf all/#{ext} ../#{ext} )}
38
- true
39
- end
40
-
41
- def checkout_monorepo()
42
- uuid = `git log -1 --format=%B`[/^\[\[([0-9a-fA-F-]+)\]\]$/, 1]
43
- return false unless uuid
44
-
45
- commit = setup_monorepo uuid
46
- return false unless commit
47
-
48
- Dir.chdir(ALL_DIR) {sh %( git checkout -q #{commit} )}
49
- true
50
- end
51
-
52
- def setup_monorepo(uuid)
53
- unless File.directory? ALL_DIR
54
- url = "https://github.com/#{ALL_REPO}.git"
55
- sh %( git clone --no-tags --depth #{ALL_FETCH_DEPTH} #{url} #{ALL_DIR} )
56
- end
57
- loop do
58
- commit = find_monorepo_commit uuid
59
- return commit if commit
60
-
61
- deepened = Dir.chdir ALL_DIR do
62
- before = `git rev-list --count HEAD`.to_i
63
- sh %( git fetch --deepen #{ALL_FETCH_DEPTH} )
64
- `git rev-list --count HEAD`.to_i > before
65
- end
66
- return nil unless deepened
67
- end
68
- end
69
-
70
- def find_monorepo_commit(uuid)
71
- Dir.chdir ALL_DIR do
72
- out = `git log origin/HEAD -F --grep="[[#{uuid}]]" --format=%H -1`.strip
73
- out.empty? ? nil : out
74
- end
75
- end
76
-
77
- def setup_dependencies_via_each_repo_by_version(gemspec, exts)
78
- exts.each do |ext|
79
- gem = RENAMES[ext.to_sym].then {|s| s || ext}
80
- ver = gemspec[/add_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
81
- opts = '-c advice.detachedHead=false --depth 1'
82
- clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
83
-
84
- # 'rake subtree:push' pushes all subrepos, so cloning by new tag
85
- # often fails before tagging each new tag
86
- sh %( #{clone} --branch v#{ver} || #{clone} )
87
- end
88
- end
89
-
90
- def tag_versions()
91
- changes = changelogs
92
- tags = `git tag`.lines chomp: true
93
- vers = `git log --oneline ./VERSION`
94
- .lines(chomp: true)
95
- .map {|line| line.split.first[/^\w+$/]}
96
- .map {|sha| [`git cat-file -p #{sha}:./VERSION 2>/dev/null`[/[\d\.]+/], sha]}
97
- .select {|ver, sha| ver && sha}
98
- .reverse
99
- .to_h
100
-
101
- vers.to_a.reverse.each do |ver, sha|
102
- tag = "v#{ver}"
103
- break if tags.include?(tag)
104
- sh %( git tag -a -m \"#{changes[tag]&.gsub '"', '\\"'}\" #{tag} #{sha} )
105
- end
106
- end
107
-
108
- def release(*paths)
109
- tag = ENV['GITHUB_REF']&.sub(%r|^refs/tags/|, '') || raise('GITHUB_REF tag not set')
110
- notes = (changelogs[tag] || '').shellescape
111
- paths = paths.flatten.join ' '
112
-
113
- sh(%( gh release create #{tag} #{paths} --notes #{notes} )) ||
114
- sh(%( gh release upload #{tag} #{paths} --clobber )) ||
115
- raise('failed to upload to releases')
116
- end
117
-
118
- def changelogs()
119
- File.read('ChangeLog.md')
120
- .split(/^\s*##\s*\[\s*(v[\d\.]+)\s*\].*$/)
121
- .slice(1..)
122
- .each_slice(2)
123
- .to_h
124
- .transform_values(&:strip!)
125
- rescue Errno::ENOENT
126
- raise 'failed to get changelogs'
127
- end