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, "#{Object} 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 48 |
# File 'lib/qml/reactive/object.rb', line 19 def initialize(*args, &block) # prepare properties properties = self.class.instance_property_hash .values .map { |property| self.class.instance_property(property.original) } .uniq properties.each do |property| instance_variable_set("@_property_#{property.name}", property.bind(self)) end # prepare signals signals = self.class.instance_signal_hash .values .map { |signal| self.class.instance_signal(signal.original) } .uniq signals.each do |signal| instance_variable_set("@_signal_#{signal.name}", signal.bind(self)) end # prepare signal connections 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 super end |
#properties ⇒ Array<Symbol>
Returns all property names.
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/qml/reactive/object.rb', line 68 [%w{signal signals}, %w{property properties}].each do |singular, plural| class_eval <<-EOS, __FILE__, __LINE__ + 1 def #{singular}(name) name = self.class.instance_#{singular}(name).original instance_variable_get(:"@_#{singular}_\#{name}") or fail ::NameError, "undefined #{singular} '\#{name}' for class '\#{self.class}'" end def #{plural} self.class.instance_#{plural} end EOS end |
#property(name) ⇒ QML::Reactive::Property
Returns a property.
|
# File 'lib/qml/reactive/object.rb', line 59
|
#signal(name) ⇒ QML::Reactive::Signal
Returns a signal.
|
# File 'lib/qml/reactive/object.rb', line 50
|
#signals ⇒ Array<Symbol>
Returns all signal names.
|
# File 'lib/qml/reactive/object.rb', line 55
|