scarpe 0.3.0 → 0.5.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 (297) hide show
  1. checksums.yaml +4 -4
  2. data/.cursor/rules/commit-style-preferences.mdc +72 -0
  3. data/.cursor/rules/component_context.mdc +82 -0
  4. data/.cursor/rules/debug-failed-tests.mdc +100 -0
  5. data/.cursor/rules/display_service_context.mdc +80 -0
  6. data/.cursor/rules/event_handling_context.mdc +100 -0
  7. data/.cursor/rules/git-pager-handling.mdc +64 -0
  8. data/.cursor/rules/lacci-context.mdc +52 -0
  9. data/.cursor/rules/scarpe_design_context.mdc +46 -0
  10. data/.cursor/rules/shoes_compatibility_context.mdc +75 -0
  11. data/.cursor/rules/timeout_context.mdc +78 -0
  12. data/.cursor/rules/update_lacci_and_wv.mdc +8 -0
  13. data/.cursor/rules/what_is_scarpe.mdc +22 -0
  14. data/.cursor/rules/writing-new-rules.mdc +73 -0
  15. data/CHANGELOG.md +46 -5
  16. data/CLAUDE.md +223 -0
  17. data/Gemfile +2 -2
  18. data/Gemfile.lock +85 -55
  19. data/LICENSE.txt +7 -1
  20. data/README.md +80 -20
  21. data/Rakefile +73 -14
  22. data/docs/SCARPE_FEATURES.md +38 -0
  23. data/docs/_config.yml +13 -0
  24. data/docs/calzini_components_and_updates.md +78 -0
  25. data/docs/display_service_separation.md +39 -0
  26. data/docs/documentation.md +43 -0
  27. data/docs/event_loops.md +66 -0
  28. data/docs/image.png +0 -0
  29. data/docs/index.md +118 -0
  30. data/docs/lacci.md +121 -0
  31. data/docs/scarpe_shoes_incompatibilities.md +71 -0
  32. data/docs/shoes_and_display_events.md +55 -0
  33. data/docs/shoes_implementations.md +79 -0
  34. data/docs/static/manual.md +5 -0
  35. data/docs/static/scarpe-logo.png +0 -0
  36. data/docs/timeouts_and_handlers.md +66 -0
  37. data/docs/web_archaeology.md +76 -0
  38. data/examples/Edit_box_Styles.rb +8 -0
  39. data/examples/Kerning.rb +7 -0
  40. data/examples/background_with_image.rb +14 -5
  41. data/examples/bloopsaphone/working/feepogram.rb +1 -1
  42. data/examples/bloopsaphone/working/le_dance_des_rubis.rb +135 -0
  43. data/examples/bloopsaphone/working/pixel_dreams_in_ruby.rb +131 -0
  44. data/examples/bloopsaphone/working/type_rebellion.rb +157 -0
  45. data/examples/border.rb +11 -0
  46. data/examples/check.rb +2 -0
  47. data/examples/download_and_show_image.rb +3 -0
  48. data/examples/flags/finland.rb +15 -0
  49. data/examples/flags/italy.rb +11 -0
  50. data/examples/flags/mauritius.rb +14 -0
  51. data/examples/font_family.rb +17 -0
  52. data/examples/font_shorthand.rb +9 -0
  53. data/examples/gen.rb +4 -0
  54. data/examples/internal_link_navigation.rb +19 -0
  55. data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
  56. data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
  57. data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
  58. data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
  59. data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
  60. data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
  61. data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
  62. data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
  63. data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
  64. data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
  65. data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
  66. data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
  67. data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
  68. data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
  69. data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
  70. data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
  71. data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
  72. data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
  73. data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
  74. data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
  75. data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
  76. data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
  77. data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
  78. data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
  79. data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
  80. data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
  81. data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
  82. data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
  83. data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
  84. data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
  85. data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
  86. data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
  87. data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
  88. data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
  89. data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
  90. data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
  91. data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
  92. data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
  93. data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
  94. data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
  95. data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
  96. data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
  97. data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
  98. data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
  99. data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
  100. data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
  101. data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
  102. data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
  103. data/examples/legacy/working/shoes_manual/animate.rb +7 -0
  104. data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
  105. data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
  106. data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
  107. data/examples/legacy/working/shoes_manual/download.rb +12 -0
  108. data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
  109. data/examples/legacy/working/shoes_manual/editline.rb +7 -0
  110. data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
  111. data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
  112. data/examples/legacy/working/shoes_manual/image.rb +5 -0
  113. data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
  114. data/examples/legacy/working/shoes_manual/message.rb +18 -0
  115. data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
  116. data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
  117. data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
  118. data/examples/legacy/working/shoes_manual/stack.rb +7 -0
  119. data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
  120. data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
  121. data/examples/legacy/working/shoes_manual/width.rb +4 -0
  122. data/examples/local_assets/multi_image.rb +5 -0
  123. data/examples/local_assets/small.png +0 -0
  124. data/examples/local_fonts.rb +3 -0
  125. data/examples/margin.rb +13 -0
  126. data/examples/margin_check.rb +27 -0
  127. data/examples/oval-with-kwargs.rb +3 -0
  128. data/examples/oval.rb +26 -0
  129. data/examples/page_navigation_single_app.rb +42 -0
  130. data/examples/para_font_styles.rb +17 -0
  131. data/examples/para_font_variant.rb +6 -0
  132. data/examples/para_fontweight.rb +13 -0
  133. data/examples/parse_xl_funnies.rb +3 -0
  134. data/examples/rect.rb +1 -1
  135. data/examples/scarpe_ext.rb +3 -0
  136. data/examples/shapes/star.rb +1 -3
  137. data/examples/shoes_subclass_app.rb +25 -0
  138. data/examples/spacing.rb +1 -1
  139. data/examples/span.rb +4 -2
  140. data/examples/url_routing_example.rb +67 -0
  141. data/lacci/Gemfile +0 -2
  142. data/lacci/Gemfile.lock +4 -32
  143. data/lacci/lacci.gemspec +3 -3
  144. data/lacci/lib/lacci/scarpe_cli.rb +0 -1
  145. data/lacci/lib/lacci/version.rb +1 -1
  146. data/lacci/lib/scarpe/niente/app.rb +12 -1
  147. data/lacci/lib/scarpe/niente/display_service.rb +5 -1
  148. data/lacci/lib/scarpe/niente/drawable.rb +2 -0
  149. data/lacci/lib/scarpe/niente/shoes_spec.rb +10 -5
  150. data/lacci/lib/scarpe/niente.rb +15 -2
  151. data/lacci/lib/shoes/app.rb +204 -105
  152. data/lacci/lib/shoes/constants.rb +24 -2
  153. data/lacci/lib/shoes/display_service.rb +43 -4
  154. data/lacci/lib/shoes/drawable.rb +326 -36
  155. data/lacci/lib/shoes/drawables/arc.rb +4 -26
  156. data/lacci/lib/shoes/drawables/arrow.rb +3 -23
  157. data/lacci/lib/shoes/drawables/border.rb +28 -0
  158. data/lacci/lib/shoes/drawables/button.rb +5 -21
  159. data/lacci/lib/shoes/drawables/check.rb +7 -3
  160. data/lacci/lib/shoes/drawables/document_root.rb +4 -4
  161. data/lacci/lib/shoes/drawables/edit_box.rb +6 -5
  162. data/lacci/lib/shoes/drawables/edit_line.rb +5 -4
  163. data/lacci/lib/shoes/drawables/flow.rb +4 -6
  164. data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
  165. data/lacci/lib/shoes/drawables/image.rb +2 -2
  166. data/lacci/lib/shoes/drawables/line.rb +3 -6
  167. data/lacci/lib/shoes/drawables/link.rb +16 -9
  168. data/lacci/lib/shoes/drawables/list_box.rb +8 -5
  169. data/lacci/lib/shoes/drawables/oval.rb +48 -0
  170. data/lacci/lib/shoes/drawables/para.rb +106 -18
  171. data/lacci/lib/shoes/drawables/progress.rb +2 -1
  172. data/lacci/lib/shoes/drawables/radio.rb +5 -3
  173. data/lacci/lib/shoes/drawables/rect.rb +7 -6
  174. data/lacci/lib/shoes/drawables/shape.rb +4 -3
  175. data/lacci/lib/shoes/drawables/slot.rb +102 -9
  176. data/lacci/lib/shoes/drawables/stack.rb +7 -12
  177. data/lacci/lib/shoes/drawables/star.rb +9 -31
  178. data/lacci/lib/shoes/drawables/text_drawable.rb +93 -34
  179. data/lacci/lib/shoes/drawables/video.rb +3 -2
  180. data/lacci/lib/shoes/drawables/widget.rb +9 -4
  181. data/lacci/lib/shoes/drawables.rb +2 -1
  182. data/lacci/lib/shoes/errors.rb +13 -3
  183. data/lacci/lib/shoes/margin_helper.rb +79 -0
  184. data/lacci/lib/shoes.rb +98 -20
  185. data/lacci/test/.gitignore +1 -0
  186. data/lacci/test/test_draw_context.rb +167 -0
  187. data/lacci/test/test_font_helper.rb +57 -0
  188. data/lacci/test/test_helper.rb +31 -4
  189. data/lacci/test/test_lacci.rb +93 -6
  190. data/lacci/test/test_margin_helper.rb +82 -0
  191. data/lacci/test/test_niente_test_infra.rb +40 -0
  192. data/lacci/test/test_oval.rb +82 -0
  193. data/lacci/test/test_parenting.rb +140 -0
  194. data/lacci/test/test_shoes_errors.rb +15 -13
  195. data/lacci/test/test_text_drawables.rb +23 -0
  196. data/lib/scarpe/assets.rb +19 -0
  197. data/lib/scarpe/cats_cradle.rb +57 -98
  198. data/lib/scarpe/shoes_spec.rb +24 -44
  199. data/lib/scarpe/version.rb +1 -1
  200. data/lib/scarpe/wv/app.rb +1 -0
  201. data/lib/scarpe/wv/arc.rb +0 -4
  202. data/lib/scarpe/wv/border.rb +15 -0
  203. data/lib/scarpe/wv/control_interface.rb +2 -10
  204. data/lib/scarpe/wv/document_root.rb +2 -2
  205. data/lib/scarpe/wv/drawable.rb +6 -40
  206. data/lib/scarpe/wv/edit_box.rb +4 -1
  207. data/lib/scarpe/wv/edit_line.rb +4 -1
  208. data/lib/scarpe/wv/image.rb +2 -5
  209. data/lib/scarpe/wv/link.rb +4 -2
  210. data/lib/scarpe/wv/oval.rb +13 -0
  211. data/lib/scarpe/wv/para.rb +1 -0
  212. data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
  213. data/lib/scarpe/wv/shape.rb +10 -5
  214. data/lib/scarpe/wv/text_drawable.rb +72 -14
  215. data/lib/scarpe/wv/web_wrangler.rb +33 -11
  216. data/lib/scarpe/wv/webview_local_display.rb +6 -2
  217. data/lib/scarpe/wv.rb +16 -2
  218. data/scarpe-components/Gemfile +4 -3
  219. data/scarpe-components/Gemfile.lock +6 -37
  220. data/scarpe-components/README.md +2 -2
  221. data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
  222. data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
  223. data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
  224. data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
  225. data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
  226. data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
  227. data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
  228. data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
  229. data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
  230. data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
  231. data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
  232. data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
  233. data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
  234. data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
  235. data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
  236. data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
  237. data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
  238. data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
  239. data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
  240. data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
  241. data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
  242. data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
  243. data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
  244. data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
  245. data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
  246. data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
  247. data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
  248. data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
  249. data/scarpe-components/lib/scarpe/components/base64.rb +22 -0
  250. data/scarpe-components/lib/scarpe/components/calzini/{art_widgets.rb → art_drawables.rb} +42 -18
  251. data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
  252. data/scarpe-components/lib/scarpe/components/calzini/button.rb +6 -8
  253. data/scarpe-components/lib/scarpe/components/calzini/misc.rb +14 -16
  254. data/scarpe-components/lib/scarpe/components/calzini/para.rb +218 -11
  255. data/scarpe-components/lib/scarpe/components/calzini/slots.rb +16 -60
  256. data/scarpe-components/lib/scarpe/components/calzini.rb +88 -1
  257. data/scarpe-components/lib/scarpe/components/errors.rb +4 -0
  258. data/scarpe-components/lib/scarpe/components/html.rb +4 -1
  259. data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +11 -3
  260. data/scarpe-components/lib/scarpe/components/minitest_result.rb +41 -0
  261. data/scarpe-components/lib/scarpe/components/port_helpers.rb +30 -0
  262. data/scarpe-components/lib/scarpe/components/print_logger.rb +17 -2
  263. data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
  264. data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +1 -1
  265. data/scarpe-components/lib/scarpe/components/tiranti.rb +42 -100
  266. data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +3 -1
  267. data/scarpe-components/lib/scarpe/components/version.rb +1 -1
  268. data/scarpe-components/scarpe-components.gemspec +1 -1
  269. data/scarpe-components/test/assets/big-image.png +0 -0
  270. data/scarpe-components/test/assets/big-stylesheet.css +497 -0
  271. data/scarpe-components/test/assets/little-image.png +0 -0
  272. data/scarpe-components/test/assets/little-stylesheet.css +1 -0
  273. data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +7 -7
  274. data/scarpe-components/test/calzini/test_calzini_button.rb +7 -5
  275. data/scarpe-components/test/calzini/test_calzini_misc.rb +9 -9
  276. data/scarpe-components/test/calzini/test_calzini_para.rb +6 -9
  277. data/scarpe-components/test/calzini/test_calzini_slots.rb +12 -57
  278. data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +83 -18
  279. data/scarpe-components/test/calzini/test_various.rb +133 -0
  280. data/scarpe-components/test/test_asset_server.rb +72 -0
  281. data/scarpe-components/test/test_components.rb +31 -2
  282. data/scarpe-components/test/test_helper.rb +0 -1
  283. data/scarpe-components/test/test_minitest_result.rb +7 -0
  284. data/scarpe-components/test/test_port_helpers.rb +12 -0
  285. data/scarpe-components/test/test_segmented_app_files.rb +2 -0
  286. data/tasks/check_html_fixtures.rb +140 -0
  287. data/tasks/regenerate_html_fixtures.rb +104 -0
  288. data/templates/class_template_with_shapes.erb +0 -11
  289. metadata +225 -39
  290. data/.rubocop.yml +0 -88
  291. data/lacci/lib/scarpe/niente/logger.rb +0 -29
  292. data/lacci/lib/shoes/drawables/span.rb +0 -27
  293. data/lacci/lib/shoes/spacing.rb +0 -9
  294. data/lib/scarpe/evented_assertions.rb +0 -121
  295. data/lib/scarpe/wv/span.rb +0 -44
  296. data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +0 -65
  297. /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
