Sha256: 4558e6f97d6f4115ba6eb2785e948321a1cc67e9759138ea3220c4fd55d1567c

Contents?: true

Size: 1.15 KB

Versions: 4

Compression:

Stored size: 1.15 KB

Contents

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

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 = 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
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
volt-0.9.3.pre5 lib/volt/models/persistors/local_store.rb
volt-0.9.3.pre4 lib/volt/models/persistors/local_store.rb
volt-0.9.3.pre3 lib/volt/models/persistors/local_store.rb
volt-0.9.3.pre2 lib/volt/models/persistors/local_store.rb