cached_names 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cached_names.rb +1 -0
- data/lib/cached_names/base.rb +29 -44
- data/lib/cached_names/paranoid.rb +41 -0
- data/lib/cached_names/version.rb +1 -1
- data/lib/rails/cached_names.rb +7 -1
- metadata +2 -1
data/lib/cached_names.rb
CHANGED
data/lib/cached_names/base.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
module CachedNames
|
2
2
|
|
3
|
+
@@paranoid_loaded ||= false
|
4
|
+
def self.paranoid_loaded=(value)
|
5
|
+
@@paranoid_loaded = value
|
6
|
+
end
|
7
|
+
def self.paranoid_loaded
|
8
|
+
@@paranoid_loaded
|
9
|
+
end
|
10
|
+
|
3
11
|
def has_cached_names name_method = "value", options = {}
|
4
12
|
@cached_names_name_method = name_method
|
5
13
|
@cached_names_sort_field = options[:sorted_by] || @cached_names_name_method
|
@@ -11,27 +19,17 @@ module CachedNames
|
|
11
19
|
after_destroy { self.class.load_cached_names }
|
12
20
|
|
13
21
|
load_cached_names
|
22
|
+
load_paranoid_cached_names if CachedNames.paranoid_loaded
|
14
23
|
end
|
15
24
|
|
16
25
|
def names
|
17
26
|
load_cached_names unless @cached_names_loaded
|
18
27
|
|
19
28
|
begin
|
20
|
-
Rails.cache.read
|
21
|
-
rescue
|
22
|
-
load_cached_names
|
23
|
-
Rails.cache.read "#{@cached_names_cache_key_prefix}_names"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def names_with_deleted
|
28
|
-
load_cached_names unless @cached_names_loaded
|
29
|
-
|
30
|
-
begin
|
31
|
-
Rails.cache.read "#{@cached_names_cache_key_prefix}_names_with_deleted"
|
29
|
+
Rails.cache.read cache_key
|
32
30
|
rescue
|
33
31
|
load_cached_names
|
34
|
-
Rails.cache.read
|
32
|
+
Rails.cache.read cache_key
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
@@ -39,30 +37,19 @@ module CachedNames
|
|
39
37
|
load_cached_names unless @cached_names_loaded
|
40
38
|
|
41
39
|
begin
|
42
|
-
Rails.cache.read
|
43
|
-
rescue
|
44
|
-
load_cached_names
|
45
|
-
Rails.cache.read "#{@cached_names_cache_key_prefix}_names_group_#{key}"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def names_group_with_deleted key
|
50
|
-
load_cached_names unless @cached_names_loaded
|
51
|
-
|
52
|
-
begin
|
53
|
-
Rails.cache.read "#{@cached_names_cache_key_prefix}_names_group_#{key}_with_deleted"
|
40
|
+
Rails.cache.read group_cache_key(key)
|
54
41
|
rescue
|
55
42
|
load_cached_names
|
56
|
-
Rails.cache.read
|
43
|
+
Rails.cache.read group_cache_key(key)
|
57
44
|
end
|
58
45
|
end
|
59
46
|
|
60
47
|
def load_cached_names
|
61
48
|
begin
|
62
|
-
@cached_names_instances = all(:
|
49
|
+
@cached_names_instances = all(:order => @cached_names_sort_field)
|
63
50
|
|
64
|
-
load_names
|
65
|
-
load_grouped_names if @cached_names_group_method
|
51
|
+
load_names(@cached_names_instances)
|
52
|
+
load_grouped_names(@cached_names_instances) if @cached_names_group_method
|
66
53
|
|
67
54
|
@cached_names_loaded = true
|
68
55
|
rescue Exception => e
|
@@ -74,20 +61,18 @@ module CachedNames
|
|
74
61
|
|
75
62
|
private
|
76
63
|
|
77
|
-
def load_names
|
78
|
-
|
79
|
-
all_names, non_deleted_names = partition_by_deleted names
|
64
|
+
def load_names(cached_instances, cache_suffix = 'names')
|
65
|
+
all_names = cached_instances.map {|i| [i.send(@cached_names_name_method), i.id] }
|
80
66
|
|
81
|
-
Rails.cache.write
|
82
|
-
Rails.cache.write "#{@cached_names_cache_key_prefix}_names", non_deleted_names
|
67
|
+
Rails.cache.write cache_key(cache_suffix), all_names
|
83
68
|
end
|
84
69
|
|
85
|
-
def load_grouped_names
|
86
|
-
groups =
|
70
|
+
def load_grouped_names(cached_instances, cache_suffix = 'names_group')
|
71
|
+
groups = cached_instances.inject({}) do |groups, instance|
|
87
72
|
value = instance.send(@cached_names_group_method)
|
88
73
|
|
89
74
|
groups[value] ||= []
|
90
|
-
groups[value] << [instance.
|
75
|
+
groups[value] << [instance.send(@cached_names_name_method), instance.id]
|
91
76
|
|
92
77
|
groups
|
93
78
|
end
|
@@ -96,18 +81,18 @@ module CachedNames
|
|
96
81
|
universal_names = groups[nil] || []
|
97
82
|
|
98
83
|
groups.each do |(key, names)|
|
99
|
-
all_names
|
84
|
+
all_names = names + universal_names
|
100
85
|
|
101
|
-
Rails.cache.write
|
102
|
-
Rails.cache.write "#{@cached_names_cache_key_prefix}_names_group_#{key}", non_deleted_names
|
86
|
+
Rails.cache.write group_cache_key(key, cache_suffix), all_names
|
103
87
|
end
|
104
88
|
end
|
105
89
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
90
|
+
def cache_key(cache_suffix = 'names')
|
91
|
+
"#{@cached_names_cache_key_prefix}_#{cache_suffix}"
|
92
|
+
end
|
109
93
|
|
110
|
-
|
94
|
+
def group_cache_key(key, cache_suffix = 'names_group')
|
95
|
+
"#{@cached_names_cache_key_prefix}_#{key}_#{cache_suffix}"
|
111
96
|
end
|
112
97
|
end
|
113
98
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module CachedNames
|
2
|
+
module ParanoidMethods
|
3
|
+
|
4
|
+
def names_with_deleted
|
5
|
+
load_paranoid_cached_names unless @cached_names_loaded
|
6
|
+
|
7
|
+
begin
|
8
|
+
Rails.cache.read cache_key('names_with_deleted')
|
9
|
+
rescue
|
10
|
+
load_paranoid_cached_names
|
11
|
+
Rails.cache.read cache_key('names_with_deleted')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def names_group_with_deleted key
|
16
|
+
load_paranoid_cached_names unless @cached_names_loaded
|
17
|
+
|
18
|
+
begin
|
19
|
+
Rails.cache.read group_cache_key(key, 'names_group_with_deleted')
|
20
|
+
rescue
|
21
|
+
load_paranoid_cached_names
|
22
|
+
Rails.cache.read group_cache_key(key, 'names_group_with_deleted')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_paranoid_cached_names
|
27
|
+
begin
|
28
|
+
@paranoid_cached_names_instances = with_deleted.all(:order => @cached_names_sort_field)
|
29
|
+
|
30
|
+
load_names(@paranoid_cached_names_instances, 'names_with_deleted')
|
31
|
+
load_grouped_names(@paranoid_cached_names_instances, 'names_group_with_deleted') if @cached_names_group_method
|
32
|
+
|
33
|
+
@paranoid_cached_names_loaded = true
|
34
|
+
rescue Exception => e
|
35
|
+
Rails.logger.error e.message
|
36
|
+
Rails.logger.error e.backtrace
|
37
|
+
@paranoid_cached_names_loaded = false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/cached_names/version.rb
CHANGED
data/lib/rails/cached_names.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
module CachedNames
|
2
2
|
class Railtie < Rails::Railtie
|
3
3
|
initializer "cached_names.initialize" do |app|
|
4
|
-
|
4
|
+
if defined?(ActiveRecord)
|
5
|
+
ActiveRecord::Base.send :extend, CachedNames
|
6
|
+
if defined?(ActsAsParanoid)
|
7
|
+
ActiveRecord::Base.send :extend, CachedNames::ParanoidMethods
|
8
|
+
CachedNames.paranoid_loaded = true
|
9
|
+
end
|
10
|
+
end
|
5
11
|
end
|
6
12
|
end
|
7
13
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: cached_names
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John 'asceth' Long
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- cached_names.gemspec
|
60
60
|
- lib/cached_names.rb
|
61
61
|
- lib/cached_names/base.rb
|
62
|
+
- lib/cached_names/paranoid.rb
|
62
63
|
- lib/cached_names/version.rb
|
63
64
|
- lib/rails/cached_names.rb
|
64
65
|
- spec/spec_helper.rb
|