Sha256: 0bbf65f4544b889126f8f9268b827d30a7fc17ade50dc166b98c8427838a69cd

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

require 'volt/models/model_wrapper'

class ArrayModel < ReactiveArray
  include ModelWrapper
  
  attr_reader :parent, :path, :persistor, :options

  def initialize(array=[], options={})
    @options = options
    @parent = options[:parent]
    @path = options[:path] || []
    @persistor = setup_persistor(options[:persistor])
    
    array = wrap_values(array)
    
    super(array)
    
    @persistor.loaded if @persistor
  end
  
  def attributes
    self
  end
  
  # Make sure it gets wrapped
  def <<(*args)
    args = wrap_values(args)
    
    super(*args)
    
    @persistor.added(args[0]) if @persistor
  end
  
  # Make sure it gets wrapped
  def inject(*args)
    args = wrap_values(args)
    super(*args)
  end

  # Make sure it gets wrapped
  def +(*args)
    args = wrap_values(args)
    super(*args)
  end

  def new_model(*args)
    Model.new(*args)
  end
  
  def new_array_model(*args)
    ArrayModel.new(*args)
  end
  
  private
    # Takes the persistor if there is one and
    def setup_persistor(persistor)
      if persistor
        @persistor = persistor.new(self)
      end
    end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
volt-0.4.15 lib/volt/models/array_model.rb
volt-0.4.14 lib/volt/models/array_model.rb
volt-0.4.12 lib/volt/models/array_model.rb
volt-0.4.11 lib/volt/models/array_model.rb
volt-0.4.10 lib/volt/models/array_model.rb