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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a9303ff4bc7bbf2d73a363f994ebcde22383b24
4
- data.tar.gz: 3818ee63aa67da86498e9dee1950d876eb3bece2
3
+ metadata.gz: 03331feb6715bdaad0b083ab3e2b10a6df99a4e1
4
+ data.tar.gz: c250865b4a653dcf7d5ac25f4323637c607dc5e7
5
5
  SHA512:
6
- metadata.gz: 77a6e56c4ff313128ded7da070b4ab0979c0fce447222d62e9a5538f8cb7a7547048d68aa6bd662ac22c0b04c3932aca69cf1f147ab4bb4a314419f14b89a0d8
7
- data.tar.gz: b8e5d72393715bd88adcbcfdb9147976890b8b95b950a8dbd23383f8d3616eaf234db95895135188e42edbcd996c7a102d0edf28f10036a5588622d2111436b5
6
+ metadata.gz: 1c5f8069b35dcb30985d0a67a5021c7f2b68656c0596e47a41a95885851609335157187ba5f5f7eeb13bdd79fa1ff7d05fcc8948a8c3946e25d93563060cb80c
7
+ data.tar.gz: 818829a76a36cae763b46349c367b2003bcc8769728971a80b8cfcf8a049a593899c6ce72ae273a640e4ad6bd6ab7c80160a759e67307a7ba664ada7e2d0d8e4
@@ -2,7 +2,7 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  ab-experiments-rails (0.0.2)
5
- rails (~> 4.2.7.1)
5
+ rails (>= 4.2.7.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
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
- show_delay: 0.3 # flickering prevention if google choose variant. you can increase or decrease this number (seconds)
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", "~> 4.2.7.1"
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"
@@ -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
- show_delay: 0.3 # flickering prevention if google choose variant. you can increase or decrease this number (seconds)
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
- @keyframes google_ab_show_later_animation {
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: google_ab_show_later_animation;
17
- animation-duration: <%= "#{settings.show_delay}s" %>;
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 = 1</script>
54
+ <script>chosenVariation = <%= settings.choosen_variation_variant %>;</script>
32
55
  <% else %>
33
- <script>chosenVariation = 0</script>
56
+ <script>chosenVariation = <%= settings.choosen_variation_original %>;</script>
34
57
  <% end %>
35
58
  <% end %>
36
59
 
37
60
  <script>
38
- var pageVariations = [
39
- function() {
40
- // Original is always visible
41
- },
42
- function() {
43
- $('.<%= settings.original_class %>').hide();
44
- $('.<%= settings.variant_class %>').removeClass('google_ab_hidden');
45
- $('.<%= settings.variant_class %>').show();
46
- }
47
- ];
48
- $(document).on('ready', function () {
49
- pageVariations[chosenVariation].call();
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 %>
@@ -0,0 +1,7 @@
1
+ <div class="google_ab_load_spinner">
2
+ <div class="google_ab_spinner_delayed">
3
+ <%= image_tag "google_ab_spinner.gif" %>
4
+ <br />
5
+ Loading...
6
+ </div>
7
+ </div>
@@ -1,15 +1,17 @@
1
1
  module AbExperimentsRails
2
2
  class Settings
3
- attr_accessor :show_delay
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
@@ -1,3 +1,3 @@
1
1
  module AbExperimentsRails
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  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
@@ -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
- @keyframes google_ab_show_later_animation {
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: google_ab_show_later_animation;
17
- animation-duration: <%= "#{settings.show_delay}s" %>;
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 = 1</script>
54
+ <script>chosenVariation = <%= settings.choosen_variation_variant %>;</script>
32
55
  <% else %>
33
- <script>chosenVariation = 0</script>
56
+ <script>chosenVariation = <%= settings.choosen_variation_original %>;</script>
34
57
  <% end %>
35
58
  <% end %>
36
59
 
37
60
  <script>
38
- var pageVariations = [
39
- function() {
40
- // Original is always visible
41
- },
42
- function() {
43
- $('.<%= settings.original_class %>').hide();
44
- $('.<%= settings.variant_class %>').removeClass('google_ab_hidden');
45
- $('.<%= settings.variant_class %>').show();
46
- }
47
- ];
48
- $(document).on('ready', function () {
49
- pageVariations[chosenVariation].call();
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 %>
@@ -0,0 +1,7 @@
1
+ <div class="google_ab_load_spinner">
2
+ <div class="google_ab_spinner_delayed">
3
+ <%= image_tag "google_ab_spinner.gif" %>
4
+ <br />
5
+ Loading...
6
+ </div>
7
+ </div>
@@ -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
- show_delay: 0.3 # flickering prevention if google choose variant. you can increase or decrease this number (seconds)
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>
@@ -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.2
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-01 00:00:00.000000000 Z
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