ab-split 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +30 -0
  3. data/.csslintrc +2 -0
  4. data/.eslintignore +1 -0
  5. data/.eslintrc +213 -0
  6. data/.github/FUNDING.yml +1 -0
  7. data/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
  8. data/.rspec +1 -0
  9. data/.rubocop.yml +7 -0
  10. data/.rubocop_todo.yml +679 -0
  11. data/.travis.yml +60 -0
  12. data/Appraisals +19 -0
  13. data/CHANGELOG.md +696 -0
  14. data/CODE_OF_CONDUCT.md +74 -0
  15. data/CONTRIBUTING.md +62 -0
  16. data/Gemfile +7 -0
  17. data/LICENSE +22 -0
  18. data/README.md +955 -0
  19. data/Rakefile +9 -0
  20. data/ab-split.gemspec +44 -0
  21. data/gemfiles/4.2.gemfile +9 -0
  22. data/gemfiles/5.0.gemfile +9 -0
  23. data/gemfiles/5.1.gemfile +9 -0
  24. data/gemfiles/5.2.gemfile +9 -0
  25. data/gemfiles/6.0.gemfile +9 -0
  26. data/lib/split.rb +76 -0
  27. data/lib/split/algorithms/block_randomization.rb +23 -0
  28. data/lib/split/algorithms/weighted_sample.rb +18 -0
  29. data/lib/split/algorithms/whiplash.rb +38 -0
  30. data/lib/split/alternative.rb +191 -0
  31. data/lib/split/combined_experiments_helper.rb +37 -0
  32. data/lib/split/configuration.rb +255 -0
  33. data/lib/split/dashboard.rb +74 -0
  34. data/lib/split/dashboard/helpers.rb +45 -0
  35. data/lib/split/dashboard/pagination_helpers.rb +86 -0
  36. data/lib/split/dashboard/paginator.rb +16 -0
  37. data/lib/split/dashboard/public/dashboard-filtering.js +43 -0
  38. data/lib/split/dashboard/public/dashboard.js +24 -0
  39. data/lib/split/dashboard/public/jquery-1.11.1.min.js +4 -0
  40. data/lib/split/dashboard/public/reset.css +48 -0
  41. data/lib/split/dashboard/public/style.css +328 -0
  42. data/lib/split/dashboard/views/_controls.erb +18 -0
  43. data/lib/split/dashboard/views/_experiment.erb +155 -0
  44. data/lib/split/dashboard/views/_experiment_with_goal_header.erb +8 -0
  45. data/lib/split/dashboard/views/index.erb +26 -0
  46. data/lib/split/dashboard/views/layout.erb +27 -0
  47. data/lib/split/encapsulated_helper.rb +42 -0
  48. data/lib/split/engine.rb +15 -0
  49. data/lib/split/exceptions.rb +6 -0
  50. data/lib/split/experiment.rb +486 -0
  51. data/lib/split/experiment_catalog.rb +51 -0
  52. data/lib/split/extensions/string.rb +16 -0
  53. data/lib/split/goals_collection.rb +45 -0
  54. data/lib/split/helper.rb +165 -0
  55. data/lib/split/metric.rb +101 -0
  56. data/lib/split/persistence.rb +28 -0
  57. data/lib/split/persistence/cookie_adapter.rb +94 -0
  58. data/lib/split/persistence/dual_adapter.rb +85 -0
  59. data/lib/split/persistence/redis_adapter.rb +57 -0
  60. data/lib/split/persistence/session_adapter.rb +29 -0
  61. data/lib/split/redis_interface.rb +50 -0
  62. data/lib/split/trial.rb +117 -0
  63. data/lib/split/user.rb +69 -0
  64. data/lib/split/version.rb +7 -0
  65. data/lib/split/zscore.rb +57 -0
  66. data/spec/algorithms/block_randomization_spec.rb +32 -0
  67. data/spec/algorithms/weighted_sample_spec.rb +19 -0
  68. data/spec/algorithms/whiplash_spec.rb +24 -0
  69. data/spec/alternative_spec.rb +320 -0
  70. data/spec/combined_experiments_helper_spec.rb +57 -0
  71. data/spec/configuration_spec.rb +258 -0
  72. data/spec/dashboard/pagination_helpers_spec.rb +200 -0
  73. data/spec/dashboard/paginator_spec.rb +37 -0
  74. data/spec/dashboard_helpers_spec.rb +42 -0
  75. data/spec/dashboard_spec.rb +210 -0
  76. data/spec/encapsulated_helper_spec.rb +52 -0
  77. data/spec/experiment_catalog_spec.rb +53 -0
  78. data/spec/experiment_spec.rb +533 -0
  79. data/spec/goals_collection_spec.rb +80 -0
  80. data/spec/helper_spec.rb +1111 -0
  81. data/spec/metric_spec.rb +31 -0
  82. data/spec/persistence/cookie_adapter_spec.rb +106 -0
  83. data/spec/persistence/dual_adapter_spec.rb +194 -0
  84. data/spec/persistence/redis_adapter_spec.rb +90 -0
  85. data/spec/persistence/session_adapter_spec.rb +32 -0
  86. data/spec/persistence_spec.rb +34 -0
  87. data/spec/redis_interface_spec.rb +111 -0
  88. data/spec/spec_helper.rb +52 -0
  89. data/spec/split_spec.rb +43 -0
  90. data/spec/support/cookies_mock.rb +20 -0
  91. data/spec/trial_spec.rb +299 -0
  92. data/spec/user_spec.rb +87 -0
  93. metadata +322 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 72275edbc6ab7af7f773bc30f4c585a6166e94ccdd721f2c15c497e9c594f8d8
4
+ data.tar.gz: 241fb4233f417cb9a74e8b1f9e49bd96d33178b594c3de98dd33f162b175833a
5
+ SHA512:
6
+ metadata.gz: defdeceeae8355a5041848c5336908cc29951feb4faaae3067c135d148b5000b9e7f8de4576606f8aaf7492dc8117d65b1409fdc0309725d8d341394e5463437
7
+ data.tar.gz: 8a319c4a7b15a60dd9ae74e46d237344c8d384269fdddc455d44fc107ca50ffbf565ad7adccb422b67483c912c75525ef1fee43ae742ffc7d19c0322f018e92a
data/.codeclimate.yml ADDED
@@ -0,0 +1,30 @@
1
+ ---
2
+ engines:
3
+ csslint:
4
+ enabled: true
5
+ duplication:
6
+ enabled: true
7
+ config:
8
+ languages:
9
+ - ruby
10
+ - javascript
11
+ - python
12
+ - php
13
+ eslint:
14
+ enabled: true
15
+ fixme:
16
+ enabled: true
17
+ rubocop:
18
+ enabled: true
19
+ ratings:
20
+ paths:
21
+ - "**.css"
22
+ - "**.inc"
23
+ - "**.js"
24
+ - "**.jsx"
25
+ - "**.module"
26
+ - "**.php"
27
+ - "**.py"
28
+ - "**.rb"
29
+ exclude_paths:
30
+ - spec/
data/.csslintrc ADDED
@@ -0,0 +1,2 @@
1
+ --exclude-exts=.min.css
2
+ --ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes
data/.eslintignore ADDED
@@ -0,0 +1 @@
1
+ **/*{.,-}min.js
data/.eslintrc ADDED
@@ -0,0 +1,213 @@
1
+ ecmaFeatures:
2
+ modules: true
3
+ jsx: true
4
+
5
+ env:
6
+ amd: true
7
+ browser: true
8
+ es6: true
9
+ jquery: true
10
+ node: true
11
+
12
+ # https://eslint.org/docs/rules/
13
+ rules:
14
+ # Possible Errors
15
+ comma-dangle: [2, never]
16
+ no-cond-assign: 2
17
+ no-console: 0
18
+ no-constant-condition: 2
19
+ no-control-regex: 2
20
+ no-debugger: 2
21
+ no-dupe-args: 2
22
+ no-dupe-keys: 2
23
+ no-duplicate-case: 2
24
+ no-empty: 2
25
+ no-empty-character-class: 2
26
+ no-ex-assign: 2
27
+ no-extra-boolean-cast: 2
28
+ no-extra-parens: 0
29
+ no-extra-semi: 2
30
+ no-func-assign: 2
31
+ no-inner-declarations: [2, functions]
32
+ no-invalid-regexp: 2
33
+ no-irregular-whitespace: 2
34
+ no-negated-in-lhs: 2
35
+ no-obj-calls: 2
36
+ no-regex-spaces: 2
37
+ no-sparse-arrays: 2
38
+ no-unexpected-multiline: 2
39
+ no-unreachable: 2
40
+ use-isnan: 2
41
+ valid-jsdoc: 0
42
+ valid-typeof: 2
43
+
44
+ # Best Practices
45
+ accessor-pairs: 2
46
+ block-scoped-var: 0
47
+ complexity: [2, 6]
48
+ consistent-return: 0
49
+ curly: 0
50
+ default-case: 0
51
+ dot-location: 0
52
+ dot-notation: 0
53
+ eqeqeq: 2
54
+ guard-for-in: 2
55
+ no-alert: 2
56
+ no-caller: 2
57
+ no-case-declarations: 2
58
+ no-div-regex: 2
59
+ no-else-return: 0
60
+ no-empty-label: 2
61
+ no-empty-pattern: 2
62
+ no-eq-null: 2
63
+ no-eval: 2
64
+ no-extend-native: 2
65
+ no-extra-bind: 2
66
+ no-fallthrough: 2
67
+ no-floating-decimal: 0
68
+ no-implicit-coercion: 0
69
+ no-implied-eval: 2
70
+ no-invalid-this: 0
71
+ no-iterator: 2
72
+ no-labels: 0
73
+ no-lone-blocks: 2
74
+ no-loop-func: 2
75
+ no-magic-number: 0
76
+ no-multi-spaces: 0
77
+ no-multi-str: 0
78
+ no-native-reassign: 2
79
+ no-new-func: 2
80
+ no-new-wrappers: 2
81
+ no-new: 2
82
+ no-octal-escape: 2
83
+ no-octal: 2
84
+ no-proto: 2
85
+ no-redeclare: 2
86
+ no-return-assign: 2
87
+ no-script-url: 2
88
+ no-self-compare: 2
89
+ no-sequences: 0
90
+ no-throw-literal: 0
91
+ no-unused-expressions: 2
92
+ no-useless-call: 2
93
+ no-useless-concat: 2
94
+ no-void: 2
95
+ no-warning-comments: 0
96
+ no-with: 2
97
+ radix: 2
98
+ vars-on-top: 0
99
+ wrap-iife: 2
100
+ yoda: 0
101
+
102
+ # Strict
103
+ strict: 0
104
+
105
+ # Variables
106
+ init-declarations: 0
107
+ no-catch-shadow: 2
108
+ no-delete-var: 2
109
+ no-label-var: 2
110
+ no-shadow-restricted-names: 2
111
+ no-shadow: 0
112
+ no-undef-init: 2
113
+ no-undef: 0
114
+ no-undefined: 0
115
+ no-unused-vars: 0
116
+ no-use-before-define: 0
117
+
118
+ # Node.js and CommonJS
119
+ callback-return: 2
120
+ global-require: 2
121
+ handle-callback-err: 2
122
+ no-mixed-requires: 0
123
+ no-new-require: 0
124
+ no-path-concat: 2
125
+ no-process-exit: 2
126
+ no-restricted-modules: 0
127
+ no-sync: 0
128
+
129
+ # Stylistic Issues
130
+ array-bracket-spacing: 0
131
+ block-spacing: 0
132
+ brace-style: 0
133
+ camelcase: 0
134
+ comma-spacing: 0
135
+ comma-style: 0
136
+ computed-property-spacing: 0
137
+ consistent-this: 0
138
+ eol-last: 0
139
+ func-names: 0
140
+ func-style: 0
141
+ id-length: 0
142
+ id-match: 0
143
+ indent: 0
144
+ jsx-quotes: 0
145
+ key-spacing: 0
146
+ linebreak-style: 0
147
+ lines-around-comment: 0
148
+ max-depth: 0
149
+ max-len: 0
150
+ max-nested-callbacks: 0
151
+ max-params: 0
152
+ max-statements: [2, 30]
153
+ new-cap: 0
154
+ new-parens: 0
155
+ newline-after-var: 0
156
+ no-array-constructor: 0
157
+ no-bitwise: 0
158
+ no-continue: 0
159
+ no-inline-comments: 0
160
+ no-lonely-if: 0
161
+ no-mixed-spaces-and-tabs: 0
162
+ no-multiple-empty-lines: 0
163
+ no-negated-condition: 0
164
+ no-nested-ternary: 0
165
+ no-new-object: 0
166
+ no-plusplus: 0
167
+ no-restricted-syntax: 0
168
+ no-spaced-func: 0
169
+ no-ternary: 0
170
+ no-trailing-spaces: 0
171
+ no-underscore-dangle: 0
172
+ no-unneeded-ternary: 0
173
+ object-curly-spacing: 0
174
+ one-var: 0
175
+ operator-assignment: 0
176
+ operator-linebreak: 0
177
+ padded-blocks: 0
178
+ quote-props: 0
179
+ quotes: 0
180
+ require-jsdoc: 0
181
+ semi-spacing: 0
182
+ semi: 0
183
+ sort-vars: 0
184
+ space-after-keywords: 0
185
+ space-before-blocks: 0
186
+ space-before-function-paren: 0
187
+ space-before-keywords: 0
188
+ space-in-parens: 0
189
+ space-infix-ops: 0
190
+ space-return-throw-case: 0
191
+ space-unary-ops: 0
192
+ spaced-comment: 0
193
+ wrap-regex: 0
194
+
195
+ # ECMAScript 6
196
+ arrow-body-style: 0
197
+ arrow-parens: 0
198
+ arrow-spacing: 0
199
+ constructor-super: 0
200
+ generator-star-spacing: 0
201
+ no-arrow-condition: 0
202
+ no-class-assign: 0
203
+ no-const-assign: 0
204
+ no-dupe-class-members: 0
205
+ no-this-before-super: 0
206
+ no-var: 0
207
+ object-shorthand: 0
208
+ prefer-arrow-callback: 0
209
+ prefer-const: 0
210
+ prefer-reflect: 0
211
+ prefer-spread: 0
212
+ prefer-template: 0
213
+ require-yield: 0
@@ -0,0 +1 @@
1
+ open_collective: split
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: andrehjr
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Additional context**
24
+ Add any other context about the problem here.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --profile
data/.rubocop.yml ADDED
@@ -0,0 +1,7 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ Exclude:
5
+ - 'Appraisals'
6
+ - 'gemfiles/**/*'
7
+ - 'spec/**/*.rb'
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,679 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-10-21 18:09:14 -0300 using RuboCop version 0.75.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 4
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: TreatCommentsAsGroupSeparators, Include.
12
+ # Include: **/*.gemspec
13
+ Gemspec/OrderedDependencies:
14
+ Exclude:
15
+ - 'ab-split.gemspec'
16
+
17
+ # Offense count: 1
18
+ # Configuration parameters: Include.
19
+ # Include: **/*.gemspec,
20
+ Gemspec/RequiredRubyVersion:
21
+ Exclude:
22
+ - 'ab-split.gemspec'
23
+
24
+ # Offense count: 2
25
+ # Cop supports --auto-correct.
26
+ # Configuration parameters: EnforcedStyle, IndentationWidth.
27
+ # SupportedStyles: with_first_argument, with_fixed_indentation
28
+ Layout/AlignArguments:
29
+ Exclude:
30
+ - 'lib/split.rb'
31
+ - 'lib/split/experiment_catalog.rb'
32
+
33
+ # Offense count: 3
34
+ # Cop supports --auto-correct.
35
+ # Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
36
+ # SupportedHashRocketStyles: key, separator, table
37
+ # SupportedColonStyles: key, separator, table
38
+ # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
39
+ Layout/AlignHash:
40
+ Exclude:
41
+ - 'lib/split/helper.rb'
42
+
43
+ # Offense count: 1
44
+ # Cop supports --auto-correct.
45
+ Layout/CommentIndentation:
46
+ Exclude:
47
+ - 'lib/split/experiment.rb'
48
+
49
+ # Offense count: 5
50
+ # Cop supports --auto-correct.
51
+ Layout/ElseAlignment:
52
+ Exclude:
53
+ - 'lib/split.rb'
54
+ - 'lib/split/helper.rb'
55
+ - 'lib/split/trial.rb'
56
+
57
+ # Offense count: 20
58
+ # Cop supports --auto-correct.
59
+ Layout/EmptyLineAfterGuardClause:
60
+ Exclude:
61
+ - 'lib/split.rb'
62
+ - 'lib/split/algorithms/weighted_sample.rb'
63
+ - 'lib/split/alternative.rb'
64
+ - 'lib/split/combined_experiments_helper.rb'
65
+ - 'lib/split/configuration.rb'
66
+ - 'lib/split/experiment.rb'
67
+ - 'lib/split/experiment_catalog.rb'
68
+ - 'lib/split/goals_collection.rb'
69
+ - 'lib/split/helper.rb'
70
+ - 'lib/split/user.rb'
71
+
72
+ # Offense count: 25
73
+ # Cop supports --auto-correct.
74
+ Layout/EmptyLineAfterMagicComment:
75
+ Enabled: false
76
+
77
+ # Offense count: 1
78
+ # Cop supports --auto-correct.
79
+ # Configuration parameters: AllowAdjacentOneLineDefs, NumberOfEmptyLines.
80
+ Layout/EmptyLineBetweenDefs:
81
+ Exclude:
82
+ - 'lib/split/helper.rb'
83
+
84
+ # Offense count: 1
85
+ # Cop supports --auto-correct.
86
+ Layout/EmptyLines:
87
+ Exclude:
88
+ - 'lib/split/helper.rb'
89
+
90
+ # Offense count: 8
91
+ # Cop supports --auto-correct.
92
+ # Configuration parameters: EnforcedStyle.
93
+ # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
94
+ Layout/EmptyLinesAroundClassBody:
95
+ Exclude:
96
+ - 'lib/split/experiment_catalog.rb'
97
+ - 'lib/split/goals_collection.rb'
98
+ - 'lib/split/metric.rb'
99
+ - 'lib/split/persistence/cookie_adapter.rb'
100
+ - 'lib/split/persistence/redis_adapter.rb'
101
+ - 'lib/split/persistence/session_adapter.rb'
102
+ - 'lib/split/zscore.rb'
103
+
104
+ # Offense count: 2
105
+ # Cop supports --auto-correct.
106
+ Layout/EmptyLinesAroundMethodBody:
107
+ Exclude:
108
+ - 'lib/split/dashboard/helpers.rb'
109
+ - 'lib/split/zscore.rb'
110
+
111
+ # Offense count: 1
112
+ # Cop supports --auto-correct.
113
+ # Configuration parameters: EnforcedStyle.
114
+ # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines
115
+ Layout/EmptyLinesAroundModuleBody:
116
+ Exclude:
117
+ - 'lib/split/encapsulated_helper.rb'
118
+
119
+ # Offense count: 3
120
+ # Cop supports --auto-correct.
121
+ # Configuration parameters: EnforcedStyleAlignWith, AutoCorrect, Severity.
122
+ # SupportedStylesAlignWith: keyword, variable, start_of_line
123
+ Layout/EndAlignment:
124
+ Exclude:
125
+ - 'lib/split.rb'
126
+ - 'lib/split/helper.rb'
127
+ - 'lib/split/trial.rb'
128
+
129
+ # Offense count: 4
130
+ # Cop supports --auto-correct.
131
+ # Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
132
+ Layout/ExtraSpacing:
133
+ Exclude:
134
+ - 'lib/split/algorithms/whiplash.rb'
135
+ - 'lib/split/dashboard.rb'
136
+ - 'lib/split/metric.rb'
137
+ - 'lib/split/trial.rb'
138
+
139
+ # Offense count: 2
140
+ # Cop supports --auto-correct.
141
+ # Configuration parameters: EnforcedStyle, IndentationWidth.
142
+ # SupportedStyles: special_inside_parentheses, consistent, align_braces
143
+ Layout/IndentFirstHashElement:
144
+ Exclude:
145
+ - 'ab-split.gemspec'
146
+
147
+ # Offense count: 3
148
+ # Cop supports --auto-correct.
149
+ # Configuration parameters: Width, IgnoredPatterns.
150
+ Layout/IndentationWidth:
151
+ Exclude:
152
+ - 'lib/split.rb'
153
+ - 'lib/split/helper.rb'
154
+ - 'lib/split/trial.rb'
155
+
156
+ # Offense count: 10
157
+ # Cop supports --auto-correct.
158
+ Layout/SpaceAfterComma:
159
+ Exclude:
160
+ - 'lib/split/algorithms/weighted_sample.rb'
161
+ - 'lib/split/configuration.rb'
162
+ - 'lib/split/encapsulated_helper.rb'
163
+ - 'lib/split/experiment.rb'
164
+ - 'lib/split/metric.rb'
165
+ - 'lib/split/user.rb'
166
+
167
+ # Offense count: 5
168
+ # Cop supports --auto-correct.
169
+ # Configuration parameters: EnforcedStyle.
170
+ # SupportedStyles: space, no_space
171
+ Layout/SpaceAroundEqualsInParameterDefault:
172
+ Exclude:
173
+ - 'lib/split/goals_collection.rb'
174
+ - 'lib/split/persistence/dual_adapter.rb'
175
+ - 'lib/split/persistence/redis_adapter.rb'
176
+ - 'lib/split/trial.rb'
177
+ - 'lib/split/user.rb'
178
+
179
+ # Offense count: 24
180
+ # Cop supports --auto-correct.
181
+ # Configuration parameters: AllowForAlignment.
182
+ Layout/SpaceAroundOperators:
183
+ Exclude:
184
+ - 'lib/split/algorithms/whiplash.rb'
185
+ - 'lib/split/alternative.rb'
186
+ - 'lib/split/metric.rb'
187
+ - 'lib/split/trial.rb'
188
+ - 'lib/split/zscore.rb'
189
+
190
+ # Offense count: 14
191
+ # Cop supports --auto-correct.
192
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
193
+ # SupportedStyles: space, no_space
194
+ # SupportedStylesForEmptyBraces: space, no_space
195
+ Layout/SpaceBeforeBlockBraces:
196
+ Exclude:
197
+ - 'lib/split/configuration.rb'
198
+ - 'lib/split/experiment.rb'
199
+ - 'lib/split/experiment_catalog.rb'
200
+ - 'lib/split/helper.rb'
201
+ - 'lib/split/trial.rb'
202
+
203
+ # Offense count: 2
204
+ # Cop supports --auto-correct.
205
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBrackets.
206
+ # SupportedStyles: space, no_space, compact
207
+ # SupportedStylesForEmptyBrackets: space, no_space
208
+ Layout/SpaceInsideArrayLiteralBrackets:
209
+ Exclude:
210
+ - 'lib/split/dashboard/helpers.rb'
211
+
212
+ # Offense count: 31
213
+ # Cop supports --auto-correct.
214
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
215
+ # SupportedStyles: space, no_space
216
+ # SupportedStylesForEmptyBraces: space, no_space
217
+ Layout/SpaceInsideBlockBraces:
218
+ Exclude:
219
+ - 'lib/split/configuration.rb'
220
+ - 'lib/split/experiment.rb'
221
+ - 'lib/split/experiment_catalog.rb'
222
+ - 'lib/split/helper.rb'
223
+ - 'lib/split/trial.rb'
224
+ - 'lib/split/user.rb'
225
+
226
+ # Offense count: 10
227
+ # Cop supports --auto-correct.
228
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
229
+ # SupportedStyles: space, no_space, compact
230
+ # SupportedStylesForEmptyBraces: space, no_space
231
+ Layout/SpaceInsideHashLiteralBraces:
232
+ Exclude:
233
+ - 'lib/split/experiment.rb'
234
+ - 'lib/split/helper.rb'
235
+ - 'lib/split/persistence/redis_adapter.rb'
236
+
237
+ # Offense count: 1
238
+ # Cop supports --auto-correct.
239
+ # Configuration parameters: EnforcedStyle.
240
+ # SupportedStyles: final_newline, final_blank_line
241
+ Layout/TrailingBlankLines:
242
+ Exclude:
243
+ - 'Rakefile'
244
+
245
+ # Offense count: 8
246
+ # Configuration parameters: AllowSafeAssignment.
247
+ Lint/AssignmentInCondition:
248
+ Exclude:
249
+ - 'lib/split/combined_experiments_helper.rb'
250
+ - 'lib/split/configuration.rb'
251
+ - 'lib/split/persistence/cookie_adapter.rb'
252
+ - 'lib/split/persistence/dual_adapter.rb'
253
+ - 'lib/split/persistence/redis_adapter.rb'
254
+
255
+ # Offense count: 4
256
+ # Cop supports --auto-correct.
257
+ # Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
258
+ Lint/UnusedBlockArgument:
259
+ Exclude:
260
+ - 'lib/split/algorithms/block_randomization.rb'
261
+ - 'lib/split/configuration.rb'
262
+ - 'lib/split/engine.rb'
263
+ - 'lib/split/metric.rb'
264
+
265
+ # Offense count: 2
266
+ # Cop supports --auto-correct.
267
+ # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
268
+ Lint/UnusedMethodArgument:
269
+ Exclude:
270
+ - 'lib/split/dashboard/helpers.rb'
271
+ - 'lib/split/persistence/cookie_adapter.rb'
272
+
273
+ # Offense count: 1
274
+ Lint/UselessAssignment:
275
+ Exclude:
276
+ - 'lib/split/goals_collection.rb'
277
+
278
+ # Offense count: 19
279
+ Metrics/AbcSize:
280
+ Max: 47
281
+
282
+ # Offense count: 3
283
+ # Configuration parameters: CountComments.
284
+ Metrics/ClassLength:
285
+ Max: 377
286
+
287
+ # Offense count: 6
288
+ Metrics/CyclomaticComplexity:
289
+ Max: 14
290
+
291
+ # Offense count: 23
292
+ # Configuration parameters: CountComments, ExcludedMethods.
293
+ Metrics/MethodLength:
294
+ Max: 66
295
+
296
+ # Offense count: 1
297
+ # Configuration parameters: CountComments.
298
+ Metrics/ModuleLength:
299
+ Max: 134
300
+
301
+ # Offense count: 8
302
+ Metrics/PerceivedComplexity:
303
+ Max: 16
304
+
305
+ # Offense count: 4
306
+ Naming/AccessorMethodName:
307
+ Exclude:
308
+ - 'lib/split/alternative.rb'
309
+ - 'lib/split/experiment.rb'
310
+ - 'lib/split/persistence/cookie_adapter.rb'
311
+
312
+ # Offense count: 1
313
+ Naming/BinaryOperatorParameterName:
314
+ Exclude:
315
+ - 'lib/split/experiment.rb'
316
+
317
+ # Offense count: 4
318
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
319
+ # NamePrefix: is_, has_, have_
320
+ # NamePrefixBlacklist: is_, has_, have_
321
+ # NameWhitelist: is_a?
322
+ # MethodDefinitionMacros: define_method, define_singleton_method
323
+ Naming/PredicateName:
324
+ Exclude:
325
+ - 'spec/**/*'
326
+ - 'lib/split/experiment.rb'
327
+ - 'lib/split/helper.rb'
328
+
329
+ # Offense count: 5
330
+ # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
331
+ # AllowedNames: io, id, to, by, on, in, at, ip, db
332
+ Naming/UncommunicativeMethodParamName:
333
+ Exclude:
334
+ - 'lib/split/alternative.rb'
335
+ - 'lib/split/zscore.rb'
336
+
337
+ # Offense count: 6
338
+ # Configuration parameters: EnforcedStyle.
339
+ # SupportedStyles: snake_case, normalcase, non_integer
340
+ Naming/VariableNumber:
341
+ Exclude:
342
+ - 'lib/split/zscore.rb'
343
+
344
+ # Offense count: 1
345
+ # Cop supports --auto-correct.
346
+ # Configuration parameters: EnforcedStyle.
347
+ # SupportedStyles: always, conditionals
348
+ Style/AndOr:
349
+ Exclude:
350
+ - 'lib/split/experiment_catalog.rb'
351
+
352
+ # Offense count: 2
353
+ # Configuration parameters: AllowedChars.
354
+ Style/AsciiComments:
355
+ Exclude:
356
+ - 'lib/split/zscore.rb'
357
+
358
+ # Offense count: 4
359
+ # Cop supports --auto-correct.
360
+ # Configuration parameters: EnforcedStyle.
361
+ # SupportedStyles: percent_q, bare_percent
362
+ Style/BarePercentLiterals:
363
+ Exclude:
364
+ - 'lib/split/dashboard/pagination_helpers.rb'
365
+
366
+ # Offense count: 8
367
+ Style/CaseEquality:
368
+ Exclude:
369
+ - 'lib/split/alternative.rb'
370
+ - 'lib/split/experiment_catalog.rb'
371
+ - 'lib/split/helper.rb'
372
+ - 'lib/split/metric.rb'
373
+
374
+ # Offense count: 5
375
+ # Cop supports --auto-correct.
376
+ # Configuration parameters: EnforcedStyle.
377
+ # SupportedStyles: is_a?, kind_of?
378
+ Style/ClassCheck:
379
+ Exclude:
380
+ - 'lib/split/alternative.rb'
381
+ - 'lib/split/configuration.rb'
382
+ - 'lib/split/experiment.rb'
383
+ - 'lib/split/goals_collection.rb'
384
+ - 'lib/split/trial.rb'
385
+
386
+ # Offense count: 1
387
+ # Cop supports --auto-correct.
388
+ Style/ColonMethodCall:
389
+ Exclude:
390
+ - 'lib/split/combined_experiments_helper.rb'
391
+
392
+ # Offense count: 1
393
+ # Cop supports --auto-correct.
394
+ # Configuration parameters: Keywords.
395
+ # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
396
+ Style/CommentAnnotation:
397
+ Exclude:
398
+ - 'lib/split/configuration.rb'
399
+
400
+ # Offense count: 2
401
+ # Cop supports --auto-correct.
402
+ # Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
403
+ # SupportedStyles: assign_to_condition, assign_inside_condition
404
+ Style/ConditionalAssignment:
405
+ Exclude:
406
+ - 'lib/split/dashboard.rb'
407
+ - 'lib/split/persistence/redis_adapter.rb'
408
+
409
+ # Offense count: 1
410
+ # Cop supports --auto-correct.
411
+ Style/DefWithParentheses:
412
+ Exclude:
413
+ - 'lib/split/helper.rb'
414
+
415
+ # Offense count: 29
416
+ Style/Documentation:
417
+ Enabled: false
418
+
419
+ # Offense count: 3
420
+ # Cop supports --auto-correct.
421
+ # Configuration parameters: EnforcedStyle.
422
+ # SupportedStyles: empty, nil, both
423
+ Style/EmptyElse:
424
+ Exclude:
425
+ - 'lib/split/experiment.rb'
426
+ - 'lib/split/metric.rb'
427
+
428
+ # Offense count: 1
429
+ # Cop supports --auto-correct.
430
+ Style/Encoding:
431
+ Exclude:
432
+ - 'ab-split.gemspec'
433
+
434
+ # Offense count: 1
435
+ # Cop supports --auto-correct.
436
+ Style/ExpandPathArguments:
437
+ Exclude:
438
+ - 'ab-split.gemspec'
439
+
440
+ # Offense count: 13
441
+ # Configuration parameters: MinBodyLength.
442
+ Style/GuardClause:
443
+ Exclude:
444
+ - 'lib/split/alternative.rb'
445
+ - 'lib/split/configuration.rb'
446
+ - 'lib/split/experiment.rb'
447
+ - 'lib/split/goals_collection.rb'
448
+ - 'lib/split/helper.rb'
449
+ - 'lib/split/persistence/dual_adapter.rb'
450
+ - 'lib/split/trial.rb'
451
+
452
+ # Offense count: 25
453
+ # Cop supports --auto-correct.
454
+ # Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
455
+ # SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
456
+ Style/HashSyntax:
457
+ Exclude:
458
+ - 'Rakefile'
459
+ - 'lib/split.rb'
460
+ - 'lib/split/experiment.rb'
461
+ - 'lib/split/experiment_catalog.rb'
462
+ - 'lib/split/helper.rb'
463
+ - 'lib/split/metric.rb'
464
+ - 'lib/split/persistence.rb'
465
+ - 'lib/split/persistence/redis_adapter.rb'
466
+
467
+ # Offense count: 4
468
+ Style/IdenticalConditionalBranches:
469
+ Exclude:
470
+ - 'lib/split/configuration.rb'
471
+ - 'lib/split/experiment.rb'
472
+
473
+ # Offense count: 14
474
+ # Cop supports --auto-correct.
475
+ Style/IfUnlessModifier:
476
+ Exclude:
477
+ - 'lib/split/alternative.rb'
478
+ - 'lib/split/experiment.rb'
479
+ - 'lib/split/experiment_catalog.rb'
480
+ - 'lib/split/goals_collection.rb'
481
+ - 'lib/split/metric.rb'
482
+ - 'lib/split/trial.rb'
483
+ - 'lib/split/user.rb'
484
+
485
+ # Offense count: 1
486
+ # Cop supports --auto-correct.
487
+ # Configuration parameters: EnforcedStyle.
488
+ # SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline
489
+ Style/MethodDefParentheses:
490
+ Exclude:
491
+ - 'lib/split/configuration.rb'
492
+
493
+ # Offense count: 1
494
+ # Cop supports --auto-correct.
495
+ # Configuration parameters: EnforcedStyle, Autocorrect.
496
+ # SupportedStyles: module_function, extend_self
497
+ Style/ModuleFunction:
498
+ Exclude:
499
+ - 'lib/split.rb'
500
+
501
+ # Offense count: 1
502
+ # Cop supports --auto-correct.
503
+ # Configuration parameters: EnforcedStyle.
504
+ # SupportedStyles: literals, strict
505
+ Style/MutableConstant:
506
+ Exclude:
507
+ - 'lib/split/experiment.rb'
508
+
509
+ # Offense count: 1
510
+ # Cop supports --auto-correct.
511
+ # Configuration parameters: EnforcedStyle.
512
+ # SupportedStyles: both, prefix, postfix
513
+ Style/NegatedIf:
514
+ Exclude:
515
+ - 'lib/split/user.rb'
516
+
517
+ # Offense count: 1
518
+ # Cop supports --auto-correct.
519
+ # Configuration parameters: IncludeSemanticChanges.
520
+ Style/NonNilCheck:
521
+ Exclude:
522
+ - 'lib/split/configuration.rb'
523
+
524
+ # Offense count: 1
525
+ # Cop supports --auto-correct.
526
+ Style/Not:
527
+ Exclude:
528
+ - 'lib/split/experiment_catalog.rb'
529
+
530
+ # Offense count: 2
531
+ # Cop supports --auto-correct.
532
+ # Configuration parameters: Strict.
533
+ Style/NumericLiterals:
534
+ MinDigits: 9
535
+
536
+ # Offense count: 3
537
+ # Cop supports --auto-correct.
538
+ # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
539
+ # SupportedStyles: predicate, comparison
540
+ Style/NumericPredicate:
541
+ Exclude:
542
+ - 'spec/**/*'
543
+ - 'lib/split/experiment.rb'
544
+ - 'lib/split/trial.rb'
545
+ - 'lib/split/user.rb'
546
+
547
+ # Offense count: 2
548
+ # Cop supports --auto-correct.
549
+ Style/ParallelAssignment:
550
+ Exclude:
551
+ - 'lib/split/experiment_catalog.rb'
552
+ - 'lib/split/persistence/cookie_adapter.rb'
553
+
554
+ # Offense count: 1
555
+ # Cop supports --auto-correct.
556
+ # Configuration parameters: EnforcedStyle.
557
+ # SupportedStyles: short, verbose
558
+ Style/PreferredHashMethods:
559
+ Exclude:
560
+ - 'lib/split/configuration.rb'
561
+
562
+ # Offense count: 2
563
+ # Cop supports --auto-correct.
564
+ # Configuration parameters: EnforcedStyle.
565
+ # SupportedStyles: compact, exploded
566
+ Style/RaiseArgs:
567
+ Exclude:
568
+ - 'lib/split/configuration.rb'
569
+ - 'lib/split/experiment.rb'
570
+
571
+ # Offense count: 6
572
+ # Cop supports --auto-correct.
573
+ Style/RedundantParentheses:
574
+ Exclude:
575
+ - 'lib/split/alternative.rb'
576
+ - 'lib/split/zscore.rb'
577
+
578
+ # Offense count: 11
579
+ # Cop supports --auto-correct.
580
+ # Configuration parameters: AllowMultipleReturnValues.
581
+ Style/RedundantReturn:
582
+ Exclude:
583
+ - 'lib/split/alternative.rb'
584
+ - 'lib/split/experiment.rb'
585
+ - 'lib/split/experiment_catalog.rb'
586
+ - 'lib/split/helper.rb'
587
+ - 'lib/split/metric.rb'
588
+ - 'lib/split/zscore.rb'
589
+
590
+ # Offense count: 21
591
+ # Cop supports --auto-correct.
592
+ Style/RedundantSelf:
593
+ Exclude:
594
+ - 'lib/split.rb'
595
+ - 'lib/split/alternative.rb'
596
+ - 'lib/split/configuration.rb'
597
+ - 'lib/split/experiment.rb'
598
+ - 'lib/split/extensions/string.rb'
599
+ - 'lib/split/metric.rb'
600
+ - 'lib/split/persistence/dual_adapter.rb'
601
+ - 'lib/split/persistence/redis_adapter.rb'
602
+ - 'lib/split/trial.rb'
603
+
604
+ # Offense count: 2
605
+ # Cop supports --auto-correct.
606
+ Style/RescueModifier:
607
+ Exclude:
608
+ - 'lib/split/alternative.rb'
609
+ - 'lib/split/configuration.rb'
610
+
611
+ # Offense count: 5
612
+ # Cop supports --auto-correct.
613
+ # Configuration parameters: EnforcedStyle.
614
+ # SupportedStyles: implicit, explicit
615
+ Style/RescueStandardError:
616
+ Exclude:
617
+ - 'lib/split/alternative.rb'
618
+ - 'lib/split/experiment.rb'
619
+ - 'lib/split/helper.rb'
620
+
621
+ # Offense count: 2
622
+ # Cop supports --auto-correct.
623
+ # Configuration parameters: ConvertCodeThatCanStartToReturnNil, Whitelist.
624
+ # Whitelist: present?, blank?, presence, try, try!
625
+ Style/SafeNavigation:
626
+ Exclude:
627
+ - 'lib/split/configuration.rb'
628
+ - 'lib/split/helper.rb'
629
+
630
+ # Offense count: 1
631
+ # Cop supports --auto-correct.
632
+ # Configuration parameters: AllowAsExpressionSeparator.
633
+ Style/Semicolon:
634
+ Exclude:
635
+ - 'lib/split/algorithms/whiplash.rb'
636
+
637
+ # Offense count: 1
638
+ # Cop supports --auto-correct.
639
+ # Configuration parameters: .
640
+ # SupportedStyles: use_perl_names, use_english_names
641
+ Style/SpecialGlobalVars:
642
+ EnforcedStyle: use_perl_names
643
+
644
+ # Offense count: 86
645
+ # Cop supports --auto-correct.
646
+ # Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
647
+ # SupportedStyles: single_quotes, double_quotes
648
+ Style/StringLiterals:
649
+ Enabled: false
650
+
651
+ # Offense count: 3
652
+ # Cop supports --auto-correct.
653
+ # Configuration parameters: IgnoredMethods.
654
+ # IgnoredMethods: respond_to, define_method
655
+ Style/SymbolProc:
656
+ Exclude:
657
+ - 'lib/split/experiment.rb'
658
+ - 'lib/split/experiment_catalog.rb'
659
+ - 'lib/split/metric.rb'
660
+
661
+ # Offense count: 1
662
+ # Cop supports --auto-correct.
663
+ # Configuration parameters: AllowNamedUnderscoreVariables.
664
+ Style/TrailingUnderscoreVariable:
665
+ Exclude:
666
+ - 'lib/split/helper.rb'
667
+
668
+ # Offense count: 1
669
+ # Cop supports --auto-correct.
670
+ Style/ZeroLengthPredicate:
671
+ Exclude:
672
+ - 'lib/split/user.rb'
673
+
674
+ # Offense count: 74
675
+ # Cop supports --auto-correct.
676
+ # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
677
+ # URISchemes: http, https
678
+ Metrics/LineLength:
679
+ Max: 183