cache_associations 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4a0f888ae0e93ec09dc5b2b4934e9452671f392
4
- data.tar.gz: 1ecc1bcd8ccfce8824dac3a1c81b4906fc9abad9
3
+ metadata.gz: 0990e10af89e0c1b3e90b5679ff9ced7a8afcdd9
4
+ data.tar.gz: 848feee285e44e564ef53c0ca97b0c52a75abb04
5
5
  SHA512:
6
- metadata.gz: d780a98818a6947179d4f70671425cf902d8c33fe5ac4f490447aa73657a3e3f11991a2d53cce6caea9901b3b8815790e2f124ea71ef25ae6a66325208071073
7
- data.tar.gz: a22c4f631ce4b7480da0bd5666f37f89c07e9bfc3cbbfcf74b9cd7fda1aa781cbf92d4763589ac30321d74aa94972301b0ead72dfd2c2108b49dd5fcf8095e2e
6
+ metadata.gz: 38c0a5abaa5176976e17633127ad9b1fed5a94052d033ee73b5c2628120115d1f3241799b714102f1e066b3642ed000d0af60db7685aa443301c82ca7857190b
7
+ data.tar.gz: eaad8c3f149c6595fe79be5dc93658102dcfa77cb660c428ebb171e921cb024b430b975e6495bde9cae0bc8e92dd6d1d2fbeb04dff9f7e0624e77a7dc835e556
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # CacheAssociations
2
+ [![Gem Version](https://badge.fury.io/rb/cache_associations.svg)](https://badge.fury.io/rb/cache_associations)
3
+ [![Dependency Status](https://gemnasium.com/badges/github.com/FX-HAO/cache_associations.svg)](https://gemnasium.com/github.com/FX-HAO/cache_associations)
2
4
 
3
5
  CacheAssociations is a simple cache implementation to make Low-Level caching collaborate with Association caching.
4
6
 
@@ -38,7 +40,7 @@ end
38
40
  ```
39
41
 
40
42
  The `cache_association` defines a method `cached_profile` to fetch data from the cache store.
41
- And `cache_association` accepts a block to define the cache name, it's `[self.class.name, id, name, updated_at.to_i]` in default.
43
+ And `cache_association` accepts an optional block to define the cache name, it's `[self.class.name, id, name, updated_at.to_i]` in default.
42
44
 
43
45
  ```ruby
44
46
  irb> u = User.take
@@ -48,6 +50,20 @@ irb> u.profile.reload # refetch from the database
48
50
  Profile Load (1.4ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
49
51
  ```
50
52
 
53
+ You may customize what the data you cached, the cached method accepts an optional block that determines how to cache data.
54
+ But it will break the original association, so you should be careful with this feature.
55
+
56
+ ```
57
+ irb> u = User.take
58
+ irb> u.cached_profile do "gotcha" end
59
+ => "gotcha"
60
+ irb> u.profile # it breaks
61
+ (Object doesn't support #inspect)
62
+ =>
63
+ irb> u.profile.reload # restore
64
+ Profile Load (1.4ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
65
+ ```
66
+
51
67
  ## Development
52
68
 
53
69
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -14,7 +14,13 @@ module CacheAssociations
14
14
  define_method("cached_#{name}") do |*args, &block|
15
15
  cache_name = cache_name_block.nil? ? [self.class.name, id, name, updated_at.to_i] : instance_exec(&cache_name_block)
16
16
  cache = Rails.cache.fetch(cache_name) do
17
- send("#{name}", *args, &block)
17
+ break instance_exec(*args, &block) if !block.nil?
18
+
19
+ if reflection.collection?
20
+ send("#{name}", *args).to_a
21
+ else
22
+ send("#{name}", *args)
23
+ end
18
24
  end
19
25
 
20
26
  if association_instance_get(name).nil?
@@ -1,3 +1,3 @@
1
1
  module CacheAssociations
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fuxin Hao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-22 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails