govuk_ab_testing 2.2.0 → 2.4.2

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
- 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