split 4.0.1 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +6 -3
  3. data/.rubocop.yml +2 -5
  4. data/CHANGELOG.md +23 -0
  5. data/CONTRIBUTING.md +1 -1
  6. data/Gemfile +2 -1
  7. data/README.md +4 -2
  8. data/Rakefile +4 -5
  9. data/gemfiles/5.2.gemfile +1 -3
  10. data/gemfiles/6.0.gemfile +1 -3
  11. data/gemfiles/6.1.gemfile +1 -3
  12. data/gemfiles/7.0.gemfile +2 -3
  13. data/lib/split/algorithms/block_randomization.rb +5 -6
  14. data/lib/split/algorithms/whiplash.rb +16 -18
  15. data/lib/split/algorithms.rb +22 -0
  16. data/lib/split/alternative.rb +21 -22
  17. data/lib/split/cache.rb +0 -1
  18. data/lib/split/combined_experiments_helper.rb +4 -4
  19. data/lib/split/configuration.rb +83 -84
  20. data/lib/split/dashboard/helpers.rb +6 -7
  21. data/lib/split/dashboard/pagination_helpers.rb +53 -54
  22. data/lib/split/dashboard/public/style.css +5 -2
  23. data/lib/split/dashboard/views/index.erb +19 -4
  24. data/lib/split/dashboard.rb +29 -23
  25. data/lib/split/encapsulated_helper.rb +4 -6
  26. data/lib/split/experiment.rb +84 -88
  27. data/lib/split/experiment_catalog.rb +6 -5
  28. data/lib/split/extensions/string.rb +1 -1
  29. data/lib/split/goals_collection.rb +8 -10
  30. data/lib/split/helper.rb +19 -19
  31. data/lib/split/metric.rb +4 -5
  32. data/lib/split/persistence/cookie_adapter.rb +44 -47
  33. data/lib/split/persistence/dual_adapter.rb +7 -8
  34. data/lib/split/persistence/redis_adapter.rb +2 -3
  35. data/lib/split/persistence/session_adapter.rb +0 -2
  36. data/lib/split/persistence.rb +4 -4
  37. data/lib/split/redis_interface.rb +1 -2
  38. data/lib/split/trial.rb +23 -24
  39. data/lib/split/user.rb +12 -13
  40. data/lib/split/version.rb +1 -1
  41. data/lib/split/zscore.rb +1 -3
  42. data/lib/split.rb +26 -25
  43. data/spec/algorithms/block_randomization_spec.rb +6 -5
  44. data/spec/algorithms/weighted_sample_spec.rb +6 -5
  45. data/spec/algorithms/whiplash_spec.rb +4 -5
  46. data/spec/alternative_spec.rb +35 -36
  47. data/spec/cache_spec.rb +15 -19
  48. data/spec/combined_experiments_helper_spec.rb +18 -17
  49. data/spec/configuration_spec.rb +32 -38
  50. data/spec/dashboard/pagination_helpers_spec.rb +69 -67
  51. data/spec/dashboard/paginator_spec.rb +10 -9
  52. data/spec/dashboard_helpers_spec.rb +19 -18
  53. data/spec/dashboard_spec.rb +67 -35
  54. data/spec/encapsulated_helper_spec.rb +12 -14
  55. data/spec/experiment_catalog_spec.rb +14 -13
  56. data/spec/experiment_spec.rb +121 -123
  57. data/spec/goals_collection_spec.rb +17 -15
  58. data/spec/helper_spec.rb +379 -382
  59. data/spec/metric_spec.rb +14 -14
  60. data/spec/persistence/cookie_adapter_spec.rb +23 -8
  61. data/spec/persistence/dual_adapter_spec.rb +71 -71
  62. data/spec/persistence/redis_adapter_spec.rb +25 -26
  63. data/spec/persistence/session_adapter_spec.rb +2 -3
  64. data/spec/persistence_spec.rb +1 -2
  65. data/spec/redis_interface_spec.rb +16 -14
  66. data/spec/spec_helper.rb +15 -13
  67. data/spec/split_spec.rb +11 -11
  68. data/spec/support/cookies_mock.rb +1 -2
  69. data/spec/trial_spec.rb +61 -60
  70. data/spec/user_spec.rb +36 -36
  71. data/split.gemspec +20 -20
  72. metadata +7 -10
  73. data/.rubocop_todo.yml +0 -226
  74. data/Appraisals +0 -19
  75. data/gemfiles/5.0.gemfile +0 -9
  76. data/gemfiles/5.1.gemfile +0 -9
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Split::Configuration do
3
+ require "spec_helper"
5
4
 
5
+ describe Split::Configuration do
6
6
  before(:each) { @config = Split::Configuration.new }
7
7
 
8
8
  it "should provide a default value for ignore_ip_addresses" do
@@ -58,17 +58,15 @@ describe Split::Configuration do
58
58
  end
59
59
 
60
60
  it "should load a metric" do
61
- @config.experiments = {:my_experiment=>
62
- {:alternatives=>["control_opt", "other_opt"], :metric=>:my_metric}}
61
+ @config.experiments = { my_experiment: { alternatives: ["control_opt", "other_opt"], metric: :my_metric } }
63
62
 
64
63
  expect(@config.metrics).not_to be_nil
65
64
  expect(@config.metrics.keys).to eq([:my_metric])
66
65
  end
67
66
 
68
67
  it "should allow loading of experiment using experment_for" do
69
- @config.experiments = {:my_experiment=>
70
- {:alternatives=>["control_opt", "other_opt"], :metric=>:my_metric}}
71
- expect(@config.experiment_for(:my_experiment)).to eq({:alternatives=>["control_opt", ["other_opt"]]})
68
+ @config.experiments = { my_experiment: { alternatives: ["control_opt", "other_opt"], metric: :my_metric } }
69
+ expect(@config.experiment_for(:my_experiment)).to eq({ alternatives: ["control_opt", ["other_opt"]] })
72
70
  end
73
71
 
74
72
  context "when experiments are defined via YAML" do
@@ -82,12 +80,12 @@ describe Split::Configuration do
82
80
  - Alt One
83
81
  - Alt Two
84
82
  resettable: false
85
- eos
83
+ eos
86
84
  @config.experiments = YAML.load(experiments_yaml)
87
85
  end
88
86
 
89
- it 'should normalize experiments' do
90
- expect(@config.normalized_experiments).to eq({:my_experiment=>{:resettable=>false,:alternatives=>["Control Opt", ["Alt One", "Alt Two"]]}})
87
+ it "should normalize experiments" do
88
+ expect(@config.normalized_experiments).to eq({ my_experiment: { resettable: false, alternatives: ["Control Opt", ["Alt One", "Alt Two"]] } })
91
89
  end
92
90
  end
93
91
 
@@ -110,14 +108,14 @@ describe Split::Configuration do
110
108
  Alt Two:
111
109
  text: 'Alternative Two'
112
110
  resettable: false
113
- eos
111
+ eos
114
112
  @config.experiments = YAML.load(experiments_yaml)
115
113
  end
116
114
 
117
- it 'should have metadata on the experiment' do
115
+ it "should have metadata on the experiment" do
118
116
  meta = @config.normalized_experiments[:my_experiment][:metadata]
119
117
  expect(meta).to_not be nil
120
- expect(meta['Control Opt']['text']).to eq('Control Option')
118
+ expect(meta["Control Opt"]["text"]).to eq("Control Option")
121
119
  end
122
120
  end
123
121
 
@@ -138,25 +136,23 @@ describe Split::Configuration do
138
136
  alternatives:
139
137
  - a
140
138
  - b
141
- eos
139
+ eos
142
140
  @config.experiments = YAML.load(experiments_yaml)
143
141
  end
144
142
 
145
143
  it "should normalize experiments" do
146
- expect(@config.normalized_experiments).to eq({:my_experiment=>{:resettable=>false,:alternatives=>[{"Control Opt"=>0.67},
147
- [{"Alt One"=>0.1}, {"Alt Two"=>0.23}]]}, :another_experiment=>{:alternatives=>["a", ["b"]]}})
144
+ expect(@config.normalized_experiments).to eq({ my_experiment: { resettable: false, alternatives: [{ "Control Opt"=>0.67 },
145
+ [{ "Alt One"=>0.1 }, { "Alt Two"=>0.23 }]] }, another_experiment: { alternatives: ["a", ["b"]] } })
148
146
  end
