memor 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in memor.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/memor.rb ADDED
@@ -0,0 +1,44 @@
1
+ require "memor/version"
2
+
3
+ module Memor
4
+
5
+ # Example
6
+ #
7
+ # class Foo
8
+ # include Memor
9
+ #
10
+ # def slow(a, b)
11
+ # memor(__callee__, a, b) do
12
+ # # slow stuff
13
+ # end
14
+ # end
15
+ # end
16
+ #
17
+ def memor(callee, *args)
18
+ memor_name = "@_memor_#{callee}".gsub('?', '_question_mark')
19
+ .gsub('!', '_bang')
20
+
21
+ if args.nil? # methods without arguments
22
+ unless instance_variable_defined? memor_name
23
+ instance_variable_set memor_name, yield
24
+ end
25
+
26
+ return instance_variable_get memor_name
27
+
28
+ else
29
+ unless instance_variable_defined? memor_name
30
+ instance_variable_set memor_name, {}
31
+ end
32
+
33
+ memor = instance_variable_get memor_name
34
+ key = [* args] # use the args array as the cache key
35
+
36
+ unless memor.has_key?(key)
37
+ memor[key] = yield
38
+ end
39
+
40
+ memor[key]
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,3 @@
1
+ module Memor
2
+ VERSION = "0.0.1"
3
+ end
data/memor.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ require "memor/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "memor"
8
+ s.version = Memor::VERSION
9
+ s.authors = ["Aaron Tian"]
10
+ s.email = ["Aaron2Ti@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{memoize function without alias method chain}
13
+ s.description = %q{memoize function without alias method chain}
14
+
15
+ s.rubyforge_project = "memor"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ # specify any dependencies here; for example:
23
+ # s.add_development_dependency "rspec"
24
+ # s.add_runtime_dependency "rest-client"
25
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: memor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aaron Tian
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-18 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: memoize function without alias method chain
15
+ email:
16
+ - Aaron2Ti@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Rakefile
24
+ - lib/memor.rb
25
+ - lib/memor/version.rb
26
+ - memor.gemspec
27
+ homepage: ''
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project: memor
47
+ rubygems_version: 1.8.15
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: memoize function without alias method chain
51
+ test_files: []
52
+ has_rdoc: