@@ -54,41 +54,62 @@ public function getConfigTreeBuilder()
5454
5555 private function getProvidersNode ()
5656 {
57- $ treeBuilder = new TreeBuilder ();
58- $ node = $ treeBuilder ->root ('providers ' );
57+ $ treeBuilder = new TreeBuilder ();
58+ $ node = $ treeBuilder ->root ('providers ' );
59+ $ requirements = [
60+ 'aws ' => ['key ' , 'secret ' ],
61+ 'ironmq ' => ['token ' , 'project_id ' ],
62+ 'sync ' => [],
63+ ];
5964
6065 $ node
61- ->children ()
62- ->arrayNode ('aws ' )
63- ->children ()
64- ->scalarNode ('key ' )->end ()
65- ->scalarNode ('secret ' )->end ()
66- ->scalarNode ('region ' )
67- ->defaultValue ('us-east-1 ' )
68- ->end ()
66+ ->useAttributeAsKey ('name ' )
67+ ->prototype ('array ' )
68+ ->treatNullLike ([])
69+ ->children ()
70+ ->enumNode ('driver ' )
71+ ->isRequired ()
72+ ->values (array_keys ($ requirements ))
6973 ->end ()
70- ->end ()
71- ->arrayNode ('ironmq ' )
72- ->children ()
73- ->scalarNode ('token ' )->end ()
74- ->scalarNode ('project_id ' )->end ()
75- ->enumNode ('host ' )
76- ->defaultValue ('mq-aws-us-east-1 ' )
77- ->values ([
78- 'mq-aws-us-east-1 ' ,
79- 'mq-aws-eu-west-1 ' ,
80- 'mq-rackspace-ord ' ,
81- 'mq-rackspace-lon '
82- ])
83- ->end ()
84- ->scalarNode ('port ' )
85- ->defaultValue ('443 ' )
86- ->end ()
87- ->scalarNode ('api_version ' )
88- ->defaultValue (1 )
89- ->end ()
74+ // IronMQ
75+ ->scalarNode ('token ' )->end ()
76+ ->scalarNode ('project_id ' )->end ()
77+ ->enumNode ('host ' )
78+ ->defaultValue ('mq-aws-us-east-1 ' )
79+ ->values ([
80+ 'mq-aws-us-east-1 ' ,
81+ 'mq-aws-eu-west-1 ' ,
82+ 'mq-rackspace-ord ' ,
83+ 'mq-rackspace-lon ' ,
84+ ])
85+ ->end ()
86+ ->scalarNode ('port ' )
87+ ->defaultValue ('443 ' )
88+ ->end ()
89+ ->scalarNode ('api_version ' )
90+ ->defaultValue (1 )
91+ ->end ()
92+ // AWS
93+ ->scalarNode ('key ' )->end ()
94+ ->scalarNode ('secret ' )->end ()
95+ ->scalarNode ('region ' )
96+ ->defaultValue ('us-east-1 ' )
9097 ->end ()
9198 ->end ()
99+
100+ ->validate ()
101+ ->always ()
102+ ->then (function (array $ provider ) use ($ node , $ requirements ) {
103+ foreach ($ requirements [$ provider ['driver ' ]] as $ requirement ) {
104+ if (empty ($ provider [$ requirement ])) {
105+ throw new \InvalidArgumentException (
106+ sprintf ('%s queue providers must have a %s; none provided ' , $ provider ['driver ' ], $ requirement )
107+ );
108+ }
109+ }
110+
111+ return $ provider ;
112+ })
92113 ->end ()
93114 ;
94115
@@ -119,36 +140,41 @@ private function getQueuesNode()
119140 ->defaultFalse ()
120141 ->info ('Whether notifications are sent to the subscribers ' )
121142 ->end ()
122- ->scalarNode ('notification_retries ' )
123- ->defaultValue (3 )
124- ->info ('How many attempts the Push Notifications are retried if the Subscriber returns an error ' )
125- ->example (3 )
126- ->end ()
127- ->scalarNode ('message_delay ' )
128- ->defaultValue (0 )
129- ->info ('How many seconds before messages are inititally visible in the Queue ' )
130- ->example (0 )
131- ->end ()
132- ->scalarNode ('message_timeout ' )
133- ->defaultValue (30 )
134- ->info ('How many seconds the Queue hides a message while its being processed ' )
135- ->example (30 )
136- ->end ()
137- ->scalarNode ('message_expiration ' )
138- ->defaultValue (604800 )
139- ->info ('How many seconds a message is kept in Queue, the default is 7 days (604800 seconds) ' )
140- ->example (604800 )
141- ->end ()
142- ->scalarNode ('messages_to_receive ' )
143- ->defaultValue (1 )
144- ->info ('Max amount of messages to receive at once - an event will be fired for each individually ' )
145- ->example (1 )
146- ->end ()
147- ->scalarNode ('receive_wait_time ' )
148- ->defaultValue (3 )
149- ->info ('How many seconds to Long Poll when requesting messages - if supported ' )
150- ->example (3 )
151- ->end ()
143+ ->scalarNode ('notification_retries ' )
144+ ->defaultValue (3 )
145+ ->info ('How many attempts the Push Notifications are retried if the Subscriber returns an error ' )
146+ ->example (3 )
147+ ->end ()
148+ ->scalarNode ('notification_retry_delay ' )
149+ ->defaultValue (60 )
150+ ->info ('Delay between each Push Notification retry in seconds ' )
151+ ->example (3 )
152+ ->end ()
153+ ->scalarNode ('message_delay ' )
154+ ->defaultValue (0 )
155+ ->info ('How many seconds before messages are inititally visible in the Queue ' )
156+ ->example (0 )
157+ ->end ()
158+ ->scalarNode ('message_timeout ' )
159+ ->defaultValue (30 )
160+ ->info ('How many seconds the Queue hides a message while its being processed ' )
161+ ->example (30 )
162+ ->end ()
163+ ->scalarNode ('message_expiration ' )
164+ ->defaultValue (604800 )
165+ ->info ('How many seconds a message is kept in Queue, the default is 7 days (604800 seconds) ' )
166+ ->example (604800 )
167+ ->end ()
168+ ->scalarNode ('messages_to_receive ' )
169+ ->defaultValue (1 )
170+ ->info ('Max amount of messages to receive at once - an event will be fired for each individually ' )
171+ ->example (1 )
172+ ->end ()
173+ ->scalarNode ('receive_wait_time ' )
174+ ->defaultValue (3 )
175+ ->info ('How many seconds to Long Poll when requesting messages - if supported ' )
176+ ->example (3 )
177+ ->end ()
152178 ->append ($ this ->getSubscribersNode ())
153179 ->end ()
154180 ->end ()
0 commit comments