@@ -11,26 +11,41 @@ class Scarpe::Components::PrintLogImpl
11
11
  class PrintLogger
12
12
  class << self
13
13
  attr_accessor :silence
14
+ attr_accessor :min_level
14
15
  end
15
16
 
17
+ LEVELS = {
18
+ :never => 1000,
19
+ :error => 4,
20
+ :warn => 3,
21
+ :info => 2,
22
+ :debug => 1,
23
+ :always => -1,
24
+ }
25
+ PrintLogger.min_level = LEVELS[:always]
26
+
16
27
  def initialize(component_name)
17
28
  @comp_name = component_name
18
29
  end
19
30
 
20
31
  def error(msg)
21
- puts "#{@comp_name} error: #{msg}" unless PrintLogger.silence
32
+ return if PrintLogger.silence || PrintLogger.min_level > LEVELS[:error]
33
+ puts "#{@comp_name} error: #{msg}"
22
34
  end
23
35
 
24
36
  def warn(msg)
37
+ return if PrintLogger.silence || PrintLogger.min_level > LEVELS[:warn]
25
38
  puts "#{@comp_name} warn: #{msg}" unless PrintLogger.silence
26
39
  end
27
40
 
28
41
  def debug(msg)
42
+ return if PrintLogger.silence || PrintLogger.min_level > LEVELS[:debug]
29
43
  puts "#{@comp_name} debug: #{msg}" unless PrintLogger.silence
