cache_driver 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb24235fcbfcdb06afee7a91d14c0c517e012e7c
4
- data.tar.gz: e5b3de59744bf88657d54f3c41ceecbceca65d3e
3
+ metadata.gz: 402b06942adc9a03461be8eed481772cf10c1b09
4
+ data.tar.gz: d9d317fc326141587e83dd42483387c42475e27c
5
5
  SHA512:
6
- metadata.gz: d8f3503c9c88ff14000ce1686d1c3d0660aba7bbe553c05990f3afff0248e3e46fcc57b4b6d836c12ab5a840b18683792404ccbb4d4de510a401eb068ac4303c
7
- data.tar.gz: 4f34d2e450ed91001198ac7dbbf2409e6e08bed40857d017b45ec59432dc6560d3b0102ea789056081396bb23e4b1fbfab510cdffe083cf53c5b73bcac748a1a
6
+ metadata.gz: cd99e95e14c5261382c8e3e3ee89d6e7db524205ba4c9ee6022e580ad8a6613c2e509ce2a6d7af603cb84178a694c26a10af64e75588e7da21e0c73e16d1ad53
7
+ data.tar.gz: 47059c2b1880671f93c627f4270acce731339b29ca9296b72e66e9119dbe6d75ecf70a47c7b4ba7386c169d0dabc8f48d65782117b15edc52ca5a1df8a298874
data/cache_driver.gemspec CHANGED
@@ -27,4 +27,6 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_development_dependency "bundler", "~> 1.10"
29
29
  spec.add_development_dependency "rake", "~> 10.0"
30
+
31
+ spec.add_runtime_dependency 'redis', '~> 3.3'
30
32
  end
data/lib/cache_driver.rb CHANGED
@@ -3,6 +3,7 @@ require "cache_driver/config"
3
3
  require "cache_driver/cache_record"
4
4
  require "cache_driver/cache_util"
5
5
  require "cache_driver/file_cache_util"
6
+ require "cache_driver/redis_cache_util"
6
7
 
7
8
 
8
9
  module CacheDriver
@@ -1,38 +1,31 @@
1
1
  class CacheRecord
2
- def self.find_all
3
- if CacheDriver.store_file?
4
- FileCacheUtil.read_all CacheUtil.class_to_type(self)
5
- end
6
- end
2
+ @@cache_util = CacheDriver.store_file? ? FileCacheUtil : CacheDriver.store_redis? ? RedisCacheUtil : nil
7
3
 
8
- def self.find_by_id(id)
9
- if CacheDriver.store_file?
10
- FileCacheUtil.read CacheUtil.class_to_type(self), id
11
- end
12
- end
4
+ def self.find_all
5
+ @@cache_util.read_all CacheUtil.class_to_type(self)
6
+ end
13
7
 
14
- def save!
15
- if CacheDriver.store_file?
16
- FileCacheUtil.write CacheUtil.class_to_type(self.class), self
17
- end
18
- end
8
+ def self.find_by_key(key)
9
+ @@cache_util.read CacheUtil.class_to_type(self), id
10
+ end
19
11
 
20
- def destroy
21
- if CacheDriver.store_file?
22
- FileCacheUtil.delete CacheUtil.class_to_type(self.class), self.id
23
- end
24
- end
12
+ def save!
13
+ @@cache_util.write CacheUtil.class_to_type(self.class), self
14
+ end
25
15
 
26
- def to_cache
27
- self.to_json
28
- end
16
+ def destroy
17
+ @@cache_util.delete CacheUtil.class_to_type(self.class), self.id
18
+ end
29
19
 
30
- def self.from_cache(str)
31
- json = JSON.parse str
32
- ins = self.new
33
- json.each do |key, value|
34
- ins.send "#{key}=", value
35
- end
36
- ins
37
- end
20
+ def to_cache
21
+ self.to_json
22
+ end
23
+
24
+ def self.from_cache(obj)
25
+ ins = self.new
26
+ obj.each do |key, value|
27
+ ins.send "#{key}=", value
28
+ end
29
+ ins
30
+ end
38
31
  end
