google_analytics_ab_test_on_rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ae6f2d7d1f36f7503c71c2cbd37f9257858e64c8
4
+ data.tar.gz: 1302cb7cd1dd389ade81b25649a4d6054b2733dd
5
+ SHA512:
6
+ metadata.gz: 0f634fbb7956ecebdf176889af6b235813120cfe55cebce67300f9c1c361a188befa1cf3bc400b753367845cb042270f36638519764ff6da37a6c040a55e180d
7
+ data.tar.gz: 5f243c7cb88a20d651799203f8a2e62bb81dc719b331a5e8dff9593dca26d63bab1860c1686b21cb0c96475f1a040a94388e75feec982183cb1df70453a10caf
@@ -0,0 +1,20 @@
1
+ Copyright 2018 ykogure
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,28 @@
1
+ # GoogleAnalyticsAbTestOnRails
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'google_analytics_ab_test_on_rails'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install google_analytics_ab_test_on_rails
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'GoogleAnalyticsAbTestOnRails'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,35 @@
1
+ <% if ab_tests.present? %>
2
+ <div id="ab_test_manager" class="position_top">
3
+ <div id="ab_test_manager_main_window">
4
+ <div>
5
+ <% ab_tests.each do |ab_test_name, ab_test_values| %>
6
+ <div class="ab_test_manager_ab_tests">
7
+ <%= ab_test_name %>:
8
+ <% values = ab_test_values.is_a?(Hash) ? ab_test_values.keys : ab_test_values %>
9
+ <% values.each do |ab_test_value| %>
10
+ <% value_name = ab_test_values.is_a?(Hash) ? "#{ab_test_value}(#{ab_test_values[ab_test_value]})" : ab_test_value %>
11
+ <% if get_ab_test_value(ab_test_name) != ab_test_value %>
12
+ <% path = url_for(params.merge(ga_ab_test_force_change: {ab_test_name => ab_test_value}).permit!.to_h) %>
13
+ <span>
14
+ <%= link_to "#{value_name}", path %>
15
+ </span>
16
+ <% else %>
17
+ <span>
18
+ ✓<%= value_name %>
19
+ </span>
20
+ <% end %>
21
+ <% end %>
22
+ </div>
23
+ <% end %>
24
+ </div>
25
+ </div>
26
+ <div id="ab_test_manager_btn_window">
27
+ <div id="js_ab_test_manager_close_btn">
28
+ <div>ab test manager ▲</div>
29
+ </div>
30
+ <div id="js_ab_test_manager_open_btn" style="display: none;">
31
+ <div>ab test manager ▼</div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,22 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../templates", __FILE__)
5
+
6
+ desc "Creates a GoogleAnalytics A/B Test on Rails initializer to your application."
7
+
8
+ def copy_initializer
9
+ template "google_analytics_ab_test_on_rails.rb", "config/initializers/google_analytics_ab_test_on_rails.rb"
10
+ end
11
+
12
+ # def insert_javascript_tag
13
+ # inject_into_file "app/views/layouts/application.html.erb", after: /<head[\s]?[^>]*>/ do
14
+ # "\n <%= render_gtm_on_rails_tag_in_head %>\n"
15
+ # end
16
+ # inject_into_file "app/views/layouts/application.html.erb", after: /<body[\s]?[^>]*>/ do
17
+ # "\n <%= render_gtm_on_rails_tag_in_body %>\n"
18
+ # end
19
+ # end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ module Generators
3
+ class ViewsGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../templates/views", __FILE__)
5
+
6
+ argument :type, required: false, default: nil
7
+
8
+ public_task :copy_views
9
+
10
+ desc "Creates a GoogleAnalytics A/B Test on Rails initializer to your application."
11
+
12
+ def copy_views
13
+ case type
14
+ when 'bootstrap3'
15
+
16
+ when 'position_under'
17
+ copy_file "ab_test_manager/position_under.html.erb", "app/views/google_analytics_ab_test_on_rails/_ab_test_manager.html.erb"
18
+ when 'position_top'
19
+ copy_file "ab_test_manager/position_top.html.erb", "app/views/google_analytics_ab_test_on_rails/_ab_test_manager.html.erb"
20
+ when nil
21
+ copy_file "ab_test_manager/position_top.html.erb", "app/views/google_analytics_ab_test_on_rails/_ab_test_manager.html.erb"
22
+ else
23
+ raise NameError.new("'#{type}' is undefined template type.")
24
+ end
25
+ end
26
+
27
+ # def insert_javascript_tag
28
+ # inject_into_file "app/views/layouts/application.html.erb", after: /<head[\s]?[^>]*>/ do
29
+ # "\n <%= render_gtm_on_rails_tag_in_head %>\n"
30
+ # end
31
+ # inject_into_file "app/views/layouts/application.html.erb", after: /<body[\s]?[^>]*>/ do
32
+ # "\n <%= render_gtm_on_rails_tag_in_body %>\n"
33
+ # end
34
+ # end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,10 @@
1
+ GoogleAnalyticsAbTestOnRails.configure do |config|
2
+ # Settings that use Google Tag Manager or analytics.js when send events Google Analytics.
3
+ config.sender = :gtm # :gtm or :analytics_js
4
+
5
+ # Google Analytics Tracking Event Settings
6
+ # Event Category is "#{controller_path}##{action_name}" if set nil.
7
+ config.tracking_event_category = nil
8
+ config.tracking_event_action = 'ab_test'
9
+ config.tracking_event_label = 'ABテスト_{ab_test_name}-{ab_test_value}'
10
+ end
@@ -0,0 +1,35 @@
1
+ <% if ab_tests.present? %>
2
+ <div id="ab_test_manager" class="position_top">
3
+ <div id="ab_test_manager_main_window">
4
+ <div>
5
+ <% ab_tests.each do |ab_test_name, ab_test_values| %>
6
+ <div class="ab_test_manager_ab_tests">
7
+ <%= ab_test_name %>:
8
+ <% values = ab_test_values.is_a?(Hash) ? ab_test_values.keys : ab_test_values %>
9
+ <% values.each do |ab_test_value| %>
10
+ <% value_name = ab_test_values.is_a?(Hash) ? "#{ab_test_value}(#{ab_test_values[ab_test_value]})" : ab_test_value %>
11
+ <% if get_ab_test_value(ab_test_name) != ab_test_value %>
12
+ <% path = url_for(params.merge(ga_ab_test_force_change: {ab_test_name => ab_test_value}).permit!.to_h) %>
13
+ <span>
14
+ <%= link_to "#{value_name}", path %>
15
+ </span>
16
+ <% else %>
17
+ <span>
18
+ ✓<%= value_name %>
19
+ </span>
20
+ <% end %>
21
+ <% end %>
22
+ </div>
23
+ <% end %>
24
+ </div>
25
+ </div>
26
+ <div id="ab_test_manager_btn_window">
27
+ <div id="js_ab_test_manager_close_btn">
28
+ <div>ab test manager ▲</div>
29
+ </div>
30
+ <div id="js_ab_test_manager_open_btn" style="display: none;">
31
+ <div>ab test manager ▼</div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,35 @@
1
+ <% if ab_tests.present? %>
2
+ <div id="ab_test_manager" class="position_under">
3
+ <div id="ab_test_manager_btn_window">
4
+ <div id="js_ab_test_manager_close_btn">
5
+ <div>ab test manager ▼</div>
6
+ </div>
7
+ <div id="js_ab_test_manager_open_btn" style="display: none;">
8
+ <div>ab test manager ▲</div>
9
+ </div>
10
+ </div>
11
+ <div id="ab_test_manager_main_window">
12
+ <div>
13
+ <% ab_tests.each do |ab_test_name, ab_test_values| %>
14
+ <div class="ab_test_manager_ab_tests">
15
+ <%= ab_test_name %>:
16
+ <% values = ab_test_values.is_a?(Hash) ? ab_test_values.keys : ab_test_values %>
17
+ <% values.each do |ab_test_value| %>
18
+ <% value_name = ab_test_values.is_a?(Hash) ? "#{ab_test_value}(#{ab_test_values[ab_test_value]})" : ab_test_value %>
19
+ <% if get_ab_test_value(ab_test_name) != ab_test_value %>
20
+ <% path = url_for(params.merge(ga_ab_test_force_change: {ab_test_name => ab_test_value}).permit!.to_h) %>
21
+ <span>
22
+ <%= link_to "#{value_name}", path %>
23
+ </span>
24
+ <% else %>
25
+ <span>
26
+ ✓<%= value_name %>
27
+ </span>
28
+ <% end %>
29
+ <% end %>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,4 @@
1
+ require "google_analytics_ab_test_on_rails/engine"
2
+
3
+ module GoogleAnalyticsAbTestOnRails
4
+ end
@@ -0,0 +1,9 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ class Config
3
+ # Variables detail is writen in lib/generators/templates/gtm_on_rails.rb.
4
+ attr_accessor :sender
5
+ attr_accessor :tracking_event_category
6
+ attr_accessor :tracking_event_action
7
+ attr_accessor :tracking_event_label
8
+ end
9
+ end
@@ -0,0 +1,124 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ module Controllers
3
+ module AbTestMethods
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ helper_method :ab_test_start
8
+ helper_method :ab_tests
9
+ helper_method :get_ab_test_value
10
+ end
11
+
12
+ def ab_test_start(ab_test_name, ab_test_values = ['true', 'false'], **args, &block)
13
+ ab_test_session_key = :"ga_ab_test_#{ab_test_name}"
14
+
15
+ # ABテスト一覧をABテストマネージャに表示する用
16
+ # 既に同じビューやコントローラ内で実行されている場合は再度処理は行わない
17
+ @ab_tests ||= {}
18
+ @ab_tests[ab_test_name] = ab_test_values if @ab_tests[ab_test_name].blank?
19
+
20
+ value = get_ga_ab_test_value(ab_test_name, ab_test_values, params)
21
+ if value
22
+ session[ab_test_session_key] = value
23
+
24
+ # GoogleAnalyticsではセッションが30分で切れてしまうため、30分毎にABテストイベントを再送信するためのcookie情報
25
+ cookies[:"#{ab_test_session_key}_for_ga_session"] = {value: true, expires: 30.minutes.from_now}
26
+
27
+ event_category = get_event_category(args)
28
+ event_action = get_event_action(args)
29
+ event_label = get_event_label(ab_test_name, value, args)
30
+ case GoogleAnalyticsAbTestOnRails.config.sender
31
+ when :gtm
32
+ @gtm_on_rails_data_layer.push({
33
+ event: 'ga_event',
34
+ event_category: event_category,
35
+ event_action: event_action,
36
+ event_label: event_label
37
+ })
38
+ when :analytics_js
39
+ @analytics_js_codes ||= []
40
+ @analytics_js_codes << "ga('send', 'event', {eventCategory: '#{event_category}', eventAction: '#{event_action}', eventLabel: '#{event_label}'});"
41
+ end
42
+ end
43
+
44
+ # GoogleAnalyticsではセッションが30分で切れてしまうため、30分毎にABテストイベントを再送信する
45
+ if cookies[:"#{ab_test_session_key}_for_ga_session"].blank?
46
+ cookies[:"#{ab_test_session_key}_for_ga_session"] = {value: true, expires: 30.minutes.from_now}
47
+
48
+ event_category = get_event_category(args)
49
+ event_action = get_event_action(args)
50
+ event_label = get_event_label(ab_test_name, value, args)
51
+ case GoogleAnalyticsAbTestOnRails.config.sender
52
+ when :gtm
53
+ @gtm_on_rails_data_layer.push({
54
+ event: 'ga_event',
55
+ event_category: event_category,
56
+ event_action: event_action,
57
+ event_label: event_label
58
+ })
59
+ when :analytics_js
60
+ @analytics_js_codes ||= []
61
+ @analytics_js_codes << "ga('send', 'event', {eventCategory: '#{event_category}', eventAction: '#{event_action}', eventLabel: '#{event_label}'});"
62
+ end
63
+ end
64
+
65
+ if block_given?
66
+ yield(session[ab_test_session_key])
67
+ else
68
+ return session[ab_test_session_key]
69
+ end
70
+ end
71
+
72
+ def ab_tests
73
+ @ab_tests ||= []
74
+ end
75
+
76
+ def get_ab_test_value(ab_test_name)
77
+ session["ga_ab_test_#{ab_test_name}"]
78
+ end
79
+
80
+ private
81
+ def get_ga_ab_test_value(ab_test_name, ab_test_values, params)
82
+ ab_test_session_key = :"ga_ab_test_#{ab_test_name}"
83
+ if (params.dig(:ga_ab_test_force_change, ab_test_name).present? && session[ab_test_session_key] != params.dig(:ga_ab_test_force_change, ab_test_name))
84
+ value = params.dig(:ga_ab_test_force_change, ab_test_name)
85
+ elsif session[ab_test_session_key].blank?
86
+ # 確率設定
87
+ if ab_test_values.is_a?(Hash)
88
+ values = ab_test_values.map{|value, count| count.times.map{value}}.flatten
89
+ else
90
+ values = ab_test_values
91
+ end
92
+ value = values.sample
93
+ end
94
+ value
95
+ end
96
+
97
+ def get_event_category(args)
98
+ if args[:event_category].present?
99
+ args[:event_category]
100
+ else
101
+ GoogleAnalyticsAbTestOnRails.config.tracking_event_category || "#{controller_path}##{action_name}"
102
+ end
103
+ end
104
+
105
+ def get_event_action(args)
106
+ if args[:event_action].present?
107
+ args[:event_action]
108
+ else
109
+ GoogleAnalyticsAbTestOnRails.config.tracking_event_action || 'ab_test'
110
+ end
111
+ end
112
+
113
+ def get_event_label(ab_test_name, ab_test_value, args)
114
+ if args[:event_label].present?
115
+ label = args[:event_label]
116
+ else
117
+ label = GoogleAnalyticsAbTestOnRails.config.tracking_event_label || 'ab_test'
118
+ end
119
+
120
+ label.gsub(/\{ab_test_name\}/, ab_test_name.to_s).gsub(/\{ab_test_value\}/, ab_test_value.to_s)
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,29 @@
1
+ require 'google_analytics_ab_test_on_rails/config'
2
+ require 'google_analytics_ab_test_on_rails/controllers/ab_test_methods'
3
+ require 'google_analytics_ab_test_on_rails/helpers/ab_test_manager_helper'
4
+
5
+ module GoogleAnalyticsAbTestOnRails
6
+ def self.config
7
+ @config ||= GoogleAnalyticsAbTestOnRails::Config.new
8
+ end
9
+
10
+ def self.configure(&block)
11
+ yield(config) if block_given?
12
+ end
13
+
14
+ class Engine < ::Rails::Engine
15
+ isolate_namespace GoogleAnalyticsAbTestOnRails
16
+
17
+ initializer 'gtm_on_rails.action_controller_extension' do
18
+ ActiveSupport.on_load :action_controller do
19
+ include GoogleAnalyticsAbTestOnRails::Controllers::AbTestMethods
20
+ end
21
+ end
22
+
23
+ initializer 'gtm_on_rails.action_view_helpers' do
24
+ ActiveSupport.on_load :action_view do
25
+ include GoogleAnalyticsAbTestOnRails::Helpers::AbTestManagerHelper
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,15 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ module Helpers
3
+ module AbTestManagerHelper
4
+ def render_ab_test_manager
5
+ tags = []
6
+ tags << render(partial: 'google_analytics_ab_test_on_rails/ab_test_manager')
7
+ tags.join.html_safe
8
+ end
9
+
10
+ def render_ab_test_analytics_js
11
+ "<script type=\"text/javascript\">#{(@analytics_js_codes || []).join}</script>".html_safe
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module GoogleAnalyticsAbTestOnRails
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :google_analytics_ab_test_on_rails do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google_analytics_ab_test_on_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - ykogure
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: gtm_on_rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
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: mysql2
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gtm_on_rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: This gem enables you to do A/B testing easy with Rails application.
70
+ email:
71
+ - renkin1008@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.md
78
+ - Rakefile
79
+ - app/views/google_analytics_ab_test_on_rails/_ab_test_manager.html.erb
80
+ - lib/generators/google_analytics_ab_test_on_rails/install_generator.rb
81
+ - lib/generators/google_analytics_ab_test_on_rails/views_generator.rb
82
+ - lib/generators/templates/google_analytics_ab_test_on_rails.rb
83
+ - lib/generators/templates/views/ab_test_manager/position_top.html.erb
84
+ - lib/generators/templates/views/ab_test_manager/position_under.html.erb
85
+ - lib/google_analytics_ab_test_on_rails.rb
86
+ - lib/google_analytics_ab_test_on_rails/config.rb
87
+ - lib/google_analytics_ab_test_on_rails/controllers/ab_test_methods.rb
88
+ - lib/google_analytics_ab_test_on_rails/engine.rb
89
+ - lib/google_analytics_ab_test_on_rails/helpers/ab_test_manager_helper.rb
90
+ - lib/google_analytics_ab_test_on_rails/version.rb
91
+ - lib/tasks/google_analytics_ab_test_on_rails_tasks.rake
92
+ homepage: https://github.com/ykogure/google_analytics_ab_test_on_rails
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.6.11
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: This gem enables you to do A/B testing easy with Rails application.
116
+ test_files: []