Sha256: f1a7cca2ff86f389c6e95cad2a590c2434369f42a7a4febc975f0be22a76aea3

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

require 'volt/models/persistors/base'
require 'volt/utils/local_storage'
require 'json'

module Persistors

  # Backs a collection in the local store
  class LocalStore < Base
    def initialize(model)
      @model = model
    end

    # Find the root for this model
    def root_model
      node = @model

      loop do
        parent = node.parent
        if parent
          node = parent
        else
          break
        end
      end

      return node
    end

    # Called when a model is added to the collection
    def added(model, index)
      root_model.persistor.save_all
    end

    def loaded
      # When the main model is first loaded, we pull in the data from the
      # store if it exists
      if @model.path == []
        json_data = LocalStorage['volt-store']
        if json_data
          root_attributes = JSON.parse(json_data)

          @loading_data = true
          root_attributes.each_pair do |key, value|
            @model.send(:"#{key}=", value)
          end
          @loading_data = nil
        end
      end
    end

    # Callled when an item is changed (or removed)
    def changed(attribute_name)
      root_model.persistor.save_all
    end

    # Called on the root
    def save_all
      return if @loading_data

      json_data = JSON.dump(@model.to_h)

      LocalStorage['volt-store'] = json_data
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
volt-0.8.4 lib/volt/models/persistors/local_store.rb
volt-0.8.3 lib/volt/models/persistors/local_store.rb
volt-0.8.2 lib/volt/models/persistors/local_store.rb