frivol 0.2.0 → 0.3.0
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 +7 -0
- data/.travis.yml +15 -0
- data/Gemfile +13 -0
- data/LICENSE +1 -1
- data/README.rdoc +58 -38
- data/Rakefile +16 -26
- data/VERSION +1 -1
- data/frivol.gemspec +74 -62
- data/lib/frivol.rb +14 -363
- data/lib/frivol/class_methods.rb +195 -0
- data/lib/frivol/config.rb +39 -0
- data/lib/frivol/functor.rb +37 -0
- data/lib/frivol/helpers.rb +133 -0
- data/lib/frivol/time_extensions.rb +45 -0
- data/test/fake_redis.rb +36 -11
- data/test/helper.rb +16 -11
- data/test/test_buckets.rb +53 -0
- data/test/test_condition.rb +43 -0
- data/test/test_condition_with_counters.rb +90 -0
- data/test/test_counters.rb +72 -0
- data/test/test_else_with_counters.rb +39 -0
- data/test/test_extensions.rb +15 -0
- data/test/test_frivol.rb +96 -388
- data/test/test_frivolize.rb +81 -0
- data/test/test_seeds.rb +53 -0
- data/test/test_threads.rb +15 -0
- metadata +88 -88
- data/.gitignore +0 -21
@@ -0,0 +1,81 @@
|
|
1
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/helper.rb"
|
2
|
+
|
3
|
+
class TestFrivolize < Test::Unit::TestCase
|
4
|
+
def test_frivolize_methods
|
5
|
+
klass = Class.new(TestClass) do
|
6
|
+
class_variable_set :@@count, 0 # Ruby 1.9.2 seems to need this
|
7
|
+
@@count = 0
|
8
|
+
|
9
|
+
# Imagine counting dinosuars takes a long time, what with the need to invent a time machine first and all
|
10
|
+
def dinosaur_count
|
11
|
+
@@count += 1
|
12
|
+
end
|
13
|
+
frivolize :dinosaur_count
|
14
|
+
end
|
15
|
+
|
16
|
+
t = klass.new
|
17
|
+
assert t.methods.include?(ruby_one_eight? ? 'dinosaur_count' : :dinosaur_count)
|
18
|
+
assert t.methods.include?(ruby_one_eight? ? 'frivolized_dinosaur_count' : :frivolized_dinosaur_count)
|
19
|
+
|
20
|
+
assert_equal 1, t.dinosaur_count
|
21
|
+
|
22
|
+
t = klass.new
|
23
|
+
assert_equal 1, t.dinosaur_count # Does not call original method again
|
24
|
+
|
25
|
+
t.delete_storage
|
26
|
+
t = klass.new
|
27
|
+
assert_equal 2, t.dinosaur_count # Calls the original again
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_frivolize_methods_with_expiry_in_a_bucket
|
31
|
+
klass = Class.new(TestClass) do
|
32
|
+
class_variable_set :@@count, 0 # Ruby 1.9.2 seems to need this
|
33
|
+
@@count = 0
|
34
|
+
|
35
|
+
# Imagine counting dinosuars takes a long time, what with the need to invent a time machine first and all
|
36
|
+
def dinosaur_count
|
37
|
+
@@count += 1
|
38
|
+
end
|
39
|
+
frivolize :dinosaur_count, { :bucket => :dinosaurs, :expires_in => -1 }
|
40
|
+
end
|
41
|
+
|
42
|
+
t = klass.new
|
43
|
+
assert_equal 1, t.dinosaur_count
|
44
|
+
assert_equal 1, t.dinosaur_count # Still 10 because it's coming from the class cache
|
45
|
+
|
46
|
+
t = klass.new
|
47
|
+
assert_equal 2, t.dinosaur_count
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_frivolize_methods_with_expiry_as_a_counter
|
51
|
+
klass = Class.new(TestClass) do
|
52
|
+
class_variable_set :@@count, 0 # Ruby 1.9.2 seems to need this
|
53
|
+
@@count = 0
|
54
|
+
|
55
|
+
# Imagine counting dinosuars takes a long time, what with the need to invent a time machine first and all
|
56
|
+
def dinosaur_count
|
57
|
+
@@count += 1
|
58
|
+
end
|
59
|
+
frivolize :dinosaur_count, { :expires_in => -1, :counter => true }
|
60
|
+
end
|
61
|
+
|
62
|
+
t = klass.new
|
63
|
+
assert t.methods.include?(ruby_one_eight? ? 'store_dinosaur_count' : :store_dinosaur_count) # check that the bucket name is the method name
|
64
|
+
|
65
|
+
assert_equal 1, t.dinosaur_count
|
66
|
+
|
67
|
+
t = klass.new # a fresh instance after value expired
|
68
|
+
assert_equal 2, t.dinosaur_count
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_frivolize_with_seed_as_a_counter_for_increment
|
72
|
+
t = Class.new(TestClass) do
|
73
|
+
def bak_baks
|
74
|
+
88_888
|
75
|
+
end
|
76
|
+
frivolize :bak_baks, :counter => true, :seed => Proc.new{ |obj| obj.bak_baks}
|
77
|
+
end.new
|
78
|
+
|
79
|
+
assert_equal 88_888 + 1, t.increment_bak_baks
|
80
|
+
end
|
81
|
+
end
|
data/test/test_seeds.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/helper.rb"
|
2
|
+
|
3
|
+
class TestSeeds < Test::Unit::TestCase
|
4
|
+
def test_use_seed_value_for_initial_value_of_increment
|
5
|
+
t = Class.new(TestClass) do
|
6
|
+
storage_bucket :cached_count, :counter => true, :seed => Proc.new { |obj| obj.tedious_count }
|
7
|
+
|
8
|
+
def tedious_count
|
9
|
+
99_999 # ... bottle of beers on the wall
|
10
|
+
end
|
11
|
+
end.new
|
12
|
+
|
13
|
+
assert_equal t.tedious_count + 1, t.increment_cached_count
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_use_seed_value_for_initial_value_of_increment_by
|
17
|
+
t = Class.new(TestClass) do
|
18
|
+
storage_bucket :cached_count, :counter => true, :seed => Proc.new { |obj| obj.tedious_count }
|
19
|
+
|
20
|
+
def tedious_count
|
21
|
+
99_999 # ... bottle of beers on the wall
|
22
|
+
end
|
23
|
+
end.new
|
24
|
+
|
25
|
+
amount = 2
|
26
|
+
assert_equal t.tedious_count + amount, t.increment_cached_count_by(amount)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_use_seed_value_for_initial_value_of_decrement
|
30
|
+
t = Class.new(TestClass) do
|
31
|
+
storage_bucket :cached_count, :counter => true, :seed => Proc.new { |obj| obj.tedious_count }
|
32
|
+
|
33
|
+
def tedious_count
|
34
|
+
99_999 # ... bottle of beers on the wall
|
35
|
+
end
|
36
|
+
end.new
|
37
|
+
|
38
|
+
assert_equal t.tedious_count - 1, t.decrement_cached_count
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_use_seed_value_for_initial_value_of_decrement_by
|
42
|
+
t = Class.new(TestClass) do
|
43
|
+
storage_bucket :cached_count, :counter => true, :seed => Proc.new { |obj| obj.tedious_count }
|
44
|
+
|
45
|
+
def tedious_count
|
46
|
+
99_999 # ... bottle of beers on the wall
|
47
|
+
end
|
48
|
+
end.new
|
49
|
+
|
50
|
+
amount = 3
|
51
|
+
assert_equal t.tedious_count - amount, t.decrement_cached_count_by(amount)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/helper.rb"
|
2
|
+
|
3
|
+
class TestThreads < Test::Unit::TestCase
|
4
|
+
def test_each_thread_gets_its_own_connection
|
5
|
+
threads = []
|
6
|
+
2.times do
|
7
|
+
threads << Thread.new do
|
8
|
+
t = TestClass.new
|
9
|
+
t.retrieve :nothing => nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
threads.each { |thread| thread.join }
|
13
|
+
assert_not_equal threads.first[:frivol_redis], threads.last[:frivol_redis]
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: frivol
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
version: 0.2.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Marc Heiligers
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
11
|
+
date: 2014-03-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: multi_json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
27
17
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
- 0
|
34
|
-
version: 1.2.0
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
35
20
|
type: :runtime
|
36
|
-
|
37
|
-
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
38
28
|
name: redis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
39
35
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
43
45
|
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 2
|
48
|
-
- 0
|
49
|
-
- 10
|
50
|
-
version: 2.0.10
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
51
48
|
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: shoulda
|
55
49
|
prerelease: false
|
56
|
-
|
57
|
-
|
58
|
-
requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
59
52
|
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jeweler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
67
62
|
type: :development
|
68
|
-
|
69
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Simple Redis backed temporary storage intended primarily for use with
|
70
|
+
ActiveRecord models to provide caching
|
70
71
|
email: marc@eternal.co.za
|
71
72
|
executables: []
|
72
|
-
|
73
73
|
extensions: []
|
74
|
-
|
75
|
-
extra_rdoc_files:
|
74
|
+
extra_rdoc_files:
|
76
75
|
- LICENSE
|
77
76
|
- README.rdoc
|
78
|
-
files:
|
79
|
-
- .document
|
80
|
-
- .
|
77
|
+
files:
|
78
|
+
- ".document"
|
79
|
+
- ".travis.yml"
|
80
|
+
- Gemfile
|
81
81
|
- LICENSE
|
82
82
|
- README.rdoc
|
83
83
|
- Rakefile
|
@@ -109,44 +109,44 @@ files:
|
|
109
109
|
- doc/rdoc-style.css
|
110
110
|
- frivol.gemspec
|
111
111
|
- lib/frivol.rb
|
112
|
+
- lib/frivol/class_methods.rb
|
113
|
+
- lib/frivol/config.rb
|
114
|
+
- lib/frivol/functor.rb
|
115
|
+
- lib/frivol/helpers.rb
|
116
|
+
- lib/frivol/time_extensions.rb
|
112
117
|
- test/fake_redis.rb
|
113
118
|
- test/helper.rb
|
119
|
+
- test/test_buckets.rb
|
120
|
+
- test/test_condition.rb
|
121
|
+
- test/test_condition_with_counters.rb
|
122
|
+
- test/test_counters.rb
|
123
|
+
- test/test_else_with_counters.rb
|
124
|
+
- test/test_extensions.rb
|
114
125
|
- test/test_frivol.rb
|
115
|
-
|
126
|
+
- test/test_frivolize.rb
|
127
|
+
- test/test_seeds.rb
|
128
|
+
- test/test_threads.rb
|
116
129
|
homepage: http://github.com/marcheiligers/frivol
|
117
130
|
licenses: []
|
118
|
-
|
131
|
+
metadata: {}
|
119
132
|
post_install_message:
|
120
|
-
rdoc_options:
|
121
|
-
|
122
|
-
require_paths:
|
133
|
+
rdoc_options: []
|
134
|
+
require_paths:
|
123
135
|
- lib
|
124
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
-
|
126
|
-
requirements:
|
136
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
127
138
|
- - ">="
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
version: "0"
|
133
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
-
none: false
|
135
|
-
requirements:
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
136
143
|
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
|
139
|
-
segments:
|
140
|
-
- 0
|
141
|
-
version: "0"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
142
146
|
requirements: []
|
143
|
-
|
144
147
|
rubyforge_project:
|
145
|
-
rubygems_version:
|
148
|
+
rubygems_version: 2.2.1
|
146
149
|
signing_key:
|
147
|
-
specification_version:
|
150
|
+
specification_version: 4
|
148
151
|
summary: Simple Redis backed temporary storage
|
149
|
-
test_files:
|
150
|
-
- test/fake_redis.rb
|
151
|
-
- test/helper.rb
|
152
|
-
- test/test_frivol.rb
|
152
|
+
test_files: []
|