30
44
  end
31
45
 
32
46
  def info(msg)
33
- puts "#{@comp_name} info: #{msg}" unless PrintLogger.silence
47
+ return if PrintLogger.silence || PrintLogger.min_level > LEVELS[:info]
48
+ puts "#{@comp_name} info: #{msg}"
34
49
  end
35
50
  end
36
51
 
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # These can be used for unit tests, but also more generally.
4
+
5
+ require_relative "file_helpers"
6
+
7
+ module Scarpe::Components::ProcessHelpers
8
+ include Scarpe::Components::FileHelpers
9
+
10
+ # Run the command and capture its stdout and stderr output, and whether
11
+ # it succeeded or failed. Return after the command has completed.
12
+ # The awkward name is because this is normally a component of another
13
+ # library. Ordinarily you'd want to raise a library-specific exception
14
+ # on failure, print a library-specific message or delimiter, or otherwise
15
+ # handle success and failure. This is too general as-is.
16
+ #
17
+ # @param cmd [String,Array<String>] the command to run in Kernel#spawn format
18
+ # @return [Array(String,String,bool)] the stdout output, stderr output and success/failure of the command in a 3-element Array
19
+ def run_out_err_result(cmd)
20
+ out_str = ""
21
+ err_str = ""
22
+ success = nil
23
+
24
+ with_tempfiles([
25
+ ["scarpe_cmd_stdout", ""],
26
+ ["scarpe_cmd_stderr", ""],
27
+ ]) do |stdout_file, stderr_file|
28
+ pid = Kernel.spawn(cmd, out: stdout_file, err: stderr_file)
29
+ Process.wait(pid)
30
+ success = $?.success?
31
+ out_str = File.read stdout_file
32
+ err_str = File.read stderr_file
33
+ end
34
+
35
+ [out_str, err_str, success]
36
+ end
37
+ end
@@ -176,7 +176,7 @@ module Scarpe::Components
176
176
  "shoes" => proc { |seg_file| after_load { load seg_file } },
