class SlackResources::Generator::ExamplePreparation
Public Class Methods
new(examples_dir:, added_examples_dir:)
click to toggle source
# File lib/slack_resources/generator/event_api/examples_preparation.rb, line 6 def initialize(examples_dir:, added_examples_dir:) @added_examples_dir = added_examples_dir @examples_dir = examples_dir end
Public Instance Methods
execute!()
click to toggle source
# File lib/slack_resources/generator/event_api/examples_preparation.rb, line 11 def execute! # rubocop:disable Metrics/AbcSize single_events = Set.new(raw_examples.map(&:first)) defined = Set.new event_typed_examples = {} alt_typed_examples = {} raw_examples.each do |alt_event_type, event_type, example| example['_raw_example'] = JSON.parse(example.to_json) event_typed_examples.protect_merge!(event_type => example) alt_typed_examples[alt_event_type] = JSON.parse(example.to_json) next if defined.add?(event_type) single_events.delete(event_type) defined_example = event_typed_examples[event_type] Set.new(defined_example.keys + example.keys).each do |k| next if k == '_raw_example' defined_value = defined_example[k] additional_value = example[k] next if defined_value == additional_value if defined_value.is_a?(Hash) && defined_value[TypeDetection::SPECIAL_TYPE] == TypeDetection::MULTIPLE_EXAMPLES (defined_value['items'] << additional_value).sort! { |a, b| a.to_s <=> b.to_s } else defined_example.merge!( k => { TypeDetection::SPECIAL_TYPE => TypeDetection::MULTIPLE_EXAMPLES, 'target' => k, 'items' => [defined_value, additional_value].sort! { |a, b| a.to_s <=> b.to_s }, } ) end end end alt_typed_examples.select { |k, _| single_events.include?(k) }.protect_merge!(event_typed_examples) end
Private Instance Methods
all_files()
click to toggle source
# File lib/slack_resources/generator/event_api/examples_preparation.rb, line 55 def all_files Dir.glob(@added_examples_dir.join('**/*.json')) + Dir.glob(@examples_dir.join('**/*.json')) end
raw_examples()
click to toggle source
# File lib/slack_resources/generator/event_api/examples_preparation.rb, line 59 def raw_examples @raw_examples ||= all_files.map do |f| example = JSON.parse(File.read(f)) alt_event_type = File.basename(f, '.json') event_body = example['event'].presence || example event_type = event_body['type'] [alt_event_type, event_type, event_body.key_ordered] end end