trailblazer-test 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,42 @@
1
+ module Trailblazer
2
+ module Test
3
+ # DISCUSS: this is not really endpoint related, it's more like setting a "global" invocation mechanism.
4
+ module Endpoint
5
+ # DISCUSS: not sure this is the final "technique" to use the global endpoint invoker.
6
+ def self.module!(receiver, invoke_method:, invoke_method_wtf:)
7
+ receiver.class_eval do
8
+ @@INVOKE_METHOD = invoke_method
9
+ @@INVOKE_METHOD_WTF = invoke_method_wtf
10
+
11
+ def trailblazer_test_invoke_method
12
+ @@INVOKE_METHOD
13
+ end
14
+
15
+ def trailblazer_test_invoke_method_wtf
16
+ @@INVOKE_METHOD_WTF
17
+ end
18
+ end
19
+
20
+ Assertion
21
+ end
22
+
23
+ module Assertion
24
+ def assert_pass(*args, invoke: trailblazer_test_invoke_method, **options, &block)
25
+ super(*args, **options, invoke: invoke, &block)
26
+ end
27
+
28
+ def assert_fail(*args, invoke: trailblazer_test_invoke_method, **options, &block)
29
+ super(*args, **options, invoke: invoke, &block)
30
+ end
31
+
32
+ def assert_pass?(*args, **options, &block)
33
+ assert_pass(*args, **options, invoke: trailblazer_test_invoke_method_wtf, &block)
34
+ end
35
+
36
+ def assert_fail?(*args, **options, &block)
37
+ assert_fail(*args, **options, invoke: trailblazer_test_invoke_method_wtf, &block)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ module Trailblazer::Test
2
+ module Helper
3
+ module MockStep
4
+ def mock_step(activity, path:, &block)
5
+ raise ArgumentError, "Missing block: `#mock_step` requires a block." unless block_given?
6
+
7
+ mocked_step_id, path = path.last, path[0..-2]
8
+
9
+ mock_step = ->(ctx, **) { yield(ctx) }
10
+ mock_instruction = -> { step mock_step, replace: mocked_step_id }
11
+
12
+
13
+ Trailblazer::Activity::DSL::Linear::Patch.(activity, path, mock_instruction)
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ # [:delete_assets] => -> { step Destroy.method(:tidy_storage), before: :rm_uploads }
@@ -0,0 +1,90 @@
1
+ module Trailblazer
2
+ module Test
3
+ # Offers the assertions `#assert_pass` and friends but with a configuration "DSL".
4
+ # That means you can write super short and concise test cases using the defaulting
5
+ # in this module.
6
+ module Suite
7
+ # Provide {Assert.assert_pass} and {Assert.assert_fail} functions which decouple
8
+ # the assertion logic from the actual test framework.
9
+ # They are called from the {Suite#assert_pass} helpers.
10
+ module Assert
11
+ module_function
12
+
13
+ # @semi-public (for rspec-trailblazer).
14
+ def normalize_for(params_fragment, **kws)
15
+ kws = normalize_kws(**kws)
16
+ ctx = ctx_for_params_fragment(params_fragment, **kws)
17
+
18
+ return ctx, kws
19
+ end
20
+
21
+ #@public
22
+ def assert_pass(params_fragment, deep_merge: true, assertion:, expected_attributes_to_merge:, **kws) # TODO: remove kws.
23
+ ctx, kws = normalize_for(params_fragment, **kws) # compute input, .
24
+
25
+ expected_attributes = expected_attributes_for(expected_attributes_to_merge, **kws) # compute "output", expected model attributes.
26
+
27
+ activity = kws[:operation] # FIXME.
28
+
29
+ assertion.(activity, ctx, expected_model_attributes: expected_attributes, **kws)
30
+ end
31
+
32
+ def assert_fail(params_fragment, expected_errors, assertion:, **kws)
33
+ ctx, kws = normalize_for(params_fragment, **kws)
34
+ activity = kws[:operation] # FIXME.
35
+
36
+ assertion.(activity, ctx, expected_errors, **kws)
37
+ end
38
+
39
+ # @semi-public used in rspec-trailblazer.
40
+ def ctx_for_params_fragment(params_fragment, key_in_params:, default_ctx:, **)
41
+ return params_fragment if params_fragment.kind_of?(Trailblazer::Test::Context)
42
+ # If {:key_in_params} is given, key the {params_fragment} with it, e.g. {params: {transaction: {.. params_fragment ..}}}
43
+ merge_with_ctx = key_in_params ? {params: {key_in_params => params_fragment}} : {params: params_fragment}
44
+
45
+ ctx = Suite.merge_for(default_ctx, merge_with_ctx, true)
46
+ end
47
+
48
+ # @private
49
+ # Gather all test case configuration. This involves reading all test `let` directives.
50
+ def normalize_kws(user_block:, test:, operation: test.operation, contract_name: "default", invoke: Assertion.method(:invoke_operation), **options)
51
+ kws = {
52
+ operation: operation,
53
+ test: test,
54
+ contract_name: contract_name,
55
+ user_block: user_block,
56
+ invoke: invoke,
57
+
58
+ **normalize_kws_for_ctx(test: test, **options),
59
+ **normalize_kws_for_model_assertion(test: test, **options),
60
+ }
61
+
62
+ return kws
63
+ end
64
+
65
+ # @semi-public used in rspec-trailblazer.
66
+ # Used when building the incoming {ctx}, e.g. in {#run}.
67
+ def normalize_kws_for_ctx(test:, key_in_params: test.key_in_params, default_ctx: test.default_ctx, **)
68
+ {
69
+ default_ctx: default_ctx,
70
+ key_in_params: key_in_params,
71
+ }
72
+ end
73
+
74
+ def normalize_kws_for_model_assertion(test:, expected_attributes: test.expected_attributes, model_at: :model, **)
75
+ {
76
+ expected_attributes: expected_attributes,
77
+ model_at: model_at,
78
+ }
79
+ end
80
+
81
+ # FIXME: when {deep_merge: true} the result hash contains subclassed AR classes instead of the original ones.
82
+ # when we got this sorted we can allows deep merging here, too.
83
+ # @semi-public (for rspec-trailblazer).
84
+ def expected_attributes_for(expected_attributes_to_merge, expected_attributes:, deep_merge: false, **)
85
+ _expected_attributes = Suite.merge_for(expected_attributes, expected_attributes_to_merge, deep_merge)
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,51 @@
1
+ require "hashie"
2
+ require "trailblazer/test/context"
3
+
4
+ module Trailblazer
5
+ module Test
6
+ module Suite
7
+ # @private
8
+ class CtxHash < Hash
9
+ include Hashie::Extensions::DeepMerge
10
+ end
11
+
12
+ module_function
13
+ # @private
14
+ def merge_for(dest, source, deep_merge)
15
+ return dest.merge(source) unless deep_merge
16
+
17
+ CtxHash[dest].deep_merge(CtxHash[source]) # FIXME: this subclasses ActiveRecord classes in dest like {class: ReportSubscription}
18
+ end
19
+
20
+ def Ctx(merge_with_ctx={}, exclude: false, merge: true, **kws)
21
+ if merge
22
+ options = Suite::Assert.normalize_kws_for_ctx(test: self, **kws) # FIXME: why test?
23
+ key_in_params = options[:key_in_params]
24
+ default_ctx = options[:default_ctx]
25
+
26
+ # Extract {:params} from {default_ctx}
27
+ default_params = key_in_params ? default_ctx[:params][key_in_params] : default_ctx[:params]
28
+
29
+ # Remove {:exclude} variables from the {params:} part
30
+ filtered_default_params =
31
+ if exclude
32
+ default_params.slice(*(default_params.keys - exclude))
33
+ else
34
+ default_params # use original params if no filtering configured.
35
+ end
36
+
37
+ # FIXME: very, very redundant.
38
+ default_params_for_ctx = key_in_params ? {key_in_params => filtered_default_params} : filtered_default_params
39
+
40
+ ctx = default_ctx.merge({params: default_params_for_ctx})
41
+ else # FIXME: if/else here sucks.
42
+ ctx = {}
43
+ end
44
+
45
+ ctx = Suite.merge_for(ctx, merge_with_ctx, true) # merge injections
46
+
47
+ Trailblazer::Test::Context[ctx] # this signals "pass-through"
48
+ end
49
+ end # Suite
50
+ end
51
+ end
@@ -0,0 +1,58 @@
1
+ module Trailblazer
2
+ module Test
3
+ # Offers the assertions `#assert_pass` and friends but with a configuration "DSL".
4
+ # That means you can write super short and concise test cases using the defaulting
5
+ # in this module.
6
+ module Suite
7
+ # Defaults so tests run without tweaking (almost).
8
+ module Spec
9
+ def self.included(includer)
10
+ includer.let(:operation) { raise "Trailblazer::Test: `let(:operation) { ... }` is missing" }
11
+ includer.let(:key_in_params) { false }
12
+ includer.let(:expected_attributes) { {} } # You need to override this in your tests.
13
+ includer.let(:default_ctx) { {} }
14
+ end
15
+ end
16
+
17
+ # For Minitest::Test, given there are still people using this awkward syntax. :)
18
+ module Test
19
+ def operation
20
+ raise "Trailblazer::Test: `def operation` is missing"
21
+ end
22
+
23
+ def key_in_params
24
+ false
25
+ end
26
+
27
+ def expected_attributes
28
+ {}
29
+ end
30
+
31
+ def default_ctx
32
+ {}
33
+ end
34
+ end
35
+
36
+ # The assertions and helpers included into the actual test.
37
+ def assert_pass(params_fragment, expected_attributes_to_merge={}, assertion: Assertion::AssertPass, **kws, &block)
38
+ Assert.assert_pass(params_fragment, test: self, user_block: block, assertion: assertion, expected_attributes_to_merge: expected_attributes_to_merge, **kws)
39
+ end
40
+
41
+ def assert_fail(params_fragment, expected_errors=nil, assertion: Assertion::AssertFail, **kws, &block)
42
+ Assert.assert_fail(params_fragment, expected_errors, test: self, user_block: block, assertion: assertion, **kws)
43
+ end
44
+
45
+ def assert_pass?(*args, **kws, &block)
46
+ assert_pass(*args, **kws, invoke: Assertion.method(:invoke_operation_with_wtf), &block)
47
+ end
48
+
49
+ def assert_fail?(*args, **kws, &block)
50
+ assert_fail(*args, **kws, invoke: Assertion.method(:invoke_operation_with_wtf), &block)
51
+ end
52
+
53
+ def Ctx(*args, **kws)
54
+ Assert.Ctx(*args, test: self, **kws)
55
+ end
56
+ end # Suite
57
+ end
58
+ end
@@ -0,0 +1,62 @@
1
+ require "trailblazer/macro"
2
+ require "trailblazer/macro/contract"
3
+ # require "reform/form/active_model/validations" # FIXME: document!
4
+ require "dry-validation" # FIXME: bug in reform-rails with Rails 6.1 errors object forces us to use dry-v until it's fixed.
5
+ require "trailblazer/operation"
6
+
7
+ module Trailblazer::Test
8
+ # Test components we need in other gems, too.
9
+ module Testing
10
+ class Memo < Struct.new(:id, :title, :content, :tag_list, :persisted?, :errors, keyword_init: true)
11
+ VALID_INPUT = {params: {memo: {title: "TODO", content: "Stock up beer"}}}.freeze
12
+
13
+ def save
14
+ self[:persisted?] = true
15
+ self[:id] = 1
16
+ end
17
+
18
+ module Operation
19
+ class Create < Trailblazer::Operation
20
+ class Form < Reform::Form
21
+ require "reform/form/dry"
22
+ include Reform::Form::Dry
23
+
24
+ property :title
25
+ property :content
26
+ property :tag_list
27
+
28
+ validation do
29
+ params do
30
+ required(:title).filled
31
+ required(:content).filled(min_size?: 8)
32
+ optional(:tag_list).maybe(type?: String)
33
+ end
34
+ end
35
+ end
36
+
37
+ step :capture
38
+ step Model::Build(Memo, :new)
39
+ step Contract::Build(constant: Form)
40
+ step Contract::Validate(key: :memo)
41
+ step :parse_tag_list
42
+ step Contract::Persist()
43
+
44
+ module Capture
45
+ def capture(ctx, **)
46
+ ctx[:captured] = CU.inspect(ctx.to_h)
47
+ end
48
+ end
49
+ include Capture
50
+
51
+ def parse_tag_list(ctx, **)
52
+ tag_list = ctx["contract.default"].tag_list or return true
53
+
54
+ tags = tag_list.split(",")
55
+
56
+ ctx["contract.default"].tag_list = tags
57
+ end
58
+ end # Create
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  module Trailblazer
2
2
  module Test
3
- VERSION = "0.1.0".freeze
3
+ VERSION = "1.0.0".freeze
4
4
  end
5
5
  end
@@ -3,10 +3,19 @@ require "trailblazer/test/version"
3
3
  module Trailblazer
4
4
  module Test
5
5
  # Your code goes here...
6
+
7
+ def self.module!(*args, **options, &block)
8
+ Assertion.module!(*args, **options, &block)
9
+ end
6
10
  end
7
11
  end
8
12
 
9
- require "trailblazer/test/assertions"
10
- require "trailblazer/test/operation/helper"
11
- require "trailblazer/test/operation/assertions"
12
- require "trailblazer/test/operation/policy_assertions"
13
+ require "trailblazer/test/assertion/assert_exposes"
14
+ require "trailblazer/test/assertion/assert_pass"
15
+ require "trailblazer/test/assertion/assert_fail"
16
+ require "trailblazer/test/assertion"
17
+ require "trailblazer/test/suite"
18
+ require "trailblazer/test/suite/assert"
19
+ require "trailblazer/test/suite/ctx"
20
+ require "trailblazer/test/helper/mock_step"
21
+ # require "trailblazer/test/operation/policy_assertions"
@@ -21,9 +21,17 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency "hashie"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
24
+ spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
+ spec.add_development_dependency "minitest-line"
26
27
  spec.add_development_dependency "rake"
27
- spec.add_development_dependency "rubocop"
28
- spec.add_development_dependency "simplecov"
28
+
29
+ spec.add_development_dependency "trailblazer-operation"
30
+ spec.add_development_dependency "trailblazer-macro"
31
+ spec.add_development_dependency "trailblazer-macro-contract"
32
+ # spec.add_development_dependency "reform-rails"
33
+ spec.add_development_dependency "dry-validation"
34
+ spec.add_development_dependency "trailblazer-core-utils", ">= 0.0.5"
35
+
36
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.2.6"
29
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-02 00:00:00.000000000 Z
11
+ date: 2025-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.15'
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: '1.15'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-line
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rubocop
84
+ name: trailblazer-operation
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: simplecov
98
+ name: trailblazer-macro
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -94,6 +108,62 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: trailblazer-macro-contract
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: dry-validation
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: trailblazer-core-utils
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 0.0.5
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 0.0.5
153
+ - !ruby/object:Gem::Dependency
154
+ name: trailblazer-activity-dsl-linear
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 1.2.6
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 1.2.6
97
167
  description: Assertions, matchers, and helpers to test Trailblazer code.
98
168
  email:
99
169
  - apotonick@gmail.com
@@ -101,21 +171,24 @@ executables: []
101
171
  extensions: []
102
172
  extra_rdoc_files: []
103
173
  files:
174
+ - ".github/workflows/ci.yml"
104
175
  - ".gitignore"
105
- - ".rubocop-https---raw-githubusercontent-com-trailblazer-meta-master-rubocop-yml"
106
- - ".rubocop.yml"
107
- - ".travis.yml"
108
176
  - CHANGES.md
109
177
  - Gemfile
110
178
  - README.md
111
179
  - Rakefile
112
180
  - lib/trailblazer/test.rb
113
- - lib/trailblazer/test/assertions.rb
114
- - lib/trailblazer/test/deprecation/operation/assertions.rb
115
- - lib/trailblazer/test/deprecation/operation/helper.rb
116
- - lib/trailblazer/test/operation/assertions.rb
117
- - lib/trailblazer/test/operation/helper.rb
118
- - lib/trailblazer/test/operation/policy_assertions.rb
181
+ - lib/trailblazer/test/assertion.rb
182
+ - lib/trailblazer/test/assertion/assert_exposes.rb
183
+ - lib/trailblazer/test/assertion/assert_fail.rb
184
+ - lib/trailblazer/test/assertion/assert_pass.rb
185
+ - lib/trailblazer/test/context.rb
186
+ - lib/trailblazer/test/endpoint.rb
187
+ - lib/trailblazer/test/helper/mock_step.rb
188
+ - lib/trailblazer/test/suite.rb
189
+ - lib/trailblazer/test/suite/assert.rb
190
+ - lib/trailblazer/test/suite/ctx.rb
191
+ - lib/trailblazer/test/testing.rb
119
192
  - lib/trailblazer/test/version.rb
120
193
  - trailblazer-test.gemspec
121
194
  homepage: http://trailblazer.to
@@ -136,8 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
209
  - !ruby/object:Gem::Version
137
210
  version: '0'
138
211
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 2.7.7
212
+ rubygems_version: 3.2.3
141
213
  signing_key:
142
214
  specification_version: 4
143
215
  summary: Assertions, matchers, and helpers to test Trailblazer code.
@@ -1,115 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.5.0
3
- DisplayCopNames: true
4
- Layout/CaseIndentation:
5
- IndentOneStep: true
6
- Layout/FirstArrayElementLineBreak:
7
- Enabled: true
8
- Layout/FirstHashElementLineBreak:
9
- Enabled: true
10
- Layout/FirstMethodArgumentLineBreak:
11
- Enabled: true
12
- Layout/FirstMethodParameterLineBreak:
13
- Enabled: true
14
- Layout/MultilineAssignmentLayout:
15
- Enabled: true
16
- EnforcedStyle: same_line
17
- Layout/SpaceInsideHashLiteralBraces:
18
- EnforcedStyle: no_space
19
- Metrics/LineLength:
20
- Max: 130
21
- Metrics/ParameterLists:
22
- Max: 5
23
- Naming/VariableNumber:
24
- EnforcedStyle: snake_case
25
- Style/AndOr:
26
- EnforcedStyle: conditionals
27
- Style/AutoResourceCleanup:
28
- Enabled: true
29
- Style/CollectionMethods:
30
- Enabled: true
31
- Style/Documentation:
32
- Enabled: false
33
- Style/EmptyLiteral:
34
- Enabled: false
35
- Style/EmptyMethod:
36
- EnforcedStyle: expanded
37
- Style/FormatStringToken:
38
- EnforcedStyle: template
39
- Style/ImplicitRuntimeError:
40
- Enabled: true
41
- Style/MethodCalledOnDoEndBlock:
42
- Enabled: true
43
- Style/MethodDefParentheses:
44
- EnforcedStyle: require_parentheses
45
- Style/MissingElse:
46
- Enabled: true
47
- EnforcedStyle: case
48
- Style/NumericLiterals:
49
- Enabled: false
50
- Style/OptionHash:
51
- Enabled: true
52
- Style/PercentLiteralDelimiters:
53
- PreferredDelimiters:
54
- "%w": "[]"
55
- "%W": "[]"
56
- "%i": "[]"
57
- "%I": "[]"
58
- "%r": "()"
59
- Style/ReturnNil:
60
- Enabled: true
61
- Style/SafeNavigation:
62
- Enabled: false
63
- Style/Send:
64
- Enabled: true
65
- Style/SignalException:
66
- EnforcedStyle: semantic
67
- Style/StringLiterals:
68
- EnforcedStyle: double_quotes
69
- Style/StringLiteralsInInterpolation:
70
- EnforcedStyle: double_quotes
71
- Style/StringMethods:
72
- Enabled: true
73
- Style/SymbolArray:
74
- Enabled: true
75
- # this allows in rspec to have expect { } with multiple lines
76
- Style/BlockDelimiters:
77
- EnforcedStyle: braces_for_chaining
78
- Layout/EndOfLine:
79
- Enabled: false
80
- # don't need these checks in test folders
81
- Metrics/ModuleLength:
82
- Exclude:
83
- - "spec/**/*"
84
- - "test/**/*"
85
- Metrics/BlockLength:
86
- Exclude:
87
- - "spec/**/*"
88
- - "test/**/*"
89
- - "*.gemspec" # definitely not in the gemspec
90
- Metrics/MethodLength:
91
- Max: 20
92
- Lint/UnreachableCode:
93
- Description: 'Unreachable code.'
94
- Enabled: false
95
- Lint/Void:
96
- Enabled: false
97
- Layout/AlignHash:
98
- EnforcedLastArgumentHashStyle: ignore_implicit
99
- Metrics/AbcSize:
100
- Max: 25
101
- Style/LambdaCall:
102
- Enabled: false
103
- Style/Semicolon:
104
- Enabled: false
105
- Naming/UncommunicativeMethodParamName:
106
- Enabled: false
107
- Style/ClassAndModuleChildren:
108
- Enabled: false
109
- Layout/LeadingCommentSpace:
110
- Exclude:
111
- - 'test/docs/**/*'
112
- Layout/AlignHash:
113
- EnforcedHashRocketStyle: table
114
- Style/FrozenStringLiteralComment:
115
- Enabled: false