govuk_ab_testing 2.2.0 → 2.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 932ff8b3b3372bd294d76a70863720b2d83c24f7
4
- data.tar.gz: bcb3ed31428a44de078d465292e15370870f0c5f
2
+ SHA256:
3
+ metadata.gz: cf9c70a0d36f4d97dec173bfc21738a3266700997a1af70cf3e5fac2b654c313
4
+ data.tar.gz: 7d63ce7fe82da0f11076b29498a6188691ee765bad005805bfecdea1fc022894
5
5
  SHA512:
6
- metadata.gz: 8b0fd195675173cc90c1ec42021749f47f0c1f7096e8c8c821939db377f634b4d6768beb6c0a0748ac8428907b045ce3cb2d6b9b47e7077e0956cf3aae84dce2
7
- data.tar.gz: b4816a5cc4017ce3a5411b2433f15adee7ee952b045587f9d3b06677174d03be9e28c445d8cf2ec2af6413b3affd34994c552a5c253267e9022c24778c7bdf3b
6
+ metadata.gz: 59ca9f4101ddea9d142c492052ceedc08af2a29e35601a25afd6e057e976ab4e7745ca9dac4b27156210122314df78da84ee4d42c84fd09fef32ec56a9017ae7
7
+ data.tar.gz: 9543b01d05c4e12ed4b8c0c029b3c5ff2e313b283541b47cdef0d2135c5273938d5cdcb5304981320e58a99a2399d92749729f2fc76680bbecfca60c6e938fab
@@ -1,2 +1,7 @@
1
- AllCops:
2
- TargetRubyVersion: 2.3
1
+ inherit_gem:
2
+ rubocop-govuk:
3
+ - config/default.yml
4
+
5
+ inherit_mode:
6
+ merge:
7
+ - Exclude
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.6.6
@@ -1,3 +1,45 @@
1
+ ## 2.4.2
2
+
3
+ * Updated gem dependencies and development ruby version to 2.6.6
4
+ * Fixed new rubocop violations
5
+
6
+ ## 2.4.1
7
+
8
+ * Add extra validation to ActiveSupport assertions to help debug test failures.
9
+ In order to make assertions about the `meta` tags, the view must be rendered
10
+ in the test. RSpec Rails tests do not do this by default, so you need to call
11
+ `render_views` explicitly. Without this check, tests fail with a cryptic error
12
+ message "undefined method 'document' for nil:NilClass".
13
+
14
+ ## 2.4.0
15
+
16
+ * Add two new optional parameters to `GovukAbTesting::AbTest`:
17
+ `allowed_variants` and `control_variant`. These allow us to override the
18
+ traditional naming of the A/B tests and also setup a multivariate test if
19
+ needed.
20
+ * Add new method to `RequestedVariant` to query if a user is in a given variant.
21
+ The method is `variant?(name)`, where `name` is the name of the variant.
22
+ This new method allows for generic variant names, which are useful when
23
+ reusing A/B testing cookies/headers. If the cookie name and header name are
24
+ generic, the variant value should provide details on what test is running.
25
+ * Add deprecation warnings to `variant_a?` and `variant_b?`, as they will be
26
+ replaced by the method `variant?(name)`.
27
+
28
+ ## 2.3.1
29
+
30
+ * Fix bug in order to allow us to set multiple headers (i.e. A/B tests) in a
31
+ test using Capybara. This is important when running multiple A/B tests at
32
+ once.
33
+
34
+ ## 2.3.0
35
+
36
+ * Fix for Rails 5.0.2 - the Active Support acceptance tests used to memoize
37
+ the `@request` and `@response` objects. This worked fine in Rails 4, but
38
+ it looks like Rails 5 now points to a different object at some point during
39
+ the request/response lifecycle, breaking the memoization. The fix removes
40
+ this memoization and directly queries the scope for each `@request` or
41
+ `@response`.
42
+
1
43
  ## 2.2.0
2
44
 
3
45
  * Remove string interpolated parameter in error message of
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in govuk_ab_testing.gemspec
4
4
  gemspec
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env groovy
2
2
 
3
+ library("govuk")
4
+
3
5
  node {
4
- def govuk = load '/var/lib/jenkins/groovy_scripts/govuk_jenkinslib.groovy'
5
6
  govuk.buildProject()
6
7
  }
data/README.md CHANGED
@@ -18,12 +18,9 @@ And then execute:
18
18
 
19
19
  ### Usage
20
20
 
21
- Before starting this, you'll need to
21
+ Before starting this, you'll need to:
22
22
 
23
- - get your cookie listed on [/help/cookies](https://www.gov.uk/help/cookies)
24
- - configure the CDN [like we did for the Education Navigation test](https://github.com/alphagov/govuk-cdn-config/pull/17).
25
- The cookie and header name in the CDN config must match the test name parameter
26
- that you pass to the Gem. The cookie name is case-sensitive.
23
+ - [read the documentation](https://docs.publishing.service.gov.uk/manual/ab-testing.html) on how to set up an a/b test. The cookie and header name in [fastly-configure](https://github.com/alphagov/fastly-configure) and [CDN config](https://github.digital.cabinet-office.gov.uk/gds/cdn-configs) must match the test name parameter that you pass to the Gem. The cookie name is case-sensitive.
27
24
  - configure Google Analytics (guidelines to follow)
28
25
 
29
26
  To enable testing in the app, your Rails app needs:
@@ -53,12 +50,20 @@ Now, let's say you have this controller:
53
50
  # app/controllers/party_controller.rb
54
51
  class PartyController < ApplicationController
55
52
  def show
56
- ab_test = GovukAbTesting::AbTest.new("your_ab_test_name", dimension: 300)
53
+ ab_test = GovukAbTesting::AbTest.new(
54
+ "your_ab_test_name",
55
+ dimension: 300,
56
+ allowed_variants: ['NoChange', 'LongTitle', 'ShortTitle'],
57
+ control_variant: 'NoChange'
58
+ )
57
59
  @requested_variant = ab_test.requested_variant(request.headers)
58
60
  @requested_variant.configure_response(response)
59
61
 
60
- if @requested_variant.variant_b?
61
- render "new_show_template_to_be_tested"
62
+ case true
63
+ when @requested_variant.variant?('LongTitle')
64
+ render "show_template_with_long_title"
65
+ when @requested_variant.variant?('ShortTitle')
66
+ render "show_template_with_short_title"
62
67
  else
63
68
  render "show"
64
69
  end
@@ -66,7 +71,11 @@ class PartyController < ApplicationController
66
71
  end
67
72
  ```
68
73
 
69
- Add this to your layouts, so that we have a meta tag that can be picked up
74
+ In this example, we are running a multivariate test with 3 options being
75
+ tested: the existing version (control), and two title changes. The minimum
76
+ number of variants in any test should be two.
77
+
78
+ Then, add this to your layouts, so that we have a meta tag that can be picked up
70
79
  by the extension and analytics.
71
80
 
72
81
  ```html
@@ -76,6 +85,9 @@ by the extension and analytics.
76
85
  </head>
77
86
  ```
78
87
 
88
+ The analytics meta tag will include the allowed variants so the extension knows
89
+ which variants to suggest the user.
90
+
79
91
  #### Test helpers
80
92
 
81
93
  ##### Minitest
@@ -160,7 +172,7 @@ end
160
172
  ##### RSpec
161
173
 
162
174
  It is also possible to use `with_variant` and all the individual setup and
163
- assertions steps in RSpec tests. Here is an example of a spec file:
175
+ assertions steps in RSpec tests. Here is an example of a Capybara feature file:
164
176
 
165
177
  ```ruby
166
178
  # spec/features/ab_testing_spec.rb
@@ -178,22 +190,42 @@ feature "Viewing a page with an A/B test" do
178
190
  end
179
191
  ```
180
192
 
193
+ And here is an RSpec controller test:
194
+
195
+ ```ruby
196
+ # spec/controllers/some_controller_spec.rb
197
+ describe SomeController, type :controller do
198
+ include GovukAbTesting::RspecHelpers
199
+
200
+ # RSpec doesn't render views for controller specs by default
201
+ render_views
202
+
203
+ it "should render the B version of the page" do
204
+ with_variant your_ab_test_name: 'B' do
205
+ get :index
206
+ end
207
+ end
208
+ end
209
+ ```
210
+
181
211
  As with the `minitest` version, you can also pass in the following options to
182
212
  `with_variant`:
183
213
 
184
214
  - `assert_meta_tag: false`
185
215
  - `dimension: <number>`
186
216
 
187
- ### Current limitations
188
-
189
- This library assumes we are only using one A/B test per page. The acceptance
190
- test classes look for only one analytics' meta tag and will fail in the presence
191
- of more than one.
192
-
193
217
  ### Running the test suite
194
218
 
195
219
  `bundle exec rake`
196
220
 
221
+ ### Testing in a browser
222
+
223
+ If you want to test this behaviour in a browser then you should use the
224
+ [GOV.UK Toolkit for Chrome](https://github.com/alphagov/govuk-toolkit-chrome).
225
+
226
+ This detects when you have a test running on a page and enables you to choose
227
+ between variants.
228
+
197
229
  ### Documentation
198
230
 
199
231
  See [RubyDoc](http://www.rubydoc.info/gems/govuk_ab_testing) for some limited documentation.
data/Rakefile CHANGED
@@ -1,13 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
- require "gem_publisher"
3
+ require "rubocop/rake_task"
4
4
 
5
+ RuboCop::RakeTask.new
5
6
  RSpec::Core::RakeTask.new(:spec)
6
7
 
7
- task :default => :spec
8
+ desc "Linting for Ruby"
9
+ task lint: :rubocop
8
10
 
9
- desc "Publish gem to RubyGems"
10
- task :publish_gem do |_t|
11
- published_gem = GemPublisher.publish_if_updated("govuk_ab_testing.gemspec", :rubygems)
12
- puts "Published #{published_gem}" if published_gem
13
- end
11
+ task default: %i[lint spec]
@@ -1,7 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'govuk_ab_testing/version'
3
+ require "govuk_ab_testing/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "govuk_ab_testing"
@@ -9,8 +8,8 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["GOV.UK Dev"]
10
9
  spec.email = ["govuk-dev@digital.cabinet-office.gov.uk"]
11
10
 
12
- spec.summary = %q{Gem to help with A/B testing on the GOV.UK platform}
13
- spec.description = %q{Gem to help with A/B testing on the GOV.UK platform}
11
+ spec.summary = "Gem to help with A/B testing on the GOV.UK platform"
12
+ spec.description = "Gem to help with A/B testing on the GOV.UK platform"
14
13
  spec.homepage = "https://github.com/alphagov/govuk_ab_testing"
15
14
  spec.license = "MIT"
16
15
 
@@ -19,11 +18,10 @@ Gem::Specification.new do |spec|
19
18
  end
20
19
  spec.bindir = "exe"
21
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
21
+ spec.require_paths = %w[lib]
23
22
 
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "rspec", "~> 3.0"
26
- spec.add_development_dependency "govuk-lint", "~> 1.2.1"
27
- spec.add_development_dependency "yard", "~> 0.8"
28
- spec.add_development_dependency "gem_publisher", "~> 1.5.0"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "rubocop-govuk"
26
+ spec.add_development_dependency "yard"
29
27
  end
@@ -1,15 +1,15 @@
1
- require 'govuk_ab_testing/version'
2
- require 'govuk_ab_testing/configuration'
3
- require 'govuk_ab_testing/requested_variant'
4
- require 'govuk_ab_testing/ab_test'
5
- require 'govuk_ab_testing/minitest_assertions'
6
- require 'govuk_ab_testing/rspec_assertions'
7
- require 'govuk_ab_testing/abstract_helpers'
8
- require 'govuk_ab_testing/minitest_helpers'
9
- require 'govuk_ab_testing/rspec_helpers'
10
- require 'govuk_ab_testing/acceptance_tests/meta_tag'
11
- require 'govuk_ab_testing/acceptance_tests/capybara'
12
- require 'govuk_ab_testing/acceptance_tests/active_support'
1
+ require "govuk_ab_testing/version"
2
+ require "govuk_ab_testing/configuration"
3
+ require "govuk_ab_testing/requested_variant"
4
+ require "govuk_ab_testing/ab_test"
5
+ require "govuk_ab_testing/minitest_assertions"
6
+ require "govuk_ab_testing/rspec_assertions"
7
+ require "govuk_ab_testing/abstract_helpers"
8
+ require "govuk_ab_testing/minitest_helpers"
9
+ require "govuk_ab_testing/rspec_helpers"
10
+ require "govuk_ab_testing/acceptance_tests/meta_tag"
11
+ require "govuk_ab_testing/acceptance_tests/capybara"
12
+ require "govuk_ab_testing/acceptance_tests/active_support"
13
13
 
14
14
  module GovukAbTesting
15
15
  ANALYTICS_META_TAG_SELECTOR = "meta[name='govuk:ab-test']".freeze
@@ -2,15 +2,22 @@ module GovukAbTesting
2
2
  class AbTest
3
3
  attr_reader :ab_test_name
4
4
  attr_reader :dimension
5
+ attr_reader :allowed_variants
6
+ attr_reader :control_variant
5
7
 
6
8
  alias_method :name, :ab_test_name
7
9
 
8
10
  # @param request [String] the name of the A/B test
9
11
  # @param dimension [Integer] the dimension registered with Google Analytics
10
12
  # for this specific A/B test
11
- def initialize(ab_test_name, dimension:)
13
+ # @param allowed_variants [Array] an array of Strings representing the
14
+ # possible variants
15
+ # @param control_variant [String] the control variant (typically 'A')
16
+ def initialize(ab_test_name, dimension:, allowed_variants: %w[A B], control_variant: "A")
12
17
  @ab_test_name = ab_test_name
13
18
  @dimension = dimension
19
+ @allowed_variants = allowed_variants
20
+ @control_variant = control_variant
14
21
  end
15
22
 
16
23
  # @param request [ActionDispatch::Http::Headers] the `request.headers` in
@@ -31,7 +31,7 @@ module GovukAbTesting
31
31
  assert_contains_substring(
32
32
  string: vary_header_value,
33
33
  substring: ab_test.response_header,
34
- error_message: <<-ERROR
34
+ error_message: <<-ERROR,
35
35
  The 'Vary' header is not being set for the '#{ab_test.name}' A/B test.
36
36
  You will need to use GovukAbTesting::RequestedVariant#configure_response in your controller:
37
37
 
@@ -46,7 +46,7 @@ module GovukAbTesting
46
46
  assert_does_not_contain_substring(
47
47
  string: vary_header,
48
48
  substring: ab_test_name,
49
- error_message: <<-ERROR
49
+ error_message: <<-ERROR,
50
50
  The 'Vary' header is being set by A/B test '#{ab_test_name}' on a page that should not be modified
51
51
  by the A/B test. Check for incorrect usage of GovukAbTesting::RequestedVariant#configure_response
52
52
  in your controller.
@@ -63,7 +63,7 @@ module GovukAbTesting
63
63
 
64
64
  assert_is_empty(
65
65
  enumerable: ab_test_meta_tags,
66
- error_message: <<-ERROR
66
+ error_message: <<-ERROR,
67
67
  Found the '#{ab_test_name}' A/B testing meta tag on a page that should not be modified by
68
68
  the A/B test.
69
69
 
@@ -81,7 +81,7 @@ module GovukAbTesting
81
81
  assert_has_size(
82
82
  enumerable: ab_test_meta_tags,
83
83
  size: 1,
84
- error_message: <<-ERROR
84
+ error_message: <<-ERROR,
85
85
  Incorrect number of analytics meta tags on the page for A/B test '#{ab_test.name}'.
86
86
  You may need to check usage of GovukAbTesting::RequestedVariant#analytics_meta_tag in your template(s):
87
87
 
@@ -96,7 +96,7 @@ module GovukAbTesting
96
96
  assert_is_equal(
97
97
  expected: expected_metatag_content,
98
98
  actual: meta_tag.content,
99
- error_message: <<-ERROR
99
+ error_message: <<-ERROR,
100
100
  The analytics meta tag content for A/B test '#{ab_test.name}' does not match the expected value.
101
101
  You may need to use GovukAbTesting::RequestedVariant#analytics_meta_tag in your template(s):
102
102
 
@@ -107,7 +107,7 @@ module GovukAbTesting
107
107
 
108
108
  assert_not_blank(
109
109
  string: meta_tag.dimension,
110
- error_message: <<-ERROR
110
+ error_message: <<-ERROR,
111
111
  The meta tag dimension for the '#{ab_test_name}' A/B test is blank.
112
112
  ERROR
113
113
  )
@@ -116,7 +116,7 @@ module GovukAbTesting
116
116
  assert_is_equal(
117
117
  expected: ab_test.dimension.to_s,
118
118
  actual: meta_tag.dimension.to_s,
119
- error_message: <<-ERROR
119
+ error_message: <<-ERROR,
120
120
  The analytics meta tag for the '#{ab_test.name}' A/B test does not match the expected value.
121
121
  ERROR
122
122
  )
@@ -1,16 +1,23 @@
1
1
  module GovukAbTesting
2
2
  module AcceptanceTests
3
3
  class ActiveSupport
4
- attr_reader :request, :request_headers, :scope
4
+ attr_reader :request_headers, :scope
5
5
 
6
6
  def initialize(scope)
7
- @request = scope.instance_variable_get(:@request)
8
- if @request.nil?
9
- raise "Couldn't find '@request' defined, are you using ActiveSupport test cases?"
10
- end
11
7
  @scope = scope
12
8
  @request_headers = {}
13
- @response = scope.instance_variable_get(:@response)
9
+
10
+ if request.nil?
11
+ raise "Couldn't find '@request' defined, are you using ActiveSupport test cases?"
12
+ end
13
+ end
14
+
15
+ def request
16
+ @scope.instance_variable_get(:@request)
17
+ end
18
+
19
+ def response
20
+ @scope.instance_variable_get(:@response)
14
21
  end
15
22
 
16
23
  def set_header(name, value)
@@ -19,7 +26,7 @@ module GovukAbTesting
19
26
  end
20
27
 
21
28
  def vary_header
22
- @response.headers['Vary']
29
+ response.headers["Vary"]
23
30
  end
24
31
 
25
32
  def analytics_meta_tags_for_test(ab_test_name)
@@ -27,12 +34,17 @@ module GovukAbTesting
27
34
  end
28
35
 
29
36
  def analytics_meta_tags
37
+ if scope.response.body.empty?
38
+ raise "Cannot find response body. If this is an RSpec Rails test, " \
39
+ "check that 'render_views' is being called."
40
+ end
41
+
30
42
  tags = scope.css_select(ANALYTICS_META_TAG_SELECTOR)
31
43
 
32
44
  tags.map do |tag|
33
45
  MetaTag.new(
34
- content: tag.attributes['content'].value,
35
- dimension: tag.attributes['data-analytics-dimension'].value
46
+ content: tag.attributes["content"].value,
47
+ dimension: tag.attributes["data-analytics-dimension"].value,
36
48
  )
37
49
  end
38
50
  end
@@ -7,6 +7,7 @@ module GovukAbTesting
7
7
  unless scope.respond_to?(:page)
8
8
  raise "Page is not defined, are you using capybara?"
9
9
  end
10
+
10
11
  @capybara_page = scope.page
11
12
  @request_headers = {}
12
13
  end
@@ -16,13 +17,14 @@ module GovukAbTesting
16
17
  end
17
18
 
18
19
  def set_header(name, value)
19
- capybara_page.driver.options[:headers] = { name => value }
20
+ capybara_page.driver.options[:headers] ||= {}
21
+ capybara_page.driver.options[:headers][name] = value
20
22
  capybara_page.driver.header(name, value)
21
23
  @request_headers[name] = value
22
24
  end
23
25
 
24
26
  def vary_header(*)
25
- capybara_page.response_headers['Vary']
27
+ capybara_page.response_headers["Vary"]
26
28
  end
27
29
 
28
30
  def analytics_meta_tags_for_test(ab_test_name)
@@ -34,8 +36,8 @@ module GovukAbTesting
34
36
 
35
37
  tags.map do |tag|
36
38
  MetaTag.new(
37
- content: tag['content'],
38
- dimension: tag['data-analytics-dimension']
39
+ content: tag["content"],
40
+ dimension: tag["data-analytics-dimension"],
39
41
  )
40
42
  end
41
43
  end
@@ -1,7 +1,7 @@
1
1
  module GovukAbTesting
2
2
  class Configuration
3
- VALID_FRAMEWORKS = %i(capybara active_support).freeze
4
- attr_accessor :config, :acceptance_test_framework
3
+ VALID_FRAMEWORKS = %i[capybara active_support].freeze
4
+ attr_accessor :config
5
5
 
6
6
  def initialize
7
7
  @config = {}
@@ -24,9 +24,9 @@ module GovukAbTesting
24
24
  @framework_class ||= begin
25
25
  case config[:acceptance_test_framework]
26
26
  when :capybara
27
- then GovukAbTesting::AcceptanceTests::Capybara
27
+ GovukAbTesting::AcceptanceTests::Capybara
28
28
  when :active_support
29
- then GovukAbTesting::AcceptanceTests::ActiveSupport
29
+ GovukAbTesting::AcceptanceTests::ActiveSupport
30
30
  else
31
31
  raise "Invalid framework #{acceptance_test_framework}"
32
32
  end
@@ -17,33 +17,56 @@ module GovukAbTesting
17
17
  #
18
18
  # @return [String] the current variant, "A" or "B"
19
19
  def variant_name
20
- request_headers[ab_test.request_header] == "B" ? "B" : "A"
20
+ variant = ab_test.allowed_variants.find do |allowed_variant|
21
+ allowed_variant == request_headers[ab_test.request_header]
22
+ end
23
+
24
+ variant || ab_test.control_variant
21
25
  end
22
26
 
23
27
  # @return [Boolean] if the user is to be served variant A
24
28
  def variant_a?
29
+ warn 'DEPRECATION WARNING: the method `variant_a?` is deprecated. use `variant?("A")` instead'
30
+
25
31
  variant_name == "A"
26
32
  end
27
33
 
28
34
  # @return [Boolean] if the user is to be served variant B
29
35
  def variant_b?
36
+ warn 'DEPRECATION WARNING: the method `variant_b?` is deprecated. use `variant?("B")` instead'
37
+
30
38
  variant_name == "B"
31
39
  end
32
40
 
41
+ # Check if the user should be served a specific variant
42
+ #
43
+ # @param [String or Symbol] the name of the variant
44
+ #
45
+ # @return [Boolean] if the user is to be served variant :name
46
+ def variant?(name)
47
+ error_message =
48
+ "Invalid variant name '#{name}'. Allowed variants are: #{ab_test.allowed_variants}"
49
+
50
+ raise error_message unless ab_test.allowed_variants.include?(name.to_s)
51
+
52
+ variant_name == name.to_s
53
+ end
54
+
33
55
  # Configure the response
34
56
  #
35
57
  # @param [ApplicationController::Response] the `response` in the controller
36
58
  def configure_response(response)
37
- response.headers['Vary'] = [response.headers['Vary'], ab_test.response_header].compact.join(', ')
59
+ response.headers["Vary"] = [response.headers["Vary"], ab_test.response_header].compact.join(", ")
38
60
  end
39
61
 
40
62
  # HTML meta tag used to track the results of your experiment
41
63
  #
42
64
  # @return [String]
43
65
  def analytics_meta_tag
44
- '<meta name="govuk:ab-test" ' +
45
- 'content="' + ab_test.meta_tag_name + ':' + variant_name + '" ' +
46
- 'data-analytics-dimension="' + @dimension.to_s + '">'
66
+ '<meta name="govuk:ab-test" ' \
67
+ 'content="' + ab_test.meta_tag_name + ":" + variant_name + '" ' \
68
+ 'data-analytics-dimension="' + @dimension.to_s + '" ' \
69
+ 'data-allowed-variants="' + ab_test.allowed_variants.join(",") + '">'
47
70
  end
48
71
  end
49
72
  end
@@ -10,6 +10,7 @@ module GovukAbTesting
10
10
 
11
11
  def assert_does_not_contain_substring(string:, substring:, error_message:)
12
12
  return if string.nil?
13
+
13
14
  expect(string).not_to include(substring), error_message
14
15
  end
15
16
 
@@ -1,3 +1,3 @@
1
1
  module GovukAbTesting
2
- VERSION = "2.2.0".freeze
2
+ VERSION = "2.4.2".freeze
3
3
  end
metadata CHANGED
@@ -1,85 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_ab_testing
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2020-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '10.0'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '10.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: govuk-lint
42
+ name: rubocop-govuk
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.1
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.1
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0.8'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0.8'
69
- - !ruby/object:Gem::Dependency
70
- name: gem_publisher
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 1.5.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 1.5.0
68
+ version: '0'
83
69
  description: Gem to help with A/B testing on the GOV.UK platform
84
70
  email:
85
71
  - govuk-dev@digital.cabinet-office.gov.uk
@@ -132,8 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
118
  - !ruby/object:Gem::Version
133
119
  version: '0'
134
120
  requirements: []
135
- rubyforge_project:
136
- rubygems_version: 2.6.8
121
+ rubygems_version: 3.0.3
137
122
  signing_key:
138
123
  specification_version: 4
139
124
  summary: Gem to help with A/B testing on the GOV.UK platform