@@ -1,36 +1,36 @@
1
1
  class CacheUtil
2
2
 
3
- class << self
4
- def write(type, data)
5
- puts "[CACHE] save #{type} to cache: #{data}"
6
- end
3
+ class << self
4
+ def write(type, key, data)
5
+ puts "[CACHE] save #{type} ##{key} to cache: #{data}"
6
+ end
7
7
 
8
- def read(type, data_id)
9
- puts "[CACHE] get #{type} from cache: #{data_id}"
10
- end
11
-
12
- def read_all(type)
13
- puts "[CACHE] get #{type} from cache: all"
14
- end
8
+ def read(type, key)
9
+ puts "[CACHE] get #{type} ##{key} from cache"
10
+ end
11
+
12
+ def read_all(type)
13
+ puts "[CACHE] get all #{type} from cache"
14
+ end
15
15
 
16
- def delete(type, data_id)
17
- puts "[CACHE] delete #{type} from cache: #{data_id}"
18
- end
16
+ def delete(type, key)
17
+ puts "[CACHE] delete #{type} ##{key} from cache"
18
+ end
19
19
 
20
- # type --> :room
21
- # class --> Room
22
- # dir --> 'rooms'
23
- def type_to_class(type)
24
- type.to_s.capitalize.constantize
25
- end
20
+ # type --> :room
21
+ # class --> Room
22
+ # dir --> 'rooms'
23
+ def type_to_class(type)
24
+ type.to_s.capitalize.constantize
25
+ end
26
26
 
27
- def class_to_type(clazz)
28
- cla_str = clazz.name
29
- (cla_str[0].downcase + cla_str[1..-1]).to_sym
30
- end
27
+ def class_to_type(clazz)
28
+ cla_str = clazz.name
29
+ (cla_str[0].downcase + cla_str[1..-1]).to_sym
30
+ end
31
31
 
32
- def type_to_dir(type)
33
- type.to_s + 's'
34
- end
35
- end
32
+ def type_to_dir(type)
33
+ type.to_s + 's'
34
+ end
35
+ end
36
36
  end
@@ -1,24 +1,23 @@
1
1
  module CacheDriver
2
- class Config
3
- attr_accessor :store
4
- end
2
+ class Config
3
+ attr_accessor :store, :file_dir, :redis_host, :redis_port, :redis_namespace
4
+ end
5
5
 
6
- @@config = Config.new
6
+ def self.configed?
7
+ @@config.store
8
+ end
7
9
 
8
- def self.configed?
9
- @@config.store
10
- end
10
+ def self.store_file?
11
+ @@config.store == :file
12
+ end
11
13
 
12
- def self.store_file?
13
- @@config.store == :file
14
- end
14
+ def self.store_redis?
15
+ @@config.store == :redis
16
+ end
15
17
 
16
- def self.store_redis?
17
- false
18
- end
19
-
20
- def self.setup
21
- yield @@config
22
- end
18
+ def self.setup
19
+ @@config = Config.new
20
+ yield @@config
21
+ end
23
22
 
24
23
  end
@@ -1,106 +1,75 @@
1
1
  class FileCacheUtil < CacheUtil