149
147
 
150
148
  it "should recognize metrics" do
151
149
  expect(@config.metrics).not_to be_nil
152
150
  expect(@config.metrics.keys).to eq([:my_metric])
153
151
  end
154
-
155
152
  end
156
153
  end
157
154
 
158
155
  context "as symbols" do
159
-
160
156
  context "with valid YAML" do
161
157
  before do
162
158
  experiments_yaml = <<-eos
@@ -166,21 +162,20 @@ describe Split::Configuration do
166
162
  - Alt One
167
163
  - Alt Two
168
164
  :resettable: false
169
- eos
165
+ eos
170
166
  @config.experiments = YAML.load(experiments_yaml)
171
167
  end
172
168
 
173
169
  it "should normalize experiments" do
174
- expect(@config.normalized_experiments).to eq({:my_experiment=>{:resettable=>false,:alternatives=>["Control Opt", ["Alt One", "Alt Two"]]}})
170
+ expect(@config.normalized_experiments).to eq({ my_experiment: { resettable: false, alternatives: ["Control Opt", ["Alt One", "Alt Two"]] } })
175
171
  end
176
172
  end
177
173
 
178
174
  context "with invalid YAML" do
179
-
180
175
  let(:yaml) { YAML.load(input) }
181
176
 
182
177
  context "with an empty string" do
183
- let(:input) { '' }
178
+ let(:input) { "" }
184
179
 
185
180
  it "should raise an error" do
186
181
  expect { @config.experiments = yaml }.to raise_error(Split::InvalidExperimentsFormatError)
@@ -188,7 +183,7 @@ describe Split::Configuration do
188
183
  end
189
184
 
190
185
  context "with just the YAML header" do
191
- let(:input) { '---' }
186
+ let(:input) { "---" }
192
187
 
193
188
  it "should raise an error" do
194
189
  expect { @config.experiments = yaml }.to raise_error(Split::InvalidExperimentsFormatError)
@@ -200,24 +195,24 @@ describe Split::Configuration do
200
195
 
201
196
  it "should normalize experiments" do