177
177
  "app_test" => proc do |seg_file|
178
178
  ENV["SHOES_SPEC_TEST"] = seg_file
179
- ENV["SHOES_MINITEST_EXPORT_FILE"] = "sspec.json"
179
+ ENV["SHOES_MINITEST_EXPORT_FILE"] ||= "sspec.json"
180
180
  end,
181
181
  }
182
182
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  # In Italian, tiranti are bootstraps -- the literal pull-on-a-boot kind, not a step to something better.
4
4
  # Tiranti.rb builds on calzini.rb, but renders a Bootstrap-decorated version of the HTML output.
5
- # You would ordinarily set either Calzini or Tiranti as the top-level HTML renderer, not both.
6
- # You'll include both if you use Tiranti, because it falls back to Calzini for a lot of its rendering.
5
+ # You can set Tiranti as your HTML renderer and you'll get Bootstrap versions of all the drawables.
6
+ # Tiranti requires Calzini's files because it falls back to Calzini for a lot of its rendering.
7
7
 
8
8
  require "scarpe/components/calzini"
9
9
 
@@ -17,45 +17,22 @@ module Scarpe::Components::Tiranti
17
17
  include Scarpe::Components::Calzini
18
18
  extend self
19
19
 
20
- # Currently we're using Bootswatch 5
21
- BOOTSWATCH_THEMES = [
22
- "cerulean",
23
- "cosmo",
24
- "cyborg",
25
- "darkly",
26
- "flatly",
27
- "journal",
28
- "litera",
29
- "lumen",
30
- "lux",
31
- "materia",
32
- "minty",
33
- "morph",
34
- "pulse",
35
- "quartz",
36
- "sandstone",
37
- "simplex",
38
- "sketchy",
39
- "slate",
40
- "solar",
41
- "spacelab",
42
- "superhero",
43
- "united",
44
- "vapor",
45
- "yeti",
46
- "zephyr",
47
- ]
48
-
49
- BOOTSWATCH_THEME = ENV["SCARPE_BOOTSTRAP_THEME"] || "sketchy"
50
-
51
- def empty_page_element
20
+ # Currently we're using Bootswatch 5.
21
+ # Bootswatch themes downloaded from https://bootswatch.com/5/THEME_NAME/bootstrap.css
22
+
23
+ def empty_page_element(theme: ENV["SCARPE_BOOTSTRAP_THEME"] || "sketchy")
24
+ comp_dir = File.expand_path("#{__dir__}/../../..")
25
+ bootstrap_js_url = Scarpe::Webview.asset_server.asset_url("#{comp_dir}/assets/bootstrap-themes/bootstrap.bundle.min.js", url_type: :asset)
26
+ theme_url = Scarpe::Webview.asset_server.asset_url("#{comp_dir}/assets/bootstrap-themes/bootstrap-#{theme}.css", url_type: :asset)
27
+ icons_url = Scarpe::Webview.asset_server.asset_url("#{comp_dir}/assets/bootstrap-themes/bootstrap-icons.min.css", url_type: :asset)
28
+
52
29
  <<~HTML
