Skip to content

Commit a8794c0

Browse files
authored
Merge pull request #2660 from Shopify/Alex/fix-fixture-nil-params
Remove `NilClass` parameters from AR fixture methods
2 parents 864141f + b3088e5 commit a8794c0

3 files changed

Lines changed: 23 additions & 26 deletions

File tree

lib/tapioca/dsl/compilers/active_record_fixtures.rb

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ module Compilers
2626
# # test_case.rbi
2727
# # typed: true
2828
# class ActiveSupport::TestCase
29-
# sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) }
30-
# sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) }
31-
# sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol))
32-
# .returns(T::Array[Post]) }
29+
# sig { returns(T::Array[Post]) } # No names: returns an Array of all fixtures
30+
# sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } # One name: returns the requested fixture
31+
# sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) # Many names: returns an Array of the requested fixtures
32+
# .returns(T::Array[Post]) }
3333
# def posts(fixture_name = nil, *other_fixtures); end
3434
# end
3535
# ~~~
@@ -110,19 +110,16 @@ def create_fixture_method(mod, name)
110110
node.add_opt_param("fixture_name", "nil")
111111
node.add_rest_param("other_fixtures")
112112

113-
node.add_sig do |sig|
114-
sig.add_param("fixture_name", "NilClass")
115-
sig.add_param("other_fixtures", "NilClass")
113+
node.add_sig do |sig| # No-parameter overload: returns an Array of all fixtures
116114
sig.return_type = "T::Array[#{return_type}]"
117115
end
118116

119-
node.add_sig do |sig|
117+
node.add_sig do |sig| # One parameter overload: returns the requested fixture
120118
sig.add_param("fixture_name", "T.any(String, Symbol)")
121-
sig.add_param("other_fixtures", "NilClass")
122119
sig.return_type = return_type
123120
end
124121

125-
node.add_sig do |sig|
122+
node.add_sig do |sig| # Multi-parameter overload: returns an Array of the requested fixtures
126123
sig.add_param("fixture_name", "T.any(String, Symbol)")
127124
sig.add_param("other_fixtures", "T.any(String, Symbol)")
128125
sig.return_type = "T::Array[#{return_type}]"

manual/compiler_activerecordfixtures.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ The generated RBI by this compiler will produce the following
1818
# test_case.rbi
1919
# typed: true
2020
class ActiveSupport::TestCase
21-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) }
22-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) }
23-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol))
24-
.returns(T::Array[Post]) }
21+
sig { returns(T::Array[Post]) } # No names: returns an Array of all fixtures
22+
sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } # One name: returns the requested fixture
23+
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) # Many names: returns an Array of the requested fixtures
24+
.returns(T::Array[Post]) }
2525
def posts(fixture_name = nil, *other_fixtures); end
2626
end
2727
~~~

spec/tapioca/dsl/compilers/active_record_fixtures_spec.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ class Post < ActiveRecord::Base
7979
# typed: strong
8080
8181
class ActiveSupport::TestCase
82-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) }
83-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) }
82+
sig { returns(T::Array[Post]) }
83+
sig { params(fixture_name: T.any(String, Symbol)).returns(Post) }
8484
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) }
8585
def posts(fixture_name = nil, *other_fixtures); end
8686
end
@@ -107,8 +107,8 @@ class Post < ActiveRecord::Base
107107
# typed: strong
108108
109109
class ActiveSupport::TestCase
110-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) }
111-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) }
110+
sig { returns(T::Array[Post]) }
111+
sig { params(fixture_name: T.any(String, Symbol)).returns(Post) }
112112
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) }
113113
def posts(fixture_name = nil, *other_fixtures); end
114114
end
@@ -146,13 +146,13 @@ class User < ActiveRecord::Base
146146
# typed: strong
147147
148148
class ActiveSupport::TestCase
149-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Blog::Post]) }
150-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Blog::Post) }
149+
sig { returns(T::Array[Blog::Post]) }
150+
sig { params(fixture_name: T.any(String, Symbol)).returns(Blog::Post) }
151151
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Blog::Post]) }
152152
def blog_posts(fixture_name = nil, *other_fixtures); end
153153
154-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[User]) }
155-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(User) }
154+
sig { returns(T::Array[User]) }
155+
sig { params(fixture_name: T.any(String, Symbol)).returns(User) }
156156
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[User]) }
157157
def users(fixture_name = nil, *other_fixtures); end
158158
end
@@ -181,8 +181,8 @@ class Post < ActiveRecord::Base
181181
# typed: strong
182182
183183
class ActiveSupport::TestCase
184-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) }
185-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) }
184+
sig { returns(T::Array[Post]) }
185+
sig { params(fixture_name: T.any(String, Symbol)).returns(Post) }
186186
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) }
187187
def posts_with_other_names(fixture_name = nil, *other_fixtures); end
188188
end
@@ -204,8 +204,8 @@ def posts_with_other_names(fixture_name = nil, *other_fixtures); end
204204
# typed: strong
205205
206206
class ActiveSupport::TestCase
207-
sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[T.untyped]) }
208-
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(T.untyped) }
207+
sig { returns(T::Array[T.untyped]) }
208+
sig { params(fixture_name: T.any(String, Symbol)).returns(T.untyped) }
209209
sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[T.untyped]) }
210210
def posts(fixture_name = nil, *other_fixtures); end
211211
end

0 commit comments

Comments
 (0)