2
- CACHE_DIR = Pathname.new(File.expand_path "../../../tmp/cache", __FILE__)
3
-
4
- class << self
5
- def get_count(type)
6
- dir = CACHE_DIR.join type_to_dir(type)
7
- Dir.mkdir dir unless Dir.exist? dir
8
-
9
- current_id = 0;
10
- if File.exist? dir.join('count')
11
- file = File.new dir.join('count'), 'r'
12
- current_id = file.read.to_i
13
- file.close
14
- end
15
-
16
- current_id
17
- end
18
-
19
- def set_count(type, count)
20
- dir = CACHE_DIR.join type_to_dir(type)
21
- Dir.mkdir dir unless Dir.exist? dir
22
-
23
- file = File.new dir.join('count'), 'w'
24
- file.puts count
25
- file.close
26
- end
27
-
28
- def write(type, data)
29
- super type, data
30
-
31
- dir = CACHE_DIR.join type_to_dir(type)
32
- Dir.mkdir dir unless Dir.exist? dir
33
-
34
- current_id = get_count(type)
35
- if data.id
36
- if data.id > current_id
37
- raise "ID out of bounds"
38
- end
39
- else
40
- current_id += 1
41
- data.id = current_id
42
- set_count(type, current_id)
43
- end
44
- file = File.new dir.join("#{data.id}.cache"), 'w'
45
- file.puts "#{Time.now}\t#{data.to_cache}"
46
- file.close
47
-
48
- data.id
49
- end
50
-
51
- def read(type, data_id)
52
- super type, data_id
53
-
54
- dir = CACHE_DIR.join type_to_dir(type)
55
- Dir.mkdir dir unless Dir.exist? dir
56
-
57
- file_path = dir.join("#{data_id}.cache")
58
- return unless File.exist? file_path
59
- file = File.new file_path, 'r'
60
- data_str = file.read.split("\t")[1]
61
-
62
- unless data_str
63
- puts "cache #{type}-#{data_id} data miss"
64
- return
65
- end
66
-
67
- type_to_class(type).from_cache data_str
68
- end
69
-
70
- def read_all(type)
71
- super type
72
-
73
- dir = CACHE_DIR.join type_to_dir(type)
74
- Dir.mkdir dir unless Dir.exist? dir
75
- dir_scaner = Dir.new dir
76
-
77
- data = []
78
- dir_scaner.each do |file_name|
79
- file = File.new dir.join(file_name), 'r'
80
- next unless File.file?(file) and File.extname(file) == ".cache"
81
- data_str = file.read.split("\t")[1]
82
-
83
- unless data_str
84
- puts "cache #{type}-#{file} data miss"
85
- next
86
- end
87
-
88
- data << type_to_class(type).from_cache(data_str)
89
- end
90
-
91
- data
92
- end
93
-
94
- def delete(type, data_id)
95
- super type, data_id
96
-
97
- dir = CACHE_DIR.join type_to_dir(type)
98
- return true unless Dir.exist? dir
99
-
100
- file_path = dir.join("#{data_id}.cache")
101
- return true unless File.exist? file_path
102
- File.delete file_path
103
- true
104
- end
105
- end
2
+ @@file_dir = CacheDriver.file_dir
3
+
4
+ class << self
5
+ def write(type, key, data)
6
+ super type, data
7
+
8
+ dir = @@file_dir.join type_to_dir(type)
9
+ Dir.mkdir dir unless Dir.exist? dir
10
+
11
+ file = File.new dir.join("#{key}.cache"), 'w'
12
+ file.puts "#{Time.now} --> #{data.to_cache}"
13
+ file.close
14
+
15
+ key
16
+ end
17
+
18
+ def read(type, key)
19
+ super type, key
20
+
21
+ dir = @@file_dir.join type_to_dir(type)
22
+ Dir.mkdir dir unless Dir.exist? dir
23
+
24
+ file_path = dir.join("#{key}.cache")
25
+ return nil unless File.exist? file_path
26
+ file = File.new file_path, 'r'
27
+ data_str = file.read.split(" --> ")[1]
28
+
29
+ unless data_str
30
+ puts "cache #{type} ##{key} data miss"
31
+ return nil
32
+ end
33
+
34
+ data = JSON.parse data_str
35
+ type_to_class(type).from_cache data
36
+ end
37
+
38
+ def read_all(type)
39
+ super type
40
+
41
+ dir = @@file_dir.join type_to_dir(type)
42
+ Dir.mkdir dir unless Dir.exist? dir
43
+ dir_scaner = Dir.new dir
44
+
45
+ data = []
46
+ dir_scaner.each do |file_name|
47
+ file = File.new dir.join(file_name), 'r'
48
+ next unless File.file?(file) and File.extname(file) == ".cache"
49
+ data_str = file.read.split(" --> ")[1]
50
+
51
+ unless data_str
52
+ puts "cache #{type} ##{file_name} data miss"
53
+ next
54
+ end
55
+
56
+ d = JSON.parse data_str
57
+ data << type_to_class(type).from_cache(d)
58
+ end
59
+
60
+ data
61
+ end
62
+
63
+ def delete(type, key)
64
+ super type, key
65
+
66
+ dir = @@file_dir.join type_to_dir(type)
67
+ return true unless Dir.exist? dir
68
+
69
+ file_path = dir.join("#{key}.cache")
70
+ return true unless File.exist? file_path
71
+ File.delete file_path
72
+ true
73
+ end
74
+ end
106
75
  end
