@@ -81,6 +81,18 @@ def self.find(_key); end
8181 it "returns tokens that exist in mapping when one is provided" do
8282 expect ( ParameterSubstitution . find_tokens ( expression , mapping : mapping ) ) . to eq ( [ 'call.start_time' , 'do_a_barrel_roll' ] )
8383 end
84+
85+ context 'with non-default delimiters' do
86+ let ( :square_expression ) { "[call.start_time.blank_if_nil][do_a_barrel_roll.downcase]" }
87+
88+ it "returns tokens up to first dot when no mapping is provided" do
89+ expect ( ParameterSubstitution . find_tokens ( square_expression , parameter_start : "[" , parameter_end : "]" ) ) . to eq ( [ 'call' , 'do_a_barrel_roll' ] )
90+ end
91+
92+ it "returns tokens that exist in mapping when one is provided" do
93+ expect ( ParameterSubstitution . find_tokens ( square_expression , mapping : mapping , parameter_start : "[" , parameter_end : "]" ) ) . to eq ( [ 'call.start_time' , 'do_a_barrel_roll' ] )
94+ end
95+ end
8496 end
8597
8698 context '#find_formatters' do
@@ -91,6 +103,18 @@ def self.find(_key); end
91103 it "returns formatters after all tokens when mapping is provided" do
92104 expect ( ParameterSubstitution . find_formatters ( expression , mapping : mapping ) ) . to eq ( [ 'blank_if_nil' , 'downcase' ] )
93105 end
106+
107+ context 'with non-default delimiters' do
108+ let ( :square_expression ) { "[call.start_time.blank_if_nil][do_a_barrel_roll.downcase]" }
109+
110+ it "returns all formatters after first dot when no mapping is provided" do
111+ expect ( ParameterSubstitution . find_formatters ( square_expression , parameter_start : "[" , parameter_end : "]" ) ) . to eq ( [ 'start_time' , 'blank_if_nil' , 'downcase' ] )
112+ end
113+
114+ it "returns formatters after all tokens when mapping is provided" do
115+ expect ( ParameterSubstitution . find_formatters ( square_expression , mapping : mapping , parameter_start : "[" , parameter_end : "]" ) ) . to eq ( [ 'blank_if_nil' , 'downcase' ] )
116+ end
117+ end
94118 end
95119
96120 context '#find_warnings' do
@@ -127,6 +151,28 @@ def self.find(_key); end
127151 . to eq ( [ "Unknown param 'bobby' and methods 'test1', 'test2'" , "Unknown param 'bobby2' and methods 'test3', 'test4'" ] )
128152 end
129153 end
154+
155+ context "with non-default delimiters" do
156+ let ( :square_expression_with_valid_params ) { "[foo]" }
157+ let ( :square_expression_with_bad_params ) { "[bobby][bobby2]" }
158+ let ( :square_expression_with_bad_methods ) { "[foo.test1.test2][foo.test3.test4][black.test1.test2]" }
159+
160+ it "returns empty array for valid parameters" do
161+ expect ( ParameterSubstitution . find_warnings ( square_expression_with_valid_params , mapping : default_mapping , parameter_start : "[" , parameter_end : "]" ) )
162+ . to eq ( [ ] )
163+ end
164+
165+ it "returns warnings for invalid parameters" do
166+ expect ( ParameterSubstitution . find_warnings ( square_expression_with_bad_params , parameter_start : "[" , parameter_end : "]" ) )
167+ . to eq ( [ "Unknown param 'bobby'" , "Unknown param 'bobby2'" ] )
168+ end
169+
170+ it "returns warnings for invalid methods" do
171+ expect ( ParameterSubstitution . find_warnings ( square_expression_with_bad_methods , mapping : default_mapping , parameter_start : "[" , parameter_end : "]" ) )
172+ . to eq ( [ "Unknown methods 'test1', 'test2', 'test3', 'test4' used on parameter 'foo'" ,
173+ "Unknown methods 'test1', 'test2' used on parameter 'black'" ] )
174+ end
175+ end
130176 end
131177 end
132178
0 commit comments