Sha256: a367fa1cc179c3a48f26b152455f12ba14a4aae236125d4d74a7f089b3d14ce7

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

class Joosy.Resources.Cacher extends Joosy.Module

  @include Joosy.Modules.Events
  @include Joosy.Modules.Filters

  @registerPlainFilters 'beforeLoad'

  @cache: (cacheKey) -> @::__cacheKey = cacheKey
  @fetcher: (fetcher) -> @::__fetcher = fetcher

  constructor: (callback, cacheKey=false, fetcher=false) ->
    if typeof(cacheKey) == 'function'
      fetcher  = cacheKey
      cacheKey = undefined

    @__fetcher  = fetcher if fetcher
    @__cacheKey = cacheKey if cacheKey

    if @__cacheKey && localStorage && localStorage[@__cacheKey]
      @data = @__applyBeforeLoads(JSON.parse localStorage[@__cacheKey])
      callback? @
      @refresh()
    else
      @refresh callback

  clone: (callback) ->
    copy = new @constructor(callback, @__cacheKey, @__fetcher)
    copy.data = Object.clone(@data, true)
    copy.trigger 'changed'
    copy

  refresh: (callback) ->
    @__fetcher (result) =>
      localStorage[@__cacheKey] = JSON.stringify(result) if @__cacheKey && localStorage
      @data = @__applyBeforeLoads result
      callback? @
      @trigger 'changed'

# AMD wrapper
if define?.amd?
  define 'joosy/resources/cacher', -> Joosy.Resources.Cacher

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
joosy-1.2.0.alpha.71 source/joosy/resources/cacher.coffee