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 ######################################################################