lib/cck/examples.rb



# frozen_string_literal: true

module CCK
  # CCK::Examples
  # The helper methods to determine the paths for each relevant item
  module Examples
    class << self
      # Return the paths for each example that is of 'gherkin' type
      def gherkin
        Dir.entries(cck_features_folder_location).select do |file_or_folder|
          next if file_or_folder.start_with?('.')

          gherkin_example?(File.join(cck_features_folder_location, file_or_folder))
        end
      end

      # Return the paths for each example that is of 'markdown' type
      # NB: At the moment this (1 example - 'markdown'), isn't compatible with cucumber-ruby
      def markdown
        Dir.entries(cck_features_folder_location).select do |file_or_folder|
          next if file_or_folder.start_with?('.')

          markdown_example?(File.join(cck_features_folder_location, file_or_folder))
        end
      end

      # Return the path for a specific example scenario based on its name
      #
      # i.e. 'attachments' would return the fully qualified path to the attachments folder
      # which contains the feature, the ndjson file and any applicable assets to run the example
      def feature_code_for(example_name)
        path = File.join(cck_features_folder_location, example_name)

        return path if File.directory?(path)

        raise ArgumentError, "No feature code directory found in gem for CCK example: #{example_name}"
      end

      private

      def cck_features_folder_location
        File.expand_path("#{File.dirname(__FILE__)}/../../features/")
      end

      def gherkin_example?(example_folder)
        file_type_in_folder?('.feature', example_folder)
      end

      def markdown_example?(example_folder)
        file_type_in_folder?('.md', example_folder)
      end

      def file_type_in_folder?(extension, folder)
        Dir.entries(folder).any? { |file| File.extname(file) == extension }
      end
    end
  end
end