diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index bbb6af8c..3b050322 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,12 +1,12 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2025-09-21 13:03:00 UTC using RuboCop version 1.80.2. +# on 2025-09-21 15:55:34 UTC using RuboCop version 1.80.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 4 +# Offense count: 5 # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: Max: 49 @@ -27,7 +27,7 @@ Metrics/ClassLength: Metrics/CyclomaticComplexity: Max: 20 -# Offense count: 5 +# Offense count: 6 # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Max: 32 @@ -49,7 +49,7 @@ Security/Open: - 'tasks/lib/docs/events_downloader.rb' - 'tasks/lib/docs/methods_downloader.rb' -# Offense count: 4 +# Offense count: 5 # Configuration parameters: AllowedConstants. Style/Documentation: Exclude: @@ -58,9 +58,10 @@ Style/Documentation: - 'tasks/lib/docs/downloader.rb' - 'tasks/lib/docs/events_downloader.rb' - 'tasks/lib/docs/methods_downloader.rb' + - 'tasks/lib/slack_api/events_generator.rb' - 'tasks/lib/slack_api/methods_generator.rb' -# Offense count: 6 +# Offense count: 7 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: always, always_true, never @@ -69,6 +70,7 @@ Style/FrozenStringLiteralComment: - '**/*.arb' - 'tasks/events.rake' - 'tasks/lib/docs/downloader.rb' + - 'tasks/lib/slack_api/events_generator.rb' - 'tasks/lib/slack_api/methods_generator.rb' - 'tasks/methods.rake' - 'tasks/update.rake' diff --git a/tasks/events.rake b/tasks/events.rake index b8da50c7..e68f5c97 100644 --- a/tasks/events.rake +++ b/tasks/events.rake @@ -1,3 +1,4 @@ +require_relative 'lib/slack_api/events_generator' require_relative 'lib/slack_api/spec_validator' namespace :api do @@ -11,5 +12,11 @@ namespace :api do abort "Invalid file format: #{file}" unless validator.valid?(file) end end + + desc 'Update events.' + task :update do + # Rake::Task['api:clean_files'].invoke('events') + SlackApi::EventsGenerator.new.generate! + end end end diff --git a/tasks/lib/slack_api/events_generator.rb b/tasks/lib/slack_api/events_generator.rb new file mode 100644 index 00000000..b493033d --- /dev/null +++ b/tasks/lib/slack_api/events_generator.rb @@ -0,0 +1,44 @@ +module SlackApi + class EventsGenerator + def downloader + @downloader ||= SlackApi::Docs::Downloader.new + end + + def generate! + events = JSON.load_file(downloader.events_downloader.events_path) + + events.each do |data| + event_data = { + 'name' => data['name'], + 'desc' => "#{data['description']}.", + 'required_scope' => massage_scope(data['APIs'].first) + } + process_event(event_data) + end + + existing_events = Dir.glob('events/**/*.json').grep_v(%r{/_patches\b}) + updated_events = events.map { |event| "events/#{event['name']}.json" } + (existing_events - updated_events).each do |removed_event| + puts "(delete) #{removed_event}" + File.delete(removed_event) + end + end + + private + + def massage_scope(scope) + case scope + when 'Events' then 'RTM' + else scope + end + end + + def process_event(data) + filename = "events/#{data['name']}.json" + puts filename + existing_event_data = File.exist?(filename) ? JSON.load_file(filename) : {} + all_data = existing_event_data.merge(data) + File.write(filename, JSON.pretty_generate(all_data)) + end + end +end diff --git a/tasks/methods.rake b/tasks/methods.rake index 40aee3ea..0b89c298 100644 --- a/tasks/methods.rake +++ b/tasks/methods.rake @@ -1,3 +1,4 @@ +require_relative 'lib/slack_api/methods_generator' require_relative 'lib/slack_api/spec_validator' namespace :api do @@ -12,4 +13,11 @@ namespace :api do end end end + + desc 'Update methods and events.' + task :update do + Rake::Task['api:clean_files'].invoke('methods') + Rake::Task['api:clean_files'].invoke('groups') + SlackApi::MethodsGenerator.new.generate! + end end diff --git a/tasks/update.rake b/tasks/update.rake index fdc45244..19d1e30e 100644 --- a/tasks/update.rake +++ b/tasks/update.rake @@ -1,25 +1,15 @@ -require_relative 'lib/slack_api/methods_generator' - namespace :api do - namespace :methods do - desc 'Update methods.' - task :update do - Rake::Task['api:methods:clean_files'].invoke('methods') - Rake::Task['api:methods:clean_files'].invoke('groups') - SlackApi::MethodsGenerator.new.generate! - end - - desc 'Delete all generated files except undocumented ones.' - task :clean_files, :dirs do |_t, args| - raise 'Missing :dirs' unless args[:dirs] + desc 'Delete all generated files except undocumented ones.' + task :clean_files, :dirs do |_t, args| + raise 'Missing :dirs' unless args[:dirs] - # keep _undocumented and _patches - files = Dir["./{#{Array(args[:dirs]).join(',')}}/*"].grep_v(%r{/_\w*\b}) - FileUtils.rm_rf files - end + # keep _undocumented and _patches + files = Dir["./{#{Array(args[:dirs]).join(',')}}/*"].grep_v(%r{/_\w*\b}) + FileUtils.rm_rf files end task :update do Rake::Task['api:methods:update'].invoke + Rake::Task['api:events:update'].invoke end end