split_cacheable 1.0.4 → 1.2.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 +4 -4
- data/.travis.yml +12 -1
- data/README.md +18 -8
- data/gemfiles/Gemfile.rails-3.2-stable +5 -0
- data/gemfiles/Gemfile.rails-4.0-stable +6 -0
- data/gemfiles/Gemfile.rails-4.1-stable +6 -0
- data/gemfiles/Gemfile.rails-4.2-stable +6 -0
- data/gemfiles/Gemfile.split-1.0-stable +5 -0
- data/gemfiles/Gemfile.split-1.1-stable +5 -0
- data/gemfiles/Gemfile.split-1.2-stable +5 -0
- data/lib/split_cacheable.rb +8 -4
- data/lib/split_cacheable/version.rb +1 -1
- data/spec/spec_helper.rb +5 -5
- data/split_cacheable.gemspec +3 -3
- metadata +35 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 368c9295e1d66cf2cc485447c8fceb6447e9513b
|
4
|
+
data.tar.gz: b57ff20ea387090b991be0568ed2e8c0fecc09c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87a3b5c312e756ab0b264d42c56fc49ad1b2285ca83791d5c27982b85a82c9098f374ffeae9eab8cc60bc28119b7aab4136371cbc6dd9abbd7f79a2da3a74b0c
|
7
|
+
data.tar.gz: 9c1e0dae6f69297ee86b14dee6426efa8614d650e7636dce974944161f65168790fc2be855ed76a9578e79b04d7607a620a791de64ab4d06f396f88afc77e100
|
data/.travis.yml
CHANGED
@@ -2,4 +2,15 @@ sudo: false
|
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
4
|
- 2.0.0
|
5
|
-
|
5
|
+
- 2.1.7
|
6
|
+
- 2.2.2
|
7
|
+
script: bundle exec rspec spec
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/Gemfile.split-1.2-stable
|
10
|
+
- gemfiles/Gemfile.split-1.1-stable
|
11
|
+
- gemfiles/Gemfile.split-1.0-stable
|
12
|
+
- gemfiles/Gemfile.rails-4.2-stable
|
13
|
+
- gemfiles/Gemfile.rails-4.1-stable
|
14
|
+
- gemfiles/Gemfile.rails-4.0-stable
|
15
|
+
- gemfiles/Gemfile.rails-3.2-stable
|
16
|
+
- Gemfile
|
data/README.md
CHANGED
@@ -16,13 +16,23 @@ Then run:
|
|
16
16
|
|
17
17
|
bundle install
|
18
18
|
|
19
|
+
### Rails 4
|
20
|
+
|
21
|
+
Because this gem uses action caching, a feature removed from Rails 4, you will also need to include the `actionpack-action_caching` gem in your Gemfile:
|
22
|
+
|
23
|
+
gem 'actionpack-action_caching'
|
24
|
+
|
25
|
+
Then run:
|
26
|
+
|
27
|
+
bundle install
|
28
|
+
|
19
29
|
## Why?
|
20
30
|
|
21
|
-
We use action caching in Rails 3 to cache both our standard and mobile site. We wanted to be able to quickly run Split tests without worrying about setting a custom cache_path each time as well as remembering to make the needed changes to our ActiveRecord models.
|
31
|
+
We use action caching in Rails 3 to cache both our standard and mobile site. We wanted to be able to quickly run Split tests without worrying about setting a custom cache_path each time as well as remembering to make the needed changes to our ActiveRecord models.
|
22
32
|
|
23
|
-
## How?
|
33
|
+
## How?
|
24
34
|
|
25
|
-
Under the hood, action caching uses `fragment_cache_key` in `ActionController::Base`. This gem patches this method to incldue our generated current tests and variations.
|
35
|
+
Under the hood, action caching uses `fragment_cache_key` in `ActionController::Base`. This gem patches this method to incldue our generated current tests and variations.
|
26
36
|
|
27
37
|
If you already override `fragment_cache_key` in your project you can get the split partial cache key we generate by calling `current_tests_and_variations`
|
28
38
|
|
@@ -33,12 +43,12 @@ We've created an easy to remember DSL for adding active tests to specific method
|
|
33
43
|
```
|
34
44
|
class ProductController < ApplicationController
|
35
45
|
cacheable_ab_test :login_flow,
|
36
|
-
:only => [:index, :some_other_method],
|
37
|
-
:except => [:index, :some_other_method],
|
46
|
+
:only => [:index, :some_other_method],
|
47
|
+
:except => [:index, :some_other_method],
|
38
48
|
:if => Proc.new { |controller| controller.mobile_device? }
|
39
|
-
|
49
|
+
|
40
50
|
def index
|
41
|
-
|
51
|
+
|
42
52
|
end
|
43
53
|
end
|
44
54
|
```
|
@@ -75,7 +85,7 @@ Split::Cacheable::Adapter.new(ProductController.new, :index).get_all_possible_va
|
|
75
85
|
}
|
76
86
|
```
|
77
87
|
|
78
|
-
Note that we don't evaluate the `:if` option when you instantiate the controller manually. This is because we assume `Proc`s will usually be used to decide whether to show the test based on the current request. By not evaluating the `:if`s in this scenario we are able to return all possible cache keys regardless of request type.
|
88
|
+
Note that we don't evaluate the `:if` option when you instantiate the controller manually. This is because we assume `Proc`s will usually be used to decide whether to show the test based on the current request. By not evaluating the `:if`s in this scenario we are able to return all possible cache keys regardless of request type.
|
79
89
|
|
80
90
|
## Development
|
81
91
|
|
data/lib/split_cacheable.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "split_cacheable/version"
|
2
2
|
require 'split_cacheable/helper'
|
3
|
-
|
3
|
+
if defined?(Rails) && [3, 4].include?(Rails::VERSION::MAJOR) && ActionController::Base.methods.include?(:caches_action)
|
4
|
+
require 'split_cacheable/engine'
|
5
|
+
end
|
4
6
|
require 'split'
|
5
7
|
|
6
8
|
# This is the main Adapter instance. It expects:
|
@@ -57,7 +59,9 @@ module Split
|
|
57
59
|
if !defined?(@controller.request) || @controller.request.nil?
|
58
60
|
return DEFAULT_KEY
|
59
61
|
else
|
60
|
-
return !active_tests.empty? ? active_tests.map{|test_obj|
|
62
|
+
return !active_tests.empty? ? active_tests.map{ |test_obj|
|
63
|
+
"#{test_obj[:test_name]}/#{@controller.send(:ab_test, test_obj[:test_name])}"
|
64
|
+
}.join('/') : DEFAULT_KEY
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
@@ -72,7 +76,7 @@ module Split
|
|
72
76
|
if split_test
|
73
77
|
test_variations << split_test.alternatives.map { |alternative|
|
74
78
|
"#{split_test.name}/#{alternative.name}"
|
75
|
-
}
|
79
|
+
}
|
76
80
|
end
|
77
81
|
}
|
78
82
|
|
@@ -95,4 +99,4 @@ module Split
|
|
95
99
|
end
|
96
100
|
end
|
97
101
|
end
|
98
|
-
end
|
102
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -35,7 +35,7 @@ class TestControllerWithoutRequest
|
|
35
35
|
cacheable_ab_test :test_1, :only => :index
|
36
36
|
cacheable_ab_test :test_2, :except => :show
|
37
37
|
def index
|
38
|
-
|
38
|
+
|
39
39
|
end
|
40
40
|
|
41
41
|
def session
|
@@ -58,7 +58,7 @@ class TestControllerWithRequest < TestControllerWithoutRequest
|
|
58
58
|
cacheable_ab_test :test_1, :only => :index
|
59
59
|
cacheable_ab_test :test_2, :except => :show
|
60
60
|
def index
|
61
|
-
|
61
|
+
|
62
62
|
end
|
63
63
|
|
64
64
|
def request(ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27')
|
@@ -72,9 +72,9 @@ end
|
|
72
72
|
class TestControllerWithRequestAndProc < TestControllerWithRequest
|
73
73
|
cacheable_ab_test :test_1, :only => :index, :if => Proc.new { |c| c.mobile_device? }
|
74
74
|
cacheable_ab_test :test_2, :except => :show, :if => Proc.new { |c| c.mobile_device? }
|
75
|
-
|
75
|
+
|
76
76
|
def index
|
77
|
-
|
77
|
+
|
78
78
|
end
|
79
79
|
|
80
80
|
def mobile_device?
|
@@ -85,4 +85,4 @@ end
|
|
85
85
|
class TestControllerWithRequestAndMultiTestOnSameAction < TestControllerWithRequest
|
86
86
|
cacheable_ab_test :test_1, :only => :index
|
87
87
|
cacheable_ab_test :test_2, :only => :index
|
88
|
-
end
|
88
|
+
end
|
data/split_cacheable.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Split::Cacheable::VERSION
|
9
9
|
spec.authors = ["Daniel Schwartz"]
|
10
10
|
spec.email = ["dschwartz88@gmail.com"]
|
11
|
-
spec.summary = %q{We use action caching in Rails
|
11
|
+
spec.summary = %q{We use action caching in Rails to cache both our standard and mobile site. We wanted to be able to quickly run Split tests without worrying about setting a custom cache_path each time as well as remembering to make the needed changes to our ActiveRecord models.}
|
12
12
|
spec.description = %q{An extension to Split to allow for automatic cache bucket creation accross Split tests.}
|
13
13
|
spec.homepage = "https://github.com/harrystech/split_cacheable"
|
14
14
|
spec.license = "MIT"
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "split", "
|
22
|
-
spec.add_dependency "activesupport", ">= 3.2.
|
21
|
+
spec.add_dependency "split", ">= 1.0.0", "< 1.4"
|
22
|
+
spec.add_dependency "activesupport", ">= 3.2.22"
|
23
23
|
|
24
24
|
spec.add_development_dependency "rspec", ">= 2.14"
|
25
25
|
spec.add_development_dependency "pry", ">= 0"
|
metadata
CHANGED
@@ -1,97 +1,103 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: split_cacheable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schwartz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: split
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.4'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 1.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.4'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: activesupport
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- -
|
37
|
+
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.2.
|
39
|
+
version: 3.2.22
|
34
40
|
type: :runtime
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- -
|
44
|
+
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.2.
|
46
|
+
version: 3.2.22
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: rspec
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ">="
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '2.14'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- -
|
58
|
+
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '2.14'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: pry
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- -
|
65
|
+
- - ">="
|
60
66
|
- !ruby/object:Gem::Version
|
61
67
|
version: '0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- -
|
72
|
+
- - ">="
|
67
73
|
- !ruby/object:Gem::Version
|
68
74
|
version: '0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: pry-byebug
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- -
|
79
|
+
- - ">="
|
74
80
|
- !ruby/object:Gem::Version
|
75
81
|
version: '0'
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- -
|
86
|
+
- - ">="
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: '0'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
90
|
name: mock_redis
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
|
-
- -
|
93
|
+
- - ">="
|
88
94
|
- !ruby/object:Gem::Version
|
89
95
|
version: 0.11.0
|
90
96
|
type: :development
|
91
97
|
prerelease: false
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
|
-
- -
|
100
|
+
- - ">="
|
95
101
|
- !ruby/object:Gem::Version
|
96
102
|
version: 0.11.0
|
97
103
|
description: An extension to Split to allow for automatic cache bucket creation accross
|
@@ -102,13 +108,20 @@ executables: []
|
|
102
108
|
extensions: []
|
103
109
|
extra_rdoc_files: []
|
104
110
|
files:
|
105
|
-
- .gitignore
|
106
|
-
- .travis.yml
|
111
|
+
- ".gitignore"
|
112
|
+
- ".travis.yml"
|
107
113
|
- Gemfile
|
108
114
|
- LICENSE
|
109
115
|
- LICENSE.txt
|
110
116
|
- README.md
|
111
117
|
- Rakefile
|
118
|
+
- gemfiles/Gemfile.rails-3.2-stable
|
119
|
+
- gemfiles/Gemfile.rails-4.0-stable
|
120
|
+
- gemfiles/Gemfile.rails-4.1-stable
|
121
|
+
- gemfiles/Gemfile.rails-4.2-stable
|
122
|
+
- gemfiles/Gemfile.split-1.0-stable
|
123
|
+
- gemfiles/Gemfile.split-1.1-stable
|
124
|
+
- gemfiles/Gemfile.split-1.2-stable
|
112
125
|
- lib/split_cacheable.rb
|
113
126
|
- lib/split_cacheable/engine.rb
|
114
127
|
- lib/split_cacheable/helper.rb
|
@@ -126,24 +139,23 @@ require_paths:
|
|
126
139
|
- lib
|
127
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
141
|
requirements:
|
129
|
-
- -
|
142
|
+
- - ">="
|
130
143
|
- !ruby/object:Gem::Version
|
131
144
|
version: '0'
|
132
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
146
|
requirements:
|
134
|
-
- -
|
147
|
+
- - ">="
|
135
148
|
- !ruby/object:Gem::Version
|
136
149
|
version: '0'
|
137
150
|
requirements: []
|
138
151
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
152
|
+
rubygems_version: 2.5.1
|
140
153
|
signing_key:
|
141
154
|
specification_version: 4
|
142
|
-
summary: We use action caching in Rails
|
155
|
+
summary: We use action caching in Rails to cache both our standard and mobile site.
|
143
156
|
We wanted to be able to quickly run Split tests without worrying about setting a
|
144
157
|
custom cache_path each time as well as remembering to make the needed changes to
|
145
158
|
our ActiveRecord models.
|
146
159
|
test_files:
|
147
160
|
- spec/cacheable_spec.rb
|
148
161
|
- spec/spec_helper.rb
|
149
|
-
has_rdoc:
|