lib/delorean/base.rb in delorean_lang-0.2.3 vs lib/delorean/base.rb in delorean_lang-0.2.4
- old
+ new
@@ -89,10 +89,12 @@
end
end
class BaseClass
def self._get_attr(obj, attr, _e)
+ # FIXME: even Javascript which is superpermissive raises an
+ # exception on null getattr.
return nil if obj.nil?
# NOTE: should keep this function consistent with _index
if obj.kind_of? ActiveRecord::Base
@@ -102,19 +104,24 @@
klass.attribute_names.member? attr
return obj.send(attr.to_sym) if
klass.reflect_on_all_associations.map(&:name).member? attr.to_sym
- raise InvalidGetAttribute, "ActiveRecord lookup '#{attr}' on #{obj}"
+ # FIXME: should call _instance_call for other types as well.
+ # Too lazy to implement this now.
+ begin
+ return _instance_call(obj, attr, [])
+ rescue
+ raise InvalidGetAttribute, "ActiveRecord lookup '#{attr}' on #{obj}"
+ end
elsif obj.instance_of?(NodeCall)
return obj.evaluate(attr)
elsif obj.instance_of?(Hash)
return obj[attr] if obj.member?(attr)
return attr.is_a?(String) ? obj[attr.to_sym] : nil
elsif obj.instance_of?(Class) && (obj < BaseClass)
return obj.send((attr + POST).to_sym, _e)
end
-
raise InvalidGetAttribute,
"bad attribute lookup '#{attr}' on <#{obj.class}> #{obj}"
end
######################################################################