Method: Delorean::BaseModule::BaseClass._index

Defined in:
lib/delorean/base.rb

._index(obj, args, _e) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/delorean/base.rb', line 150

def self._index(obj, args, _e)
  # NOTE: should keep this function consistent with _get_attr
  case obj
  when nil
    # FIXME: even Javascript which is superpermissive raises an
    # exception on null getattr.
    nil
  when Hash
    raise InvalidIndex unless args.length == 1

    _get_hash_attr(obj, args[0], _e, true)
  when 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) &&
                              (args[1].nil? || args[1].is_a?(Integer))

    obj[*args]
  else
    raise InvalidIndex
  end
end