lib/delorean/base.rb in delorean_lang-0.3.36 vs lib/delorean/base.rb in delorean_lang-0.3.37
- old
+ new
@@ -153,10 +153,12 @@
when ActiveRecord::Base
return obj.read_attribute(attr) if obj.has_attribute?(attr)
return obj.send(attr.to_sym) if obj.class.reflections[attr]
when NodeCall
return obj.evaluate(attr)
+ when OpenStruct
+ return obj[attr.to_sym]
when Class
return obj.send((attr + POST).to_sym, _e) if obj < BaseClass
end
begin
@@ -174,11 +176,11 @@
case obj
when nil
# FIXME: even Javascript which is superpermissive raises an
# exception on null getattr.
return nil
- when Hash, ActiveRecord::Base, NodeCall, Class
+ when Hash, ActiveRecord::Base, NodeCall, Class, OpenStruct
raise InvalidIndex unless args.length == 1
_get_attr(obj, args[0], _e)
when Array, String, MatchData
raise InvalidIndex unless args.length <= 2 &&
args[0].is_a?(Integer) &&
@@ -262,10 +264,10 @@
res = obj.send(msg, *args)
# FIXME: can't freeze AR relations since then we can't chain
# calls (e.g. the chaining modifies the relation object. Not
# sure what this side-effect means. Delorean code which
# perform queries on queries seems to work.
- ActiveRecord::Relation === res ? res : res.freeze
+ (ActiveRecord::Relation === res || Class === res) ? res : res.freeze
end
######################################################################
end
end