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.
@@ -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