202
197
  @config.experiments = {
203
- :my_experiment => {
204
- :alternatives => [
205
- { :name => "control_opt", :percent => 67 },
206
- { :name => "second_opt", :percent => 10 },
207
- { :name => "third_opt", :percent => 23 },
198
+ my_experiment: {
199
+ alternatives: [
200
+ { name: "control_opt", percent: 67 },
201
+ { name: "second_opt", percent: 10 },
202
+ { name: "third_opt", percent: 23 },
208
203
  ],
209
204
  }
210
205
  }
211
206
 
212
- expect(@config.normalized_experiments).to eq({:my_experiment=>{:alternatives=>[{"control_opt"=>0.67}, [{"second_opt"=>0.1}, {"third_opt"=>0.23}]]}})
207
+ expect(@config.normalized_experiments).to eq({ my_experiment: { alternatives: [{ "control_opt"=>0.67 }, [{ "second_opt"=>0.1 }, { "third_opt"=>0.23 }]] } })
213
208
  end
214
209
 
215
210
  context "redis configuration" do
216
211
  it "should default to local redis server" do
217
- old_redis_url = ENV['REDIS_URL']
218
- ENV.delete('REDIS_URL')
212
+ old_redis_url = ENV["REDIS_URL"]
213
+ ENV.delete("REDIS_URL")
219
214
  expect(Split::Configuration.new.redis).to eq("redis://localhost:6379")
220
- ENV['REDIS_URL'] = old_redis_url
215
+ ENV["REDIS_URL"] = old_redis_url
221
216
  end
222
217
 
223
218
  it "should allow for redis url to be configured" do
@@ -227,10 +222,10 @@ describe Split::Configuration do
227
222
 
228
223
  context "provided REDIS_URL environment variable" do
229
224
  it "should use the ENV variable" do
230
- old_redis_url = ENV['REDIS_URL']
231
- ENV['REDIS_URL'] = "env_redis_url"
225
+ old_redis_url = ENV["REDIS_URL"]
226
+ ENV["REDIS_URL"] = "env_redis_url"
232
227
  expect(Split::Configuration.new.redis).to eq("env_redis_url")
233
- ENV['REDIS_URL'] = old_redis_url
228
+ ENV["REDIS_URL"] = old_redis_url
234
229
  end
235
230
  end
236
231
  end
@@ -252,9 +247,8 @@ describe Split::Configuration do
252
247
  end
253
248
 
254
249
  it "should allow the persistence cookie domain to be configured" do
255
- @config.persistence_cookie_domain = '.acme.com'
256
- expect(@config.persistence_cookie_domain).to eq('.acme.com')
250
+ @config.persistence_cookie_domain = ".acme.com"
251
+ expect(@config.persistence_cookie_domain).to eq(".acme.com")
257
252
  end
258
253
  end
259
-
260
254
  end
@@ -1,108 +1,110 @@
1
- require 'spec_helper'
2
- require 'split/dashboard/pagination_helpers'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require "split/dashboard/pagination_helpers"
3
5
 
4
6
  describe Split::DashboardPaginationHelpers do
5
7
  include Split::DashboardPaginationHelpers
6
8
 
7
- let(:url) { '/split/' }
9
+ let(:url) { "/split/" }
8
10
 
9
- describe '#pagination_per' do
10
- context 'when params empty' do
11
+ describe "#pagination_per" do
12
+ context "when params empty" do
11
13
  let(:params) { Hash[] }
12
14
 
13
- it 'returns the default (10)' do
15
+ it "returns the default (10)" do
14
16
  default_per_page = Split.configuration.dashboard_pagination_default_per_page
15
17
  expect(pagination_per).to eql default_per_page
16
18
  expect(pagination_per).to eql 10
17
19
  end
18
20
  end
19
21
 
20
- context 'when params[:per] is 5' do
22
+ context "when params[:per] is 5" do
21
23
  let(:params) { Hash[per: 5] }
22
24
 
23
- it 'returns 5' do
25
+ it "returns 5" do
24
26
  expect(pagination_per).to eql 5
25
27
  end
26
28
  end
27
29
  end
28
30
 
29
- describe '#page_number' do
30
- context 'when params empty' do
31
+ describe "#page_number" do
32
+ context "when params empty" do
31
33
  let(:params) { Hash[] }
32
34
 
33
- it 'returns 1' do
35
+ it "returns 1" do
34
36
  expect(page_number).to eql 1
35
37
  end
36
38
  end
37
39
 
38
40
  context 'when params[:page] is "2"' do
39
- let(:params) { Hash[page: '2'] }
41
+ let(:params) { Hash[page: "2"] }
40
42
 
41
- it 'returns 2' do
43
+ it "returns 2" do
42
44
  expect(page_number).to eql 2
43
45
  end
44
46
  end
45
47
  end
46
48
 
47
- describe '#paginated' do
49
+ describe "#paginated" do
48
50
  let(:collection) { (1..20).to_a }
49
- let(:params) { Hash[per: '5', page: '3'] }
51
+ let(:params) { Hash[per: "5", page: "3"] }
50
52
 
51
53
  it { expect(paginated(collection)).to eql [11, 12, 13, 14, 15] }
52
54
  end
53
55
 
54
- describe '#show_first_page_tag?' do
55
- context 'when page is 1' do
56
+ describe "#show_first_page_tag?" do
57
+ context "when page is 1" do
56
58
  it { expect(show_first_page_tag?).to be false }
57
59
  end
58
60
 
59
- context 'when page is 3' do
60
- let(:params) { Hash[page: '3'] }
61
+ context "when page is 3" do
62
+ let(:params) { Hash[page: "3"] }
61
63
  it { expect(show_first_page_tag?).to be true }
62
64
  end
63
65
  end
64
66
 
65
- describe '#first_page_tag' do
67
+ describe "#first_page_tag" do
66
68
  it { expect(first_page_tag).to eql '<a href="/split?page=1&per=10">1</a>' }
67
69
  end
68
70
 
69
- describe '#show_first_ellipsis_tag?' do
70
- context 'when page is 1' do
71
+ describe "#show_first_ellipsis_tag?" do
72
+ context "when page is 1" do
71
73
  it { expect(show_first_ellipsis_tag?).to be false }
72
74
  end
73
75
 
74
- context 'when page is 4' do
75
- let(:params) { Hash[page: '4'] }
76
+ context "when page is 4" do
77
+ let(:params) { Hash[page: "4"] }
76
78
  it { expect(show_first_ellipsis_tag?).to be true }
77
79
  end
78
80
  end
79
81
 
80
- describe '#ellipsis_tag' do
81
- it { expect(ellipsis_tag).to eql '<span>...</span>' }
82
+ describe "#ellipsis_tag" do
83
+ it { expect(ellipsis_tag).to eql "<span>...</span>" }
82
84
  end
83
85
 
84
- describe '#show_prev_page_tag?' do
85
- context 'when page is 1' do
86
+ describe "#show_prev_page_tag?" do
87
+ context "when page is 1" do
86
88
  it { expect(show_prev_page_tag?).to be false }
87
89
  end
88
90
 
89
- context 'when page is 2' do
90
- let(:params) { Hash[page: '2'] }
91
+ context "when page is 2" do
92
+ let(:params) { Hash[page: "2"] }
91
93
  it { expect(show_prev_page_tag?).to be true }
92
94
  end
93
95
  end
94
96
 
95
- describe '#prev_page_tag' do
96
- context 'when page is 2' do
97
- let(:params) { Hash[page: '2'] }
97
+ describe "#prev_page_tag" do
98
+ context "when page is 2" do
99
+ let(:params) { Hash[page: "2"] }
98
100
 
99
101
  it do
100
102
  expect(prev_page_tag).to eql '<a href="/split?page=1&per=10">1</a>'
101
103
  end
102
104
  end
103
105
 
104
- context 'when page is 3' do
105
- let(:params) { Hash[page: '3'] }
106
+ context "when page is 3" do
107
+ let(:params) { Hash[page: "3"] }
106
108
 
107
109
  it do
108
110
  expect(prev_page_tag).to eql '<a href="/split?page=2&per=10">2</a>'
@@ -110,90 +112,90 @@ describe Split::DashboardPaginationHelpers do
110
112
  end
111
113
  end
112
114
 
113
- describe '#show_prev_page_tag?' do
114
- context 'when page is 1' do
115
+ describe "#show_prev_page_tag?" do
116
+ context "when page is 1" do
115
117
  it { expect(show_prev_page_tag?).to be false }
116
118
  end
117
119
 
118
- context 'when page is 2' do
119
- let(:params) { Hash[page: '2'] }
120
+ context "when page is 2" do
121
+ let(:params) { Hash[page: "2"] }
120
122
  it { expect(show_prev_page_tag?).to be true }
121
123
  end
122
124
  end
123
125
 
124
- describe '#current_page_tag' do
125
- context 'when page is 1' do
126
- let(:params) { Hash[page: '1'] }
127
- it { expect(current_page_tag).to eql '<span><b>1</b></span>' }
126
+ describe "#current_page_tag" do
127
+ context "when page is 1" do
128
+ let(:params) { Hash[page: "1"] }
129
+ it { expect(current_page_tag).to eql "<span><b>1</b></span>" }
128
130
  end
129
131
 
130
- context 'when page is 2' do
131
- let(:params) { Hash[page: '2'] }
132
- it { expect(current_page_tag).to eql '<span><b>2</b></span>' }
132
+ context "when page is 2" do
133
+ let(:params) { Hash[page: "2"] }
134
+ it { expect(current_page_tag).to eql "<span><b>2</b></span>" }
133
135
  end
134
136
  end
135
137
 
136
- describe '#show_next_page_tag?' do
137
- context 'when page is 2' do
138
- let(:params) { Hash[page: '2'] }
138
+ describe "#show_next_page_tag?" do
139
+ context "when page is 2" do
140
+ let(:params) { Hash[page: "2"] }
139
141
 
140
- context 'when collection length is 20' do
142
+ context "when collection length is 20" do
141
143
  let(:collection) { (1..20).to_a }
142
144
  it { expect(show_next_page_tag?(collection)).to be false }
143
145
  end
144
146
 
145
- context 'when collection length is 25' do
147
+ context "when collection length is 25" do
146
148
  let(:collection) { (1..25).to_a }
147
149
  it { expect(show_next_page_tag?(collection)).to be true }
148
150
  end
149
151
  end
150
152
  end
151
153
 
152
- describe '#next_page_tag' do
153
- context 'when page is 1' do
154
- let(:params) { Hash[page: '1'] }
154
+ describe "#next_page_tag" do
155
+ context "when page is 1" do
156
+ let(:params) { Hash[page: "1"] }
155
157
  it { expect(next_page_tag).to eql '<a href="/split?page=2&per=10">2</a>' }
156
158
  end
157
159
 
158
- context 'when page is 2' do
159
- let(:params) { Hash[page: '2'] }
160
+ context "when page is 2" do
161
+ let(:params) { Hash[page: "2"] }
160
162
  it { expect(next_page_tag).to eql '<a href="/split?page=3&per=10">3</a>' }
161
163
  end
162
164
  end
163
165
 
164
- describe '#total_pages' do
165
- context 'when collection length is 30' do
166
+ describe "#total_pages" do
167
+ context "when collection length is 30" do
166
168
  let(:collection) { (1..30).to_a }
167
169
  it { expect(total_pages(collection)).to eql 3 }
168
170
  end
169
171
 
170
- context 'when collection length is 35' do
172
+ context "when collection length is 35" do
171
173
  let(:collection) { (1..35).to_a }
172
174
  it { expect(total_pages(collection)).to eql 4 }
173
175
  end
174
176
  end
175
177
 
176
- describe '#show_last_ellipsis_tag?' do
178
+ describe "#show_last_ellipsis_tag?" do
177
179
  let(:collection) { (1..30).to_a }
178
- let(:params) { Hash[per: '5', page: '2'] }
180
+ let(:params) { Hash[per: "5", page: "2"] }
179
181
  it { expect(show_last_ellipsis_tag?(collection)).to be true }
180
182
  end
181
183
 
182
- describe '#show_last_page_tag?' do
184
+ describe "#show_last_page_tag?" do
183
185
  let(:collection) { (1..30).to_a }
184
186
 
185
- context 'when page is 5/6' do
186
- let(:params) { Hash[per: '5', page: '5'] }
187
+ context "when page is 5/6" do
188
+ let(:params) { Hash[per: "5", page: "5"] }
187
189
  it { expect(show_last_page_tag?(collection)).to be false }
188
190
  end
189
191
 
190
- context 'when page is 4/6' do
191
- let(:params) { Hash[per: '5', page: '4'] }
192
+ context "when page is 4/6" do
193
+ let(:params) { Hash[per: "5", page: "4"] }
192
194
  it { expect(show_last_page_tag?(collection)).to be true }
193
195
  end
194
196
  end
195
197
 
196
- describe '#last_page_tag' do
198
+ describe "#last_page_tag" do
197
199
  let(:collection) { (1..30).to_a }
198
200
  it { expect(last_page_tag(collection)).to eql '<a href="/split?page=3&per=10">3</a>' }
199
201
  end
@@ -1,34 +1,35 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'split/dashboard/paginator'
2
+
3
+ require "spec_helper"
4
+ require "split/dashboard/paginator"
4
5
 
5
6
  describe Split::DashboardPaginator do
6
- context 'when collection is 1..20' do
7
+ context "when collection is 1..20" do
7
8
  let(:collection) { (1..20).to_a }
8
9
 
9
- context 'when per 5 for page' do
10
+ context "when per 5 for page" do
10
11
  let(:per) { 5 }
11
12
 
12
- it 'when page number is 1 result is [1, 2, 3, 4, 5]' do
13
+ it "when page number is 1 result is [1, 2, 3, 4, 5]" do
13
14
  result = Split::DashboardPaginator.new(collection, 1, per).paginate
14
15
  expect(result).to eql [1, 2, 3, 4, 5]
15
16
  end
16
17
 
17
- it 'when page number is 2 result is [6, 7, 8, 9, 10]' do
18
+ it "when page number is 2 result is [6, 7, 8, 9, 10]" do
18
19
  result = Split::DashboardPaginator.new(collection, 2, per).paginate
19
20
  expect(result).to eql [6, 7, 8, 9, 10]
20
21
  end
21
22
  end
22
23
 
23
- context 'when per 10 for page' do
24
+ context "when per 10 for page" do
24
25
  let(:per) { 10 }
25
26
 
26
- it 'when page number is 1 result is [1..10]' do
27
+ it "when page number is 1 result is [1..10]" do
27
28
  result = Split::DashboardPaginator.new(collection, 1, per).paginate
28
29
  expect(result).to eql [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
29
30
  end
30
31
 
31
- it 'when page number is 2 result is [10..20]' do
32
+ it "when page number is 2 result is [10..20]" do
32
33
  result = Split::DashboardPaginator.new(collection, 2, per).paginate
33
34
  expect(result).to eql [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
34
35
  end
@@ -1,41 +1,42 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'split/dashboard/helpers'
2
+
3
+ require "spec_helper"
4
+ require "split/dashboard/helpers"
4
5
 
5
6
  include Split::DashboardHelpers
6
7
 
7
8
  describe Split::DashboardHelpers do
8
- describe 'confidence_level' do
9
- it 'should handle very small numbers' do
10
- expect(confidence_level(Complex(2e-18, -0.03))).to eq('Insufficient confidence')
9
+ describe "confidence_level" do
10
+ it "should handle very small numbers" do
11
+ expect(confidence_level(Complex(2e-18, -0.03))).to eq("Insufficient confidence")
11
12
  end
12
13
 
13
14
  it "should consider a z-score of 1.65 <= z < 1.96 as 90% confident" do
14
- expect(confidence_level(1.65)).to eq('90% confidence')
15
- expect(confidence_level(1.80)).to eq('90% confidence')
15
+ expect(confidence_level(1.65)).to eq("90% confidence")
16
+ expect(confidence_level(1.80)).to eq("90% confidence")
16
17
  end
17
18
 
18
19
  it "should consider a z-score of 1.96 <= z < 2.58 as 95% confident" do
19
- expect(confidence_level(1.96)).to eq('95% confidence')
20
- expect(confidence_level(2.00)).to eq('95% confidence')
20
+ expect(confidence_level(1.96)).to eq("95% confidence")
21
+ expect(confidence_level(2.00)).to eq("95% confidence")
21
22
  end
22
23
 
23
24
  it "should consider a z-score of z >= 2.58 as 99% confident" do
24
- expect(confidence_level(2.58)).to eq('99% confidence')
25
- expect(confidence_level(3.00)).to eq('99% confidence')
25
+ expect(confidence_level(2.58)).to eq("99% confidence")
26
+ expect(confidence_level(3.00)).to eq("99% confidence")
26
27
  end
27
28
 
28
- describe '#round' do
29
- it 'can round number strings' do
30
- expect(round('3.1415')).to eq BigDecimal('3.14')
29
+ describe "#round" do
30
+ it "can round number strings" do
31
+ expect(round("3.1415")).to eq BigDecimal("3.14")
31
32
  end
32
33
 
33
- it 'can round number strings for precsion' do
34
- expect(round('3.1415', 1)).to eq BigDecimal('3.1')
34
+ it "can round number strings for precsion" do
35
+ expect(round("3.1415", 1)).to eq BigDecimal("3.1")
35
36
  end
36
37
 
37
- it 'can handle invalid number strings' do
38
- expect(round('N/A')).to be_zero
38
+ it "can handle invalid number strings" do
39
+ expect(round("N/A")).to be_zero
39
40
  end
40
41
  end
41
42
  end