@@ -726,6 +726,125 @@ class User; end
726726 assert_success_status ( result )
727727 end
728728
729+ it "can be called by path" do
730+ @project . write ( "lib/models/post.rb" , <<~RB )
731+ require "smart_properties"
732+
733+ class Post
734+ include SmartProperties
735+ property :title, accepts: String
736+ end
737+ RB
738+
739+ @project . write ( "lib/models/nested/user.rb" , <<~RB )
740+ require "smart_properties"
741+
742+ module Nested
743+ class User
744+ include SmartProperties
745+ property :name, accepts: String
746+ end
747+ end
748+ RB
749+
750+ @project . write ( "lib/job.rb" , <<~RB )
751+ require "smart_properties"
752+
753+ class User
754+ include SmartProperties
755+ property :name, accepts: String
756+ end
757+ RB
758+
759+ result = @project . tapioca ( "dsl lib/models" )
760+
761+ assert_equal ( <<~OUT , result . out )
762+ Loading Rails application... Done
763+ Loading DSL compiler classes... Done
764+ Compiling DSL RBI files...
765+
766+ create sorbet/rbi/dsl/nested/user.rbi
767+ create sorbet/rbi/dsl/post.rbi
768+
769+ Done
770+
771+ Checking generated RBI files... Done
772+ No errors found
773+
774+ All operations performed in working directory.
775+ Please review changes and commit them.
776+ OUT
777+
778+ assert_empty_stderr ( result )
779+
780+ assert_project_file_exist ( "sorbet/rbi/dsl/post.rbi" )
781+ assert_project_file_exist ( "sorbet/rbi/dsl/nested/user.rbi" )
782+ refute_project_file_exist ( "sorbet/rbi/dsl/job.rbi" )
783+
784+ assert_success_status ( result )
785+ end
786+
787+ it "does not generate anything and errors for non-existent paths" do
788+ @project . write ( "lib/models/post.rb" , <<~RB )
789+ require "smart_properties"
790+
791+ class Post
792+ include SmartProperties
793+ property :title, accepts: String
794+ end
795+ RB
796+
797+ result = @project . tapioca ( "dsl path/to/nowhere.rb" )
798+
799+ assert_equal ( <<~OUT , result . out )
800+ Loading Rails application... Done
801+ Loading DSL compiler classes... Done
802+ Compiling DSL RBI files...
803+
804+ OUT
805+
806+ assert_equal ( <<~ERR , result . err )
807+
808+ Warning: No constants found in: path/to/nowhere.rb
809+ No classes/modules can be matched for RBI generation.
810+ Please check that the requested classes/modules include processable DSL methods.
811+ ERR
812+
813+ refute_project_file_exist ( "sorbet/rbi/dsl/post.rbi" )
814+
815+ refute_success_status ( result )
816+ end
817+
818+ it "does not generate anything but succeeds for real paths with no processable DSL" do
819+ @project . write ( "lib/models/post.rb" , <<~RB )
820+ class Foo
821+ end
822+ RB
823+
824+ result = @project . tapioca ( "dsl lib/models" )
825+
826+ assert_equal ( <<~OUT , result . out )
827+ Loading Rails application... Done
828+ Loading DSL compiler classes... Done
829+ Compiling DSL RBI files...
830+
831+
832+ Done
833+
834+ Checking generated RBI files... Done
835+ No errors found
836+
837+ All operations performed in working directory.
838+ Please review changes and commit them.
839+ OUT
840+
841+ assert_empty_stderr ( result )
842+
843+ refute_project_file_exist ( "sorbet/rbi/dsl/post.rbi" )
844+
845+ assert_success_status ( result )
846+ end
847+
729848 it "must run custom compilers" do
730849 @project . write ( "lib/post.rb" , <<~RB )
731850 require "smart_properties"
0 commit comments