Module: QML::Reactive::Object
Overview
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.included(derived) ⇒ Object
When Object is included by a class, the class extends ClassMethods to add the common class methods.
Instance Method Summary collapse
- #initialize(*args, &block) ⇒ Object
-
#properties ⇒ Array<Symbol>
Returns all property names.
-
#property(name) ⇒ QML::Reactive::Property
Returns a property.
-
#signal(name) ⇒ QML::Reactive::Signal
Returns a signal.
-
#signals ⇒ Array<Symbol>
Returns all signal names.
Methods included from ClassMethods
alias_property, alias_signal, instance_properties, instance_property, instance_signal, instance_signals, on, on_changed, variadic_signal
Class Method Details
.included(derived) ⇒ Object
When QML::Reactive::Object is included by a class, the class extends ClassMethods to add the common class methods.
14 15 16 17 |
# File 'lib/qml/reactive/object.rb', line 14 def self.included(derived) fail Error, "SignalDef must be included in a class" unless derived.is_a? ::Class derived.extend(ClassMethods) end |
Instance Method Details
#initialize(*args, &block) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/qml/reactive/object.rb', line 19 def initialize(*args, &block) super properties = self.class.instance_property_hash .values .map { |property| self.class.instance_property(property.original) } .uniq notifier_signals = properties.map(&:notifier_signal) signals = self.class.instance_signal_hash .values .map { |signal| self.class.instance_signal(signal.original) } .uniq - notifier_signals properties.each do |property| p = property.bind(self) instance_variable_set(:"@_property_#{property.name}", p) instance_variable_set(:"@_signal_#{property.notifier_signal.name}", p.changed) end signals.each do |signal| instance_variable_set(:"@_signal_#{signal.name}", signal.bind(self)) end self.class.send(:initial_connections_hash).each do |name, blocks| blocks.each do |block| signal(name).connect do |*args| instance_exec(*args, &block) end end end end |
#properties ⇒ Array<Symbol>
Returns all property names.
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/qml/reactive/object.rb', line 67 [%w{signal signals}, %w{property properties}].each do |singular, plural| class_eval " def \#{singular}(name)\n name = self.class.instance_\#{singular}(name).original\n instance_variable_get(:\"@_\#{singular}_\\\#{name}\") or\n fail ::NameError, \"undefined \#{singular} '\\\#{name}' for class '\\\#{self.class}'\"\n end\n\n def \#{plural}\n self.class.instance_\#{plural}\n end\n EOS\nend\n", __FILE__, __LINE__ + 1 |
#property(name) ⇒ QML::Reactive::Property
Returns a property.
|
|
# File 'lib/qml/reactive/object.rb', line 58
|
#signal(name) ⇒ QML::Reactive::Signal
Returns a signal.
|
|
# File 'lib/qml/reactive/object.rb', line 49
|
#signals ⇒ Array<Symbol>
Returns all signal names.
|
|
# File 'lib/qml/reactive/object.rb', line 54
|