a_b_split 1.0.0 → 1.1.0

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: 28166486a6f870f7b67355794008e620971f416b
4
- data.tar.gz: 457b3a539da94205f8533849721d323f114e7b2a
2
+ SHA256:
3
+ metadata.gz: cfc2882fcb9f24f91f27a3468f85d65924c97a791f3f95ce559df5da565b5f1f
4
+ data.tar.gz: 54409dd1f4376d3ea80ac105a23a7c9e88cfd12033b94b1fa0659c9028bb7e06
5
5
  SHA512:
6
- metadata.gz: e615da6bbd04d68255074bca677c818933444b7ecabf966cd7fee20f3b339d465939f53f9f7ab7d6880ff912290df54eb832e9f4df600cbe78c5ab6458deaf99
7
- data.tar.gz: ba65a2075286ef08e830e6eaa238c9af6b1d8c1c5cb5d8a984251300a54673bd22217d762ac8f25c0c4da124f498c597ee73526b35affe193366ec1a6ca7b97a
6
+ metadata.gz: b28f31ba66a0891083612f9d7d47df028754161de2f0fdc2eb50b75f5f3cf6a88d8c97628490d83de3d68746605e820028a8a00afd80de2fe502d89dc6264288
7
+ data.tar.gz: a25f4d3d1d6c5435a517e68840e7941a3a57482d95052d3bde26eaf5703930d9eed2c60fbfbcfcb6d0e216070a5483e6b65b6bb17dbb44cfbb24e3e45988e294
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- $LOAD_PATH.unshift File.expand_path('..', __FILE__)
2
+
3
+ $LOAD_PATH.unshift File.expand_path(__dir__)
3
4
 
4
5
  require 'a_b_split/functions'
5
6
  require 'a_b_split/configuration'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Dir[File.join(File.dirname(__FILE__), 'functions', '*')].each do |function|
3
4
  require function
4
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'bigdecimal'
3
4
  require_relative 'weighted_split'
4
5
 
@@ -49,8 +50,8 @@ module ABSplit
49
50
  experiment['weight'].to_f / 100
50
51
  end
51
52
 
52
- def sigmoid(x)
53
- BigDecimal.new((1.0 / (1 + Math.exp(-2 * x))).to_s)
53
+ def sigmoid(value)
54
+ BigDecimal((1.0 / (1 + Math.exp(-2 * value))).to_s)
54
55
  end
55
56
  end
56
57
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'digest'
3
4
  require_relative 'weighted_split'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ABSplit
3
4
  module Functions
4
5
  # Weighted split based on hash value.
@@ -10,12 +11,12 @@ module ABSplit
10
11
  MAX_POSITIONS = (9_999_999_999_999_999_999 * 2) + 1 # capacity of Fixnum
11
12
 
12
13
  class << self
13
- def value_for(x, *params)
14
+ def value_for(value, *params)
14
15
  given_weights = validate(params)
15
16
 
16
17
  experiments = split_weights(params, params.size, given_weights)
17
18
 
18
- select_experiment_for(x, experiments)
19
+ select_experiment_for(value, experiments)
19
20
  end
20
21
 
21
22
  protected
@@ -42,15 +43,15 @@ module ABSplit
42
43
  experiment['weight'] = if experiment['weight']
43
44
  experiment['weight'].to_f
44
45
  else
45
- missing_percentage.to_f / missing_weights.to_f
46
+ missing_percentage.to_f / missing_weights
46
47
  end
47
48
 
48
49
  experiment
49
50
  end
50
51
  end
51
52
 
52
- def select_experiment_for(x, experiments)
53
- x_position = x.hash
53
+ def select_experiment_for(value, experiments)
54
+ x_position = value.hash
54
55
 
55
56
  markers(experiments).each_with_index do |limit, i|
56
57
  return experiments[i]['name'] if x_position <= limit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ABSplit
3
4
  # This class is responsible for spliting the population using the experiment
4
5
  # name passed as a parameter. It will always return an experiment name or a
@@ -7,12 +8,12 @@ module ABSplit
7
8
  include ABSplit
8
9
 
9
10
  class << self
10
- def split(name, x)
11
+ def split(name, value)
11
12
  self.experiment = find(name)
12
13
 
13
14
  raise ABSplit::NoValidExperiment unless experiment
14
15
 
15
- function.value_for(x, *options)
16
+ function.value_for(value, *options)
16
17
  end
17
18
 
18
19
  private
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ABSplit
3
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
4
5
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: a_b_split
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Enrique M Figuerola Gomez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-13 00:00:00.000000000 Z
11
+ date: 2019-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
14
+ name: pry
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.4'
19
+ version: '0.12'
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: '3.4'
26
+ version: '0.12'
27
27
  - !ruby/object:Gem::Dependency
28
- name: pry
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.10'
33
+ version: '12.3'
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: '0.10'
40
+ version: '12.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12.0'
47
+ version: '3.8'
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: '12.0'
54
+ version: '3.8'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.47'
61
+ version: '0.70'
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.47'
68
+ version: '0.70'
69
69
  description:
70
70
  email: me@emfigo.com
71
71
  executables: []
@@ -92,15 +92,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: 2.0.0
95
+ version: '2.3'
96
96
  required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  requirements:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.6.8
102
+ rubygems_version: 3.0.3
104
103
  signing_key:
105
104
  specification_version: 4
106
105
  summary: Splits experiment cohorts for A/B testing