add the cacheable items ability to CustomFactory.
- CacheFactory
_cache
(secondary-cache): the cache object to hold the instance.constructor(aName, aOptions)
: get a singleton instance or create a new instance item.- aName: the item name. first search the aName in registeredObjects. then search in the cache. the cached item name should be a full path or a related path.
constructor(aOptions)
: get a singleton instance or create a new instance item.- aOptions (object):
- name: the factory item name. defaults to the constructor name
- the cache settings:
- fixedCapacity: the first fixed cache max capacity size, defaults to unlimit.
- capacity: the second LRU cache max capacity size, defaults to unlimit. deletes the least-recently-used items if reached the capacity. capacity > 0 to enable the secondary LRU cache. defaults to 8192.
- expires: the default expires time (milliscond), defaults to no expires time(<=0). it will be put into LRU Cache if has expires time
- cleanInterval: clean up expired item with a specified interval(seconds) in the background. Disable clean in the background if it's value is less than or equal 0.
- cached:
- (string): used as the cached name
- (boolean): create a new instance always if it's false.
- (object):
- name (string): used as cached name if exists.
- popped (boolean): whether popup from cache. default to false.
- the cache settings(only available if the item is not exists on cache):
- fixed (bool): set to first level fixed cache if true, defaults to false.
- expires (int): expires time millisecond. defaults to never expired.
- aOptions (object):
get(aName, aOptions)
: get the singleton object instance(could be from cache)- aOptions: (object)
- cached:
- (string): used as the cached name
- (boolean): create a new instance always if it's false.
- (object):
- name (string): used as cached name if exists.
- the cache settings(only available if the item is not exists on cache):
- fixed (bool): set to first level fixed cache if true, defaults to false.
- expires (int): expires time millisecond. defaults to never expired.
- cached:
- aOptions: (object)
Usage
developer:
Class usage:
cachedFactory = require 'cache-factory' cachedFactory Codec : return super : @bufferSize = aOptionsbufSize if aOptions :-> ...
Ability usage:
factory = require 'custom-factory'cacheable = require 'cache-factory' factory Codec # add the cacheable ability to Codec factory. cacheable Codec
user
# get the JsonCodec Class # note: name is case-sensitive! TextCodec = Codec'Text'JsonCodec = Codec'Json'# or JsonCodec = TextCodec'Json' # get the global JsonCodec instance from the Codec json = Codec'Json'bufSize: 12# or: json = JsonCodectext = Codec'Text' # or Codec('utf8') JsonCodecshouldbeequal Codec'Json' # create a new JsonCodec instance. json2 = bufSize: 123 json2shouldnotbeequal json ## get the instance from cache: json3 = JsonCodecbufSize:123cached: "MyJson"json4 = JsonCodecbufSize:123cached: name: "MyJson"json3shouldbeequal json4 json5 = JsonCodecbufSize:123cached: truejson5shouldbeequal json2 json6 = Codec'/Codec/Json/MyJson'json6shouldbeequal json3 json7 = JsonCodec 'MyJson'json7shouldbeequal json3