field_test 0.5.4 → 0.6.0

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
  SHA256:
3
- metadata.gz: d72f2ad8e2e3848b2e28bc826a479322e0994c1a65f23217d6bbdd85e1a708e5
4
- data.tar.gz: 593a9d6292533404aaf5706e8d6efee44d168e659ef39b44f19d2c266259c69a
3
+ metadata.gz: d8d4bcd81b876daa38d993863bd82e0aac6749668141e67e8eef9e801e465218
4
+ data.tar.gz: a6b60a8320a65c973227d58b3e6b5de2aeaacc02a1e0e3db173c3d119bc8834b
5
5
  SHA512:
6
- metadata.gz: 6605c5ba8800d72422bb121a9a27a7c1ac202022ce7fc37308b33ea77c9b0084e963c1b56d1ee54caf3b288abf16d4b91c86896b183bf8beba85ed98bf1e1113
7
- data.tar.gz: 5b4d3d12e2511cf8369b73ae64bdd5ff49a0d8a1160f6bda31ee180d658ea34ee3efe96fe43cb59625195ce0682a30cef15ac21f7084790e7c46258db7906333
6
+ metadata.gz: afd3fe84991c802549dc8cba3818e3ebef15ea4b0e5dcce8eff22640d8faeaeb25806434ceefeffb9c14afbba5d3b37f6d6a478fc8aab87bfc8c80ceba262c48
7
+ data.tar.gz: f9d29b815fc2f6b92a1e5f6f530e04e2c03636641bac03a778669c20b29d42e6fa4095303000e33676e636736e448522108c1d2ccdfbea1e688281a3899a34c5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.6.0 (2023-07-02)
2
+
3
+ - Fixed support for aliases, dates, and times in config file
4
+ - Dropped support for Ruby < 3 and Rails < 6.1
5
+
6
+ ## 0.5.5 (2023-01-29)
7
+
8
+ - Added warning for non-string variants
9
+
1
10
  ## 0.5.4 (2022-06-16)
2
11
 
3
12
  - Fixed bug in results with MySQL and multiple goals (again)
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016-2022 Andrew Kane
1
+ Copyright (c) 2016-2023 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -332,76 +332,6 @@ Now you can do:
332
332
  user.field_test_memberships
333
333
  ```
334
334
 
335
- ## Upgrading
336
-
337
- ### 0.3.0
338
-
339
- Upgrade the gem and add to `config/field_test.yml`:
340
-
341
- ```yml
342
- legacy_participants: true
343
- ```
344
-
345
- Also, if you use Field Test in emails, know that the default way participants are determined has changed. Restore the previous way with:
346
-
347
- ```ruby
348
- class ApplicationMailer < ActionMailer::Base
349
- def field_test_participant
350
- message.to.first
351
- end
352
- end
353
- ```
354
-
355
- We also recommend upgrading participants when you have time.
356
-
357
- #### Upgrading Participants
358
-
359
- Field Test 0.3.0 splits the `field_test_memberships.participant` column into `participant_type` and `participant_id`.
360
-
361
- To upgrade without downtime, create a migration:
362
-
363
- ```sh
364
- rails generate migration upgrade_field_test_participants
365
- ```
366
-
367
- with:
368
-
369
- ```ruby
370
- class UpgradeFieldTestParticipants < ActiveRecord::Migration[6.0]
371
- def change
372
- add_column :field_test_memberships, :participant_type, :string
373
- add_column :field_test_memberships, :participant_id, :string
374
-
375
- add_index :field_test_memberships, [:participant_type, :participant_id, :experiment],
376
- unique: true, name: "index_field_test_memberships_on_participant_and_experiment"
377
- end
378
- end
379
- ```
380
-
381
- After you run it, writes will go to both the old and new sets of columns.
382
-
383
- Next, backfill data:
384
-
385
- ```ruby
386
- FieldTest::Membership.where(participant_id: nil).find_each do |membership|
387
- participant = membership.participant
388
-
389
- if participant.include?(":")
390
- participant_type, _, participant_id = participant.rpartition(":")
391
- participant_type = nil if participant_type == "cookie" # legacy
392
- else
393
- participant_id = participant
394
- end
395
-
396
- membership.update!(
397
- participant_type: participant_type,
398
- participant_id: participant_id
399
- )
400
- end
401
- ```
402
-
403
- Finally, remove `legacy_participants: true` from the config file. Once you confirm it’s working, you can drop the `participant` column (you can rename it first just to be extra safe).
404
-
405
335
  ## Credits
406
336
 
407
337
  A huge thanks to [Evan Miller](https://www.evanmiller.org/) for deriving the Bayesian formulas.
@@ -8,6 +8,11 @@ module FieldTest
8
8
  @name = attributes[:name] || @id.to_s.titleize
9
9
  @description = attributes[:description]
10
10
  @variants = attributes[:variants]
11
+ if @variants.any? { |v| !v.is_a?(String) }
12
+ # TODO add support for more types (including query parameters)
13
+ # or raise error in 0.6
14
+ warn "[field_test] Only string variants are supported (#{id})"
15
+ end
11
16
  @weights = @variants.size.times.map { |i| attributes[:weights].to_a[i] || 1 }
12
17
  @winner = attributes[:winner]
13
18
  @closed = attributes[:closed]
@@ -1,3 +1,3 @@
1
1
  module FieldTest
2
- VERSION = "0.5.4"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/field_test.rb CHANGED
@@ -7,13 +7,13 @@ require "ipaddr"
7
7
  require "field_test/ext"
8
8
 
9
9
  # modules
10
- require "field_test/experiment"
11
- require "field_test/helpers"
12
- require "field_test/participant"
13
- require "field_test/version"
10
+ require_relative "field_test/experiment"
11
+ require_relative "field_test/helpers"
12
+ require_relative "field_test/participant"
13
+ require_relative "field_test/version"
14
14
 
15
15
  # integrations
16
- require "field_test/engine" if defined?(Rails)
16
+ require_relative "field_test/engine" if defined?(Rails)
17
17
 
18
18
  module FieldTest
19
19
  class Error < StandardError; end
@@ -29,7 +29,7 @@ module FieldTest
29
29
  end
30
30
 
31
31
  def self.config
32
- @config ||= YAML.load(ERB.new(File.read(config_path)).result)
32
+ @config ||= YAML.safe_load(ERB.new(File.read(config_path)).result, permitted_classes: [Date, Time], aliases: true)
33
33
  end
34
34
 
35
35
  def self.excluded_ips
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: field_test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-17 00:00:00.000000000 Z
11
+ date: 2023-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.2'
19
+ version: '6.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
- version: '5.2'
26
+ version: '6.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.2'
33
+ version: '6.1'
34
34
  type: :runtime
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: '5.2'
40
+ version: '6.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: browser
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '2'
48
48
  type: :runtime
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: '2.0'
54
+ version: '2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rice
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -117,14 +117,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: '2.6'
120
+ version: '3'
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.3.7
127
+ rubygems_version: 3.4.10
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: A/B testing for Rails