Sha256: 1a8f09bee7e6644b0f87192bd374ee0efda82f188e0183d6a88aac54537fbd7c

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

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

module Volt
  module Persistors
    # Backs a collection in the local store
    class LocalStore < Base
      # Called when a model is added to the collection
      def added(model, index)
        root_model.persistor.save_all
      end

      def loaded(initial_state = nil)
        # 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 = EJSON.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 = EJSON.stringify(@model.to_h)

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
volt-0.9.4.pre3 lib/volt/models/persistors/local_store.rb
volt-0.9.4.pre2 lib/volt/models/persistors/local_store.rb
volt-0.9.4.pre1 lib/volt/models/persistors/local_store.rb
volt-0.9.3 lib/volt/models/persistors/local_store.rb
volt-0.9.3.pre6 lib/volt/models/persistors/local_store.rb