Sha256: c77c2b03962462eef3a2dc541acc4326bc9b5350ebf537bda76ec2dcdf6b186b

Contents?: true

Size: 1.37 KB

Versions: 11

Compression:

Stored size: 1.37 KB

Contents

class Joosy.Resource.Watcher extends Joosy.Module
  @include Joosy.Modules.Events

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

  @beforeLoad: (action) ->
    unless @::hasOwnProperty '__beforeLoads'
      @::__beforeLoads = [].concat @.__super__.__beforeLoads || []
    @::__beforeLoads.push action

  constructor: (cacheKey=false, fetcher=false) ->
    if Object.isFunction(cacheKey)
      fetcher  = cacheKey
      cacheKey = undefined

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

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

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

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

  prepare: (data) ->
    if @__beforeLoads?
      data = bl.call(this, data) for bl in @__beforeLoads

    data

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
joosy-1.2.0.alpha.14 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.13 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.12 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.11 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.10 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.9 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.8 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.7 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.6 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.5 src/joosy/core/resource/watcher.coffee
joosy-1.2.0.alpha.4 src/joosy/core/resource/watcher.coffee