11# frozen_string_literal: true
22
3- require 'stringio'
4-
53module Smithy
64 module Views
75 module Client
@@ -24,23 +22,21 @@ def module_name
2422 @plan . module_name
2523 end
2624
27- # TODO: simplify this by removing levels and just returning line strings
2825 def endpoint_rules_code
29- res = StringIO . new
26+ lines = [ ]
3027 @endpoint_rules [ 'rules' ] . each do |rule |
3128 case rule [ 'type' ]
3229 when 'endpoint'
33- res << endpoint_rule ( rule , 3 )
30+ lines . concat ( endpoint_rule ( rule , 3 ) )
3431 when 'error'
35- res << error_rule ( rule , 3 )
32+ lines . concat ( error_rule ( rule , 3 ) )
3633 when 'tree'
37- res << tree_rule ( rule , 3 )
34+ lines . concat ( tree_rule ( rule , 3 ) )
3835 else
3936 raise "Unknown rule type: #{ rule [ 'type' ] } "
4037 end
4138 end
42-
43- res . string
39+ lines
4440 end
4541
4642 private
@@ -58,20 +54,19 @@ def endpoint_rule(rule, levels = 3)
5854 end
5955
6056 def endpoint_rule_with_condition ( levels , rule )
61- res = StringIO . new
62- res << conditions ( rule [ 'conditions' ] , levels )
63- res << endpoint ( rule [ 'endpoint' ] , levels + 1 )
64- res << indent ( " end\n " , levels )
65- res . string
57+ lines = [ ]
58+ lines . concat ( conditions ( rule [ 'conditions' ] , levels ) )
59+ lines . concat ( endpoint ( rule [ 'endpoint' ] , levels + 1 ) )
60+ lines . push ( indent ( ' end' , levels ) )
61+ lines
6662 end
6763
6864 def endpoint ( endpoint , levels )
69- res = StringIO . new
70- res << "return Smithy::Client::EndpointRules::Endpoint.new(url: #{ str ( endpoint [ 'url' ] ) } "
71- res << ", headers: #{ templated_hash_to_s ( endpoint [ 'headers' ] ) } " if endpoint [ 'headers' ]
72- res << ", properties: #{ templated_hash_to_s ( endpoint [ 'properties' ] ) } " if endpoint [ 'properties' ]
73- res << ")\n "
74- indent ( res . string , levels )
65+ line = "return Smithy::Client::EndpointRules::Endpoint.new(url: #{ str ( endpoint [ 'url' ] ) } "
66+ line << ", headers: #{ templated_hash_to_s ( endpoint [ 'headers' ] ) } " if endpoint [ 'headers' ]
67+ line << ", properties: #{ templated_hash_to_s ( endpoint [ 'properties' ] ) } " if endpoint [ 'properties' ]
68+ line << ')'
69+ [ indent ( line , levels ) ]
7570 end
7671
7772 def templated_hash_to_s ( hash )
@@ -106,17 +101,15 @@ def error_rule(rule, levels = 3)
106101 end
107102
108103 def error_rule_with_condition ( levels , rule )
109- res = StringIO . new
110- res << conditions ( rule [ 'conditions' ] , levels )
111- res << error ( rule [ 'error' ] , levels + 1 )
112- res << indent ( " end\n " , levels )
113- res . string
104+ lines = [ ]
105+ lines . concat ( conditions ( rule [ 'conditions' ] , levels ) )
106+ lines . concat ( error ( rule [ 'error' ] , levels + 1 ) )
107+ lines . push ( indent ( ' end' , levels ) )
108+ lines
114109 end
115110
116111 def error ( error , levels )
117- error_str = "raise ArgumentError, #{ str ( error ) } "
118- error_str += "\n " unless levels == 3
119- indent ( error_str , levels )
112+ [ indent ( "raise ArgumentError, #{ str ( error ) } " , levels ) ]
120113 end
121114
122115 def tree_rule ( rule , levels = 3 )
@@ -128,35 +121,33 @@ def tree_rule(rule, levels = 3)
128121 end
129122
130123 def tree_rule_with_condition ( levels , rule )
131- res = StringIO . new
132- res << conditions ( rule [ 'conditions' ] , levels )
133- res << tree_rules ( rule [ 'rules' ] , levels + 1 )
134- res << indent ( " end\n " , levels )
135- res . string
124+ lines = [ ]
125+ lines . concat ( conditions ( rule [ 'conditions' ] , levels ) )
126+ lines . concat ( tree_rules ( rule [ 'rules' ] , levels + 1 ) )
127+ lines . push ( indent ( ' end' , levels ) )
128+ lines
136129 end
137130
138131 def tree_rules ( rules , levels )
139- res = StringIO . new
132+ lines = [ ]
140133 rules . each do |rule |
141134 case rule [ 'type' ]
142135 when 'endpoint'
143- res << endpoint_rule ( rule , levels )
136+ lines . concat ( endpoint_rule ( rule , levels ) )
144137 when 'error'
145- res << error_rule ( rule , levels )
138+ lines . concat ( error_rule ( rule , levels ) )
146139 when 'tree'
147- res << tree_rule ( rule , levels )
140+ lines . concat ( tree_rule ( rule , levels ) )
148141 else
149142 raise "Unknown rule type: #{ rule [ 'type' ] } "
150143 end
151144 end
152- res . string
145+ lines
153146 end
154147
155148 def conditions ( conditions , level )
156- res = StringIO . new
157149 cnd_str = conditions . map { |c | condition ( c ) } . join ( ' && ' )
158- res << indent ( "if #{ cnd_str } \n " , level )
159- res . string
150+ [ indent ( "if #{ cnd_str } " , level ) ]
160151 end
161152
162153 def condition ( condition )
0 commit comments