diff --git a/lib/scarpe/shoes_spec.rb b/lib/scarpe/shoes_spec.rb index 1fb91c856..e615de30f 100644 --- a/lib/scarpe/shoes_spec.rb +++ b/lib/scarpe/shoes_spec.rb @@ -2,18 +2,13 @@ require "minitest" require "scarpe/cats_cradle" # Currently needed for CCHelpers +require "scarpe/components/string_helpers" # Test framework code to allow Scarpe to execute Shoes-Spec test code. # This will run inside the exe/scarpe child process, then send # results back to the parent Minitest process. module Scarpe::Test - # Cut down from Rails camelize - def self.camelize(string) - string = string.sub(/^[a-z\d]*/) { |match| match.capitalize } - string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" } - end - # Is it at all reasonable to define more than one test to run in the same Shoes run? Probably not. # They'll leave in-memory residue. def self.run_shoes_spec_test_code(code, class_name: "TestShoesSpecCode", test_name: "test_shoes_spec") @@ -43,7 +38,7 @@ class << test_obj end test_class = Class.new(Scarpe::ShoesSpecTest) - Object.const_set(camelize(class_name), test_class) + Object.const_set(Scarpe::Components::StringHelpers.camelize(class_name), test_class) test_name = "test_" + test_name unless test_name.start_with?("test_") test_class.define_method(test_name) do eval(code) diff --git a/lib/scarpe/wv.rb b/lib/scarpe/wv.rb index 601a8367b..014d70879 100644 --- a/lib/scarpe/wv.rb +++ b/lib/scarpe/wv.rb @@ -11,6 +11,7 @@ require "scarpe/components/html" # HTML renderer require "scarpe/components/modular_logger" require "scarpe/components/promises" +require "scarpe/components/string_helpers" # Module to contain the various Scarpe Webview classes module Scarpe::Webview @@ -21,6 +22,12 @@ module Scarpe::Webview ren = ENV["SCARPE_HTML_RENDERER"] || "calzini" # This should *not* be require_relative so that other gems can implement HTML renderers. require "scarpe/components/#{ren}" +class Scarpe::Webview::Drawable < Shoes::Linkable + # By default it's Scarpe::Components::Calzini + comp = Scarpe::Components::StringHelpers.camelize(ENV["SCARPE_HTML_RENDERER"] || "calzini") + mod = Scarpe::Components.const_get(comp) + include mod +end # Set up hierarchical logging using the SCARPE_LOG_CONFIG var for configuration log_config = if ENV["SCARPE_LOG_CONFIG"] @@ -69,7 +76,6 @@ module Scarpe::Webview require_relative "wv/edit_box" require_relative "wv/edit_line" require_relative "wv/list_box" -require_relative "wv/alert" require_relative "wv/span" require_relative "wv/shape" diff --git a/lib/scarpe/wv/alert.rb b/lib/scarpe/wv/alert.rb deleted file mode 100644 index 1fe628847..000000000 --- a/lib/scarpe/wv/alert.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module Scarpe::Webview - class Alert < Drawable - def initialize(properties) - super - - bind("click") do - send_self_event(event_name: "click") - end - end - - def element - render("alert") - end - end -end diff --git a/lib/scarpe/wv/list_box.rb b/lib/scarpe/wv/list_box.rb index fd7806ec5..5a4875586 100644 --- a/lib/scarpe/wv/list_box.rb +++ b/lib/scarpe/wv/list_box.rb @@ -5,7 +5,7 @@ class ListBox < Drawable attr_reader :selected_item, :items, :height, :width, :choose def initialize(properties) - super(properties) + super bind("change") do |new_item| send_self_event(new_item, event_name: "change") diff --git a/lib/scarpe/wv/shape.rb b/lib/scarpe/wv/shape.rb index cac3fee7d..9a5e8a9e0 100644 --- a/lib/scarpe/wv/shape.rb +++ b/lib/scarpe/wv/shape.rb @@ -2,16 +2,12 @@ module Scarpe::Webview class Shape < Drawable - def initialize(properties) - super(properties) - end - def to_html @children ||= [] child_markup = @children.map(&:to_html).join color = @draw_context["fill"] || "black" - self_markup = ::Scarpe::Components::HTML.render do |h| + self_markup = HTML.render do |h| h.div(id: html_id, style: style) do h.svg(width: "400", height: "500") do h.path(d: path_from_shape_commands, style: "fill:#{color};stroke-width:2;") diff --git a/lib/scarpe/wv/web_wrangler.rb b/lib/scarpe/wv/web_wrangler.rb index e1abb60ff..e22fb49f7 100644 --- a/lib/scarpe/wv/web_wrangler.rb +++ b/lib/scarpe/wv/web_wrangler.rb @@ -371,8 +371,8 @@ def run # From webview: # 0 - Width and height are default size - # 1 - Width and height are minimum bonds - # 2 - Width and height are maximum bonds + # 1 - Width and height are minimum bounds + # 2 - Width and height are maximum bounds # 3 - Window size can not be changed by a user hint = @resizable ? 0 : 3 diff --git a/scarpe-components/lib/scarpe/components/calzini.rb b/scarpe-components/lib/scarpe/components/calzini.rb index 4b4d41302..b03a5ff5f 100644 --- a/scarpe-components/lib/scarpe/components/calzini.rb +++ b/scarpe-components/lib/scarpe/components/calzini.rb @@ -131,9 +131,3 @@ def radians_to_degrees(radians) radians * (180.0 / Math::PI) end end - -if ENV["SCARPE_HTML_RENDERER"].nil? || ENV["SCARPE_HTML_RENDERER"] == "calzini" - class Scarpe::Webview::Drawable < Shoes::Linkable - include Scarpe::Components::Calzini - end -end diff --git a/scarpe-components/lib/scarpe/components/string_helpers.rb b/scarpe-components/lib/scarpe/components/string_helpers.rb new file mode 100644 index 000000000..7005fc9cb --- /dev/null +++ b/scarpe-components/lib/scarpe/components/string_helpers.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Scarpe; module Components; end; end +module Scarpe::Components::StringHelpers + # Cut down from Rails camelize + def self.camelize(string) + string = string.sub(/^[a-z\d]*/) { |match| match.capitalize } + string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" } + end +end diff --git a/scarpe-components/lib/scarpe/components/tiranti.rb b/scarpe-components/lib/scarpe/components/tiranti.rb index bea2cfe9e..bde52ee6f 100644 --- a/scarpe-components/lib/scarpe/components/tiranti.rb +++ b/scarpe-components/lib/scarpe/components/tiranti.rb @@ -209,9 +209,3 @@ def para_elt_and_size(props) end end end - -if ENV["SCARPE_HTML_RENDERER"] == "tiranti" - class Scarpe::Webview::Drawable < Shoes::Linkable - include Scarpe::Components::Tiranti - end -end diff --git a/test/test_examples.rb b/test/test_examples.rb index 9cd85beec..8c8a828c9 100644 --- a/test/test_examples.rb +++ b/test/test_examples.rb @@ -15,7 +15,12 @@ class TestExamplesWithWebview < LoggedScarpeTest examples_to_test.each do |example_filename| example = example_filename.gsub("/", "_").gsub("-", "_").gsub(/.rb\Z/, "") - define_method("test_webview_#{example}") do + define_method("test_webview_calzini_#{example}") do + ENV["SCARPE_HTML_RENDERER"] = "calzini" + run_test_scarpe_app(example_filename, exit_immediately: true) + end + define_method("test_webview_tiranti_#{example}") do + ENV["SCARPE_HTML_RENDERER"] = "tiranti" run_test_scarpe_app(example_filename, exit_immediately: true) end end