Sha256: f23f98963ee206440b859b5f9fbc7757db4f84b31dce6648c0c5cddcf5f0122f

Contents?: true

Size: 1.46 KB

Versions: 16

Compression:

Stored size: 1.46 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
      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

        node
      end

      # 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

16 entries across 16 versions & 1 rubygems

Version Path
volt-0.8.27.beta3 lib/volt/models/persistors/local_store.rb
volt-0.8.27.beta2 lib/volt/models/persistors/local_store.rb
volt-0.8.27.beta1 lib/volt/models/persistors/local_store.rb
volt-0.8.26.beta1 lib/volt/models/persistors/local_store.rb
volt-0.8.26 lib/volt/models/persistors/local_store.rb
volt-0.8.24 lib/volt/models/persistors/local_store.rb
volt-0.8.23 lib/volt/models/persistors/local_store.rb
volt-0.8.22 lib/volt/models/persistors/local_store.rb
volt-0.8.22.beta2 lib/volt/models/persistors/local_store.rb
volt-0.8.22.beta1 lib/volt/models/persistors/local_store.rb
volt-0.8.21 lib/volt/models/persistors/local_store.rb
volt-0.8.20 lib/volt/models/persistors/local_store.rb
volt-0.8.19 lib/volt/models/persistors/local_store.rb
volt-0.8.18 lib/volt/models/persistors/local_store.rb
volt-0.8.17 lib/volt/models/persistors/local_store.rb
volt-0.8.16 lib/volt/models/persistors/local_store.rb