Module: Scorpio::SchemaInstanceBaseArray

Includes:
Arraylike
Defined in:
lib/scorpio/schema_instance_base.rb

Constant Summary

Constants included from Arraylike

Arraylike::DESTRUCTIVE_METHODS, Arraylike::SAFE_INDEX_ELEMENT_METHODS, Arraylike::SAFE_INDEX_ONLY_METHODS, Arraylike::SAFE_METHODS

Instance Method Summary collapse

Methods included from Arraylike

#inspect, #pretty_print, #to_s

Instance Method Details

#[](i_) ⇒ Object



287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/scorpio/schema_instance_base.rb', line 287

def [](i_)
  memoize(:[], i_) do |i|
    begin
      index_schema = schema.subschema_for_index(i)
      index_schema = index_schema && index_schema.match_to_instance(instance[i])

      if index_schema && instance[i].is_a?(JSON::Node)
        Scorpio.class_for_schema(index_schema).new(instance[i])
      else
        instance[i]
      end
    end
  end
end

#[]=(i, value) ⇒ Object



301
302
303
304
305
306
307
# File 'lib/scorpio/schema_instance_base.rb', line 301

def []=(i, value)
  self.instance = instance.modified_copy do |ary|
    ary.each_with_index.map do |el, ary_i|
      ary_i == i ? value : el
    end
  end
end

#eachObject



269
270
271
272
273
# File 'lib/scorpio/schema_instance_base.rb', line 269

def each
  return to_enum(__method__) { instance.size } unless block_given?
  instance.each_index { |i| yield(self[i]) }
  self
end

#to_aryObject



275
276
277
# File 'lib/scorpio/schema_instance_base.rb', line 275

def to_ary
  to_a
end