ab-experiments-rails 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +14 -3
- data/ab_experiments_rails.gemspec +1 -1
- data/app/assets/images/google_ab_spinner.gif +0 -0
- data/app/views/ab_experiments_rails/_example.html.erb +4 -1
- data/app/views/ab_experiments_rails/_header_content.html.erb +46 -18
- data/app/views/ab_experiments_rails/_loading.html.erb +7 -0
- data/doc/for_dev_distribute_traffic_evenly.png +0 -0
- data/doc/urls_doesnt_matters.png +0 -0
- data/lib/ab_experiments_rails/settings.rb +12 -2
- data/lib/ab_experiments_rails/version.rb +1 -1
- data/lib/generators/ab_experiments_rails_generator.rb +2 -0
- data/test/dummy/app/assets/images/google_ab_spinner.gif +0 -0
- data/test/dummy/app/views/ab_experiments_rails/_example.html.erb +20 -0
- data/test/dummy/app/views/ab_experiments_rails/_header_content.html.erb +46 -18
- data/test/dummy/app/views/ab_experiments_rails/_loading.html.erb +7 -0
- data/test/dummy/app/views/pages/landing_page.html.erb +4 -1
- data/test/landing_page_test.rb +11 -9
- metadata +116 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03331feb6715bdaad0b083ab3e2b10a6df99a4e1
|
4
|
+
data.tar.gz: c250865b4a653dcf7d5ac25f4323637c607dc5e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c5f8069b35dcb30985d0a67a5021c7f2b68656c0596e47a41a95885851609335157187ba5f5f7eeb13bdd79fa1ff7d05fcc8948a8c3946e25d93563060cb80c
|
7
|
+
data.tar.gz: 818829a76a36cae763b46349c367b2003bcc8769728971a80b8cfcf8a049a593899c6ce72ae273a640e4ad6bd6ab7c80160a759e67307a7ba664ada7e2d0d8e4
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -19,6 +19,16 @@ Put this content into head tag before google analytics load. (usually applicatio
|
|
19
19
|
<%= yield :google_ab %>
|
20
20
|
```
|
21
21
|
|
22
|
+
## Setup google experiments
|
23
|
+
|
24
|
+
Urls doesn't matters
|
25
|
+
|
26
|
+
![Urls doesn't matters](https://github.com/hlidacky/ab-experiments-rails/raw/add-spinner/doc/urls_doesnt_matters.png)
|
27
|
+
|
28
|
+
For easy way testing enable - Distribute traffic evenly across all variants
|
29
|
+
|
30
|
+
![Distribute traffic evenly](https://github.com/hlidacky/ab-experiments-rails/raw/add-spinner/doc/for_dev_distribute_traffic_evenly.png)
|
31
|
+
|
22
32
|
## Create your first ab test
|
23
33
|
|
24
34
|
Let's apply ab testing on file like this app/views/pages/landing_page.html.erb
|
@@ -40,9 +50,12 @@ into landing_page.html.erb and modify it like this
|
|
40
50
|
test_name: :landing_page_test, # your choice
|
41
51
|
experiment_id: 'EXPERIMENT_ID', # copy/paste from google ab experiments
|
42
52
|
experiment_enabled: true, # on/off your experiment. display only original content when false
|
43
|
-
|
53
|
+
spinner_starts_after: 1, # spinner loader start after 1s
|
54
|
+
spinner_max_time: 5 # show original content after 5s seconds if javascript fails
|
44
55
|
})
|
45
56
|
%>
|
57
|
+
|
58
|
+
<%= render "ab_experiments_rails/loading" if settings.experiment_enabled? %>
|
46
59
|
<div class="<%= "#{settings.original_class}" %> google_ab_show_later">
|
47
60
|
<h1>Welcome and buy our services</h1>
|
48
61
|
<button>
|
@@ -88,5 +101,3 @@ This is useful for development
|
|
88
101
|
|
89
102
|
|
90
103
|
|
91
|
-
|
92
|
-
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = `git ls-files -z`.split("\x0")
|
18
18
|
s.test_files = Dir["test/**/*"]
|
19
19
|
|
20
|
-
s.add_dependency "rails", "
|
20
|
+
s.add_dependency "rails", ">= 4.2.7.1"
|
21
21
|
|
22
22
|
s.add_development_dependency "bundler"
|
23
23
|
s.add_development_dependency "sqlite3"
|
Binary file
|
@@ -3,9 +3,12 @@
|
|
3
3
|
test_name: :landing_page_test, # your choice
|
4
4
|
experiment_id: 'EXPERIMENT_ID', # copy/paste from google ab experiments
|
5
5
|
experiment_enabled: true, # on/off your experiment. display only original content when false
|
6
|
-
|
6
|
+
spinner_starts_after: 1, # spinner loader start after 1s
|
7
|
+
spinner_max_time: 5 # show original content after 5s seconds if javascript fails
|
7
8
|
})
|
8
9
|
%>
|
10
|
+
|
11
|
+
<%= render "ab_experiments_rails/loading" if settings.experiment_enabled? %>
|
9
12
|
<div class="<%= "#{settings.original_class}" %> google_ab_show_later">
|
10
13
|
<% # original content... %>
|
11
14
|
</div>
|
@@ -7,14 +7,37 @@
|
|
7
7
|
.google_ab_hidden {
|
8
8
|
display: none !important;
|
9
9
|
}
|
10
|
-
|
10
|
+
|
11
|
+
@keyframes google_ab_opacity_on {
|
11
12
|
from {opacity: 0;}
|
12
13
|
to {opacity: 1;}
|
13
14
|
}
|
15
|
+
|
16
|
+
@keyframes google_ab_opacity_off {
|
17
|
+
from {opacity: 1;}
|
18
|
+
to {opacity: 0;}
|
19
|
+
}
|
20
|
+
/* show original if javascript fails */
|
14
21
|
.google_ab_show_later {
|
15
22
|
opacity: 1;
|
16
|
-
animation-name:
|
17
|
-
animation-duration: <%= "#{settings.
|
23
|
+
animation-name: google_ab_opacity_on;
|
24
|
+
animation-duration: <%= "#{settings.spinner_max_time}s" %>; /* delay before show */
|
25
|
+
animation-timing-function: steps(1);
|
26
|
+
-webkit-animation-timing-function: steps(1);
|
27
|
+
}
|
28
|
+
|
29
|
+
.google_ab_load_spinner {
|
30
|
+
opacity: 0;
|
31
|
+
animation-name: google_ab_opacity_off;
|
32
|
+
animation-duration: <%= "#{settings.spinner_max_time}s" %>; /* delay before hide */
|
33
|
+
animation-timing-function: steps(1);
|
34
|
+
-webkit-animation-timing-function: steps(1);
|
35
|
+
}
|
36
|
+
|
37
|
+
.google_ab_spinner_delayed {
|
38
|
+
opacity: 1;
|
39
|
+
animation-name: google_ab_opacity_on;
|
40
|
+
animation-duration: <%= "#{settings.spinner_starts_after}s" %>; /* delayed start */
|
18
41
|
animation-timing-function: steps(1);
|
19
42
|
-webkit-animation-timing-function: steps(1);
|
20
43
|
}
|
@@ -28,25 +51,30 @@
|
|
28
51
|
<% # Force display original / variant %>
|
29
52
|
<% if params["#{settings.force_param_name}".to_sym].present? %>
|
30
53
|
<% if params["#{settings.force_param_name}".to_sym].to_s == '1' %>
|
31
|
-
<script>chosenVariation =
|
54
|
+
<script>chosenVariation = <%= settings.choosen_variation_variant %>;</script>
|
32
55
|
<% else %>
|
33
|
-
<script>chosenVariation =
|
56
|
+
<script>chosenVariation = <%= settings.choosen_variation_original %>;</script>
|
34
57
|
<% end %>
|
35
58
|
<% end %>
|
36
59
|
|
37
60
|
<script>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
61
|
+
var pageVariations = [
|
62
|
+
function() {
|
63
|
+
$('.google_ab_load_spinner').hide();
|
64
|
+
$('.<%= settings.variant_class %>').hide();
|
65
|
+
$('.<%= settings.original_class %>').removeClass('google_ab_show_later');
|
66
|
+
$('.<%= settings.original_class %>').css('opacity', '1');
|
67
|
+
$('.<%= settings.original_class %>').show();
|
68
|
+
},
|
69
|
+
function() {
|
70
|
+
$('.google_ab_load_spinner').hide();
|
71
|
+
$('.<%= settings.original_class %>').hide();
|
72
|
+
$('.<%= settings.variant_class %>').removeClass('google_ab_hidden');
|
73
|
+
$('.<%= settings.variant_class %>').show();
|
74
|
+
}
|
75
|
+
];
|
76
|
+
$(document).on('ready', function () {
|
77
|
+
pageVariations[chosenVariation].call(); // comment this line if you want see result without javascript
|
78
|
+
});
|
51
79
|
</script>
|
52
80
|
<% end %>
|
Binary file
|
Binary file
|
@@ -1,15 +1,17 @@
|
|
1
1
|
module AbExperimentsRails
|
2
2
|
class Settings
|
3
|
-
attr_accessor :
|
3
|
+
attr_accessor :spinner_starts_after
|
4
|
+
attr_accessor :spinner_max_time
|
4
5
|
attr_accessor :test_name
|
5
6
|
attr_accessor :experiment_id
|
6
7
|
attr_accessor :experiment_enabled
|
7
8
|
|
8
9
|
def initialize(options = {})
|
9
|
-
self.show_delay = options[:show_delay]
|
10
10
|
self.test_name = options[:test_name]
|
11
11
|
self.experiment_id = options[:experiment_id]
|
12
12
|
self.experiment_enabled = options[:experiment_enabled]
|
13
|
+
self.spinner_starts_after = options[:spinner_starts_after]
|
14
|
+
self.spinner_max_time = options[:spinner_max_time]
|
13
15
|
end
|
14
16
|
|
15
17
|
def url
|
@@ -31,5 +33,13 @@ module AbExperimentsRails
|
|
31
33
|
def force_param_name
|
32
34
|
"#{test_name}_ab"
|
33
35
|
end
|
36
|
+
|
37
|
+
def choosen_variation_original
|
38
|
+
0
|
39
|
+
end
|
40
|
+
|
41
|
+
def choosen_variation_variant
|
42
|
+
1
|
43
|
+
end
|
34
44
|
end
|
35
45
|
end
|
@@ -4,6 +4,8 @@ class AbExperimentsRailsGenerator < Rails::Generators::Base
|
|
4
4
|
def copy_header
|
5
5
|
copy_file '../../app/views/ab_experiments_rails/_header_content.html.erb', 'app/views/ab_experiments_rails/_header_content.html.erb'
|
6
6
|
copy_file '../../app/views/ab_experiments_rails/_example.html.erb', 'app/views/ab_experiments_rails/_example.html.erb'
|
7
|
+
copy_file '../../app/views/ab_experiments_rails/_loading.html.erb', 'app/views/ab_experiments_rails/_loading.html.erb'
|
8
|
+
copy_file '../../app/assets/images/google_ab_spinner.gif', 'app/assets/images/google_ab_spinner.gif'
|
7
9
|
end
|
8
10
|
|
9
11
|
end
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%
|
2
|
+
settings = AbExperimentsRails::Settings.new({
|
3
|
+
test_name: :landing_page_test, # your choice
|
4
|
+
experiment_id: 'EXPERIMENT_ID', # copy/paste from google ab experiments
|
5
|
+
experiment_enabled: true, # on/off your experiment. display only original content when false
|
6
|
+
spinner_starts_after: 1, # spinner loader start after 1s
|
7
|
+
spinner_max_time: 5 # show original content after 5s seconds if javascript fails
|
8
|
+
})
|
9
|
+
%>
|
10
|
+
|
11
|
+
<%= render "ab_experiments_rails/loading" if settings.experiment_enabled? %>
|
12
|
+
<div class="<%= "#{settings.original_class}" %> google_ab_show_later">
|
13
|
+
<% # original content... %>
|
14
|
+
</div>
|
15
|
+
<% if settings.experiment_enabled? %>
|
16
|
+
<div class="<%= "#{settings.variant_class} "%> google_ab_hidden">
|
17
|
+
<% # variant content... %>
|
18
|
+
</div>
|
19
|
+
<%= render "ab_experiments_rails/header_content", settings: settings %>
|
20
|
+
<% end %>
|
@@ -7,14 +7,37 @@
|
|
7
7
|
.google_ab_hidden {
|
8
8
|
display: none !important;
|
9
9
|
}
|
10
|
-
|
10
|
+
|
11
|
+
@keyframes google_ab_opacity_on {
|
11
12
|
from {opacity: 0;}
|
12
13
|
to {opacity: 1;}
|
13
14
|
}
|
15
|
+
|
16
|
+
@keyframes google_ab_opacity_off {
|
17
|
+
from {opacity: 1;}
|
18
|
+
to {opacity: 0;}
|
19
|
+
}
|
20
|
+
/* show original if javascript fails */
|
14
21
|
.google_ab_show_later {
|
15
22
|
opacity: 1;
|
16
|
-
animation-name:
|
17
|
-
animation-duration: <%= "#{settings.
|
23
|
+
animation-name: google_ab_opacity_on;
|
24
|
+
animation-duration: <%= "#{settings.spinner_max_time}s" %>; /* delay before show */
|
25
|
+
animation-timing-function: steps(1);
|
26
|
+
-webkit-animation-timing-function: steps(1);
|
27
|
+
}
|
28
|
+
|
29
|
+
.google_ab_load_spinner {
|
30
|
+
opacity: 0;
|
31
|
+
animation-name: google_ab_opacity_off;
|
32
|
+
animation-duration: <%= "#{settings.spinner_max_time}s" %>; /* delay before hide */
|
33
|
+
animation-timing-function: steps(1);
|
34
|
+
-webkit-animation-timing-function: steps(1);
|
35
|
+
}
|
36
|
+
|
37
|
+
.google_ab_spinner_delayed {
|
38
|
+
opacity: 1;
|
39
|
+
animation-name: google_ab_opacity_on;
|
40
|
+
animation-duration: <%= "#{settings.spinner_starts_after}s" %>; /* delayed start */
|
18
41
|
animation-timing-function: steps(1);
|
19
42
|
-webkit-animation-timing-function: steps(1);
|
20
43
|
}
|
@@ -28,25 +51,30 @@
|
|
28
51
|
<% # Force display original / variant %>
|
29
52
|
<% if params["#{settings.force_param_name}".to_sym].present? %>
|
30
53
|
<% if params["#{settings.force_param_name}".to_sym].to_s == '1' %>
|
31
|
-
<script>chosenVariation =
|
54
|
+
<script>chosenVariation = <%= settings.choosen_variation_variant %>;</script>
|
32
55
|
<% else %>
|
33
|
-
<script>chosenVariation =
|
56
|
+
<script>chosenVariation = <%= settings.choosen_variation_original %>;</script>
|
34
57
|
<% end %>
|
35
58
|
<% end %>
|
36
59
|
|
37
60
|
<script>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
61
|
+
var pageVariations = [
|
62
|
+
function() {
|
63
|
+
$('.google_ab_load_spinner').hide();
|
64
|
+
$('.<%= settings.variant_class %>').hide();
|
65
|
+
$('.<%= settings.original_class %>').removeClass('google_ab_show_later');
|
66
|
+
$('.<%= settings.original_class %>').css('opacity', '1');
|
67
|
+
$('.<%= settings.original_class %>').show();
|
68
|
+
},
|
69
|
+
function() {
|
70
|
+
$('.google_ab_load_spinner').hide();
|
71
|
+
$('.<%= settings.original_class %>').hide();
|
72
|
+
$('.<%= settings.variant_class %>').removeClass('google_ab_hidden');
|
73
|
+
$('.<%= settings.variant_class %>').show();
|
74
|
+
}
|
75
|
+
];
|
76
|
+
$(document).on('ready', function () {
|
77
|
+
pageVariations[chosenVariation].call(); // comment this line if you want see result without javascript
|
78
|
+
});
|
51
79
|
</script>
|
52
80
|
<% end %>
|
@@ -3,9 +3,12 @@
|
|
3
3
|
test_name: :landing_page_test, # your choice
|
4
4
|
experiment_id: 'EXPERIMENT_ID', # copy/paste from google ab experiments
|
5
5
|
experiment_enabled: true, # on/off your experiment. display only original content when false
|
6
|
-
|
6
|
+
spinner_starts_after: 1, # spinner loader start after 1s
|
7
|
+
spinner_max_time: 5 # show original content after 5s seconds if javascript fails
|
7
8
|
})
|
8
9
|
%>
|
10
|
+
|
11
|
+
<%= render "ab_experiments_rails/loading" if settings.experiment_enabled? %>
|
9
12
|
<div class="<%= "#{settings.original_class}" %> google_ab_show_later">
|
10
13
|
<h1>Welcome and buy our services</h1>
|
11
14
|
<button>
|
data/test/landing_page_test.rb
CHANGED
@@ -32,15 +32,6 @@ feature "Landing page" do
|
|
32
32
|
page.must_have_content "Welcome and buy our services for half prices"
|
33
33
|
end
|
34
34
|
|
35
|
-
scenario "display original later" do
|
36
|
-
AbExperimentsRails::Settings.any_instance.stubs(:show_delay).returns(3) # 3 seconds
|
37
|
-
visit '/pages/landing_page?landing_page_test_ab=0'
|
38
|
-
sleep 1
|
39
|
-
assert_equal true, page.has_no_content?("Welcome and buy our services")
|
40
|
-
sleep 5
|
41
|
-
assert_equal true, page.has_content?("Welcome and buy our services")
|
42
|
-
end
|
43
|
-
|
44
35
|
scenario "disable experiment" do
|
45
36
|
visit '/pages/landing_page?landing_page_test_ab=1'
|
46
37
|
page.must_have_content "Welcome and buy our services for half prices"
|
@@ -49,4 +40,15 @@ feature "Landing page" do
|
|
49
40
|
sleep 1
|
50
41
|
assert_equal true, page.has_no_content?("Welcome and buy our services for half prices")
|
51
42
|
end
|
43
|
+
|
44
|
+
scenario "show spinner and original content when javascript fails" do
|
45
|
+
AbExperimentsRails::Settings.any_instance.stubs(:choosen_variation_variant).returns('undefined')
|
46
|
+
visit '/pages/landing_page?landing_page_test_ab=1'
|
47
|
+
sleep 2
|
48
|
+
page.must_have_content "Loading"
|
49
|
+
sleep 6
|
50
|
+
page.must_have_content "Welcome and buy our services"
|
51
|
+
assert_equal true, page.has_no_content?("for half prices")
|
52
|
+
end
|
53
|
+
|
52
54
|
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ab-experiments-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondrej Mudroncik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.2.7.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.2.7.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -67,8 +67,12 @@ files:
|
|
67
67
|
- README.md
|
68
68
|
- Rakefile
|
69
69
|
- ab_experiments_rails.gemspec
|
70
|
+
- app/assets/images/google_ab_spinner.gif
|
70
71
|
- app/views/ab_experiments_rails/_example.html.erb
|
71
72
|
- app/views/ab_experiments_rails/_header_content.html.erb
|
73
|
+
- app/views/ab_experiments_rails/_loading.html.erb
|
74
|
+
- doc/for_dev_distribute_traffic_evenly.png
|
75
|
+
- doc/urls_doesnt_matters.png
|
72
76
|
- lib/ab_experiments_rails.rb
|
73
77
|
- lib/ab_experiments_rails/settings.rb
|
74
78
|
- lib/ab_experiments_rails/version.rb
|
@@ -78,6 +82,7 @@ files:
|
|
78
82
|
- test/dummy/README.rdoc
|
79
83
|
- test/dummy/Rakefile
|
80
84
|
- test/dummy/app/assets/images/.keep
|
85
|
+
- test/dummy/app/assets/images/google_ab_spinner.gif
|
81
86
|
- test/dummy/app/assets/javascripts/application.js
|
82
87
|
- test/dummy/app/assets/stylesheets/application.css
|
83
88
|
- test/dummy/app/controllers/application_controller.rb
|
@@ -87,7 +92,9 @@ files:
|
|
87
92
|
- test/dummy/app/mailers/.keep
|
88
93
|
- test/dummy/app/models/.keep
|
89
94
|
- test/dummy/app/models/concerns/.keep
|
95
|
+
- test/dummy/app/views/ab_experiments_rails/_example.html.erb
|
90
96
|
- test/dummy/app/views/ab_experiments_rails/_header_content.html.erb
|
97
|
+
- test/dummy/app/views/ab_experiments_rails/_loading.html.erb
|
91
98
|
- test/dummy/app/views/layouts/application.html.erb
|
92
99
|
- test/dummy/app/views/pages/landing_page.html.erb
|
93
100
|
- test/dummy/bin/bundle
|
@@ -118,12 +125,63 @@ files:
|
|
118
125
|
- test/dummy/db/test.sqlite3
|
119
126
|
- test/dummy/lib/assets/.keep
|
120
127
|
- test/dummy/log/.keep
|
128
|
+
- test/dummy/log/development.log
|
129
|
+
- test/dummy/log/test.log
|
121
130
|
- test/dummy/public/404.html
|
122
131
|
- test/dummy/public/422.html
|
123
132
|
- test/dummy/public/500.html
|
124
133
|
- test/dummy/public/favicon.ico
|
125
134
|
- test/dummy/public/js_mocks/cx_api_mock.js
|
126
135
|
- test/dummy/public/js_mocks/cx_api_mock_variant.js
|
136
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/-w/-wKgnr8bMvZx_GEAgz6JZGNX_m0V1qqa6siL60ZRwzY.cache
|
137
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/0v/0v9IOgqfb5znmj8mgG3PdrcJIrDFce_j1ZHoVgG86dw.cache
|
138
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/2U/2UJp6VB2Yo8PyXWY182ajmAC7QBGNOTkPl-57mXTbQc.cache
|
139
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/2o/2oWW2x-knYJDP4L27WusTzF2wIrOpSCinJ3mz6xhQPg.cache
|
140
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache
|
141
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/7t/7tXZNlxmo_BQT8JeMsuY79f_gkSYD1nFLbIOAoQIGFg.cache
|
142
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/8-/8-5A-qBQjr7EhaH8AeaBTEWl0kU1AnUgsRqW4qtVZVA.cache
|
143
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/8k/8k6upZmgZzemL0hRAivSj9s7pynWc9fx9l5BDnR8_Mo.cache
|
144
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/9K/9KdUMsvUR4nPQfVQoTDVNuzcI7shbo6GkNdBZy4Tqag.cache
|
145
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/AD/AD_i657YGWq5IQT7MvFSvhhckqz_taVEvIpVN40SNLU.cache
|
146
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Ap/Ap6yoNYWQPz_otHZtBcp3VlRytJyTXniI7l74UuqRn8.cache
|
147
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/D6/D6TVdjBZkL8A6aaG3rqZn9Ng4FXF4lz3uudSbUjJxgE.cache
|
148
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/D7/D7etffoc5OkXQanfHP3fNMgvjTG63wVx7aK8S9jm_j0.cache
|
149
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache
|
150
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/FO/FOsOpo_PmJYreirVdCkavDNuGuIM-TQRuHeq2Z9_Uv0.cache
|
151
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Fa/FaNa5bBQDh8AEKpiYoXqO-MONf2845527x1FwxXqf60.cache
|
152
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Jf/Jf0CZpRLkCFnRhf_N0ICwVvpH4iWY2NM_pnZylvIXog.cache
|
153
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/K_/K_LWPbBCmnmxoXCc20wX6nEamUdyV73EGjZpbUYYH4c.cache
|
154
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/LI/LIIXSKCVQmM13s9RcGPXZsAvKMQvEFKbs1YElooyYFQ.cache
|
155
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Lf/LfM7Jzxn31duxru9mhNfnCPCzPq9Wto--ojG0DGYT2M.cache
|
156
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/N9/N9rRw8hg06lNOCQIbRE0uKCj5-0bcLHdTZJPsGQnhHg.cache
|
157
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/OC/OC7uwvWeai28kDl5o_I1StdcSAkkhQDa9bsVew-FBsU.cache
|
158
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache
|
159
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/PU/PU-VphPPdmRs3mbCAzqQiHQplEkG5vXO52p2rA8uExk.cache
|
160
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Pg/PgU0ZfNgnJ3K-CwXk7u2JZUknvFJMoYq2cN78VYguzg.cache
|
161
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Pv/PvpKimD8XwKCfcT2oyrgihPD1hfigDVBI3Tra7plGcE.cache
|
162
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Qk/Qk3ALQPm1-3jkG-zuE-A4PdjSGUsOvqeUK80ryL-Zg4.cache
|
163
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Rn/RnfH0rvksQWVRqYDF-OaS1lkhn_rmXIhn9VrKJ1ORXA.cache
|
164
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Sd/SdrpYzYpv0qnRY1tk4jI1msYkBzDpnK5zLBC5XHAcxg.cache
|
165
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/a_/a_N86EnNZ6CKk3hUbyMX1oDSxXzWQVVUiM9HOVNUO-E.cache
|
166
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/c6/c6fRpY3WAWyDqEu9U62bUi-INpfdLAkL6eKIFrknBus.cache
|
167
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/fq/fqIxDgDgkdX1wsej_FAq5hyQLWtp9XE-UxI-OkNiIXY.cache
|
168
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/gK/gKIY3nzltnR88XhKEiZ5A9rNFPkOaf4088QLEs2uuhI.cache
|
169
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/jh/jhbQKZNVvKQ3A9jIJXg_NKePWjaBWURCztOEIBuUVIA.cache
|
170
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/mV/mVI8EgL_96ohv4p8-5cp3jfx8MCNInxJW1JliZoolFs.cache
|
171
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nh/nhTtrDe7X3blz41I1YpvSM1RPllvsa8cXE-xYAP-ULQ.cache
|
172
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nk/nkW0_Eh9_fM6zaLURw1Y7Z4GDlhqKX9pJINacM9dufw.cache
|
173
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nr/nrlHoeMDRiA0cCCcH4qhXGwZjscLyvbniJVpZolydec.cache
|
174
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/o2/o2QTxs4H4MtgbNFRpJkzmmvWd-AGOz44uanUMobtvdo.cache
|
175
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/oE/oEVinLjDwxomNhlsE6_lbxolDQI9Ko9918zyjuLsk84.cache
|
176
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/q2/q2JKAQA29mbur-GquKo_ceeDJAlCyZr-hA4scN8hYc8.cache
|
177
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/sC/sCq4ZHlYQgdHsaBheikVqQkjRXo9zt2oalGHKNDGm4M.cache
|
178
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/te/teJYJXJrOGhTswu4KYlg6qHRazeKo7ooC5fRPs1oQjE.cache
|
179
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/tk/tklPdC2vRwkR1g4wc5HzfRY5Ao6DbHvmPczfrjJrZWk.cache
|
180
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/u7/u71Rv7wEoX2UxRSGBuc2O2yeR2e6pajRMmA_gECm8SU.cache
|
181
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/us/usg_JWBeAQviHzKcs5RYQApw4rJDMvPTCtkClO9riMY.cache
|
182
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/vg/vgmNyjWAF3pQ8jWRfJO7-_udzSDMgmXxbOYV93sE9PM.cache
|
183
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/xN/xNmJNrz_aYsA77sY2R5a5nkRTRYbJodu4YKgw0HyyfE.cache
|
184
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/zb/zbl6UDG6rc8SUaNhL0SWzZFV09R0X-fxFXDvpaWFwpc.cache
|
127
185
|
- test/landing_page_test.rb
|
128
186
|
- test/test_helper.rb
|
129
187
|
homepage: https://github.com/hlidacky/ab-experiments-rails
|
@@ -152,12 +210,15 @@ specification_version: 4
|
|
152
210
|
summary: Google ab experiments wrap
|
153
211
|
test_files:
|
154
212
|
- test/ab_experiments_rails_test.rb
|
213
|
+
- test/dummy/app/assets/images/google_ab_spinner.gif
|
155
214
|
- test/dummy/app/assets/javascripts/application.js
|
156
215
|
- test/dummy/app/assets/stylesheets/application.css
|
157
216
|
- test/dummy/app/controllers/application_controller.rb
|
158
217
|
- test/dummy/app/controllers/pages_controller.rb
|
159
218
|
- test/dummy/app/helpers/application_helper.rb
|
219
|
+
- test/dummy/app/views/ab_experiments_rails/_example.html.erb
|
160
220
|
- test/dummy/app/views/ab_experiments_rails/_header_content.html.erb
|
221
|
+
- test/dummy/app/views/ab_experiments_rails/_loading.html.erb
|
161
222
|
- test/dummy/app/views/layouts/application.html.erb
|
162
223
|
- test/dummy/app/views/pages/landing_page.html.erb
|
163
224
|
- test/dummy/bin/bundle
|
@@ -186,6 +247,8 @@ test_files:
|
|
186
247
|
- test/dummy/db/development.sqlite3
|
187
248
|
- test/dummy/db/schema.rb
|
188
249
|
- test/dummy/db/test.sqlite3
|
250
|
+
- test/dummy/log/development.log
|
251
|
+
- test/dummy/log/test.log
|
189
252
|
- test/dummy/public/404.html
|
190
253
|
- test/dummy/public/422.html
|
191
254
|
- test/dummy/public/500.html
|
@@ -194,5 +257,54 @@ test_files:
|
|
194
257
|
- test/dummy/public/js_mocks/cx_api_mock_variant.js
|
195
258
|
- test/dummy/Rakefile
|
196
259
|
- test/dummy/README.rdoc
|
260
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/-w/-wKgnr8bMvZx_GEAgz6JZGNX_m0V1qqa6siL60ZRwzY.cache
|
261
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/0v/0v9IOgqfb5znmj8mgG3PdrcJIrDFce_j1ZHoVgG86dw.cache
|
262
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/2o/2oWW2x-knYJDP4L27WusTzF2wIrOpSCinJ3mz6xhQPg.cache
|
263
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/2U/2UJp6VB2Yo8PyXWY182ajmAC7QBGNOTkPl-57mXTbQc.cache
|
264
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache
|
265
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/7t/7tXZNlxmo_BQT8JeMsuY79f_gkSYD1nFLbIOAoQIGFg.cache
|
266
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/8-/8-5A-qBQjr7EhaH8AeaBTEWl0kU1AnUgsRqW4qtVZVA.cache
|
267
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/8k/8k6upZmgZzemL0hRAivSj9s7pynWc9fx9l5BDnR8_Mo.cache
|
268
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/9K/9KdUMsvUR4nPQfVQoTDVNuzcI7shbo6GkNdBZy4Tqag.cache
|
269
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/a_/a_N86EnNZ6CKk3hUbyMX1oDSxXzWQVVUiM9HOVNUO-E.cache
|
270
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/AD/AD_i657YGWq5IQT7MvFSvhhckqz_taVEvIpVN40SNLU.cache
|
271
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Ap/Ap6yoNYWQPz_otHZtBcp3VlRytJyTXniI7l74UuqRn8.cache
|
272
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/c6/c6fRpY3WAWyDqEu9U62bUi-INpfdLAkL6eKIFrknBus.cache
|
273
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/D6/D6TVdjBZkL8A6aaG3rqZn9Ng4FXF4lz3uudSbUjJxgE.cache
|
274
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/D7/D7etffoc5OkXQanfHP3fNMgvjTG63wVx7aK8S9jm_j0.cache
|
275
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache
|
276
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Fa/FaNa5bBQDh8AEKpiYoXqO-MONf2845527x1FwxXqf60.cache
|
277
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/FO/FOsOpo_PmJYreirVdCkavDNuGuIM-TQRuHeq2Z9_Uv0.cache
|
278
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/fq/fqIxDgDgkdX1wsej_FAq5hyQLWtp9XE-UxI-OkNiIXY.cache
|
279
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/gK/gKIY3nzltnR88XhKEiZ5A9rNFPkOaf4088QLEs2uuhI.cache
|
280
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Jf/Jf0CZpRLkCFnRhf_N0ICwVvpH4iWY2NM_pnZylvIXog.cache
|
281
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/jh/jhbQKZNVvKQ3A9jIJXg_NKePWjaBWURCztOEIBuUVIA.cache
|
282
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/K_/K_LWPbBCmnmxoXCc20wX6nEamUdyV73EGjZpbUYYH4c.cache
|
283
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Lf/LfM7Jzxn31duxru9mhNfnCPCzPq9Wto--ojG0DGYT2M.cache
|
284
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/LI/LIIXSKCVQmM13s9RcGPXZsAvKMQvEFKbs1YElooyYFQ.cache
|
285
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/mV/mVI8EgL_96ohv4p8-5cp3jfx8MCNInxJW1JliZoolFs.cache
|
286
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/N9/N9rRw8hg06lNOCQIbRE0uKCj5-0bcLHdTZJPsGQnhHg.cache
|
287
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nh/nhTtrDe7X3blz41I1YpvSM1RPllvsa8cXE-xYAP-ULQ.cache
|
288
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nk/nkW0_Eh9_fM6zaLURw1Y7Z4GDlhqKX9pJINacM9dufw.cache
|
289
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/nr/nrlHoeMDRiA0cCCcH4qhXGwZjscLyvbniJVpZolydec.cache
|
290
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/o2/o2QTxs4H4MtgbNFRpJkzmmvWd-AGOz44uanUMobtvdo.cache
|
291
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/OC/OC7uwvWeai28kDl5o_I1StdcSAkkhQDa9bsVew-FBsU.cache
|
292
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/oE/oEVinLjDwxomNhlsE6_lbxolDQI9Ko9918zyjuLsk84.cache
|
293
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache
|
294
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Pg/PgU0ZfNgnJ3K-CwXk7u2JZUknvFJMoYq2cN78VYguzg.cache
|
295
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/PU/PU-VphPPdmRs3mbCAzqQiHQplEkG5vXO52p2rA8uExk.cache
|
296
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Pv/PvpKimD8XwKCfcT2oyrgihPD1hfigDVBI3Tra7plGcE.cache
|
297
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/q2/q2JKAQA29mbur-GquKo_ceeDJAlCyZr-hA4scN8hYc8.cache
|
298
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Qk/Qk3ALQPm1-3jkG-zuE-A4PdjSGUsOvqeUK80ryL-Zg4.cache
|
299
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Rn/RnfH0rvksQWVRqYDF-OaS1lkhn_rmXIhn9VrKJ1ORXA.cache
|
300
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/sC/sCq4ZHlYQgdHsaBheikVqQkjRXo9zt2oalGHKNDGm4M.cache
|
301
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/Sd/SdrpYzYpv0qnRY1tk4jI1msYkBzDpnK5zLBC5XHAcxg.cache
|
302
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/te/teJYJXJrOGhTswu4KYlg6qHRazeKo7ooC5fRPs1oQjE.cache
|
303
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/tk/tklPdC2vRwkR1g4wc5HzfRY5Ao6DbHvmPczfrjJrZWk.cache
|
304
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/u7/u71Rv7wEoX2UxRSGBuc2O2yeR2e6pajRMmA_gECm8SU.cache
|
305
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/us/usg_JWBeAQviHzKcs5RYQApw4rJDMvPTCtkClO9riMY.cache
|
306
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/vg/vgmNyjWAF3pQ8jWRfJO7-_udzSDMgmXxbOYV93sE9PM.cache
|
307
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/xN/xNmJNrz_aYsA77sY2R5a5nkRTRYbJodu4YKgw0HyyfE.cache
|
308
|
+
- test/dummy/tmp/cache/assets/sprockets/v3.0/zb/zbl6UDG6rc8SUaNhL0SWzZFV09R0X-fxFXDvpaWFwpc.cache
|
197
309
|
- test/landing_page_test.rb
|
198
310
|
- test/test_helper.rb
|