lib/slack/web/api/templates/method.erb in slack-ruby-client-2.1.0 vs lib/slack/web/api/templates/method.erb in slack-ruby-client-2.2.0
- old
+ new
@@ -35,10 +35,18 @@
<% end %>
def <%= group.gsub(".", "_") %>_<%= name %>(options = {})
<% data['args'].select{ |k, v| v['required'] }.each do |arg_name, arg_v| %>
raise ArgumentError, 'Required arguments :<%= arg_name %> missing' if options[:<%= arg_name %>].nil?
<% end %>
+<% data['arg_groups']&.each do |arg_group| %>
+<% arg_string = arg_group['args'].map { |arg_name| ":#{arg_name}" }.join(', ') %>
+<% if arg_group['mutually_exclusive'] %>
+ raise ArgumentError, 'Exactly one of <%= arg_string %> is required' unless <%= arg_group['args'].map { |arg_name| "options[:#{arg_name}].nil?" }.join(' ^ ') %>
+<% else %>
+ raise ArgumentError, 'At least one of <%= arg_string %> is required' if <%= arg_group['args'].map { |arg_name| "options[:#{arg_name}].nil?"}.join(' && ') %>
+<% end %>
+<% end %>
<% if data['group'] == 'groups' && data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
options = options.merge(channel: groups_id(options)['group']['id']) if options[:channel]
<% elsif data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
<% end %>
@@ -48,9 +56,13 @@
<% if data['undocumented'] %>
logger.warn('The <%= group %>.<%= name %> method is undocumented.')
<% end %>
<% if data['deprecated'] %>
logger.warn('<%= group %>.<%= name %>: <%= data['deprecation']['deprecation_warning']%> Alternative methods: <%= data['deprecation']['alternative_methods'].join(', ')%>.')
+<% end %>
+<% json_args = data['args'].map { |arg_name, arg_v| arg_name if arg_v['format'] == 'json' }.compact %>
+<% if json_args.any? %>
+ options = encode_options_as_json(options, %i[<%= json_args.join(' ') %>])
<% end %>
<% if data['args'].keys.include?('cursor') %>
if block_given?
Pagination::Cursor.new(self, :<%= group.gsub(".", "_") %>_<%= name %>, options).each do |page|
yield page