Module: React::Component::Resolution
- Included in:
- Object
- Defined in:
- lib/react/component/resolution.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(component_name, *args, &block) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/react/component/resolution.rb', line 56
def method_missing(component_name, *args, &block)
%x{
var constant;
if (typeof self.iso_react_const_cache === 'undefined') { self.iso_react_const_cache = {}; }
if (typeof self.iso_react_const_cache[component_name] !== 'undefined') {
constant = self.iso_react_const_cache[component_name]
} else if (typeof self.$$is_a_module !== 'undefined') {
try {
constant = self.$const_get(component_name);
self.iso_react_const_cache[component_name] = constant;
} catch(err) { }
} else {
let sc = self.$class();
try {
constant = sc.$const_get(component_name);
self.iso_react_const_cache[component_name] = constant;
} catch(err) {
var module_names = sc.$to_s().split("::");
var module_name;
for (var i = module_names.length - 1; i > 0; i--) {
module_name = module_names.slice(0, i).join('::');
try {
constant = sc.$const_get(module_name).$const_get(component_name, false);
self.iso_react_const_cache[component_name] = constant;
break;
} catch(err) { }
}
}
}
if (constant && typeof constant.react_component !== 'undefined') {
return Opal.React.internal_prepare_args_and_render(constant.react_component, args, block);
}
return #{_react_component_resolution_original_method_missing(component_name, *args, block)};
}
end
|
Class Method Details
.included(base) ⇒ Object
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
49
50
|
# File 'lib/react/component/resolution.rb', line 4
def self.included(base)
base.instance_exec do
unless method_defined?(:_react_component_class_resolution_original_const_missing)
alias _react_component_class_resolution_original_const_missing const_missing
end
def const_missing(const_name)
%x{
if (typeof Opal.global[const_name] !== "undefined" && (const_name[0] === const_name[0].toUpperCase())) {
var new_const = #{React::NativeConstantWrapper.new(`Opal.global[const_name]`, const_name)};
new_const.react_component = Opal.global[const_name];
#{Object.const_set(const_name, `new_const`)};
return new_const;
} else {
return #{_react_component_class_resolution_original_const_missing(const_name)};
}
}
end
unless method_defined?(:_react_component_class_resolution_original_method_missing)
alias _react_component_class_resolution_original_method_missing method_missing
end
def method_missing(component_name, *args, &block)
%x{
var constant;
if (typeof self.iso_react_const_cache === 'undefined') { self.iso_react_const_cache = {}; }
try {
if (typeof self.iso_react_const_cache[component_name] !== 'undefined') {
constant = self.iso_react_const_cache[component_name]
} else {
constant = self.$const_get(component_name);
self.iso_react_const_cache[component_name] = constant;
}
if (typeof constant.react_component !== 'undefined') {
return Opal.React.internal_prepare_args_and_render(constant.react_component, args, block);
}
} catch(err) { }
return #{_react_component_class_resolution_original_method_missing(component_name, *args, block)};
}
end
end
end
|
Instance Method Details
#_react_component_resolution_original_method_missing ⇒ Object
53
|
# File 'lib/react/component/resolution.rb', line 53
alias _react_component_resolution_original_method_missing method_missing
|