lib/browser/delegate_native.rb in isomorfeus-preact-10.6.18 vs lib/browser/delegate_native.rb in isomorfeus-preact-10.6.19
- old
+ new
@@ -14,57 +14,49 @@
#
# If a property with the specified message name is found and it is a
# function, that function is invoked with `args`. Otherwise, the property
# is returned as is.
def method_missing message, *args, &block
- property_name = property_for_message(message)
- property = `#@native[#{property_name}]`
-
- # translate setting a property
if message.end_with? '='
+ message = message.chop
+ property_name = property_for_message(message)
return `#@native[#{property_name}] = args[0]`
- end
-
- # If the native element doesn't have this property, bubble it up
- super unless `#{property_name} in #@native`
-
- if `property === false`
- return false
- elsif `typeof(property) === 'number' && isNaN(property)`
- return nil
else
- property = `property == null ? nil : property`
- end
+ property_name = property_for_message(message)
- # If it's a method, call it. Otherwise, return it.
- if `typeof(property) === 'function'`
- `property.apply(#@native, args)`
- else
- property
+ %x{
+ let value = #@native[#{property_name}];
+ let type = typeof(value);
+ if (type === 'function') {
+ return value.apply(#@native, args);
+ } else if (value === null || type === 'undefined' || (type === 'number' && isNaN(value))) {
+ return nil;
+ }
+ return value;
+ }
end
end
def respond_to_missing? message, include_all
- return true if message.end_with? '='
- return true if property_for_message(message)
-
+ message = message.chop if message.end_with? '='
+ property_name = property_for_message(message)
+ return true unless `#{property_name} in #@native`
false
end
- def property_for_message message
- camel_cased_message = message
- .gsub(/_\w/) { |match| `match[1]`.upcase }
- .sub(/=$/, '')
+ def property_for_message(message)
+ %x{
+ let camel_cased_message;
+ if (typeof(#@native[message]) !== 'undefined') { camel_cased_message = message; }
+ else { camel_cased_message = Opal.Preact.lower_camelize(message) }
- # translate `supported?` to `supported` or `isSupported`
- if message.end_with? '?'
- camel_cased_message = camel_cased_message.chop
- property_type = `typeof(#@native[camel_cased_message])`
- if property_type == 'undefined'
- camel_cased_message = "is#{camel_cased_message[0].upcase}#{camel_cased_message[1..-1]}"
- end
- end
-
- camel_cased_message
+ if (camel_cased_message.endsWith('?')) {
+ camel_cased_message = camel_cased_message.substring(0, camel_cased_message.length - 2);
+ if (typeof(#@native[camel_cased_message]) === 'undefined') {
+ camel_cased_message = 'is' + camel_cased_message[0].toUpperCase() + camel_cased_message.substring(0, camel_cased_message.length - 1);
+ }
+ }
+ return camel_cased_message
+ }
end
end
end