freckle-memcached 0.0.0.2 → 0.0.0.3
raw patch · 11 files changed
+68/−49 lines, 11 filesdep ~freckle-envdep ~hspecdep ~hspec-core
Dependency ranges changed: freckle-env, hspec, hspec-core
Files
- CHANGELOG.md +5/−1
- LICENSE +1/−1
- README.md +6/−0
- freckle-memcached.cabal +8/−8
- library/Freckle/App/Memcached.hs +26/−21
- library/Freckle/App/Memcached/CacheKey.hs +1/−1
- library/Freckle/App/Memcached/CacheTTL.hs +1/−1
- library/Freckle/App/Memcached/Client.hs +13/−9
- package.yaml +3/−3
- tests/AppExample.hs +2/−2
- tests/Freckle/App/MemcachedSpec.hs +2/−2
CHANGELOG.md view
@@ -1,4 +1,8 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/freckle-memcached-v0.0.0.2...main)+## [_Unreleased_](https://github.com/freckle/freckle-memcached/compare/v0.0.0.3...main)++## [v0.0.0.3](https://github.com/freckle/freckle-memcached/compare/v0.0.0.2...v0.0.0.3)++Metadata-only changes to update the package's source repository location. ## [v0.0.0.2](https://github.com/freckle/freckle-app/compare/freckle-memcached-v0.0.0.1...freckle-memcached-v0.0.0.2)
LICENSE view
@@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2022-2024 Renaissance Learning Inc+Copyright (c) 2025 Renaissance Learning Inc Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal
README.md view
@@ -1,1 +1,7 @@ # freckle-memcached++Some extensions to the [memcache](https://hackage.haskell.org/package/memcache) library.++---++[CHANGELOG](./CHANGELOG.md) | [LICENSE](./LICENSE)
freckle-memcached.cabal view
@@ -1,12 +1,12 @@ cabal-version: 1.18 name: freckle-memcached-version: 0.0.0.2+version: 0.0.0.3 license: MIT license-file: LICENSE maintainer: Freckle Education-homepage: https://github.com/freckle/freckle-app#readme-bug-reports: https://github.com/freckle/freckle-app/issues-synopsis: ..+homepage: https://github.com/freckle/freckle-memcached#readme+bug-reports: https://github.com/freckle/freckle-memcached/issues+synopsis: Some extensions to the memcache library description: Please see README.md category: Database build-type: Simple@@ -17,7 +17,7 @@ source-repository head type: git- location: https://github.com/freckle/freckle-app+ location: https://github.com/freckle/freckle-memcached library exposed-modules:@@ -98,11 +98,11 @@ base >=4.16.4.0 && <5, errors >=2.3.0, exceptions >=0.10.4,- freckle-env >=0.0.1.1,+ freckle-env >=0.0.1.2, freckle-memcached, hs-opentelemetry-sdk >=0.0.3.6,- hspec >=2.10.10,- hspec-core >=2.10.10,+ hspec >=2.9.7,+ hspec-core >=2.9.7, hspec-expectations-lifted >=0.10.0, lens >=5.1.1, lens-aeson >=1.2.2,
library/Freckle/App/Memcached.hs view
@@ -78,10 +78,11 @@ CacheDeserializeError err -> "Unable to deserialize: " <> err -- | Log any thrown 'CachingError's as warnings and return the given value-warnOnCachingError :: (MonadUnliftIO m, MonadLogger m) => a -> m a -> m a+warnOnCachingError+ :: forall m a. (MonadLogger m, MonadUnliftIO m) => a -> m a -> m a warnOnCachingError val =- flip catch $- (val <$)+ flip catch+ $ (val <$) . logWarnNS "caching" . annotatedExceptionMessage @CachingError @@ -103,13 +104,14 @@ -- | Memoize an action using Memcached and 'Cachable' caching- :: ( MonadUnliftIO m+ :: forall m env a+ . ( Cachable a+ , HasCallStack+ , HasMemcachedClient env , MonadLogger m- , MonadTracer m , MonadReader env m- , HasMemcachedClient env- , Cachable a- , HasCallStack+ , MonadTracer m+ , MonadUnliftIO m ) => CacheKey -> CacheTTL@@ -119,12 +121,13 @@ -- | Like 'caching', but with explicit conversion functions cachingAs- :: ( MonadUnliftIO m+ :: forall m env a+ . ( HasCallStack+ , HasMemcachedClient env , MonadLogger m- , MonadTracer m , MonadReader env m- , HasMemcachedClient env- , HasCallStack+ , MonadTracer m+ , MonadUnliftIO m ) => (ByteString -> Either String a) -> (a -> ByteString)@@ -147,14 +150,15 @@ -- | Like 'caching', but de/serializing the value as JSON cachingAsJSON- :: ( MonadUnliftIO m+ :: forall m env a+ . ( FromJSON a+ , HasCallStack+ , HasMemcachedClient env , MonadLogger m- , MonadTracer m , MonadReader env m- , HasMemcachedClient env- , FromJSON a+ , MonadTracer m+ , MonadUnliftIO m , ToJSON a- , HasCallStack ) => CacheKey -> CacheTTL@@ -164,13 +168,14 @@ -- | Cache data in memcached in CBOR format cachingAsCBOR- :: ( MonadUnliftIO m+ :: forall m env a+ . ( HasCallStack+ , HasMemcachedClient env , MonadLogger m- , MonadTracer m , MonadReader env m- , HasMemcachedClient env+ , MonadTracer m+ , MonadUnliftIO m , Serialise a- , HasCallStack ) => CacheKey -> CacheTTL
library/Freckle/App/Memcached/CacheKey.hs view
@@ -48,7 +48,7 @@ Left $ "Not a valid memcached key:\n " <> T.unpack t <> "\n\n" <> msg -- | Build a 'CacheKey' and throw if invalid-cacheKeyThrow :: (MonadIO m, HasCallStack) => Text -> m CacheKey+cacheKeyThrow :: (HasCallStack, MonadIO m) => Text -> m CacheKey cacheKeyThrow = either (throwWithCallStack . userError) pure . cacheKey fromCacheKey :: CacheKey -> Key
library/Freckle/App/Memcached/CacheTTL.hs view
@@ -14,7 +14,7 @@ newtype CacheTTL = CacheTTL Int deriving stock (Show)- deriving newtype (Eq, Ord, Enum, Num, Real, Integral, Serialise)+ deriving newtype (Enum, Eq, Integral, Num, Ord, Real, Serialise) instance ToAttribute CacheTTL where toAttribute (CacheTTL x) = toAttribute x
library/Freckle/App/Memcached/Client.hs view
@@ -53,7 +53,8 @@ memcachedClientDisabled = MemcachedClientDisabled get- :: (MonadUnliftIO m, MonadTracer m, MonadReader env m, HasMemcachedClient env)+ :: forall m env+ . (HasMemcachedClient env, MonadReader env m, MonadTracer m, MonadUnliftIO m) => CacheKey -> m (Maybe Value) get k = traced $ with $ \case@@ -76,18 +77,19 @@ -- -- Pass @0@ to set a value that never expires. set- :: (MonadUnliftIO m, MonadTracer m, MonadReader env m, HasMemcachedClient env)+ :: forall m env+ . (HasMemcachedClient env, MonadReader env m, MonadTracer m, MonadUnliftIO m) => CacheKey -> Value -> CacheTTL -> m () set k v expiration = traced $ with $ \case MemcachedClient mc ->- void $- liftIO $- Memcache.set mc (fromCacheKey k) v 0 $- fromCacheTTL- expiration+ void+ $ liftIO+ $ Memcache.set mc (fromCacheKey k) v 0+ $ fromCacheTTL+ expiration MemcachedClientDisabled -> pure () where traced =@@ -106,7 +108,8 @@ -- | Delete a key delete- :: (MonadUnliftIO m, MonadTracer m, MonadReader env m, HasMemcachedClient env)+ :: forall m env+ . (HasMemcachedClient env, MonadReader env m, MonadTracer m, MonadUnliftIO m) => CacheKey -> m () delete k = traced $ with $ \case@@ -127,7 +130,8 @@ MemcachedClientDisabled -> pure () with- :: (MonadReader env m, HasMemcachedClient env)+ :: forall env m a+ . (HasMemcachedClient env, MonadReader env m) => (MemcachedClient -> m a) -> m a with f = do
package.yaml view
@@ -1,9 +1,9 @@ name: freckle-memcached-version: 0.0.0.2+version: 0.0.0.3 maintainer: Freckle Education category: Database-github: freckle/freckle-app-synopsis: ..+github: freckle/freckle-memcached+synopsis: Some extensions to the memcache library description: Please see README.md extra-doc-files:
tests/AppExample.hs view
@@ -31,11 +31,11 @@ , Functor , Monad , MonadCatch+ , MonadFail , MonadIO- , MonadUnliftIO , MonadReader app , MonadThrow- , MonadFail+ , MonadUnliftIO ) deriving (MonadLogger, MonadLoggerIO)
tests/Freckle/App/MemcachedSpec.hs view
@@ -74,8 +74,8 @@ loadApp :: (App -> IO a) -> IO a loadApp f = do servers <-- Env.parse id $- Env.var+ Env.parse id+ $ Env.var (Env.eitherReader readMemcachedServers) "MEMCACHED_SERVERS" (Env.def defaultMemcachedServers)