53
30
  <html>
54
31
  <head id='head-wvroot'>
55
32
  <meta charset="utf-8">
56
33
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
57
- <link rel="stylesheet" href="https://bootswatch.com/5/#{BOOTSWATCH_THEME}/bootstrap.css">
58
- <link rel="stylesheet" href="https://bootswatch.com/_vendor/bootstrap-icons/font/bootstrap-icons.min.css">
34
+ <link rel="stylesheet" href=#{theme_url.inspect}>
35
+ <link rel="stylesheet" href=#{icons_url.inspect}>
59
36
  <style id='style-wvroot'>
60
37
  /** Style resets **/
61
38
  body {
@@ -67,22 +44,22 @@ module Scarpe::Components::Tiranti
67
44
  <body id='body-wvroot'>
68
45
  <div id='wrapper-wvroot'></div>
69
46
 
70
- <script src="https://bootswatch.com/_vendor/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
47
+ <script src=#{bootstrap_js_url}></script>
71
48
  </body>
72
49
  </html>
73
50
  HTML
74
51
  end
75
52
 
76
- # def render_stack
77
- # end
78
- # def render_flow
79
- # end
80
-
81
53
  # How do we want to handle theme-specific colours and primary/secondary buttons in Bootstrap?
82
54
  # "Disabled" could be checked in properties. Is there any way we can/should use "outline" buttons?
83
55
  def button_element(props)
84
56
  HTML.render do |h|
85
- h.button(id: html_id, type: "button", class: "btn btn-primary", onclick: handler_js_code("click"), style: button_style(props)) do
57
+ h.button(
58
+ id: html_id,
59
+ type: "button",
60
+ class: props["html_class"] ? "btn #{props["html_class"]}" : "btn btn-primary",
61
+ onclick: handler_js_code("click"), style: button_style(props)
62
+ ) do
86
63
  props["text"]
87
64
  end
88
65
  end
@@ -97,14 +74,11 @@ module Scarpe::Components::Tiranti
97
74
  styles[:"padding-top"] = props["padding_top"] if props["padding_top"]
98
75
  styles[:"padding-bottom"] = props["padding_bottom"] if props["padding_bottom"]
99
76
  styles[:color] = props["text_color"] if props["text_color"]
100
- styles[:width] = dimensions_length(props["width"]) if props["width"]
101
- styles[:height] = dimensions_length(props["height"]) if props["height"]
102
- styles[:"font-size"] = props["font_size"] if props["font_size"]
103
77
 
104
- styles[:top] = dimensions_length(props["top"]) if props["top"]
105
- styles[:left] = dimensions_length(props["left"]) if props["left"]
106
- styles[:position] = "absolute" if props["top"] || props["left"]
78
+ # How do we want to handle font size?
79
+ styles[:"font-size"] = props["font_size"] if props["font_size"]
107
80
  styles[:"font-size"] = dimensions_length(text_size(props["size"])) if props["size"]
81
+
108
82
  styles[:"font-family"] = props["font"] if props["font"]
109
83
 
110
84
  styles
@@ -153,8 +127,11 @@ module Scarpe::Components::Tiranti
153
127
  end
154
128
 
155
129
  def progress_element(props)
130
+ progress_style = drawable_style(props).merge({
131
+ width: "90%",
132
+ })
156
133
  HTML.render do |h|
157
- h.div(class: "progress", style: "width: 90%") do
134
+ h.div(id: html_id, class: "progress", style: progress_style) do
158
135
  pct = "%.1f" % ((props["fraction"] || 0.0) * 100.0)
159
136
  h.div(
160
137
  class: "progress-bar progress-bar-striped progress-bar-animated",
@@ -168,58 +145,23 @@ module Scarpe::Components::Tiranti
168
145
  end
169
146
  end
170
147
 
171
- # para_element is a bit of a hard one, since it does not-entirely-trivial
172
- # mapping between display objects and IDs. But we don't want Calzini
173
- # messing with the display service or display objects.
174
148
  def para_element(props, &block)
175
- tag, opts = para_elt_and_opts(props)
176
-
177
- HTML.render do |h|
178
- h.send(tag, **opts, &block)
179
- end
180
- end
181
-
182
- private
183
-
184
- ELT_AND_SIZE = {
185
- inscription: [:p, 10],
186
- ins: [:p, 10],
187
- para: [:p, 12],
188
- caption: [:p, 14],
189
- tagline: [:p, 18],
190
- subtitle: [:h3, 26],
191
- title: [:h2, 34],
192
- banner: [:h1, 48],
193
- }.freeze
194
-
195
- def para_elt_and_opts(props)
196
- elt, size = para_elt_and_size(props)
197
- size = dimensions_length(size)
198
-
199
- para_style = drawable_style(props).merge({
200
- color: rgb_to_hex(props["stroke"]),
201
- "font-size": para_font_size(props),
202
- "font-family": props["font"],
203
- }.compact)
204
-
205
- opts = (props["html_attributes"] || {}).merge(id: html_id, style: para_style)
206
-
207
- [elt, opts]
208
- end
209
-
210
- def para_elt_and_size(props)
211
- return [:p, nil] unless props["size"]
212
-
213
- ps = props["size"].to_s.to_sym
214
- if ELT_AND_SIZE.key?(ps)
215
- ELT_AND_SIZE[ps]
149
+ ps, _extra = para_style(props)
150
+ size = ps[:"font-size"] || "12px"
151
+ size_int = size.to_i # Mostly useful if it's something like "12px"
152
+ if size.include?("calc") || size.end_with?("%")
153
+ # Very big text!
154
+ props["tag"] = "h2"
155
+ elsif size_int >= 48
156
+ props["tag"] = "h1"
157
+ elsif size_int >= 34
158
+ props["tag"] = "h2"
159
+ elsif size_int >= 26
160
+ props["tag"] = "h3"
216
161
  else
217
- sz = props["size"].to_i
218
- if sz > 18
219
- [:h2, sz]
220
- else
221
- [:p, sz]
222
- end
162
+ props["tag"] = "p"
223
163
  end
164
+
165
+ super
224
166
  end
225
167
  end
@@ -5,6 +5,7 @@ require "json"
5
5
  require "fileutils"
6
6
 
7
7
  require "scarpe/components/file_helpers"
8
+ require "scarpe/components/process_helpers"
8
9
 
9
10
  module Scarpe::Test; end
10
11
 
@@ -20,6 +21,7 @@ ALREADY_SET_UP_LOGGED_TEST_FAILURES = { setup: false }
20
21
  module Scarpe::Test::Helpers
21
22
  # Very useful for tests
22
23
  include Scarpe::Components::FileHelpers
24
+ include Scarpe::Components::ProcessHelpers
23
25
 
24
26
  # Temporarily set env vars for the block of code inside. The old environment
25
27
  # variable values will be restored after the block finishes.
@@ -67,7 +69,7 @@ module Scarpe::Test::LoggedTest
67
69
  @normal_log_config = Shoes::Log.current_log_config
68
70
  Shoes::Log.configure_logger(log_config_for_test)
69
71
 
70
- Shoes::Log.logger("LoggedScarpeTest").info("Test: #{self.class.name}##{self.name}")
72
+ Shoes::Log.logger("LoggedTest").info("Test: #{self.class.name}##{self.name}")
71
73
  end
72
74
 
73
75
  # If you include this module and don't override setup/teardown, everything will
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scarpe
4
4
  module Components
5
- VERSION = "0.3.0"
5
+ VERSION = "0.5.0"
6
6
  end
7
7
  end
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/scarpe-team/scarpe"
19
+ #spec.metadata["source_code_uri"] = "https://github.com/scarpe-team/scarpe"
20
20
  spec.metadata["changelog_uri"] = "https://github.com/scarpe-team/scarpe/blob/main/CHANGELOG.md"
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.