frivol 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
- hash: 23
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
- date: 2011-03-17 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: json
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
- hash: 31
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
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
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
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
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
- hash: 27
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
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
59
52
  - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 33
62
- segments:
63
- - 2
64
- - 11
65
- - 1
66
- version: 2.11.1
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
- version_requirements: *id003
69
- description: Simple Redis backed temporary storage intended primarily for use with ActiveRecord models to provide caching
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
- - .gitignore
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
- has_rdoc: true
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
- - --charset=UTF-8
122
- require_paths:
133
+ rdoc_options: []
134
+ require_paths:
123
135
  - lib
124
- required_ruby_version: !ruby/object:Gem::Requirement
125
- none: false
126
- requirements:
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
127
138
  - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
131
- - 0
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
- hash: 3
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: 1.3.7
148
+ rubygems_version: 2.2.1
146
149
  signing_key:
147
- specification_version: 3
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: []
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC