trailblazer-test 0.1.0 → 1.0.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.
@@ -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