Module: Ruflet::Extensions

Defined in:
lib/ruflet_ui/ruflet/extensions.rb,
lib/ruflet_ui/ruflet/extensions/qrcode_scanner.rb

Overview

Registry used by Ruflet extension gems to add typed Ruby controls and describe the matching Flet Flutter package. Registering a control makes its helpers available in the bare DSL, Ruflet::DSL, Ruflet, Ruflet::UI, and WidgetBuilder without editing Ruflet's generated control method tables.

Defined Under Namespace

Classes: QrCodeScannerControl, Registration

Class Method Summary collapse

Class Method Details

.[](name) ⇒ Object



42
43
44
# File 'lib/ruflet_ui/ruflet/extensions.rb', line 42

def [](name)
  @registrations[normalize_name(name)]
end

.each(&block) ⇒ Object



46
47
48
49
50
# File 'lib/ruflet_ui/ruflet/extensions.rb', line 46

def each(&block)
  return enum_for(:each) unless block

  @registrations.values.each(&block)
end

.register_control(name, control_class:, helpers: nil, flutter: nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ruflet_ui/ruflet/extensions.rb', line 20

def register_control(name, control_class:, helpers: nil, flutter: nil)
  key = normalize_name(name)
  helper_names = Array(helpers || key).map { |helper| normalize_name(helper) }.uniq.freeze
  registration = Registration.new(
    name: key,
    control_class: control_class,
    helpers: helper_names,
    flutter: (flutter)
  ).freeze

  existing = @registrations[key]
  if existing && existing != registration
    raise ArgumentError, "Ruflet extension `#{key}` is already registered"
  end

  helper_names.each do |helper|
    UI::ControlFactory.register_extension(helper, control_class)
    define_control_helper(helper)
  end
  @registrations[key] = registration
end

.registered?(name) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/ruflet_ui/ruflet/extensions.rb', line 52

def registered?(name)
  @registrations.key?(normalize_name(name))
end