@@ -0,0 +1,63 @@
1
+ class RedisCacheUtil < CacheUtil
2
+ @@redis = Redis.new :host => CacheDriver.redis_host, :port => CacheDriver.redis_port
3
+ @@namespace = CacheDriver.redis_namespace
4
+
5
+ class << self
6
+ def write(type, key, data)
7
+ super type, data
8
+
9
+ res = @@redis.set "#{@@namespace}:#{type_to_dir(type)}##{key}", "#{Time.now} --> #{data.to_cache}"
10
+ res == "OK" ? key : nil
11
+ end
12
+
13
+ def read(type, key)
14
+ super type, key
15
+
16
+ content = @@redis.get("#{@@namespace}:#{type_to_dir(type)}##{key}")
17
+ unless content
18
+ puts "cache #{type} ##{key} data miss"
19
+ return nil
20
+ end
21
+
22
+ data_str = file.read.split(" --> ")[1]
23
+ unless data_str
24
+ puts "cache #{type} ##{key} data miss"
25
+ return nil
26
+ end
27
+
28
+ data = JSON.parse data_str
29
+ type_to_class(type).from_cache data
30
+ end
31
+
32
+ def read_all(type)
33
+ super type
34
+
35
+ data = []
36
+ @@redis.keys("#{@@namespace}:#{type_to_dir(type)}#*").each do |key|
37
+ content = @@redis.get(key)
38
+ unless content
39
+ puts "cache #{key} data miss"
40
+ next
41
+ end
42
+
43
+ data_str = file.read.split(" --> ")[1]
44
+ unless data_str
45
+ puts "cache #{key} data miss"
46
+ next
47
+ end
48
+
49
+ d = JSON.parse data_str
50
+ data << type_to_class(type).from_cache(d)
51
+ end
52
+
53
+ data
54
+ end
55
+
56
+ def delete(type, key)
57
+ super type, key
58
+
59
+ res = @@redis.del("#{@@namespace}:#{type_to_dir(type)}##{key}")
60
+ res == 1
61
+ end
62
+ end
63
+ end
@@ -1,3 +1,3 @@
1
1
  module CacheDriver
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - goshan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-31 00:00:00.000000000 Z
11
+ date: 2017-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: redis
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.3'
41
55
  description: make rails model act as ActiveRecord, but not save data into database
42
56
  but cache system, file or redis
43
57
  email:
@@ -57,10 +71,9 @@ files:
57
71
  - lib/cache_driver/cache_util.rb
58
72
  - lib/cache_driver/config.rb
59
73
  - lib/cache_driver/file_cache_util.rb
74
+ - lib/cache_driver/redis_cache_util.rb
60
75
  - lib/cache_driver/version.rb
61
76
  - lib/tasks/cache.rake
62
- - pkg/cache_driver-0.1.0.gem
63
- - pkg/cache_driver-0.2.0.gem
64
77
  - tmp/cache/empty
65
78
  homepage: https://github.com/goshan/cache_driver
66
79
  licenses:
@@ -82,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
95
  version: '0'
83
96
  requirements: []
84
97
  rubyforge_project:
85
- rubygems_version: 2.4.5
98
+ rubygems_version: 2.5.2
86
99
  signing_key:
87
100
  specification_version: 4
88
101
  summary: A cache adapter for model accepting file or redis
Binary file
Binary file