redmemo 0.1.0 → 0.1.1

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: dfa945a3e519a646133f9bac7de73468916a8f1b
4
- data.tar.gz: 66f4fd9c12d55870f76794eff422f6e29b889f6a
3
+ metadata.gz: 6019fd115f496fbe7112652a7c9b054fc2075614
4
+ data.tar.gz: b11f648088c65c44255d118fa0e2615d507aafae
5
5
  SHA512:
6
- metadata.gz: 579f03e70a35bbc11372d141d2b06fe4afe60b7bc2c9e66fd024a2f7e796b2425b6b9a6279c868954fe6ea396b787983bb780e38d06508d313ca1b12d2d25e8b
7
- data.tar.gz: db83d58a041130902212c24aa20f7961d84a16316c65517e772c801170815a48d2d6a5197ff8b838371051d21ebf3f5e61661c2170a858107100a929b162759f
6
+ metadata.gz: 7c07975da2a7f1a1d6ddd18a8058aa2b7a01edf0701615a58dbc1940e676d921289740e8fcd18ed1d9f01d580c411727dc9fe4b1aaff6254140913857b45cc6c
7
+ data.tar.gz: 76b5d46672a664f4c22b382edf402b54fabad1a3af45fb9f1929b486726210fc8d500eae2ca6836728a5ea239e72742f5059de394a76a7c8ac4097d1696e2502
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Redmemo
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/redmemo`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Redis based memoization, which should replace your counter caches and caches in
4
+ your views/view models/decorators/exhibits.
6
5
 
7
6
  ## Installation
8
7
 
@@ -22,7 +21,17 @@ Or install it yourself as:
22
21
 
23
22
  ## Usage
24
23
 
25
- TODO: Write usage instructions here
24
+ ~~~ruby
25
+ require 'redmemo'
26
+ class Group
27
+ def intesive_method
28
+ # intensive work
29
+ "awesome result"
30
+ end
31
+
32
+ cache_method :intensive_method, cache_key: :id
33
+ end
34
+ ~~~
26
35
 
27
36
  ## Development
28
37
 
@@ -32,7 +41,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
41
 
33
42
  ## Contributing
34
43
 
35
- 1. Fork it ( https://github.com/[my-github-username]/redmemo/fork )
44
+ 1. Fork it ( https://github.com/minhajuddin/redmemo/fork )
36
45
  2. Create your feature branch (`git checkout -b my-new-feature`)
37
46
  3. Commit your changes (`git commit -am 'Add some feature'`)
38
47
  4. Push to the branch (`git push origin my-new-feature`)
@@ -7,8 +7,9 @@ require "redmemo"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require "pry"
11
+ require "pry-doc"
12
+ Pry.start
12
13
 
13
- require "irb"
14
- IRB.start
14
+ #require "irb"
15
+ #IRB.start
data/bin/setup CHANGED
File without changes
@@ -1,5 +1,74 @@
1
1
  require "redmemo/version"
2
2
 
3
+ require 'redis'
4
+ require 'base64'
5
+ $redis = Redis.new
6
+
3
7
  module Redmemo
4
- # Your code goes here...
8
+ module Cache
9
+
10
+ def self.included(base)
11
+ base.include(InstanceMethods)
12
+ base.extend(ClassMethods)
13
+ # creates a custom cache module for the base class
14
+ # this module will hold the overriding methods
15
+ base.prepend(const_set("#{base.name}Cache", Module.new))
16
+ end
17
+
18
+ # start of instance methods
19
+ module InstanceMethods
20
+ def encode_for_cache(val)
21
+ Base64.encode64(Marshal.dump(val))
22
+ end
23
+
24
+ def decode_for_cache(encoded_val)
25
+ Marshal.load(Base64.decode64(encoded_val))
26
+ end
27
+
28
+ def cached_value_for(key, lazy_val)
29
+ cached_val = $redis.get(key)
30
+ return decode_for_cache(cached_val) if cached_val
31
+
32
+ # cache miss: first execution
33
+ lazy_val.().tap do |val|
34
+ $redis.set(key, encode_for_cache(val))
35
+ end
36
+ end
37
+ end
38
+ # end of instance methods
39
+
40
+ # start of class methods
41
+ module ClassMethods
42
+ DEFAULT_OPTIONS = {cache_key: :cache_key}
43
+ # usage:
44
+ # cache_method :m1, :cache_key => :your_custom_cache_key
45
+ # :cache_key is set to :cache_key by default, this is the activerecord cache key method
46
+ def cache_method(method_name, options = {})
47
+ options = DEFAULT_OPTIONS.merge(options || {})
48
+ cache_module = const_get("#{self.name}Cache")
49
+ cache_key_method = options[:cache_key] || options["cache_key"]
50
+ cache_module.class_eval do
51
+ define_method(method_name) do
52
+ key = "#{self.class.name}/#{method_name}/#{self.send(cache_key_method)}"
53
+ cached_value_for(key, ->{super()})
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+ # usage:
60
+ # cache_methods :m1, :m2, :m3, :cache_key => :your_custom_cache_key
61
+ # :cache_key is set to :cache_key by default, this is the activerecord cache key method
62
+ def cache_methods(args)
63
+ options = args.pop if args.last.is_a?(Hash)
64
+ methods = args
65
+
66
+ methods.each do |method|
67
+ self.cache_method(method, options)
68
+ end
69
+ end
70
+ end
71
+ # end of class methods
72
+
73
+ end
5
74
  end
@@ -1,3 +1,3 @@
1
1
  module Redmemo
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -19,6 +19,11 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ # dependencies
23
+ spec.add_dependency "redis", "~> 3"
24
+
22
25
  spec.add_development_dependency "bundler", "~> 1.8"
23
26
  spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "pry", "~> 0.10"
28
+ spec.add_development_dependency "pry-doc", "~> 0.6"
24
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmemo
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
  - Khaja Minhajuddin
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2015-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,34 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-doc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
41
83
  description: Redis based memoization, which should replace your counter caches.
42
84
  email:
43
85
  - minhajuddink@gmail.com